Восьмиканальный датчик линии (Zelo-модуль)

Прокачайте свою «Робоняшу» сборкой из датчиков линии и ваш робот станет чемпионом в этом спорте. Ни одна линия не ускользнёт от его восьмиканального зрения.

Видеообзор

Общие сведения

На борту модуля расположено восемь датчиков линии. Каждый сенсор способен определить 4096 оттенков серого и поэтому увидеть чёрную линию даже на сером фоне.

Сенсоры линии подключены к отдельному 32-двух разрядному микроконтроллеру STM32F030F4P6 с вычислительном ядром ARM Cortex® M0. Контроллер считывает данные с восьми датчиков линии и передаёт управляющей платформе по интерфейсу I²C/TWI. Адрес модуля по умолчанию 0x42. Его всегда можно изменить программно, чтобы подключить несколько модулей.

Микроконтроллер так же имеет программируемые настройки чувствительности датчиков и яркости подсветки.

Примеры работы для Arduino

Схема устройства

Подключите сенсорную сборку к платформе Arduino к пинам шины I²C — SDA и SCL.

Для удобства подключения используйте Troyka Shield.

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

Данные с датчиков линии

Выведем показания с каждого датчика линии.

folowSensorSimple.ino
// библиотека для работы с модулями I²C
#include <Wire.h>
// библиотека для работы cо сборкой датчиков линии
#include <Octoliner.h>
 
// создаём объект для работы с датчиками линии
Octoliner octoliner(42);
 
void setup() {
  // открываем Serial-порт
  Serial.begin(115200);
  // начало работы с модулями I²C
  Wire.begin();
  // начало работы с датчиками линии
  octoliner.begin();
  // выставляем чувствительность фотоприёмников в диапазоне от 0 до 255
  octoliner.setSensitivity(200);
  // выставляем яркость свечения ИК-светодиодов в диапазоне от 0 до 255
  octoliner.setBrightness(255);
}
 
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» — линия посередине модуля;
folowSensorMapLine.ino
// библиотека для работы с модулями I²C
#include <Wire.h>
// библиотека для работы cо сборкой датчиков линии
#include <Octoliner.h>
 
// создаём объект для работы с датчиками линии
Octoliner octoliner(42);
 
void setup() {
  // открываем Serial-порт
  Serial.begin(115200);
  // начало работы с модулями I²C
  Wire.begin();
  // начало работы с датчиками линии
  octoliner.begin();
  // выставляем чувствительность фотоприёмников в диапазоне от 0 до 255
  octoliner.setSensitivity(200);
  // выставляем яркость свечения ИК-светодиодов в диапазоне от 0 до 255
  octoliner.setBrightness(255);
 
}
 
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

Схема устройства

Подключите сенсорную сборку к платформе Iskra JS к пинам шины I²C — SDA и SCL.

Для удобства подключения используйте Troyka Shield.

Данные с датчиков линии

Выведем показания с каждого датчика линии.

folowSensorSimple.js
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» — линия посередине модуля;
folowSensorMapLine.js
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);

Элементы платы

Микроконтроллер STM32F030F4P6

Мозгом сенсорной сборки является мощный 32-разрядный микроконтроллер фирмы STMicroelectronicsSTM32F030F4P6 с вычислительном ядром ARM Cortex® M0.

Микросхема MCP6004

MCP6004 — четырёхканальный операционный усилитель (ОУ). На борту модуля расположено два ОУ для программной регулировки чувствительности сразу восьми сенсоров.

Понижающий регулятор напряжения

Понижающий регулятор NCP582LSQ33 с выходом 3,3 вольта, обеспечивает питание логической части модуля. Максимальный выходной ток составляет 150 мА.

Светодиодная индикация

Имя светодиода Назначение
PWM Индикатор состояния питания чувствительности датчиков. Яркость светодиода прямо пропорциональна чувствительности сенсоров
ACT Мигает при обмене данными между управляющей платформой и сенсорной сборкой.

Входной сенсорный канал

На модуле расположено восемь датчиков линии на оптопаре TCRT5000.

TCRT5000 — это сборка светодиода и фототранзистора собранные в одном корпусе. Светодиод излучает инфракрасный свет с длиной волны 950 нм. Световой поток отражается от поверхности и попадает на фото-транзистор, где преобразуется в электрический сигнал. Чем светлее поверхность, тем больше отражается света, чем темнее — тем меньше.

Показания датчика также зависят от расстояния сенсора до поверхности. При расстоянии менее 3 миллиметров — перегородка между ИК-излучателем и приёмником мешает транзистору принимать отраженный свет. А при расстоянии более 15 миллиметров — отраженный свет рассеивается и может не доходить до приёмника.

Troyka-контакты

На модуле выведена разъём Troyka-контактов:

  • Питание (V) — соедините с рабочим напряжением микроконтроллера.
  • Земля (G) — Соедините с пином GND микроконтроллера.
  • Сигнальный (D) — пин данных шины I²C. Подключите к SDA пину микроконтроллера.
  • Сигнальный (C) — пин тактирования шины I²C. Подключите к SCL пину микроконтроллера.

Подстройка модуля

Сенсорная сборка позволяет программно регулировать излучения ИК-светодиодов и чувствительность фотоприёмников.

Принципиальная и монтажная схемы

Характеристики

  • Напряжение питания: 3.3–5 В
  • Микроконтроллер: STM32F030F4P6
  • Интерфейс: I²C
  • Адрес по умолчанию: 0x42
  • Тип сенсора: оптопара TCRT5000
  • Количество каналов: 8

Ресурсы