Создаем робота-андроида своими руками - Джон Ловин
Шрифт:
Интервал:
Закладка:
Рис. 6.23. Схема чтения компаратора
Считывание данных резистивных датчиков
Микроконтроллер может непосредственно считывать данные резистивных датчиков в диапазоне от 5 до 50 кОм. К микроконтроллеру может быть подсоединен резистивный датчик любого типа: фоторезистор (элемент на основе сульфида кадмия CdS), термистор с положительным или отрицательным ТК, датчик наличия ядовитого газа, датчик изгиба или влажности. Микроконтроллер измеряет сопротивления по времени разряда конденсатора в RC цепочке (см. рис. 6.24).
Рис. 6.24. Схема команды РОТ
Командой для чтения данных резистивного датчика является:
Pot pin, scale, var
Pot представляет собой имя команды, а pin – номер шины, к которой подключен датчик. Переменная scale используется для задания времени RC цепочки. При большом времени RC цепочки значение scale должно быть низким, а для малого времени RC цепочки scale должно быть установлено на максимальное значение, составляющее 225. Если значение scale установлено правильно, то значение переменной var будет близким к нулю при минимальном сопротивлении и достигать 225 – при максимальном.
Значение переменной scale может быть определено экспериментально. Для того чтобы найти подходящее значение scale, необходимо определить максимальное рабочее сопротивление датчика и считать показания var при установке параметра scale равным 225. При этом условии значение переменной var будет представлять собой хорошее приближение значения scale.
Основная схема изображена на рис. 6.25. Для имитации резистивного датчика в схему включен переменный резистор 50 кОм. При изменении сопротивления переменного резистора в зависимости от значения переменной В0 будет загораться один из двух светодиодов. Если значение сопротивления превысит 125 – загорится светодиод 1, в противном случае будет гореть светодиод 2.
Рис. 6.25. Схема команды РОТ
Программа на PICBASIC имеет следующий вид:
‘Компилятор PICBASIC ** считывание данных резистивных датчиков **
‘Тест программа для фотосопротивлений
‘Установка
start:
pot 2,255,b0 ‘Считать показания датчика на шине RB2
if b0 > 125 then l1 ‘Если значение больше 100, включить светодиод 1
if b0 <= 125 then l2 ‘Если значение меньше 100, включить светодиод 2
l1: ‘Процедура включения светодиода 1
high 0 ‘Включить светодиод 1
low 1 ‘Выключить светодиод 2
goto start ‘Повторение
l2: Процедура включения светодиода 2
high 1 ‘Включить светодиод 2
low 0 ‘Выключить светодиод 1
goto start ‘Повторение
Программу для компилятора PICBASIC Pro можно составить следующим образом:
‘Компилятор PICBASIC Pro ** считывание данных резистивных датчиков **
‘Тест программа для фотосопротивлений
‘Установка
output portb.0 ‘Установка шины RB0 как выходной
output portb.1 ‘Установка шины RB1 как выходной
b0 var byte
start:
portb.2,255,b0 ‘Считать показания датчика на шине RB2
if b0 > 125 then l1 ‘Если значение больше 100, включить светодиод 1
if b0 <= 125 then l2 ‘Если значение меньше 100, включить светодиод 2
l1: ‘Процедура включения светодиода 1
high 0 ‘Включить светодиод 1
low 1 ‘Выключить светодиод 2
goto start ‘Повторение
l2: Процедура включения светодиода 2
high 1 ‘Включить светодиод 2
low 0 ‘Выключить светодиод 1
goto start ‘Повторение
Можно сделать демонстрацию более интересной, заменив переменное сопротивление фоторезистором на основе CdS. При правильном подборе резистора, темновое сопротивление которого составляет от 50 до 100 кОм и сопротивление светового насыщения порядка 10 кОм или ниже, при закрывании резистора или в темноте будет зажигаться светодиод 1. На ярком свете будет гореть светодиод 2.
Возможен последовательный вывод численного значения переменной pot на ЖК дисплей, соединенный с микроконтроллером через последовательный порт, или в ПК через последовательный порт RS232. Для организации последовательного порта необходима команда:
Serout Pin, Mode, Var
Сейчас мы не будем рассматривать соединение через последовательный порт; важно то, что вы получили об этом представление.
Сервомоторы
Сервомоторы представляют собой двигатели постоянного тока с редуктором, снабженные системой обратной связи, которая позволяет позиционировать положение ротора сервомотора с высокой точностью. Вал большинства сервомоторов для любительского конструирования может быть позиционирован в интервале поворота не менее 90° (±45°). Сервомотор имеет три вывода. Два вывода подключаются к источнику питания, как правило, от 4,5 до 6 В и к земляному проводу. По третьему проводу подается сигнал обратной связи, позиционирующий ротор мотора. Сигнал позиционирования представляет собой цепочку импульсов переменной длительности. Обычно длительность импульсов варьирует в интервале от 1 до 2 мс. Своей длительностью импульсы управляют положением вала сервомотора.
Команда 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 С° уже жарко. Если рассмотреть этот пример шире, то люди, населяющие Аляску, будут иметь иной интервал температур для «теплых дней» в сравнении с жителями Нью-Йорка, и оба эти значения будут отличаться от соответствующих значений для жителей Флориды. При этом еще не нужно забывать о временах года. Теплый зимний день отличается по температуре от летнего. Все сводится к тому, что основой классификации (например, понятия «теплый день») может служить интервал температур, определенных мнением группы людей. Дальнейшая классификация может быть проведена сравнением мнений различных групп людей.
Для любой температуры мы можем найти группу, в температурный интервал которой она попадает. В некоторых случаях температура может попасть в две пересекающиеся группы. Четкая принадлежность к группе может быть определена по отклонению значения от среднего по группе.