====== Восьмиканальный датчик линии Octoliner v1: инструкция, примеры работы и документация ====== Езда по линии — самое зрелищное и азартное соревнование по робототехнике. Следуя по чёрной линии, робот должен быстрее всех добраться до финиша. В этом ему помогает датчик линии: при помощи оптических сенсоров робот «видит» чёрную линию и следует по ней. Чем точнее датчик, тем быстрее робот преодолеет дистанцию и придёт к финишу. Установите на [[amp>product/robonyasha-iskra-js?utm_source=man&utm_campaign=zelo-follow-line-sensor&utm_medium=wiki|«Робоняшу»]] целую [[amp>product/zelo-follow-line-sensor-v1?utm_source=man&utm_campaign=zelo-follow-line-sensor&utm_medium=wiki|сборку из датчиков линии]], и ваш робот станет чемпионом в этом виде соревнований. Ни одна линия не ускользнёт от его восьмиканального зрения. {{ :продукты:zelo-folow-line-sensor:zelo-folow-line-sensor.4.jpg?nolink |}} ===== Видеообзор ===== {{youtube>AT_yjcicTfM?large}} ===== Как это работает ===== На борту модуля расположено восемь датчиков линии. Кроме чёрного и белого цвета, каждый сенсор способен распознать 4096 оттенков серого. Благодаря такой чувствительности робот лучше определяет границу перехода от линии к фону и быстрее реагирует на повороты. Сенсоры линии подключены к отдельному 32-разрядному микроконтроллеру {{:продукты:zelo-folow-line-sensor:stm32f030f4p6_datasheet.pdf|STM32F030F4P6}} с вычислительным ядром ARM Cortex M0. Контроллер считывает данные с восьми датчиков линии и передаёт их управляющей платформе по интерфейсу [[Видеоуроки:7-i2c-и-processing|I²C/TWI]]. Адрес модуля по умолчанию ''0x42'', но его можно изменить, если захотите подключить несколько модулей. Интенсивность излучения и чувствительность фотоприёмников можно программно регулировать. ===== Примеры работы для Arduino ===== ==== Подключение датчика ==== К платформе [[amp>collection/arduino?utm_source=man&utm_campaign=zelo-follow-line-sensor&utm_medium=wiki|Arduino]] сенсорный модуль удобнее подключать через плату расширения: например, через [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=zelo-follow-line-sensor&utm_medium=wiki|Troyka Shield]]. При помощи трёхпроводных шлейфов подключите модуль к питанию ''V'' и ''G'' и к пинам шины I²C — ''SDA'' и ''SCL''. {{ :продукты:zelo-folow-line-sensor:zelo-folow-line-sensor_arduino_troyka-shield.png?nolink |}} ==== Получение данных с датчиков линии ==== Для запуска примеров скачайте и установите библиотеку [[https://github.com/amperka/Octoliner|Octoliner]]. Попробуем получить значения с датчиков сборки и вывести полученные значения на монитор serial-порта. Для этого создадим объект для работы с датчиком, выставим чувствительность фотоприёмников и настроим яркость свечения инфракрасных светодиодов. // библиотека для работы с модулями I²C #include // библиотека для работы cо сборкой датчиков линии #include // создаём объект для работы с датчиками линии Octoliner octoliner(42); void setup() { // открываем Serial-порт Serial.begin(115200); // начало работы с модулями I²C Wire.begin(); // начало работы с датчиками линии octoliner.begin(); // выставляем чувствительность фотоприёмников в диапазоне от 0 до 255 octoliner.setSensitivity(200); } void loop() { // считываем значение с датчиков линии for (int i = 0; i < 8; i++) { // выводим значения в Serial-порт Serial.print(octoliner.analogRead(i)); Serial.print("\t"); } Serial.println(); // ждём пол секунды delay(500); } ==== Поиск линии ==== Теперь научим датчики определять нахождение линии. Будем использовать диапазон от –1 до 1: * –1 — линия в крайнем левом положении модуля. * 1 — линия в крайнем правом положении модуля. * 0 — линия посередине модуля. // библиотека для работы с модулями I²C #include // библиотека для работы cо сборкой датчиков линии #include // создаём объект для работы с датчиками линии Octoliner octoliner(42); void setup() { // открываем Serial-порт Serial.begin(115200); // начало работы с модулями I²C Wire.begin(); // начало работы с датчиками линии octoliner.begin(); // выставляем чувствительность фотоприёмников в диапазоне от 0 до 255 octoliner.setSensitivity(200); } void loop() { // массив для хранения показателей с датчиков линии int dataSensors[8]; // считываем значение с датчиков линии for (int i = 0; i < 8; i++) { // выводим значения в Serial-порт dataSensors[i] = octoliner.analogRead(i); Serial.print(octoliner.analogRead(i)); Serial.print("\t"); } Serial.println(octoliner.mapLine(dataSensors)); Serial.println(); // ждём пол секунды delay(500); } Для плавной езды по линии рекомендуем использовать сборку датчиков совместно с ПИД-регулятором. ===== Примеры работы для Espruino ===== ==== Схема устройства ==== К платформе [[amp>product/iskra-js?utm_source=man&utm_campaign=zelo-follow-line-sensor&utm_medium=wiki|Iskra JS]] сенсорный модуль удобнее подключать через плату расширения: например, через [[amp>product/arduino-troyka-shield?utm_source=man&utm_campaign=zelo-follow-line-sensor&utm_medium=wiki|Troyka Shield]]. При помощи трёхпроводных шлейфов подключите модуль к питанию ''V'' и ''G'' и к пинам шины I²C — ''SDA'' и ''SCL''. {{ :продукты:zelo-folow-line-sensor:zelo-folow-line-sensor_espruino_troyka-shield.png?nolink |}} ==== Получение данных с датчиков линии ==== Напишем программу, которая поможет получить значения с датчиков сборки и вывести полученные значения на консоль. Для этого подключим модуль работы со сборкой датчиков, выставим чувствительность фотоприёмников и настроим яркость свечения инфракрасных светодиодов. I2C1.setup({sda: SDA, scl: SCL, bitrate: 100000}); // подключаем модуль работы с октролайнером var octoliner = require("@amperka/octoliner").connect({i2c:I2C1, address:42}); // устанавливаем чувствительность датчиков линии octoliner.setSensitivity(0.8); // устанавливаем уровень подсветки octoliner.setBrightness(1); setInterval(()=>{ for(var i = 0; i < 8; ++i){ // в цикле считываем все 8 датчиков и выводим из значения console.log(octoliner.analogRead(i)); } },500); ==== Поиск линии ==== Теперь научим датчики определять нахождение линии. Будем использовать диапазон от –1 до 1: * –1 — линия в крайнем левом положении модуля. * 1 — линия в крайнем правом положении модуля. * 0 — линия посередине модуля. I2C1.setup({sda: SDA, scl: SCL, bitrate: 100000}); // подключаем модуль работы с октолайнером var octoliner = require("@amperka/octoliner").connect({i2c:I2C1, address:42}); // устанавливаем чувствительность датчиков линии octoliner.setSensitivity(0.8); // устанавливаем уровень подсветки octoliner.setBrightness(1); setInterval(()=>{ console.log(octoliner.mapLine(octoliner.getBinaryLine())); },500); Для плавной езды по линии рекомендуем использовать сборку датчиков совместно с ПИД-регулятором. ===== Элементы платы ===== {{ :продукты:zelo-folow-line-sensor:zelo-folow-line-sensor_annotation.png?nolink |}} Плата крепится к роботу при помощи шести ушек, которые сделаны под размер винтов М3. ==== Микроконтроллер STM32F030F4P6 ==== Мозг сенсорной сборки — мощный 32-разрядный микроконтроллер {{:продукты:zelo-folow-line-sensor:stm32f030f4p6_datasheet.pdf|STM32F030F4P6}} с вычислительным ядром ARM Cortex M0. Контроллер считывает данные с восьми датчиков линии и передаёт управляющей платформе по интерфейсу I²C/TWI. ==== Микросхема MCP6004 ==== На борту модуля расположены два четырёхканальных операционных усилителя {{:продукты:zelo-folow-line-sensor:mcp6004_datasheet.pdf|MCP6004}}, при помощи которых можно отрегулировать чувствительность сразу восьми сенсоров. ==== Понижающий DC-DC ==== Преобразователь {{:продукты:zelo-folow-line-sensor:ncp582lsq33_datasheet.pdf|NCP582LSQ33}} с выходом 3,3 В обеспечивает питание логической части модуля. Максимальный выходной ток 150 мА. ==== Светодиодная индикация ==== На плате расположены два светодиода — индикаторы данных и питания. ^ Имя светодиода ^ Назначение ^ | ACT |Отвечает за обмен данными между управляющей платформой и сенсорной сборкой. При обмене данными индикатор мигает.| | PWM |Показывает чувствительность датчиков: чем больше чувствительность, тем ярче горит светодиод.| ==== Troyka-контакты ==== На модуле выведен разъём Troyka-контактов: * Питание (V) соединяет с рабочим напряжением микроконтроллера. * Земля (G) соединяет с пином GND микроконтроллера. * Сигнальный (D) — пин данных шины I²C. Подключается к SDA-пину микроконтроллера. * Сигнальный (C) — пин тактирования шины I²C. Подключается к SCL-пину микроконтроллера. ==== Входной сенсорный канал ==== На модуле расположено восемь датчиков линии на оптопаре {{:продукты:zelo-folow-line-sensor:tcrt5000_datasheet.pdf|TCRT5000}}. Оптопара TCRT5000 — это светодиод и фототранзистор, собранные в одном корпусе. Светодиод излучает инфракрасный свет, длина волны 950 нм. Световой поток отражается от поверхности и попадает на фототранзистор, где преобразуется в электрический сигнал. Чем светлее поверхность, тем больше отражается света. Чем темнее — тем меньше. {{ :продукты:zelo-folow-line-sensor:zelo-folow-line-sensor_operation.png?nolink |}} Показания датчика зависят не только от цвета линии, но и от расстояния сенсора до поверхности. Если расстояние менее 3 мм, то перегородка между ИК-излучателем и приёмником мешает транзистору принимать отражённый свет. При расстоянии более 15 мм отражённый свет рассеивается и не доходит до приёмника. ===== Принципиальная и монтажная схемы ===== {{:продукты:zelo-folow-line-sensor:zelo-folow-line-sensor_schematic.png?direct&450 |}} {{ :продукты:zelo-folow-line-sensor:zelo-folow-line-sensor_layout_top.png?direct&200|}} {{ :продукты:zelo-folow-line-sensor:zelo-folow-line-sensor_layout_bottom.png?direct&200|}} ===== Характеристики ===== * Напряжение питания: 3,3–5 В * Микроконтроллер: STM32F030F4P6 * Интерфейс: I²C * Адрес по умолчанию: 0x42 * Тип сенсора: оптопара TCRT5000 * Количество каналов: 8 ===== Ресурсы ===== * [[amp>product/zelo-follow-line-sensor-v1?utm_source=man&utm_campaign=zelo-follow-line-sensor&utm_medium=wiki|Сборка датчиков линии]] в магазине. * [[https://github.com/amperka/hardware-drawings/blob/master/zelo-folow-line-sensor.svg|Векторное изображение модуля]] * [[https://github.com/amperka/Octoliner|Библиотека для Arduino]] * [[https://github.com/amperka/OctolinerPi|Библиотека для Raspberry Pi]] * {{:продукты:zelo-folow-line-sensor:stm32f030f4p6_datasheet.pdf|Datasheet на микроконтроллер STM32F030F4P6}} * {{:продукты:zelo-folow-line-sensor:tcrt5000_datasheet.pdf|Datasheet на оптопару TCRT5000}} * {{:продукты:zelo-folow-line-sensor:ncp582lsq33_datasheet.pdf|Datasheet на понижающий DC-DC преобразователь}}