Дорожный знак «Место для разворота»

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

Знак 6.3.1
«Место для разворота».

Этот знак относится к группе информационных знаков. Он сообщает водителю, что на данном участке дороги разрешен разворот.

Данный знак не только информирует о разрешённом на дороге развороте, но и сообщает о запрете поворота налево.

Знак устанавливается перед местом, где разрешён разворот. Его можно размещать не только на перекрёстке, но и на прямом участке дороги.

Если разворот разрешён на протяженном участке дороги, то вместо знака 6.3.1 «Место для разворота», ставят знак 6.3.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, 6,3,1);   // Инициируем работу с модулем. Указываем, что модуль является знаком 6.3.1 «Место для разворота»
     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, с номером ПДД 6,3,1 (группа, номер и пункт знака указываются через запятые).
  • Функция 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 ). Если такая есть, то в монитор последовательного порта выводится соответствующее сообщение.

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

Дорожный знак: 6.3.1 принадлежит к группе 6, номер 3, пункт 1

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

Дорожный знак: 6.3.1 принадлежит к группе 6, номер 3, пункт 1, под знаком есть табличка - 50 метров

В данном случае зона действия знака определена табличкой под ним.

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

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

#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, "6.3.1" )  ){ Serial.println("Место для разворота"); }
         }                                        //
     }                                            //
}                                                 //

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

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

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

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

Дорожный знак «Место для разворота»

В магазин

Обсуждение

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