Ну вот, вроде уже чтото получается. Извиняюсь сразу за не очень красивый внешний вид, но эта машина скорее эксперементальная, поэтому делал из чего было, тем более, где я живу большая проблема достать даже КТ315 транзистор, про микросхемы вобще молчу.
Схема трехколесная, с одним задним опорным и двумя ведущими колесами, редукторы самодельные. "Голова" поворачивается на самодельном сервоприводе, в качестве датчиков положения головы используются обычные штырьки, которых касается пружинка при повороте. Т.е. 3 положения - ЦЕНТР, ВЛЕВО 45 градусов и ВПРАВО 45 градусов. На "голове" установлен датчик видимого света, и 2 двухцветных светодиода. Также на роботе установлены "ходовые огни", впереди 2 синих и 2 красных сзади, а также "проблесковый маячок" - Большой самомигающий многоцветный светодиод. Мозги PIC16F877A. ИК датчики на ТСОПах и ИК диодах (пока не доделал). Датчик "пола" - ИК светодиод и ИК транзистор повешенный на вход АЦП. Н-мосты транзисторные.
Работает это все таким образом - После включения центруется "голова", далее робот начинает свободное движение по комнате. Причем иногда случайно меняя направление. Если в комнате достаточно темно, то включаются "ходовые огни". Если в "глаза" ему светить фонариком, то робот начинает уходить от яркого света (как бы психовать), если это повторяется несколько раз, то светодиоды-глаза зажигаются красным светом, робот становиться как бы злой и находит самый темный угол и прячеться туда. Через некоторое время красные глаза выключаются и робот возвращается к свободному движению. Если робот теряет контакт с полом (взяли его в руки), то он дергает туда-сюда моторами и включается "проблесковый маячок", как только контакт с полом восстановлен робот переходит опять к свободному движению. Если робот долго (около 20 сек) не натыкается ни на одну помеху и его не трогают то светодиоды глаза зажигаются зеленым светом (как бы добрый) и робот начинает искать самое яркое место. Поиск светлых (темных) мест реализуется так: измеряется уровень света перед собой, далее "Голова" поворачивается направо, измеряется еще раз и сравнивается, если справа ярче то робот поворачивается примерно на 10 градусов направо и делается повторное измерение, если же справа сигнал слабее, то поворачивается голова налево измеряется сигнал и если он сильнее то ходовая поворачивается на 10 градусов налево. И т.д. Пока не будет найден максимум (ну или минимум) перед собой. Когда он найден голова устанавливается в центр и начинается движение вперед около 3 секунд, далее стоп и повторно все измеряется, этот цикл повторяется 7 раз и затем считается что поиск светлых мест завершен. При столкновении с препятствием происходит стандартный маневр - чуть назад, поворот, вперед. После маневра сразу же начинается измерение света (если это требует текущее состояние робота).
Сейчас работаю над ИК сенсорами, чтобы еще умнее объезжать препятствия, думаю еще добавить датчик звука. Но пока что есть, то есть.
Кстати очень много мучений ушло чтобы колеса вращались с более менее постоянной скоростью. Робот все время не хотел ездить прямо, его вечно тянуло в сторону.