В этом уроке
- Принцип работы бампера — модуля датчика линии
- Подключение и настройка бампера
- Получение данных от датчика линии
Видео версия урока
Классическое задание для подобных машинок — движение по линии. И оно не такое простое, как может показаться на первый взгляд. Нужно двигаться достаточно точно и плавно, чтобы не потерять линию, но в то же время — максимально быстро. Дальше мы будем улучшать наш код и делать его всё более и более совершенным, а пока начнём с основ.
Принцип работы датчика линии
Для того, чтобы наша машинка могла ездить по линии, необходим датчик линии. В нашем случае это бампер, который содержит сразу 9 датчиков.
Принцип действия датчика основан на отражении света: он хорошо отражается от светлых поверхностей и плохо — от тёмных. Зная уровень отраженного света от черной и белой поверхности, можно судить о том, над какой линией в данный момент находится датчик.
Для уменьшения влияния внешнего освещения, датчик в своей работе использует инфракрасные светодиоды. Однако, Вам всё равно стоит иметь в виду, что при разном уровне внешнего освещения показания с датчика могут отличаться.
Поэтому необходимо производить калибровку датчика. Она также необходима для коррекции цвета линии и фона. Подробнее об этом мы поговорим немного позже.
Установка бампера на машинку
- Закрепите адаптер на бампере.
- Закрепите бампер с адаптером на штанге.
- Подключите бампер к колодке I2C при помощи шлейфа. Для удобства Вам может потребоваться снять датчик расстояния.
Данный датчик является одним из устройств, для работы с которым необходима библиотека. В уроке о подключении библиотек мы уже скачали и установили её. Но если Вы вдруг его пропустили, то обязательно вернитесь туда и выполните указанные действия.
Также напоминаем, что мы уже изменили адрес модуля на 0x0C в уроке об адресации I2C. Если вдруг пропустили, обязательно перейдите туда и измените I2C-адрес бампера.
Чтение сигнала с датчиков
После установки библиотеки давайте загрузим простой код, чтобы понять, как работает бампер. Будем получать аналоговые значения с центрального датчика под номером 5.
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C #include <iarduino_I2C_Bumper.h> // Подключаем библиотеку для работы с бампером I2C-flash iarduino_I2C_Bumper bum(0x0C); // Объявляем объект bum для работы с функциями и методами библиотеки void setup(){ Serial.begin(9600); // Инициируем передачу данных в монитор последовательного порта bum.begin(); // Инициируем работу с бампером } void loop(){ Serial.println(bum.getLineAnalog(5)); // Читаем значение с датчика и выводим их в последовательный порт }
Функция getLineAnalog(num) (9 строка) позволяет считать значения с датчиков модуля.
num — номер опрашиваемого датчика (в нашем примере №5 — тот, что посередине).
Возвращаемое значение: значение типа uint16_t — число от 0 до 4096. Чем светлее поверхность под датчиком, тем выше значение.
Загрузите скетч, поставьте машинку на трассу и откройте монитор последовательного порта. Медленно перемещайте бампер таким образом, чтобы датчики поочерёдно оказывались над линией. Одновременно с этим следите за показаниями с датчика. Вы увидите два довольно резких изменения значений, соответствующих появлению и исчезновению линии.
Обратите внимание, что значения становятся меньше, когда линия находится под датчиком.
Обсуждение