Создаем робота-андроида своими руками
Шрифт:
Возможен последовательный вывод численного значения переменной pot на ЖК дисплей, соединенный с микроконтроллером через последовательный порт, или в ПК через последовательный порт RS232. Для организации последовательного порта необходима команда:
Serout Pin, Mode, Var
Сейчас мы не будем рассматривать соединение через последовательный порт; важно то, что вы получили об этом представление.
Сервомоторы
Сервомоторы представляют собой двигатели постоянного тока с редуктором,
Команда pulsout генерирует на заданной шине импульс заданной длительности с шагом 10 мкс. Таким образом, команда pulseout 1, 150 будет выдавать импульсы длиной 1,5 мс на шине 1. Импульс длиной 1,5 мс повернет вал сервомотора в среднее положение.
Программа качания сервомотора
Демонстрационная программа будет качать вал сервомотора из левого положения в правое и обратно аналогично качанию параболической антенны радара. Схема устройства приведена на рис. 6.26.
Рис. 6.26. Схема включения сервомотора
Ниже приведена программа для компилятора PICBASIC:
‘Программа качания сервомотора
‘Компилятор PICBASIC
‘Программа осуществляет качание из левого положения в правое и обратно
b0 = 100 ‘Инициализация левого положения
sweep: ‘Процедура прямого прохода
pulsout 0,b0 ‘Посылка импульса в сервомотор
pause 18 ‘Ожидание 18 мс (от 50 до 60 Гц)
b0 = b0 + 1 ‘Увеличение длины импульса
if b0 > 200 then sweepback ‘Конец прямого хода?
goto sweep ‘Нет, продолжение прямого прохода
sweepback: ‘Процедура обратного прохода
b0 = b0 – 1 ‘Уменьшение длины импульса
pulsout 0,b0 ‘Посылка импульса в сервомотор
pause 18 ‘Ожидание 18 мс (от 50 до 60 Гц)
if b0 < 100 then sweep ‘Конец обратного хода?
goto sweepback ‘Нет
Программа для компилятора PICBASIC Pro:
‘Программа качания сервомотора
‘Компилятор PICBASIC Pro
‘Программа осуществляет качание из левого положения в правое и обратно
b0 var byte
b0 = 100 ‘Инициализация левого положения
sweep: ‘Процедура прямого прохода
pulsout portb.0,b0 ‘Посылка импульса в сервомотор
pause 18 ‘Ожидание 18 мс (от 50 до 60 Гц)
b0 = b0 + 1 ‘Увеличение длины импульса
if b0 > 200 then sweepback ‘Конец прямого хода?
goto sweep ‘Нет, продолжение прямого прохода
sweepback: ‘Процедура
b0 = b0 – 1 ‘Уменьшение длины импульса
pulsout portb.0,b0 ‘Посылка импульса в сервомотор
pause 18 ‘Ожидание 18 мс (от 50 до 60 Гц)
if b0 < 100 then sweep ‘Конец обратного хода?
goto sweepback ‘Нет
Нечеткая логика и нейронные датчики
При интерпретации данных сенсорных датчиков можно воспользоваться некоторыми интересными возможностями. С помощью микроконтроллера мы можем имитировать работу нейронных сетей и/или устройств с нечеткой логикой.
Нечеткая логика
Первые работы по нечеткой логике были опубликованы в 1965 году профессором Калифорнийского университета в Беркли Лотфи Заде. С самого начала принципы нечеткой логики как усиленно рекламировались, так и подвергались критике.
В сущности нечеткая логика пытается имитировать подход человека к определению групп и классов явлений. Определение «нечеткости» можно пояснить некоторыми примерами. Например, на основе какого критерия теплый солнечный день может быть определен, не как «теплый», но как жаркий и кем? Основанием, на котором кто-то определяет теплый день как жаркий, может служить персональное ощущение тепла, которое в свою очередь зависит от его или ее окружения (см. рис. 6.27).
Рис. 6.27. Изменение температуры от теплой до жаркой: плавно или скачком
Не существует универсального термометра, который «утверждает», что 26,9 С° это тепло, а 27 С° уже жарко. Если рассмотреть этот пример шире, то люди, населяющие Аляску, будут иметь иной интервал температур для «теплых дней» в сравнении с жителями Нью-Йорка, и оба эти значения будут отличаться от соответствующих значений для жителей Флориды. При этом еще не нужно забывать о временах года. Теплый зимний день отличается по температуре от летнего. Все сводится к тому, что основой классификации (например, понятия «теплый день») может служить интервал температур, определенных мнением группы людей. Дальнейшая классификация может быть проведена сравнением мнений различных групп людей.
Для любой температуры мы можем найти группу, в температурный интервал которой она попадает. В некоторых случаях температура может попасть в две пересекающиеся группы. Четкая принадлежность к группе может быть определена по отклонению значения от среднего по группе.
Идея групповой или интервальной классификации может быть расширена на многие другие вещи, такие как ориентирование, скорость или рост. Давайте используем понятие роста для еще одного примера. Если мы построим график роста 1000 людей, его форма будет напоминать первую кривую на рис. 6.28. Мы можем использовать этот график для формирования групп людей маленького, среднего и высокого роста. Если мы применим жесткое решающее правило считать всех ниже 170 см людьми низкого роста и всех выше 180 людьми высокого роста, то график примет форму 2 на рис. 6.28. Такое правило считает рост 178 см «средним», хотя в действительности человек такого роста находится ближе к группе «высоких» (от 180 см и выше).