Автоматизированный контроллер железнодорожных шлагбаумов: схема Arduino и исходный код
Схема высокоскоростного автоматического контроллера железнодорожных шлагбаумов с использованием Arduino и ультразвуковых датчиков
В этом руководстве мы научимся проектировать простую и эффективную систему автоматического высокоскоростного контроллера железнодорожных шлагбаумов. Это относительно простой подход к этому проекту, но вы можете принять это как базовый строительный блок, и в дальнейших модификациях мы также можем отслеживать скорость поезда, с которой он проходит, и многое другое. Но прежде чем переходить к руководству, нам нужно получить представление об автоматизации и что именно можно от нее ожидать.
Автоматизация в основном означает придумать метод для уменьшения или устранения человеческих усилий/вмешательства. В этом руководстве мы объясним, как автоматизировать железнодорожный шлагбаум с Arduino с использованием сервопривода вместе с программным обеспечением Proteus.
Сложность автоматизации может варьироваться от базового управления «вкл/выкл» до высоко сложных многовариантных алгоритмов. Системы управления для целей автоматизации могут быть либо открытым циклом, либо закрытым циклом, то есть они могут работать либо с единственным входным параметром, либо в ответ на выход, поданный как вход, как в случае систем замкнутого цикла. Автоматизация в железнодорожной отрасли — важная потребность, поскольку мы входим в передовую эру, и для снижения риска аварий, вызванных человеческими ошибками, очень важно, чтобы эти задачи выполнялись этими умными машинами.
- Связанная статья: Схема детектора скорости автомобиля – Работа и исходный код
Как в случае с любой технологией, автоматизация также имеет свои плюсы и минусы:
Плюсы
- Рост производительности
- Предсказуемое качество (Улучшение качества)
- Повышенная надежность
- Отличная согласованность результатов
- Сокращение затрат на человеческий труд
- Высокая точность
- Сокращение человеческих усилий в монотонной работе
Минусы
- Восприимчивость к угрозам безопасности
- Стоимость разработки может превысить прогнозы
- Высокая стоимость установки
- Причина безработицы во многих секторах
Упомянутые плюсы значительно перевешивают минусы, и именно поэтому весь мир вступает в эру автоматизации.
В этом руководстве мы пытаемся автоматизировать железнодорожный шлагбаум для открытия и закрытия всякий раз, когда схема обнаруживает поезд на пути, и мы также инициируем зуммер или сигнализацию, изображая, что скорость поезда выше определенного порога, и для достижения этого мы собираемся использовать два очень широко используемых электронных компонента: Arduino и сервопривод.
Датчик, который мы будем использовать в этом руководстве, — ультразвуковой датчик, но его использование не обязательно, мы также можем сделать другую версию этого проекта с использованием модуля ИК-датчика, и это зависит от нашего выбора, что мы хотим использовать и что легко доступно нам.
- Связанная статья: Система умного дома – Схема и исходный код
Компоненты, необходимые для контроллера железнодорожных шлагбаумов
- Arduino UNO
- Зуммер
- Ультразвуковой датчик (HC-SR04)
- Сервопривод
Необходимое программное обеспечение:
- Arduino IDE
- Proteus
Схема контроллера железнодорожных шлагбаумов

Описание компонентов
Arduino UNO
Arduino — это, по сути, плата разработки с открытым исходным кодом, которая в основном использует микроконтроллер Microchip ATmega328P и производится Arduino.cc. Плата поставляется с набором входных/выходных контактов, состоящих из цифровых и аналоговых, которые могут быть интерфейсны с различными расширительными платами и внешними схемами.
Плата имеет 14 цифровых выводов и 6 аналоговых выводов, которые используются или делаются программируемыми с помощью IDE (Integrated Development Environment), которая идет вместе с ней, то есть Arduino IDE. Программа загружается через кабель USB типа B. Способы питания платы могут быть либо через кабель USB, либо путем подключения 9 вольт DC питания. Допустимый диапазон напряжения варьируется от 7 до 20 вольт. С точки зрения дизайна и работы это не слишком отличается от других членов его семьи, а именно Arduino Nano и Arduino Leonardo.
STK500 по-прежнему является исходным протоколом для Uno для связи. Главное отличие от предшественников заключается в том, что он не использует чип FTDI USB-to-serial driver. Наоборот, он использует ATmega 16U2 (Atmega8U2 до версии R2), который запрограммирован как USB-to-serial конвертер.
- Связанная статья: Регулируемый источник питания с использованием Arduino UNO – Схема и код

Ультразвуковой датчик (HC-SR04)
Ультразвуковой датчик — это базовый датчик, который мы используем для определения расстояния до объекта. Другими словами, можно сказать, что он используется для измерения того, на каком расстоянии находится объект от определенной контрольной точки. У него в основном 4 вывода;
- Вывод Trig
- Вывод Echo
- Вывод GND
- Вывод VCC (+5В)
Как работает ультразвуковой датчик? Передатчик (trig) отправляет высокочастотный звуковой сигнал, который затем отражается от объекта, а затем отраженный сигнал принимается приемником (echo). Следовательно, скорость звука в воздухе известна нам, мы можем вычислить расстояние. Этот датчик невероятно популярен среди энтузиастов Arduino, которые используют его в своих проектах на ежедневной основе, и для запуска этого датчика нам требуется высокий импульс 10 микросекунд или более.
Особенности ультразвукового датчика:-
- Питание: +5В DC
- Ток покоя: <2мА
- Рабочий ток: 15мА
- Эффективный угол: <15°
- Диапазон измерения: 2см – 400 см / 1″ – 13фут
- Разрешение: 0.3 см
- Угол измерения: 30 градусов
- Ширина импульса триггера: 10мкс
- Габариты: 45мм x 20мм x 15мм
Связанная статья: Автоматическая система полива и ирригации растений – Схема, код и отчет проекта

Сервопривод
Это особый вид двигателей, которые используются для очень специфического движения под определенным углом. Это вращательный или линейный привод, позволяющий точный контроль на определенных угловых или линейных позициях. Сервопривод — это не единая сущность, а комбинация подходящего двигателя вместе с датчиком, который дает обратную связь о текущей позиции двигателя.
Для использования этого сервопривода необходимо использовать несколько других продвинутых модулей, так как он не подобен по простоте использования двигателю постоянного тока. Эти двигатели в основном используются в робототехнике и крупномасштабном производстве.
Эти двигатели имеют небольшое сходство с шаговыми двигателями, которые представляют управление открытым циклом. Шаговые двигатели имеют встроенные шаги, на которых они вращаются, но из-за отсутствия системы обратной связи их использование ограничено одной конкретной приложением, для которого они были спроектированы и изготовлены.
Это отсутствие обратной связи отличает сервопривод от этих шаговых двигателей и дает им преимущество, так как они динамичны и могут быть адаптированы под задачу с небольшими изменениями в программировании. Выделенный модуль контроллера обычно поставляется с сервоприводом от производителя.
Механизм— Это в основном замкнутый серомеханизм, который использует систему обратной связи для обновления движения и конечной позиции ротора. Вход в управление двигателем может быть либо аналоговым, либо цифровым.
- Связанная статья: Измерение расстояния с использованием Arduino и ультразвукового датчика
Энкодер некоторого типа связан с двигателем, чтобы дать обратную связь о позиции и скорости управлению, которое генерирует сигнал ошибки до тех пор, пока не будет достижен желаемый выход. И для уменьшения этого сигнала ошибки двигатель может двигаться в любом направлении, чтобы наконец снизить сигнал ошибки до нуля. Когда это условие достигнуто, желаемый выход достигнут. Улучшенные и сложные сервоприводы имеют оптический вращающийся энкодер на выходном валу для измерения его скорости.

Зуммер
Зуммер может быть механическим, электронным, электромеханическим и пьезоэлектрическим по природе. Обычно мы используем электронный в печах, телевикторинах и приборах и т.д. У этих зуммеров есть внутренняя схема. Звук производится из-за движения диска. Диск ферромагнитной природы. Это устройство, управляемое током, которое имеет источник напряжения в качестве входа.

Работа автоматического контроллера железнодорожных шлагбаумов
В этой схеме мы использовали ультразвуковые датчики и сервоприводы для воспроизведения работы железнодорожного переезда. Оба датчика запускаются с помощью выводов триггера, подключенных к плате Arduino, и рассчитывается расстояние. Дальнейшая работа схемы полностью зависит от измеренного расстояния.
Если путь свободен, сервоприводы ничего не делают, но если поезд прибывает с любой стороны пути, расстояние, измеренное одним из датчиков, будет отличаться от предыдущего расстояния. Таким образом, мы узнаем о приближении поезда и в мгновение ока Arduino установит свои цифровые выводы 7 и 8 в HIGH.
Эти выводы подключены к двум сервоприводам, и тогда сервопривод покроет угловое расстояние 90o и, следовательно, шлагбаум закроется, блокируя путь для транспортных средств. Когда поезд уйдет от другого датчика, он уведомит Arduino об уходе поезда, и сервоприводы снова примут свое предыдущее положение, чтобы открыть шлагбаум.
В целях безопасности людей мы добавили еще одну функцию к этой схеме, и она касается предупреждения их в случае высокоскоростного поезда. Это достигается путем расчета времени между переходами двух датчиков в одном цикле. Если время оказывается меньше определенного значения, зуммер издаст звуковой сигнал, чтобы оповестить людей вблизи переезда.
- Связанная статья: Умная система ирригации – Схема и код
Исходный код проекта и объяснение
В этом скетче мы определили пять переменных целочисленного типа и четыре переменные типа long. Переменные tr1, tr2, eh1 и eh2 используются для отправки импульса и получения значения времени в микросекундах, в то время как переменные val1, val2, dis1 и dis2 используются для хранения значений времени в микросекундах и расстояния в см. Скорость передачи установлена на 9600 бит/сек и отвечает за связь между платой и последовательным монитором.
const int tr1 = 13, eh1 = 12, tr2 = 3, eh2 = 2;; int bz = 11; unsigned long val1, dis1, val2, dis2; #include Servo myservo1; Servo myservo2; int pos=-1;
Функции, включенные в void setup (), будут выполняться только один раз во время выполнения, и их задача — определить скорость передачи и режим вывода как вход или выход.
void setup() { // put your setup code here, to run once: pinMode(tr1, OUTPUT); pinMode(tr2, OUTPUT); pinMode(bz, OUTPUT); pinMode(eh1, INPUT); pinMode(eh2, INPUT); myservo1.attach(8); myservo2.attach(7); Serial.begin(9600); }
В соответствии с требуемой функциональностью, мы постоянно измеряем расстояние, запуская ультразвуковой датчик, и вычисленное расстояние устанавливается как параметр условного оператора. Если условие истинно, переменная «pos» увеличивает свое значение для запуска сервоприводов, а когда условие ложно, переменная «pos» уменьшает свое значение, чтобы вернуть сервоприводы в их предыдущее положение.
Есть еще один условный оператор, который проверяет, если два датчика быстро 감чат объект, то он установит вывод 11 в HIGH для питания зуммера, чтобы предупредить людей. Все эти процессы охвачены в void loop () и они повторяются до тех пор, пока Arduino не будет сброшен или питание не будет остановлено.
void loop() { // put your main code here, to run repeatedly: digitalWrite(tr1, LOW); delayMicroseconds(2); digitalWrite(tr1, HIGH); delayMicroseconds(10); digitalWrite(tr1, LOW); val1 = pulseIn(eh1, HIGH); dis1 = (val1 * 0.0343) / 2; digitalWrite(tr2, LOW); delayMicroseconds(2); digitalWrite(tr2, HIGH); delayMicroseconds(10); digitalWrite(tr2, LOW); val2 = pulseIn(eh2, HIGH); dis2 = (val2 * 0.0343) / 2; Serial.println("distance is "); Serial.println(dis1); Serial.println(dis2); if(dis1 < 100 || dis2 < 100) { if(pos==-1){ for (pos = 0; pos <= 90; pos += 1) { myservo1.write(pos); myservo2.write(pos); delay(15);} } delay(1000); digitalWrite(tr1, LOW); delayMicroseconds(2); digitalWrite(tr1, HIGH); delayMicroseconds(10); digitalWrite(tr1, LOW); val1 = pulseIn(eh1, HIGH); dis1 = (val1 * 0.0343) / 2; digitalWrite(tr2, LOW); delayMicroseconds(2); digitalWrite(tr2, HIGH); delayMicroseconds(10); digitalWrite(tr2, LOW); val2 = pulseIn(eh2, HIGH); dis2 = (val2 * 0.0343) / 2; if(dis1 < 100 || dis2 < 100) {digitalWrite(bz, HIGH); Serial.println("distance2 is "); Serial.println(dis1); Serial.println(dis2);} } else if(dis1 >= 100 && dis2 >= 100) { if(pos==91){ for (pos = 90; pos >= 0; pos -= 1) { myservo1.write(pos); myservo2.write(pos); delay(15); } } digitalWrite(bz, LOW); delay(200); } }
Интерфейс Hex-файла с Proteus для симуляции: В вашей Arduino IDE нажмите Файл>Настройки, а затем в «Показать подробный вывод» отметьте обе опции компиляции и загрузки. И после компиляции кода в окне ниже выделите и скопируйте расположение hex-файла и в Proteus дважды щелкните по Arduino и вставьте расположение файла в опцию Program file и нажмите ОК. Теперь ваша схема будет готова к симуляции в Proteus.
Связанные проекты:
- Автоматический дверной звонок с обнаружением объекта Arduino
- Автоматическая ночная лампа с использованием Arduino
- Arduino PWM Программирование и его функции в Arduino
- Arduino Serial: Последовательная коммуникация Arduino
- Идеи проектов по электронике для последнего года
- Идеи проектов по инженерии электроники для студентов-инженеров
- Простые и базовые идеи мини-проектов по электронике для начинающих
Промышленные технологии
- RS-триггер на элементах ИЛИ-НЕ (NOR): сборка и понимание цифровой памяти
- Частые режимы отказа в проверенных электрических системах
- Понимание TTL NOR и OR элементов: анализ схемы и преобразование
- Продвинутые схемы управления двигателями: защёлкивание, стоп и задержка времени
- Автоматическое открытие двери по PIR-датчику: схема, принцип работы и применение
- M-TECH: продвинутая система ЧПУ-управления для фрезеровок Apollo
- Автоматическое управление модельной железной дорогой на Arduino — DIY-контроллер поезда
- SERENA: Пользовательская система сигнализации на Arduino Mega 2560 с TFT Touchscreen
- Arduino Power Control Center: N-FET, P-FET, реле и RTC
- Облачный мониторинг: система удаленного контроля для управления активами в реальном времени