Назначение знаков в ПДД:
Знак 1.1 «Железнодорожный переезд со шлагбаумом». |
Знак относится к группе предупреждающих знаков и сообщает о пересечении дороги с железнодорожным переездом, оборудованным шлагбаумом.
Шлагбаум — это специальное устройство, предназначенное для контроля проезда транспорта.
Инструкция по сборке знака со шлагбаумом:
1. Приклейте изображение знака на треугольную основу.
2. Установите треугольную основу на стойку-основание.
3. В случае, если Вы используете знак без модуля питания, соедините детали с правой стороны при помощи винтов и гаек.
Если же Вы используете модуль питания, прикрутите его с правой стороны.
4. Соедините крестовину как показано на рисунке
5. Установите собранное основание на крестовину
6. Установите сервопривод между двумя элементами, скрепив их винтами.
7. Закрепите винтами блок шлагбаума. Также закрепите винтом нижнюю часть основания (см. рисунок).
8. Соедините вместе части шлагбаума, как показано на рисунке, при помощи винтов и гаек.
9. Закрепите насадку сервопривода на шлагбауме с обратной стороны. На 2 и 3 видах рисунка показан результат спереди и сверху.
10. Подключите сервопривод к колодке с надписью «СЕРВО». Закрепите шлагбаум на валу сервопривода при помощи шурупа.
Во избежание порчи сервопривода, мы рекомендуем перед креплением к нему шлагбаума загрузить скетч и дождаться установки вала сервопривода в положение, при котором шлагбаум будет располагаться горизонтально, и только после этого установить шлагбаум (предварительно выключив питание).
Видеопояснение:
Схема установки шлагбаума на трассе
Мы предполагаем, что шлагбаум устанавливается перпендикулярно дороге, а его наличие фиксируется ультразвуковым датчиком расстояния (левая часть рисунка). В этом случае центр модуля-шлагбаума устанавливается таким образом, чтобы круглая часть шлагбаума (с надписью «STOP» располагалась над линией трассы. Обращаем внимание, что в данном случае ИК-сигнал не будет фиксироваться автомобилем.
Также возможен вариант установки аналогично всем остальным знакам — под углом 45° относительно линии движения автомобиля. Угол распространения ИК-данных составляет около 80°, а дальность передачи ИК-данных настраивается поворотом крестовины резистора на обратной стороне платы основания. В данном случае центр модуля-шлагбаума должен находиться в 15 см от линии трассы.
Первое включение и настройка шлагбаума:
После сборки знака со шлагбаумом, его требуется подключить к Piranha UNO по шине I2C, как указано ниже:
Сверху изображено подключение знака к 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 способ: питание с помощью модуля
В модуль питания установите аккумулятор формата 14500 (Li-ion, 3,7V), соблюдая полярность.
Внимание!
Несоблюдение полярности при установке аккумулятора может привести к выходу знака из строя. Будьте внимательны!
Модуль имеет собственную систему заряда аккумулятора. С обратной стороны модуля расположены светодиоды индикации работы, процесса заряда и окончания процесса заряда.
Вы можете почитать подробнее про работу с модулем.
Для того, чтобы зарядить аккумулятор, подключите провод к разъёму type C на обратной стороне модуля или используйте специальные зарядные устройства.
2 способ: питание через колодку I2C
Напряжение питания знака через колодку I2C должно составлять от 3,5 до 5В. Также можно использовать питание от платы Arduino или USB.
На рисунке слева питание подаётся через колодку I2C, а на рисунке справа — через металлизированные отверстия крепления основания со стороны с надписью «Аккумулятор».
Допускается использовать три батарейки типа АА или ААА.
Настройка расстояния передачи ИК-сигнала
Расстояние передачи информации настраивается подстроечным резистором и варьируется в диапазоне от 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
, что и выполняется в скетче.
Если на трассе помимо знака железнодорожного переезда есть светофоры без шлагбаумов, то на стороне приёмника нужно проверять не состояние шлагбаума, а разрешение движения в прямом направлении, как это описывается в примере приёма данных от светофора. Тогда раскомментируйте строки переключения цветов, если знак железнодорожного переезда управляется в ручном режиме.
Обсуждение