Создаем робота-андроида своими руками - Джон Ловин
Шрифт:
Интервал:
Закладка:
В моем прототипе устройства использованы CdS фоторезисторы с темновым сопротивлением порядка 100 кОм и сопротивлением на свету порядка 10 кОм. Наилучшим местом для закрепления фоторезисторов является верхняя часть 100:1 редуктора ходового двигателя (см. рис. 8.13). Для крепления фоторезисторов я использовал небольшую пластиковую пластинку, закрепленную под углом 45° вверх и светонепроницаемый козырек, помещенный между фоторезисторами (см. рис. 8.14). Закрепление фоторезисторов на площадке переднего колеса автоматически обеспечивает совпадение направления приема светового излучения с направлением движения. Такой тип повторяет конструкцию оригинальной черепахи робота.
Рис. 8.13. Детальная фотография конструкции узла переднего ведущего колеса, содержащая противовес, ведущее колесо, двигатель с редуктором и датчики освещенности
Рис. 8.14. Изометрический вид блока датчиков
Использование двух CdS фоторезисторов сильно облегчает вычисления, необходимые для решения задачи следования за источником света. Для этого требуется алгоритм, аналогичный алгоритму действия устройства системы слежения за направлением источника света, описанный в гл. 6. Работа блока фоторезисторов проиллюстрирована на рис. 8.15. Когда оба датчика освещены одинаково, то их сопротивления приблизительно равны. Если разность показаний каждого их датчиков не превышает ±10 единиц, программа PIC полагает их равными и не отдает команду на устройство поворота. Когда один из датчиков попадает в тень источника света, то разность сопротивлений превышает ±10 единиц. Соответственно PIC микроконтроллер включает устройство поворота для обеспечения равной освещенности датчиков. При этом переднее колесо поворачивается, и робот движется прямо к источнику света. Если освещенность превышает пороговую, то робот переходит в режим «избегания».
Рис. 8.15. Функциональное реагирование блока датчиков
Принципиальная схемаПринципиальная схема робота изображена на рис. 8.16. «Интеллект» робота обеспечивается работой двух микроконтроллеров PIC16F84. Сигнал для управления рулевым механизмом сервомотора снимается с шины RB3 PIC микроконтроллера 2. Ходовой двигатель с редуктором 100:1 соединен с мостовой схемой, состоящей из компонентов Q1-Q4, D1-D4 и R1-R4. Мостовая схема управляется с шин входа/выхода RB1 и RB2. Показатели световых CdS датчиков считываются шинами RB6 и RB7 микроконтроллера 1. Показания датчика касания считываются шиной RB5, что сигнализирует о наличии препятствия. Монтаж устройства я осуществил на двух небольших макетных платах без применения пайки. Макетные платы закреплены на основании робота на крышке батарейного отсека.
Рис. 8.16. Принципиальная электрическая схема робота-черепахи
Для точного моделирования функций исходной конструкции (точного повторения поведения оригинального робота-черепахи конструкции Вальтера) необходимо два микроконтроллера. Распределение вычислительных функций между двумя процессорами обеспечивает более четкую и слаженную работу робота.
Основной причиной использования второго микроконтроллера является задача управления рулевым механизмом сервомотора. Мощности одного микропроцессора оказалось недостаточно для считывания показаний двух CdS фоторезисторов и одновременного управления рулевым механизмом. Если бы я использовал для руления обычный двигатель с редуктором, то и одного микропроцессора оказалось бы достаточно. Если оптимистично смотреть на вещи, преимуществом такого подхода к решению проблемы является возможность создания робота с двумя процессорами, работающими в паре (т. е. системы с разделением времени).
Одному микроконтроллеру, названному микроконтроллером 1, я назначил функции отслеживания направления источника света и контроля датчика столкновений. Управление двигателями хода и поворота обеспечивается вторым микроконтроллером, имеющим номер 2. Чтобы схема работала, необходимо обеспечить связь между микроконтроллерами. В данном случае двухсторонняя связь не требуется: один микроконтроллер подает управляющие сигналы, а второй – «слушает».
Микроконтроллер 1. Микроконтроллер 1 считывает информацию со световых CdS датчиков и с датчика столкновений. Его связь с микроконтроллером 2 осуществляется с помощью трех шин ввода/вывода.
• Шина ввода/вывода 1 отображает состояние CdS датчика 1. Если сила света, попадающего на CdS 1 больше, чем на CdS 2, то на шине появляется сигнал низкого уровня. Если сила света на обоих датчиках равна, то на выходе присутствует сигнал высокого уровня.
• Шина ввода/вывода 2 отображает состояние CdS датчика 2. Если сила света, попадающего на CdS 2, больше, чем на CdS 1, то на шине появляется сигнал низкого уровня. Если сила света на обоих датчиках равна, то на выходе присутствует сигнал высокого уровня.
• Шина ввода/вывода 3 отображает либо состояния датчика столкновений, либо слишком большую засветку CdS датчиков. В обоих случаях на выходе появляется сигнал высокого уровня.
Микроконтроллер 2. Микроконтроллер 2 проверяет состояние трех шин ввода/вывода и на основании полученной информации управляет движением и поворотом согласно таблице:
Соответственно шины 1 и 2 отражают состояние датчиков CdS, а шина 3 – состояние датчика столкновений.
Добавление состояния «спячки»Я добавил состояние «спячки», соответствующее общему низкому уровню освещенности. Если оба CdS датчика освещены примерно одинаково, то робот движется вперед. Если датчики освещены в разной степени, то робот поворачивается соответственно направо или налево. Если поступает слишком много света или срабатывает датчик столкновений, то робот переходит в режим избегания.
ПитаниеБатарейный отсек робота содержит четыре элемента АА, обеспечивая напряжение питания 6 В. При проверке функционирования робота есть основания предполагать, что истощение батарей происходит достаточно быстро.
Программа
Блок-схема программы изображена на рис. 8.17. После включения питания ходовой двигатель отключен, и микроконтроллер начинает искать наиболее яркий источник света, поворачивая сервомотор. Если источник света имеет слишком большую яркость, то включается режим избегания. В режиме избегания ходовой двигатель включается в режим реверса; при этом ведущее колесо поворачивает направо или налево. Если освещенность не достигает уровня режима избегания, то робот поворачивается в направлении источника света и движется вперед. При замыкании датчика столкновений робот предполагает наличие препятствия и переходит в режим избегания. При выключении датчика столкновения (препятствия нет) программа переходит на начало, и процесс поиска и движения к наиболее яркому источнику света продолжается.
Рис. 8.17. Блок-схема программы
Программа написана для компилятора PICBASIC и введена непосредственно в PIC16F84. Без особых изменений программа может быть написана на версии PICBASIC Pro. Программа может быть подстроена под имеющиеся экземпляры CdS датчиков, используемых двигателей и т. п.
Программа 1
‘Микроконтроллер 1
start:
High 4: low 4 ‘Мигание светодиода
b7 = 0
button 5,0,255,0,b7,1,avoid ‘Проверка препятствия
pot 7, 255, b0 ‘Считывание датчика CdS 1
pot 6, 255, b1 ‘Считывание датчика CdS 2
if b0 <= 250 then skip ‘Достаточно темно?
If b1 >= 250 then slp ‘Да
skip: ‘Нет
if bo > 25 then skip 2 ‘Слишком много света
if b1 < 25 then avoid ‘Да
skip2: ‘Нет
if bo = b1 then straight ‘Освещенность одинакова, вперед
if bo > b1 then greater ‘Проверить освещенность
if bo < b1 then lesser ‘Проверить освещенность
straight:
high 0: high 1: low 2 ‘Сообщение микроконтроллеру 2
goto start ‘Движение прямо
greater:
b2 = b0 – b1 ‘Проверка разности освещенности
if b2 > 10 then rt ‘Если больше 10, поворот направо
goto straight ‘Если нет, движение прямо
lesser:
b2 = b1 – b0 ‘Проверка разности освещенности
if b2 > 10 then lt ‘Если больше 10, поворот налево
goto straight ‘Если нет, движение прямо
rt: ‘Поворот направо, посылка
high 0: low 1: low 2 ‘Сообщение микроконтроллеру 2
goto start
lt: ‘Поворот налево, посылка
low 0: high 1: low 2 ‘Сообщение микроконтроллеру 2
goto start
slp: ‘Режим спячки, посылка
low 0: low 1: low 2 ‘Сообщение микроконтроллеру 2
goto start
avoid: ‘Режим избегания, посылка
low 0: low 1: high 2 ‘Сообщение микроконтроллеру 2
goto start
Программа 2
‘Микроконтроллер 2
b4 = 150 ‘Установка среднего положения сервомотора
start:
peek 6, b1 ‘Чтение данных микроконтроллера 1
let b0 = b1 & 7 ‘Маскирование кроме первых трех битов
if b0 = 0 then slp ‘Время спячки
if b0 = 1 then rt ‘Поворот направо
if b0 = 2 then lt ‘Поворот налево
if b0 = 3 then fw ‘Движение прямо
if b0 = 4 then avoid ‘Режим избегания
goto start
slp:
low 4: low 5 ‘Выключить двигатель