Часть III. Практическое применение Arduino
21.5. Движение робота по линии
в автономном режиме
Чтобы наш проект превратился в робота, необходимо добавить для него режим
осмысленных действий в автономном режиме. Предусмотрим переход робота из
режима внешнего управления в автономный режим и обратно по нажатии клавиш
<1> и <3> на ИК-пульте. Для этого добавим в скетч две константы:
#define EXT 16 // "1" – переход в режим внешнего управления
#define LOCAL 1040 // "3" – переход в автономный режим
При переходе в автономный режим робот перестает реагировать на все коды, по-
ступающие с ИК-пульта, кроме кода перехода в режим внешнего управления.
В автономном режиме робот будет пока непрерывно двигаться по черной линии,
нарисованной на поверхности движения. Для обеспечения движения робота по этой
линии применим датчики "черное-белое" типа OR-BWSENS (рис. 21.10).
Рис. 21.10. Датчики OR-BWSENS
Датчики устанавливаются на робота, как показано на рис. 21.11. Высота датчиков
от поверхности — 15 мм.
Рис. 21.11. Установка датчиков OR-BWSENS на платформу робота
Глава 21. Создаем робота
281
Для работы с датчиками используем Arduino-библиотеку
PololuQTRSensors
, кото-
рую можно скачать со страницы https://github.com/pololu/qtr-sensors-arduino. Эта
библиотека находится и в папке
libraries/QTRSensors
сопровождающего книгу элек-
тронного архива.
Итак, подключаем библиотеку к проекту:
// датчики черное-белое
#include
#define NUM_SENSORS 4 // кол-во сенсоров
#define TIMEOUT 2500 // 2500 мс
#define EMITTER_PIN QTR_NO_EMITTER_PIN
Прописываем константы: количество датчиков, время ожидания разрядки конден-
саторов, параметр
EMITTER_PIN
.
Далее создаем экземпляр объекта. Для цифровых:
QTRSensorsRC qtrrc((unsigned char[]) {B1,...,Bn},NUM_SENSORS,
TIMEOUT,EMITTER_PIN);
unsigned int sensorValues[NUM_SENSORS];
где:
B1
, ...,
Bn
— пины Arduino для подключения сенсоров;
NUM_SENSORS
— количество сенсоров;
TIMEOUT
— время ожидания разрядки конденсатора датчика.
У
ТОЧНЕНИЕ
"Принцип работы датчика: замыкаем на 500 мкс (для версии 1 датчика — на 2500 мкс)
сигнальную линию датчика на землю, разряжая конденсатор. Делаем сигнальную ли-
нию входом для МК (т. е. перестаем ее подтягивать к «земле» или к питанию) и ждем
сколько-то времени, пока через открытый, в зависимости от отражающей способности
поверхности в спектре ИК-излучения и расстояния до поверхности, оптодатчик за-
рядится конденсатор; замеряем, что на выходе с датчика: 0 или 1" (из инструкции для
датчиков OR-BWSENS).
EMITTER_PIN
—
QTR_NO_EMITTER_PIN
.
Далее в процедуре
setup()
— калибровка датчика:
for (i = 0; i < 400; i++)
{
qtrrc.calibrate();
}
И в основном цикле — считывание показаний датчиков:
unsigned char i;
for (i = 0; i < NUM_SENSORS; i++)
{
Serial.print(sensorValues[i] * 10 / 1001);
Serial.print(' ');
}
282
3>1> Do'stlaringiz bilan baham: |