В этом уроке:
- Собираем знак «Ограничение максимальной скорости»
- Настраиваем знак на автоматическую работу
- Реализуем приём информации машинкой
Во вводном уроке мы рассмотрели принцип передачи информации от знака к машинке. Пришла пора научиться отправлять и принимать эти сигналы.
Сборка знака и его настройка на автоматическую работу
Первый знак, с которым мы будем работать, — знак 3.24 «Ограничение максимальной скорости». Этот знак встречается в контексте нашего курса в четырёх вариациях: на 20, 40, 60 и 90 км/ч.
Обычно скорость устанавливается, исходя из следующих соображений:
- 90 км/ч — скорость вне населённых пунктов или на скоростных дорогах;
- 60 км/ч — скорость в населенных пунктах;
- 40 км/ч — скорость на участках, где необходимо повышенное внимание водителя;
- 20 км/ч — скорость вблизи школ, в жилых зонах и прочих местах, где на проезжей части могут присутствовать люди.
Для каждого знака, с которым Вы встретитесь, есть подробная статья. Там Вы найдёте инструкцию по сборке, необходимые скетчи и прочую полезную информацию по работе со знаком. А полный перечень знаков находится в технической главе.
Данный дорожный знак программируется с указанием скорости, которую он будет ограничивать. Подробнее о программировании знака читайте в той же статье. Ваш знак должен быть запрограммирован на передачу информации об ограничении скорости 20 км/ч.
Итак, соберите знак и запрограммируйте его, если еще этого не делали. Теперь давайте настроим машинку на приём сигнала.
Скетч для приёма сигнала от знака
В приведенной выше статье есть пример и приёма информации, но для текущей задачи мы оставили только самое необходимое, чтобы не отвлекаться на излишний код. Давайте посмотрим, как он работает.
#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.println(ir.sign_str); // Выводим строку с номером знака } // } // }
Обратите внимание, что при объявлении объекта ИК-приёмника/передатчика I2C мы указываем его адрес на шине I2C. По умолчанию — 0х09, но если Вы устанавливали ему другой адрес, не забудьте его изменить.
iarduino_I2C_IR ir(0x09); // Объявляем объект ir для работы с функциями и методами библиотеки iarduino_I2C_IR, указывая адрес модуля на шине I2C
Посмотрите — с помощью команды ir.sign_str мы получаем номер знака в ПДД. Это тот же номер, который мы указывали при программировании знака. Знак шлёт этот номер машинке, и теперь мы можем его распознать.
Результат работы программы
Подлючите машинку к компьютеру, загрузите скетч, откройте монитор порта и направьте включенный знак на ИК-приёмник. Помните, что приёмник машинки должен быть направлен в сторону передатчика знака.
Вы увидите в мониторе порта информацию о знаке.
Дорожный знак: 3.24.2
3.24 — номер знака в ПДД, а последняя цифра — скорость, которую мы указали передавать знаку (2 означает скорость 20 км/ч).
В следующем уроке мы реализуем полноценное взаимодействие машинки со знаком — её поведение будет меняться при обнаружении знака.
Обсуждение