Вместо предисловия.
В мае месяце попросил я у многоуважаемого yak-40 прошивку и исходники к его проекту "Робот пылесос на базе RV-2" http://roboforum.ru/forum88/topic4951-180.html
В результате я ими не воспользовался, хотя кое-какие идеи почерпнул. Но, чувствуя некоторую ответственность, выкладываю результаты своего труда.
Итак...
Имея за плечами некоторый опыт восстановления Roomba и Scooba 3xx, я думал, что неплохо знаю продукцию iRobot.
Как я ошибался! Знал бы я какое количество "гемороя" меня ждёт, когда покупал по дешёвке неисправную Scooba 230!
Но по-порядку.
Как-то, увидев объявление о продаже неисправной Scooba 230, я не особо раздумывая её приобрёл - ведь такой зверушки в моей коллекции ещё не водилось.
Если бы сначала почитал форумы, я бы не поступил столь опрометчиво. Ведь оказалось, что Scooba 230 - аппарат АБСОЛЮТНО НЕРЕМОНТОПРИГОДНЫЙ!
Да, их не ремонтируют, их просто заменяют по гарантии или выбрасывают! Это, кстати, объясняет и столь высокую цену на них.
Но мне терять было уже нечего, поэтому решено было сделать из ЭТОГО хоть что-то полезное.
У купленной мной Скубы оказалось две проблемы. Первая - она не включалась и вообще не подавала никаких признаков жизни.
Вторая - та самая, из-за которой большинство 230-х Скуб сдаётся в сервис-центр - дырявый "пузырь" для чистой воды.
Здесь будет история про восстановление контроллера. Ремонт пузыря - это отдельная история.
Попытка отремонтировать контроллер окончилась полным провалом (см. фото 1-4) - оказалось, что контроллер залит каким-то весьма твёрдым компаундом.
С трудом отковыряв его, я получил какой-никакой доступ к плате, но этого было мало.
Попытка снять плату закончилась тем, что почти все детали с неё оторвались и остались в этом жутком компаунде.
Браво, iRobot! Такого я ещё не видел.
Самое смешное заключается в том, что при абсолютно одноразовой конструкции, все датчики и механизмы к плате подключаются разъёмами!
Таким образом я получил то, о чем уже давно подумывал - готовую платформу для создания собственного робота!
Такие вещи стоят довольно ощутимых денег, а тут всё что нужно (корпус, колёса с моторами/редукторами и куча датчиков) и почти даром.
Поэтому было решено делать собственный контроллер и писать для него софт, такой, какой душа пожелает.
Для начала с помощью всяческого инструмента и такой-то матери был удален компаунд из корпуса (см.фото 5)- стало возможным оценить пространство для размещения контроллера.
Далее были выяснены назначения всех разъёмов - см.фото 6 (не буду углубляться в подробности, но это было не просто).
Далее была проведена ревизия коробок с радиохламом и выбран кандидат на "мозг" - им оказался контроллер Atmel ATMega8. Забегая вперёд скажу, что надо было брать ATMega16, на неё можно было бы повесить все датчики и не мучаться с катастрофической нехваткой ног.
Схема в процессе работы несколько раз менялась:
рис.7 - схема для работы с Cliff-сенсорами, работа с Wall- и Virtual_Wall-сенсорами не предполагается;
рис.8 - схема для работы с Wall- и Virtual_Wall-сенсорами, работа с Cliff-сенсорами не предполагается (к тому времени в процессе экспериментов я их "удачно" подпалил);
рис.9 - финальная схема для работы с Virtual_Wall-сенсором и Serial-BlueTooth-адаптером, работа с Wall- и Cliff-сенсорами не предполагается.
Рис.10 - расчёты всяких делителей и прочего для всех схем.
Кроме того, в процессе экспериментов перестали работать родной динамик (заменён на внешний) и светодиод "Ok" (вместо него я использую зелёный светодиод "Power").
Контроллер был собран на макетной плате (см. фото 11). Предвосхищая вопросы - да, я не считаю нужным делать нормальную печатную плату для единичного изделия.
Установлен в корпус вместе с BlueTooth-адаптером (см. фото 12) и залит термоклеем (см. фото 13).
В качестве среды для написания управляющей программы знакомый по предыдущим проектам ассемблер очень пугал, поэтому был освоен BascomAVR (уже польза!) - очень приятная оказалась среда разработки.
Т.к. описываемый проект - это "живой" полигон для тренировки, а не законченный продукт, то программа постоянно переделывается. Ссылки на текущие исходник и прошивку - https://yadi.sk/d/35_ZunswZY8Pd
Что реализовано в текущей версии:
1. Зарядка/подзарядка аккумулятора (можно использовать литий).
Т.к. родное зарядное устройство у меня не заработало (то ли битое, то ли что-то ему нужно для нормальной работы), то используется блок питания 9в/0.5А от какого-то модема.
При подключённом заряднике режим работы индицируется красным и зелёным светодиодами "Power":
красный горит, зелёный не горит - идёт зарядка, напряжение на аккумуляторе менее 6В,
красный мигает, зелёный не горит - идёт зарядка, напряжение от 6 до 8 В,
зелёный горит, красный не горит - идёт зарядка, если напряжение на аккумуляторе растёт от 8 до 8,4В или зарядник отключён, если напряжение на аккумуляторе дошло до 8,4В и теперь может падать до 8В.
2. Режим уборки.
Чтобы включить режим уборки, нужно отключить зарядное устройство, если оно подключено (контроль подключённого зарядника), налить в бак чистой воды (контроль наличия воды) и кратковременно нажать кнопку "Power".
Если аккумулятор не разряжен, подсветится зелёным кнопка "Clean". В течении 2 мин. кнопка будет светиться, ожидая нажатия. Если нажатия не будет, робот отключится.
Если нажать на светящуюся кнопку "Clean", робот издаст серию звуков и начнёт 20-минутный цикл уборки, подсветка кнопки "Clean" при этом будет мигать.
В текущей версии программы реализованы два типа движения - по левой или правой псевдоспирали и псевдохаотическое передвижение.
С движения по спирали робот начинает цикл уборки и переходит к псевдослучайным перемещениям при столкновении с препятствием. Впоследствии, если в течение 20 сек. не было столкновения с препятствием, робот снова переходит в движениям по спирали до очередного столкновения. И т.д.
Цикл уборки может заканчиваться по нажатию кнопки "Clean", окончанию чистой воды в баке, разрядке аккумулятора, по прошествии 20 мин. с начала уборки или если робот застрял и не смог самостоятельно выбраться.
3. Режим антизастревания.
Если в течение 4-х минут не было срабатывания датчиков бампера или датчики бампера постоянно находятся в сработавшем состоянии, робот "считает". что застрял.
В этом случае выключаются моторы помпы и насоса и робот пытается выбраться, "раскачиваясь" вперёд-назад/назад-вперёд и пытаясь развернуться по псевдослучайному
алгоритму. После 10 попыток, если ситуация с датчиками бампера не меняется, робот "считает". что застрял окончательно.
В этом случае выключаются все моторы, мигает красный светодиод "Error" и 100 раз воспроизводится короткий звуковой сигнал.
Если в процессе этого действа будет нажата кнопка "Clean", робот продолжит цикл уборки (т.е. считает, что человек его освободил на дал команду на продолжение).
Если кнопка нажата не будет, робот отключается с зажжёным индикатором "Error".
4. Работа с виртуальной стеной Scooba.
Тут всё, как обычно - при приближении к стене робот отворачивает от её ИК-луча.
5. Работа через BlueTooth-адаптер.
Посредством BlueTooth-адаптера робот может общаться с хост-системой через эмуляцию стандартного COM-порта с параметрами 2400,8,N,1.
"Общение" происходит путём передачи роботу символов команд и приёмом со стороны робота различных сообщений.
В текущей версии программы поддерживаются следующие команды:
? - помощь по командам,
s - вывод статусной информации: текущий режим работы робота, состояние датчиков аккумулятора, бака чистой воды и кнопок, а также оставшееся время уборки.
w - включение питания, равносильно нажатию кнопки "Power". Не доступно, если подключён зарядник.
с - включение режима уборки, равносильно нажатию кнопки "Clean". Не доступно, если подключён зарядник или не включено питание.
Далее следует группа команд, управляющая движением робота и включением/выключением исполнительных механизмов. Эти команды доступны только если не подключён зарядник, включено питание, но не активирован режим уборки).
Курсорные клавиши - движение вперёд/назад, повороты вправо/влево. Срабатывания датчиков бампера не учитываются.
Пробел - стоп/продолжить движение.
p - включить/выключить мотор помпы,
v - включить/выключить мотор насоса.
Видео:
http://rutube.ru/video/4f0c9f3d02458869866e8c05848f8fe1/
Спасибо за внимание.