Назначение знаков в ПДД
Знак 3.3 «Движение механических транспортных средств запрещено». | |
Знак 3.4 «Движение грузовых автомобилей запрещено». |
Все перечисленные выше знаки являются запрещающими, они запрещают движение по участку дороги за знаком.
Знак 3.3 запрещает движение механических транспортных средств, то есть любых транспортных средств, приводимых в движение двигателем.
Знак 3.4 запрещает движение только грузовых транспортных средств с разрешенной максимальной массой более указанной на знаке. Если на знаке не указана масса, то запрет применяется к транспортным средствам с разрешенной максимальной массой более 3,5 т.
- Действие знака 3.3 не распространяется на:
- ТС граждан, проживающих или работающих в указанной зоне.
- ТС, управляемые инвалидами I и II групп, перевозящие таких инвалидов или детей инвалидов.
- ТС организаций федеральной почтовой связи.
- Маршрутные транспортные средства.
- Действие знака 3.4 не распространяется на:
- Грузовики, предназначенные для перевозки людей.
- ТС организаций федеральной почтовой связи.
- Грузовики без прицепа с максимальной разрешенной массой до 26 т, если они обслуживают предприятия в обозначенной знаком зоне.
Инструкция по сборке знака
1. Приклейте изображение знака на круглую основу.
2. Установите круглую основу на стойку-основание.
3. В случае, если Вы используете знак без модуля питания, соедините детали при помощи крепежа, винтов и гаек как с правой, так и с левой стороны.
Если же Вы будете работать с модулем питания, используйте отдельный крепёж только слева. Правая часть соединится посредством крепления модуля питания.
4. Соедините крестовину, как показано на рисунке.
5. Закрепите знак на крестовине при помощи винтов и гаек.
6. Собранный знак должен выглядеть следующим образом:
Видеопояснение:
Схема установки знака на трассе:
Центр знака должен находиться в 15 см от линий, образующих перекрёсток, либо в 15 см от участка трассы, а сам знак — располагаться под углом 45° относительно линии движения автомобиля.
Угол распространения ИК-данных составляет около 80°, а дальность передачи ИК-данных настраивается поворотом крестовины резистора на обратной стороне платы основания.
Первое включение и настройка знака:
Для работы со знаками необходимо установить библиотеку iarduino_I2C_Track. Подробнее об установке библиотеки читайте в нашей инструкции.
После сборки знака, его требуется подключить к Piranha UNO по шине I2C, как указано ниже:
Сверху изображено подключение знака к Piranha UNO напрямую, а ниже — через Trema Shield.
После подключения модуля к шине I2C, знак необходимо настроить на постоянную отправку данных по ИК-каналу. Для этого запустите следующий скетч:
#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_SIGN, 3,3); // Инициируем работу с модулем. Указываем, что модуль является знаком 3.3 «Движение механических транспортных средств запрещено» // sign.begin(MODUL_SIGN, 3,4); // Инициируем работу с модулем. Указываем, что модуль является знаком 3.4 «Движение грузовых автомобилей запрещено» sign.irProtocol(IR_IARDUINO); // Указываем протокол передачи данных по ИК-каналу: «IARDUINO» 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
, с номером ПДД3,3
(группа и номер знака указываются через запятую). Ниже имеется закомментированная строка, показывающая, как нужно обратиться к функцииbegin()
для определения знака 3.4. - Функция
irProtocol()
позволяет назначить протокол для передачи данных по ИК-каналу. В скетче используется протоколIR_IARDUINO
. - Функция
backlight()
позволяет управлять подсветкой знака. В скетче функция вызвана с параметромtrue
для включения подсветки. Если вместоtrue
указатьfalse
, то подсветка будет отключена, а если указать2
, то подсветка будет мигать. Функцию можно вызвать с двумя параметрами, тогда первая половина светодиодов подсветки будет управляться первым параметром, а вторая — вторым. - Функция
indicator()
позволяет управлять светодиодом, информирующем о передаче данных. В скетче функция вызвана с параметромtrue
, разрешая работу индикаторного светодиода. Если вместоtrue
указатьfalse
, то индикаторный светодиод будет выключен. Индикаторный светодиод позволяет видеть, когда модуль отправляет данные, отключение этого светодиода не отключает передачу данных. - Функция
irAutoSend()
указывает модулю начать постоянную отправку пакетов данных с информацией о знаке. Если в качестве параметра указать число от 15 до 255 мс, то средняя пауза между отправляемыми по ИК-каналу пакетами будет равна указанному числу миллисекунд. В скетче функция вызвана без параметра, значит, средняя пауза между пакетами будет установлена в значение по умолчанию для выбранного протокола. Реальная пауза между отправляемыми пакетами устанавливается хаотично в диапазоне ±50% от указанного числа, что позволяет поставить несколько знаков в одном направлении. - Функция
offline()
с параметромtrue
указывает модулю запомнить полученные настройки, сохранив их в энергонезависимую память. После этого модуль будет работать автономно (сразу после подачи питания), даже если он не подключён к Piranha UNO по шине I2C, так, как будто он вновь получил все команды кодаsetup()
. Для отключения автономного режима достаточно однократного обращения к функцииoffline()
с параметромfalse
.
Питание
Питание знака может производиться двумя способами: от специального модуля питания или же с помощью подачи питания через колодку шины 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.
#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_SIGN ){ // Если устройство, отправившее данные, является дорожным знаком Serial.print("Дорожный знак: "); // Serial.print(ir.sign_str); // Выводим строку с номером знака Serial.print(" принадлежит к"); // Serial.print(" группе "); // Serial.print(ir.sign[0]); // Выводим число, определяющее группу знака Serial.print(", номер "); // Serial.print(ir.sign[1]); // Выводим число, определяющее номер знака Serial.print(", пункт "); // Serial.print(ir.sign[2]); // Выводим число, определяющее пункт номера знака if( ir.sign_tab ){ Serial.print(", под знаком есть табличка - "); if( ir.sign_tab==SIGN_CAR_TRUCK ){ Serial.print("грузовые автомобили"); } if( ir.sign_tab==SIGN_CAR_LIGHT ){ Serial.print("легковые автомобили"); } if( ir.sign_tab==SIGN_DISTANCE_050 ){ Serial.print("50 метров" ); } if( ir.sign_tab==SIGN_DISTANCE_100 ){ Serial.print("100 метров"); } if( ir.sign_tab==SIGN_DISTANCE_150 ){ Serial.print("150 метров"); } if( ir.sign_tab==SIGN_DISTANCE_200 ){ Serial.print("200 метров"); } if( ir.sign_tab==SIGN_DISTANCE_250 ){ Serial.print("250 метров"); } } Serial.println("."); // } // } // } //
Действия, выполняемые в коде Setup()
:
- Первой строкой выполняется инициализация передачи данных в монитор последовательного порта
Serial.begin()
на скорости9600
бит/сек. - Далее выполняется инициализация работы с модулем ИК-приёмник/передатчик
begin()
. - Последняя строка указывает ИК-протокол приёма/передачи данных
setProtocol()
. Протоколы знака и приёмника должны совпадать. В скетче используется протоколIR_IARDUINO
.
Действия, выполняемые в коде loop()
:
- В первой строке выполняется проверка наличия принятых по ИК-каналу данных. Для проверки наличия данных, полученных от модулей трассы, обращение к функции
check()
должно выполняться с параметромtrue
(в этом случае функция реагирует на пакеты повторов). - Второй строкой кода выполняется проверка принятых данных на принадлежность к модулям знаков. Если ИК-данные приняты от модулей дорожных знаков, то переменная
device
содержит константуMODUL_SIGN
. - Если обе проверки успешно пройдены, то информацию о знаках можно получить из переменных:
- char*
sign_str
— строка, хранящая обозначение знака ПДД («1.1» ... «7.63.15»). - uint16_t
sign_int
— переменная, хранящая обозначение знака ПДД (10100...76315). - uint8_t
sign[3]
— массив, хранящий группу, номер и пункт знака ПДД ({1,1,0}...{7,63,15}). - uint8_t
sign_tab
— переменная, хранящая назначение таблички находящейся под знаком: 0
— под знаком нет таблички, уточняющей или ограничивающей его действие.SIGN_CAR_TRUCK
— действие знака распространяется только на грузовые автомобили.SIGN_CAR_LIGHT
— действие знака распространяется только на легковые автомобили.SIGN_DISTANCE_050
— расстояние до объекта или зона действия знака = 50 м.SIGN_DISTANCE_100
— расстояние до объекта или зона действия знака = 100 м.SIGN_DISTANCE_150
— расстояние до объекта или зона действия знака = 150 м.SIGN_DISTANCE_200
— расстояние до объекта или зона действия знака = 200 м.SIGN_DISTANCE_250
— расстояние до объекта или зона действия знака = 250 м.- В данном скетче сначала выводится строка, содержащая обозначение знака
sign_str
. Далее по отдельности выводятся группаsign[0]
, номерsign[1]
и пунктsign[2]
знака. Если у знака нет пункта, то элементsign[2]
содержит0
. - Последняя проверка определяет наличие под знаком таблички, уточняющей или ограничивающей его действие
if( ir.sign_tab )
. Если таковая есть, то в монитор последовательного порта выводится соответствующее сообщение.
При получении данных от знака 3.4 «Движение грузовых автомобилей запрещено», в мониторе последовательного порта появится строка:
Дорожный знак: 3.4 принадлежит к группе 3, номер 4, пункт 0
А при наличии под знаком таблички, строка может принять вид:
Дорожный знак: 3.4 принадлежит к группе 3, номер 4, пункт 0, под знаком есть табличка - 250 метров
В данном случае зона действия знака определена табличкой под ним.
Пример сравнения полученных приёмником данных:
В данном примере выводится информация только о тех знаках, которые указаны в скетче.
#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_SIGN ){ // Если устройство, отправившее данные, является дорожным знаком // Выводим название известных знаков: // if( !strcmp( ir.sign_str, "3.3" ) ){ Serial.println("Движение механических транспортных средств запрещено"); } if( !strcmp( ir.sign_str, "3.4" ) ){ Serial.println("Движение грузовых автомобилей запрещено"); } } // } // } //
Действия данного скетча отличаются от предыдущего тем, что мы не выводим полученную от знака информацию, а сравниваем строку sign_str
с ожидаемыми значениями.
Вместо сравнения строки sign_str
можно сравнивать значение переменной sign_int
или массива sign
.
Обсуждение