Надо совершенно четко понимать, что создание такой машинки почти ничем не отличается от сборки конструктора. Ничего принципиально сложного нет. Просто надо знать, что покупать.
Сердцем, или лучше сказать мозгом, всех проектов такого типа является микроконтроллер. Микроконтроллер - это что-то типа простенького процессора с памятью, куда записывается программа. Грубо говоря, у микроконтроллера есть несколько "информационных" входов, куда можно подавать напряжение от 0 до 5В, и несколько "информационных" выходов, куда уже сам микроконтроллер согласно записанной программе выдает напряжение 0 или 5В. Вот так вот выглядит типичный микроконтроллер:
Единственная проблема такого микроконтроллера в том, что нужно иметь специальное устройство - прошиватель, чтобы записывать программу в нее. Но существует очень много плат на которых уже есть и микроконтроллер и прошиватель. Нужно просто подсоединить ее через USB-кабель к компьютеру и записать нужную программу. Любопытному читателю можно порекомендовать сайт arduino.ru, где есть исчерпывающая информация про такие платы. Ардуино в мире микроконтроллеров - это что-то типо UNIXа в мире операционных систем: все открыто и все такое. Ардуино включает в себя как и платы с микроконтроллерами, так и язык программирования микроконтроллеров, очень похожий на Cи.
Для моего проекта на остановился на плате DFRduino Romeo:
В этой плате есть 3 принципиальные вещи:
1) Микроконтроллер.
2) USB-прошиватель программ для микроконтроллера.
3) Драйверы моторов - специальные выходы для питания моторов машинки. Тут необходимо сказать, что такие выходы действительно нужны. Микроконтроллер, конечно же, может давать напряжение 5В, и, казалось бы, этими 5В можно и питать моторы. Но нужно понимать, что это напряжение только "информационное", потому что выход микроконтроллера не предназначен для больших токов, необходимых для питания мотора. Поэтому на плате есть что-то типа транзистора, которому микроконтроллер лишь "сообщает" включить мотор или выключить.
Теперь нам нужна машинка. Подойдет любая. Но есть специальные машинки, предназначенные для таких роботопроектов. Они примечательны тем, что на них очень удобно все крепить, а антипримечательны тем, что медленно едут . Я купил вот эту:
Для того, чтобы наша машинка объезжала препятствия нам потребуется сонар. Сонар посылает ультразвуковую волну, которая отражается от препятствия и летит обратно. Зная скорость звука и время, через которое волна пришла обратно, можно вычислить расстояние до препятствия. Я купил ultrasonic module HC-SR04:
Этот сонар мерит расстояние до 5 метров, что вполне достаточно для наших целей.
Мы еще хотим, чтобы машинка "понимала" где больше, а где меньше света. Для этого можно использовать фоторезистор. Фоторезистор - это такой прибор, который меняет свое электрическое сопротивление в зависимости от интенсивности облучаемого света. Принцип работы фоторезистора довольно прост. В качестве проводника электричества берется полупроводник со специально подобранными параметрами, так чтобы видимый свет выбивал бы электроны в зону проводимости, облегчая им прохождение. Тем самым свет и уменьшает сопротивление полупроводника. Следует отметить, что фоторезисторы со своей работой справляются довольно хорошо. Малейшее изменение света сказывается на сопротивлении. Я купил в эти:
Теперь нам нужна крутящаяся влево-вправо "голова", на которую мы и прикрепим сонар и фоторезистор. Чтобы "видеть", что происходит не только впереди. Такая "голова" называется сервомотор. Это специальный моторчик, который может поворачиваться именно на тот угол, который мы ему укажем. Я купил Futaba S3003:
Примечательно, что все вышеописанные приборы очень хорошо умеют "разговаривать" с микроконтроллером. Ничего сложного в подсоединении нету. Некоторая тонкость возникает только в подсоединении фоторезисторов. Дело в том, что микроконтроллер способен измерять только напряжение от 0 до 5В, он не умеет измерять сопротивление. И чтобы измерить сопротивление фоторезистора (это и есть информация о падающем свете), нужно ее соединить последовательно с обычным резистором, как указано на этой схеме:
Теперь измеряя падение напряжения на фоторезисторе можно определить ее сопротивление, и тем самым интенсивность падающего света. Чтобы была более-менее адекватная информация об окружающем свете, я поместил на каждой стороне машинки по фоторезистору.
Существует еще одна маленькая проблема. Дело в том, что в природе не бывает двух абсолютно одинаковых фоторезисторов и они при одинаковой освещенности имеют немного разные сопротивления, поэтому их показания следует откалибровать программно.
Вот что получится, если все собрать вместе:
Итак мы имеем машинку, которая "знает" информацию об интенсивности падающего света с 4-х сторон, может мерить расстояние до препятствий и может крутить "головой", на котором установлены сонар и передний фоторезистор. Наша конструкторская работа закончена.
Дальше нужно включить свои таланты в программировании и сделать с все, что захотите. К примеру, в следующем видеоролике программа использует информацию только с переднего резистора, и машинка едет в сторону максимального света:
Мой дорогой друг Макс сделал аналогичную машинку. И, к примеру, в его ролике машинка едет куда-попало, объезжая препятствия: