Назначение знаков в ПДД:
![]() | Знак 1.1 «Железнодорожный переезд со шлагбаумом». |
Знак относится к группе предупреждающих знаков и сообщает о пересечении дороги с железнодорожным переездом, оборудованным шлагбаумом.
Шлагбаум — это специальное устройство, предназначенное для контроля проезда транспорта.
Инструкция по сборке знака со шлагбаумом:
1. Приклейте изображение знака на треугольную основу.
![](http://iarduino.ru/img/upload/65adf004f26c794df63de5ddfa3719a5.png)
2. Установите треугольную основу на стойку-основание.
![](http://iarduino.ru/img/upload/8825c01a09fa9d1adba38514b7754051.png)
3. В случае, если Вы используете знак без модуля питания, соедините детали с правой стороны при помощи винтов и гаек.
Если же Вы используете модуль питания, прикрутите его с правой стороны.
![](http://iarduino.ru/img/upload/b26174490806ea53aaf903c909503fd4.png)
4. Соедините крестовину как показано на рисунке
![](http://iarduino.ru/img/upload/e0af282bacdebbb90f303f30a1afcb6e.png)
5. Установите собранное основание на крестовину
![](http://iarduino.ru/img/upload/fb220867857505ed74c6d86694f756fa.png)
6. Установите сервопривод между двумя элементами, скрепив их винтами.
![](http://iarduino.ru/img/upload/dfef76f81bf8ca37b8d8ae7d77a4a762.png)
7. Закрепите винтами блок шлагбаума. Также закрепите винтом нижнюю часть основания (см. рисунок).
![](http://iarduino.ru/img/upload/1d52b29ef0cc1f11a316064d585b52c3.png)
8. Соедините вместе части шлагбаума, как показано на рисунке, при помощи винтов и гаек.
![](http://iarduino.ru/img/upload/66ef09603d7c74b65a87dee6af4785b5.png)
9. Закрепите насадку сервопривода на шлагбауме с обратной стороны. На 2 и 3 видах рисунка показан результат спереди и сверху.
![](http://iarduino.ru/img/upload/9323bb1cfce281a00a4dcefc6f676ff5.png)
10. Подключите сервопривод к колодке с надписью «СЕРВО». Закрепите шлагбаум на валу сервопривода при помощи шурупа.
Во избежание порчи сервопривода, мы рекомендуем перед креплением к нему шлагбаума загрузить скетч и дождаться установки вала сервопривода в положение, при котором шлагбаум будет располагаться горизонтально, и только после этого установить шлагбаум (предварительно выключив питание).
Видеопояснение:
Схема установки шлагбаума на трассе
![](http://iarduino.ru/img/upload/0cdd9d35ea358e5d8afca4c803f610b4.png)
Мы предполагаем, что шлагбаум устанавливается перпендикулярно дороге, а его наличие фиксируется ультразвуковым датчиком расстояния (левая часть рисунка). В этом случае центр модуля-шлагбаума устанавливается таким образом, чтобы круглая часть шлагбаума (с надписью «STOP» располагалась над линией трассы. Обращаем внимание, что в данном случае ИК-сигнал не будет фиксироваться автомобилем.
Также возможен вариант установки аналогично всем остальным знакам — под углом 45° относительно линии движения автомобиля. Угол распространения ИК-данных составляет около 80°, а дальность передачи ИК-данных настраивается поворотом крестовины резистора на обратной стороне платы основания. В данном случае центр модуля-шлагбаума должен находиться в 15 см от линии трассы.
Первое включение и настройка шлагбаума:
После сборки знака со шлагбаумом, его требуется подключить к Piranha UNO по шине I2C, как указано ниже:
![](http://iarduino.ru/img/upload/f82122932ceca70fc7a8d046f77136c8.png)
Сверху изображено подключение знака к Piranha UNO напрямую, а ниже — через Trema Shield.
Пример работы шлагбаума в автоматическом режиме:
В автоматическом режиме шлагбаум опускается и поднимается самостоятельно. Время закрытого и открытого положения шлагбаума указывается в скетче.
#include <iarduino_I2C_Track.h> // Подключаем библиотеку для работы с модулями трассы I2C-flash iarduino_I2C_Track sign; // Объявляем объект sign для работы с функциями и методами библиотеки iarduino_I2C_Track // Если при объявлении объекта указать адрес, например, iarduino_I2C_Track sign(0x09), то пример будет работать с тем модулем, адрес которого был указан void setup(){ // sign.begin(MODUL_TLIGHT_AUTO, TRACK_F, SECTION_G); // Инициируем работу модуля в режиме светофора с автопереключением. Дорога только прямо. У светофора есть шлагбаум sign.irProtocol(IR_IARDUINO); // Указываем протокол передачи данных по ИК-каналу: «IARDUINO» sign.timing(10, 20); // Указываем время открытого положения шлагбаума (10 сек) и время закрытого положения шлагбаума (20 сек) sign.backlight(true); // Включаем подсветку знака sign.indicator(true); // Разрешаем работу светодиода, информирующего об отправке данных sign.irAutoSend(); // Указываем модулю постоянно отправлять информацию о состоянии шлагбаума по ИК-каналу с паузой между пакетами, определённой ИК-протоколом по умолчанию ±50% sign.offline(true); // Указываем модулю сохранить все полученные настройки в энергонезависимую память и работать в автономном режиме } // Отключить автономный режим можно функцией offline() с параметром false // void loop(){} //
Данный скетч можно запустить всего один раз, при наличии модуля знака со шлагбаумом на шине I2C. Далее модуль будет постоянно и самостоятельно передавать информацию о себе при наличии питания. Для дальнейшей работы модуля не требуется его подключение к Piranha UNO, кроме случаев, когда Вы пожелаете изменить алгоритм работы модуля. Питание модуля без подключения к Piranha UNO удобно организовать, используя батарейный отсек.
Весь код скетча находится в теле функции setup()
:
- Первая строка кода является обращением к функции
begin()
, которой указывается, что модуль является не знакомMODUL_SIGN
, а светофором с автоматическим переключением цветовMODUL_TLIGHT_AUTO
, он регулирует движение через переезд с дорогой только прямоTRACK_F
(Forward) и у модуля есть шлагбаумSECTION_G
(Gate). - Функция
irProtocol()
позволяет назначить протокол для передачи данных по ИК-каналу. В скетче используется протоколIR_IARDUINO
. - Функция
timing()
позволяет задать время открытого и закрытого положения шлагбаума. - Функция
backlight()
позволяет управлять подсветкой знака. В скетче функция вызвана с параметромtrue
для включения подсветки. Если вместоtrue
указатьfalse
, то подсветка будет отключена, а если указать2
, то подсветка будет мигать. Функцию можно вызвать с двумя параметрами, тогда первая половина светодиодов подсветки будет управляться первым параметром, а вторая — вторым. - Функция
indicator()
позволяет управлять светодиодом, информирующем о передаче данных. В скетче функция вызвана с параметромtrue
, разрешая работу индикаторного светодиода. Если вместоtrue
указатьfalse
, то индикаторный светодиод будет выключен. Индикаторный светодиод позволяет видеть, когда модуль отправляет данные, отключение этого светодиода не отключает передачу данных. - Функция
irAutoSend()
указывает модулю начать постоянную отправку пакетов данных с информацией о положении шлагбаума. Если в качестве параметра указать число от 15 до 255 мс, то средняя пауза между отправляемыми по ИК-каналу пакетами будет равна указанному числу миллисекунд. В скетче функция вызвана без параметра, значит, средняя пауза между пакетами будет установлена в значение по умолчанию для выбранного протокола. Реальная пауза между отправляемыми пакетами устанавливается хаотично в диапазоне ±50% от указанного числа, что позволяет поставить несколько знаков в одном направлении. - Функция
offline()
с параметромtrue
указывает модулю запомнить полученные настройки, сохранив их в энергонезависимую память. После этого модуль будет работать автономно (сразу после подачи питания), даже если он не подключён к Piranha UNO по шине I2C, так, как будто он вновь получил все команды кодаsetup()
. Для отключения автономного режима достаточно однократного обращения к функцииoffline()
с параметромfalse
.
Управление шлагбаумом по шине I2C:
Важно: При управлении несколькими модулями подключёнными к одной шине I2C, всем модулям необходимо предварительно задать разные адреса.
Для этого воспользуйтесь скетчем из меню Arduino IDE:
Файл / Примеры / iarduino I2C Track (модуль трассы) / NewAddress
Управление шлагбаумом осуществляется обращением к функции set()
, которая позволяет работать в ручном или полуавтоматическом режиме. В первом случае Вы можете управлять шлагбаумом и звуком по отдельности, во втором — звук включается самостоятельно при закрытии шлагбаума.
Пример работы шлагбаума в ручном режиме:
В данном примере шлагбаум открывается на 10 секунд и закрывается на 20 секунд. Пока шлагбаум закрыт, звучит прерывистый звуковой сигнал.
#include <iarduino_I2C_Track.h> // Подключаем библиотеку для работы с модулем трассы iarduino_I2C_Track sign(0x09); // Создаём объект sign для работы со шлагбаумом, указав его адрес на шине I2C (0x09) // void setup(){ // sign.begin(MODUL_TLIGHT, TRACK_F, SECTION_G); // Инициируем работу модуля в режиме светофора. Дорога только прямо. У светофора есть шлагбаум sign.irProtocol(IR_IARDUINO); // Указываем протокол передачи данных по ИК-каналу: «IARDUINO» sign.set(TL_ALL, 0); // Отключаем всё (выключаем звук и поднимаем шлагбаум) sign.backlight(true); // Включаем подсветку знака. sign.indicator(true); // Разрешаем работу светодиода, информирующего об отправке данных sign.irAutoSend(); // Указываем модулю постоянно отправлять информацию о состоянии шлагбаума по ИК-каналу с паузой между пакетами, определённой ИК-протоколом по умолчанию ±50% } // // void loop(){ // // Фаза 1: (разрешаем проезд) // sign.set(TL_GATE,0, TL_BEEP,0); // Поднимаем шлагбаум (TL_GATE,0), отключаем звук (TL_BEEP,0) // sign.set(TL_GREEN,1, TL_RED,0); // Включаем зелёный (TL_GREEN,1), отключаем красный (TL_RED,0) delay(10000); // Ждём 10 секунд. // Фаза 2: (запрещаем проезд) // sign.set(TL_GATE,1, TL_BEEP,2); // Закрываем шлагбаум (TL_GATE,1), включаем прерывистый звук (TL_BEEP,2) // sign.set(TL_GREEN,0, TL_RED,1); // Отключаем зелёный (TL_GREEN,0), включаем красный (TL_RED,1) delay(20000); // Ждём 20 секунд } //
Пример работы шлагбаума в полуавтоматическом режиме:
Данный пример отличается от предыдущего только параметрами обращения к функции set()
и наличием функции timing()
. Шлагбаум данного примера будет работать как шлагбаум предыдущего примера.
#include <iarduino_I2C_Track.h> // Подключаем библиотеку для работы с модулем трассы iarduino_I2C_Track sign(0x09); // Создаём объект sign для работы со шлагбаумом, указав его адрес на шине I2C (0x09) // void setup(){ // sign.begin(MODUL_TLIGHT, TRACK_F, SECTION_G); // Инициируем работу модуля в режиме светофора. Дорога только прямо. У светофора есть шлагбаум sign.irProtocol(IR_IARDUINO); // Указываем протокол передачи данных по ИК-каналу: «IARDUINO» sign.timing(0); // Указываем не использовать жёлтый цвет светофора sign.backlight(true); // Включаем подсветку знака sign.indicator(true); // Разрешаем работу светодиода, информирующего об отправке данных sign.irAutoSend(); // Указываем модулю постоянно отправлять информацию о состоянии шлагбаума по ИК-каналу с паузой между пакетами, определённой ИК-протоколом по умолчанию ±50%. } // // void loop(){ // // Фаза 1: (разрешаем проезд) // sign.set(TL_FORWARD_ON ); // Разрешаем движение в прямом направлении. delay(10000); // Ждём 10 секунд. // Фаза 2: (запрещаем проезд) // sign.set(TL_FORWARD_OFF); // Запрещаем движение в прямом направлении. delay(20000); // Ждём 20 секунд. } //
В коде setup()
обоих скетчей выполняются следующие действия:
- Обращением к функции
begin()
мы указываем, что модуль является не знакомMODUL_SIGN
, а светофоромMODUL_TLIGHT
, он регулирует дорогу с движением только прямоTRACK_F
и оснащён шлагбаумомSECTION_G
. - Обращением к функции
irProtocol()
мы указываем ИК-протокол передачи данных, для трассы лучше использоватьIR_IARDUINO
, но можно использоватьIR_SAMSUNG
илиIR_RC6
. - Третья строка кода
setup()
первого и второго скетча отличаются: - В первом скетче выполнено обращение к функции
set()
для установки начального состояния (отключить всё). - Во втором скетче выполнено обращение к функции
timing()
, которой указано не использовать жёлтый цвет светофора. - Функция
backlight()
позволяет управлять подсветкой знака. В скетче функция вызвана с параметромtrue
для включения подсветки. Если вместоtrue
указатьfalse
, то подсветка будет отключена, а если указать2
, то подсветка будет мигать. Функцию можно вызвать с двумя параметрами, тогда первая половина светодиодов подсветки будет управляться первым параметром, а вторая — вторым. - Функция
indicator()
позволяет управлять светодиодом, информирующем о передаче данных. В скетче функция вызвана с параметромtrue
, разрешая работу индикаторного светодиода. Если вместоtrue
указатьfalse
, то индикаторный светодиод будет выключен. Индикаторный светодиод позволяет видеть, когда модуль отправляет данные, отключение этого светодиода не отключает передачу данных. - Обращением к функции
irAutoSend()
мы заставляем модуль самостоятельно постоянно отправлять данные о состоянии светофора по ИК-каналу. - Последней строкой кода
setup()
первого скетча выполнено обращение к функцииset()
для установки начального состояния (отключить всё). - Последней строкой кода
setup()
второго скетча выполнено обращение к функцииtiming()
, которой указано не использовать жёлтый цвет светофора.
В коде loop()
обоих скетчей выполняются обращения к функциям set()
и delay()
.
- В первом скетче функция
set()
вызывается с парами параметров для управления шлагбаумом и звуком. Закомментированные строки выполняют переключение зелёного и красного цветов светофора. Если раскомментировать эти строки, то мы не увидим цвета, так как модуль не является светофором, но информация о них будет передаваться по ИК-каналу, что может упростить обработку получения данных, если на трассе присутствуют светофоры без шлагбаумов. В автоматическом и полуавтоматическом режиме информация о цветах меняется модулем. - Во втором скетче функция
set()
вызывается с одним параметром, указывающим разрешить или запретить движение в прямом направлении.
Питание
Питание знака может производиться двумя способами: от специального модуля питания или же с помощью подачи питания через колодку шины I2C.
1 способ: питание с помощью модуля
![](http://iarduino.ru/img/upload/1210e03135776fcac3a1f8e1aa1954a7.png)
В модуль питания установите аккумулятор формата 14500 (Li-ion, 3,7V), соблюдая полярность.
Внимание!
Несоблюдение полярности при установке аккумулятора может привести к выходу знака из строя. Будьте внимательны!
Модуль имеет собственную систему заряда аккумулятора. С обратной стороны модуля расположены светодиоды индикации работы, процесса заряда и окончания процесса заряда.
Вы можете почитать подробнее про работу с модулем.
Для того, чтобы зарядить аккумулятор, подключите провод к разъёму type C на обратной стороне модуля или используйте специальные зарядные устройства.
2 способ: питание через колодку I2C
Напряжение питания знака через колодку I2C должно составлять от 3,5 до 5В. Также можно использовать питание от платы Arduino или USB.
![](http://iarduino.ru/img/upload/4bb58a30dcb293be40544a8e326730c8.png)
На рисунке слева питание подаётся через колодку I2C, а на рисунке справа — через металлизированные отверстия крепления основания со стороны с надписью «Аккумулятор».
Допускается использовать три батарейки типа АА или ААА.
Настройка расстояния передачи ИК-сигнала
![](http://iarduino.ru/img/upload/afdbac462b9d03f81e2e07da8ae2a805.png)
Расстояние передачи информации настраивается подстроечным резистором и варьируется в диапазоне от 20-30 см до нескольких метров.
При настройке добиваются уверенного приёма сигнала ИК-приёмником на необходимом расстоянии.
Порядок настройки мощности передачи:
- Установите знак на трассу, выкрутив движок переменного резистора на минимум.
- Установите машинку на трассу в место, где она должна зафиксировать знак (поймать ИК-сигнал).
- Включите машинку и знак. Приёмник ИК сигнала, установленный на машинке, имеет синий светодиод, подписанный как «IN». Он вспыхивает в момент регистрации сигнала. Отрегулируйте мощность знака до появления вспышек светодиода «IN».
Пример получения данных от знака со шлагбаумом на стороне приёмника:
Получение отправленных по ИК-каналу данных осуществляется при помощи Trema модуля ИК-приёмник/передатчик, Flash-I2C.
Так как знак железнодорожного переезда во всех предыдущих скетчах был инициирован функцией begin()
не как знак MODUL_SIGN
, а как светофор MODUL_TLIGHT
, то получение данных осуществляется как от светофора, без внимания на цвета:
#include <iarduino_I2C_IR.h> // Подключаем библиотеку для работы с Trema модулями ИК-приёмник/передатчик I2C-flash iarduino_I2C_IR ir(0x09); // Объявляем объект ir для работы с функциями и методами библиотеки iarduino_I2C_IR, указывая адрес модуля на шине I2C // Если объявить объект без указания адреса (iarduino_I2C_IR ir;), то адрес будет найден автоматически void setup(){ // Serial.begin(9600); // Инициируем работу с шиной UART для передачи данных в монитор последовательного порта на скорости 9600 бит/сек ir.begin(); // Инициируем работу с ИК-приёмником/передатчиком I2C-flash ir.setProtocol(IR_IARDUINO); // Указываем протокол для приёма/передачи данных по ИК-каналу } // // void loop(){ // // Если приняты ИК-данные: // if( ir.check(true) ){ // Если принят пакет данных или пакет повтора // Если данные приняты от светофора: // if( ir.device==MODUL_TLIGHT ){ // Если устройство, отправившее данные, является светофором Serial.print("Шлагбаум "); // if( ir.gate ){Serial.print("поднят." );} // Если gate больше 0, значит, шлагбаум поднят, разрешая движение else {Serial.print("опущен." );} // Serial.println(""); // } // } // } //
Действия, выполняемые в коде Setup()
:
- Первой строкой выполняется инициализация передачи данных в монитор последовательного порта
Serial.begin()
на скорости9600
бит/сек. - Далее выполняется инициализация работы с модулем ИК-приёмник/передатчик
begin()
. - Последняя строка указывает ИК-протокол приёма/передачи данных
setProtocol()
. Протоколы знака железнодорожного переезда и приёмника должны совпадать. В скетче используется протоколIR_IARDUINO
.
Действия, выполняемые в коде loop()
:
- В первой строке выполняется проверка наличия принятых по ИК-каналу данных. Для проверки наличия данных, полученных от модулей трассы, обращение к функции
check()
должно выполняться с параметромtrue
(в этом случае функция реагирует на пакеты повторов). - Второй строкой кода выполняется проверка принятых данных на принадлежность к модулям светофоров. Если ИК-данные приняты от модулей светофоров, то переменная
device
содержит константуMODUL_TLIGHT
. - Если обе проверки успешно пройдены, то информацию о состоянии шлагбаума можно получить из переменной
gate
, что и выполняется в скетче.
Если на трассе помимо знака железнодорожного переезда есть светофоры без шлагбаумов, то на стороне приёмника нужно проверять не состояние шлагбаума, а разрешение движения в прямом направлении, как это описывается в примере приёма данных от светофора. Тогда раскомментируйте строки переключения цветов, если знак железнодорожного переезда управляется в ручном режиме.
Обсуждение