Шрифт:
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 ‘Выключить двигатель
pulsout 3, b4 ‘Запустить сервомотор
pause 18 ‘Задержка включения сервомотора
goto start ‘Чтение данных микроконтроллера 1
rt: ‘Поворот направо
high 4: low 5 ‘Движение вперед
if b4 > 200 then rt1: ‘Поворот направо максимален
b4 = b4 + 1 ‘Нет
rt1: ‘Да
pulsout 3, b4 ‘Поворот сервомотора
pause 18 ‘Задержка ( 55 Гц)
goto start ‘Чтение данных микроконтроллера 1
lt: ‘Поворот налево
high 4: low 5 ‘Движение вперед
if b4 < 100 then lt1: ‘Поворот налево максимален
b4 = b4 – 1 ‘Нет
lt1: ‘Да
pulsout 3, b4 ‘Поворот сервомотора
pause 18 ‘Задержка (55 Гц)
goto start ‘Чтение данных микроконтроллера 1
fw: ‘Прямо
high 4: low 5 ‘Движение прямо
pulsout 3, b4 ‘Поворот сервомотора
pause 18 ‘Задержка (55 Гц)
goto start ‘Чтение данных микроконтроллера 1
avoid:
low 4: high 5 ‘Движение назад
if b4 > 150 then vr ‘Проверка. Перемена направления направо?
if b4 <= 150 then vl ‘Проверка. Перемена направления налево?
vr: ‘Перемена направления вправо
b5 = b4 – 30 ‘Направление поворота
for b6 = 1 to 120 ‘Цикл задержки 2 с
pulsout 3, b5 ‘Поворот сервомотора
pause 18 ‘Задержка (55 Гц)
next b6 ‘Конец цикла
goto start ‘Чтение данных микроконтроллера 1
vl: ‘Перемена направления влево
b5 = b4 + 30 ‘Направление поворота
for b6 = 1 to 120 ‘Цикл задержки 2 с
pulsout 3, b5 ‘Поворот сервомотора
pause 18 ‘Задержка (55 Гц)
next b6 ‘Конец цикла
goto start
Фотография конструкции робота в сборе показана на рис. 8.18
Рис. 8.18. Вид спереди готовой конструкции
Поведение
Для нормального функционирования робота необходима достаточно низкая общая освещенность, на фоне которой выделяется один яркий источник света. Для моего робота потребовался столь низкий уровень общей освещенности, что мне пришлось изготовить из цветного пластика два небольших светофильтра, чтобы снизить поток света, попадающего на CdS фотоэлементы.
Робот-прототип демонстрирует следующее поведение. При равномерном освещении (нет отдельного яркого источника) робот движется по прямой или описывает круги, в зависимости от наличия ярких источников в предыдущие моменты времени. При слишком большой общей освещенности он откатывается назад. Если имеется источник средней интенсивности, то он «находит» его и движется прямо по направлению к этому источнику.
Программа может быть доработана для исследования более интересных и экзотических типов поведения. Перед тем как это делать, давайте посмотрим, как работает стандартная программа. Программа 1 микроконтроллера 1 первоначально опрашивает датчики и посылает информацию в микроконтроллер 2. В этой программе вы можете изменить чувствительность датчиков, чтобы подстроиться под имеющийся датчик. Для этого необходимо изменить строки:
if b0 <= 250 then skip ‘Достаточно темно?
If b1 >= 250 then slp ‘Да
skip: ‘Нет
Максимальное значение показаний датчика может быть равно 255 (полная темнота). Это значение можно увеличить, чтобы поднять средний уровень освещенности для «спячки».
Уровень освещенности, необходимый для включения режима избегания, можно изменить с помощью строк:
if bo > 25 then skip 2 ‘Слишком много света
if b1 < 25 then avoid ‘Да
skip2: ‘Нет
Увеличение значения, которое в данном случае равно 25, снизит уровень освещенности, при котором робот перейдет в режим избегания. В свою очередь уменьшение численного значения повысит интенсивность света для режима избегания. В большинстве случаев вы захотите уменьшить численное значение параметра. Однако я бы не советовал уменьшать его ниже 9, поскольку даже в режиме полного насыщения сопротивление CdS фотоэлементов никогда не падает до нуля. Моя проверка показала, что сопротивление при полном насыщении не падает ниже 5 единиц.