Дорожный знак «Главная дорога»

Назначение знаков в ПДД:

Знак 2.1
«Главная дорога».
Знак 2.2
«Конец главной дороги».

Знаки относятся к группе знаков приоритета. Знак 2.1 «Главная дорога» обозначает дорогу, на которой автомобилям предоставлено право преимущественного проезда нерегулируемых перекрестков. Автомобили, находящиеся на главной дороге, имеют преимущество перед автомобилями на второстепенной.

Дорога после знака остается главной ровно до тех пор, пока на ней не появится знак 2.2 «Конец главной дороги».

Другие условия для отмены данного знака в ПДД не предусмотрены.

Инструкция по сборке знака:

  1. Приклейте изображение знака на ромбовидную основу.

2. Установите ромбовидную основу на стойку-основание.

3. В случае, если Вы используете знак без модуля питания, соедините детали при помощи крепежа, винтов и гаек как с правой, так и с левой стороны.

Если же Вы будете работать с модулем питания, используйте отдельный крепёж только слева. Правая часть соединится посредством крепления модуля питания.

4. Соедините крестовину, как показано на рисунке

5. Закрепите знак на крестовине при помощи винтов и гаек.

6. Собранный знак должен выглядеть следующим образом:

Видеопояснение:

Схема установки знака на трассе:

Центр знака должен находиться в 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, 2,1);     // Инициируем работу с модулем. Указываем, что модуль является знаком 2.1 «Главная дорога»
//   sign.begin(MODUL_SIGN, 2,2);     // Инициируем работу с модулем. Указываем, что модуль является знаком 2.2 «Конец главной дороги»
     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, с номером ПДД 2,1 (группа и номер знака указываются через запятую). Ниже имеется закомментированная строка показывающая как нужно обратиться к функции begin() для определения знака 2.2.
  • Функция 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 см до нескольких метров.

При настройке добиваются уверенного приёма сигнала ИК-приёмником на необходимом расстоянии.

Порядок настройки мощности передачи:

  1. Установите знак на трассу, выкрутив движок переменного резистора на минимум.
  2. Установите машинку на трассу в место, где она должна зафиксировать знак (поймать ИК-сигнал).
  3. Включите машинку и знак. Приёмник ИК-сигнала, установленный на машинке, имеет синий светодиод, подписанный как «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 ). Если такая есть, то в монитор последовательного порта выводится соответствующее сообщение.

При получении данных от знака 2.1 «Главная дорога», в мониторе последовательного порта появится строка:

Дорожный знак: 2.1 принадлежит к группе 2, номер 1, пункт 0

А при наличии под знаком таблички, строка может принять вид:

Дорожный знак: 2.1 принадлежит к группе 2, номер 1, пункт 0, под знаком есть табличка - 200 метров

Пример сравнения полученных приёмником данных:

В данном примере выводится информация только о тех знаках, которые указаны в скетче.

#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, "2.1" )   ){ Serial.println("Главная дорога"); }
             if(  !strcmp( ir.sign_str, "2.2" )   ){ Serial.println("Конец главной дороги"); }
         }                                        //
     }                                            //
}                                                 //

Действия данного скетча отличаются от предыдущего тем, что мы не выводим полученную от знака информацию, а сравниваем строку sign_str с ожидаемыми значениями.

Вместо сравнения строки sign_str, можно сравнивать значение переменной sign_int или массива sign.

Ну что же, поздравляем!
Вы освоили основы программирования, выполнили множество упражнений и проектов. Не стесняйтесь возвращаться к предыдущим урокам, если что-нибудь забыли. А мы предлагаем двигаться дальше и переходить к следующей главе.
перейти к выбору главы

Продукт в магазине

Дорожный знак «Главная дорога»

В магазин

Обсуждение

Гарантии и возврат. Используя сайт, Вы соглашаетесь с условиями.