====== Восьмиканальный датчик линии 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 преобразователь}}