roboforum.ru

Технический форум по робототехнике.

Восстановление iRobot Scooba 230 - самодельный контроллер

Восстановление iRobot Scooba 230 - самодельный контроллер

Сообщение Serge_ISA » 21 авг 2014, 22:41

Вместо предисловия.
В мае месяце попросил я у многоуважаемого yak-40 прошивку и исходники к его проекту "Робот пылесос на базе RV-2" http://roboforum.ru/forum88/topic4951-180.html
В результате я ими не воспользовался, хотя кое-какие идеи почерпнул. Но, чувствуя некоторую ответственность, выкладываю результаты своего труда.

Итак...
Имея за плечами некоторый опыт восстановления Roomba и Scooba 3xx, я думал, что неплохо знаю продукцию iRobot.
Как я ошибался! Знал бы я какое количество "гемороя" меня ждёт, когда покупал по дешёвке неисправную Scooba 230!
Но по-порядку.
Как-то, увидев объявление о продаже неисправной Scooba 230, я не особо раздумывая её приобрёл - ведь такой зверушки в моей коллекции ещё не водилось.
Если бы сначала почитал форумы, я бы не поступил столь опрометчиво. Ведь оказалось, что Scooba 230 - аппарат АБСОЛЮТНО НЕРЕМОНТОПРИГОДНЫЙ!
Да, их не ремонтируют, их просто заменяют по гарантии или выбрасывают! Это, кстати, объясняет и столь высокую цену на них.

Но мне терять было уже нечего, поэтому решено было сделать из ЭТОГО хоть что-то полезное.
У купленной мной Скубы оказалось две проблемы. Первая - она не включалась и вообще не подавала никаких признаков жизни.
Вторая - та самая, из-за которой большинство 230-х Скуб сдаётся в сервис-центр - дырявый "пузырь" для чистой воды.
Здесь будет история про восстановление контроллера. Ремонт пузыря - это отдельная история.

Попытка отремонтировать контроллер окончилась полным провалом (см. фото 1-4) - оказалось, что контроллер залит каким-то весьма твёрдым компаундом.
С трудом отковыряв его, я получил какой-никакой доступ к плате, но этого было мало.
Попытка снять плату закончилась тем, что почти все детали с неё оторвались и остались в этом жутком компаунде. :eek:
Браво, iRobot! Такого я ещё не видел. :shock:
Изображение
Изображение
Изображение
Изображение
Самое смешное заключается в том, что при абсолютно одноразовой конструкции, все датчики и механизмы к плате подключаются разъёмами!

Таким образом я получил то, о чем уже давно подумывал - готовую платформу для создания собственного робота!
Такие вещи стоят довольно ощутимых денег, а тут всё что нужно (корпус, колёса с моторами/редукторами и куча датчиков) и почти даром.
Поэтому было решено делать собственный контроллер и писать для него софт, такой, какой душа пожелает.

Для начала с помощью всяческого инструмента и такой-то матери был удален компаунд из корпуса (см.фото 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/

Спасибо за внимание. ;)
Serge_ISA
 
Сообщения: 54
Зарегистрирован: 21 май 2014, 11:43
Откуда: SPb
прог. языки: Bascom AVR

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение Madf » 22 авг 2014, 11:09

работа проделана конечно неплохая, но алгоритм передвижения по площади - ужасен
надо было через БТ мозг прикручивать и в реалтайме им управлять)
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение Serge_ISA » 03 сен 2014, 17:46

Madf писал(а):работа проделана конечно неплохая, но алгоритм передвижения по площади - ужасен
надо было через БТ мозг прикручивать и в реалтайме им управлять)


Не судите строго - первый мой большой проект вообще, и на Bascom-е в частности. :oops: Понятно, что там пилить и пилить...

К тому-же IMHO не настолько он и ужасен - при обалденной простоте реализации площадь худо-бедно покрывает и нигде не застревает. А что ещё надо? К тому-же тут надо иметь ввиду, что 230я скуба "работает телом" , щётки у неё неподвижны, и, по идее, чем больше резких переменных нагрузок ляжет на щётки, тем лучше она должна оттирать полы. Если удастся восстановить пузырь, эти гипотезы можно будет проверить.
Serge_ISA
 
Сообщения: 54
Зарегистрирован: 21 май 2014, 11:43
Откуда: SPb
прог. языки: Bascom AVR

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение Serge_ISA » 03 сен 2014, 21:48

Изменения/добавления в текущей версии (ловля багов и оптимизация подразумеваются сами собой):
6. Работа со всеми ИК-аксессуарами Scooba_2xx-3xx/Roomba_5xx-7xx, которые я смог наскрести.
Поддерживаются:
- Scooba Virtual Wall (а т.к. параметры сигнала Скубовской стенки сильно "гуляют" в зависимости от всего, то заодно поддерживается куча всего, передающего ИК-сигнал, близкий к меандру с периодом от 1.52 до 4,8 мсек. В частности, работает со стенкой от китайского пылесоса),
- Roomba Auto Virtual Wall,
- Roomba IR Remote (ИК-пульт, короче говоря),
- Roomba Compact Base (пока только декодируются её сигналы, ибо что с нею делать, непонятно. Возможно потом прикола ради попробую написать процедуру захода на неё).

Найденные в процессе экспериментов параметры сигналов:
Изображение

Ссылки на текущие исходник и прошивку:
https://yadi.sk/d/35_ZunswZY8Pd

Видео (Roomba-пульт):
http://rutube.ru/video/43bb2af5173ca9b5eba43becdf40d79f/

Видео (Roomba- и Scooba-стенки):
http://rutube.ru/video/16860103ef5c64142ca80b14a029f8e2/

Видео:
http://rutube.ru/video/ad005422c3a9925a1d6eaa3c80fe5680/
Serge_ISA
 
Сообщения: 54
Зарегистрирован: 21 май 2014, 11:43
Откуда: SPb
прог. языки: Bascom AVR

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение ruslanpopov » 27 окт 2014, 16:15

Серьёзная работа проведена. Уважаю.
А что там с пузырём? Я просто не в теме.
Собранный Mendel90v1 (акрил 6мм, валы 12мм, RAMPS 1.4 + Marlin) https://vk.com/id19523249
Аватара пользователя
ruslanpopov
 
Сообщения: 152
Зарегистрирован: 24 сен 2012, 11:45
Откуда: Снегири, МО
Skype: rpopov
прог. языки: Python, C
ФИО: Руслан Попов

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение Serge_ISA » 27 окт 2014, 23:42

ruslanpopov писал(а):Серьёзная работа проведена. Уважаю.
А что там с пузырём? Я просто не в теме.


Спасибо.

С пузырём там беда - в некоторых партиях через несколько месяцев эксплуатации материал пузыря растрескивается и получается множество дыр. Точно подтверждена информация о проблемной партии, произведённой в марте 2012г. (мой случай). Так-же если Скуба в процессе работы засосёт что-нибудь острое, пузырь может быть повреждён. А т.к. конструкция у этого робота одноразовая, то дефектные гарантийные роботы тупо меняют на новые, а негарантийные ... :-o

Добавлено спустя 2 минуты 27 секунд:
Re: Восстановление iRobot Scooba 230 - самодельный контроллер
Продолжаем разговор... :)

Теперь дошла очередь и до нового пузыря.

Моя Скуба относится как раз к злополучной серии, произведённой в марте 2012 года. Пузыри, установленные
в эту серию, через несколько месяцев эксплуатации трескаются во многих местах. Технологии замены дырявых пузырей на 230-й Скубе не существует, в сервис-центрах гарантийные Скубы меняют на новые.
Так что ниже написанное можно считать know-how.

Итак, для начала через Fill-порт был грубо выдран родной пузырь. Вот его плачевное состояние:
Изображение

Далее начались поиски подходящего "донорского" пузыря. По всем параметрам должна была подойти ёмкость из состава систем хранения донорской крови, типа такой:
Изображение
Но найти такую оказалось невозможно - в аптеках и магазинах медоборудования их не продают.

Но в одном из магазинов медоборудования была найдена такая вот штука по цене аж 26 руб.:
Изображение

Изображение

Изображение

Там-же была куплена система для переливания крови, трубочки из её состава очень пригодились:
Изображение


Подготовка нового пузыря
-----------------------------

Первым делом от пузыря были отрезаны все лишние "хвостики" и "крылышки".
Далее была подобрана трубка, по диаметру чуть меньше, чем горлышко Fill-порта.
Изображение

От неё отрезан кусок, из которого было сделано новое заливное "горло":
Изображение

Широкая трубка вырезана из пузыря, новое горлышко вклеено в пузырь суперклеем:
Изображение

Сливная трубка пузыря укорочена почти "в ноль":
Изображение

Удалён обратный клапан (в оригинальном девайсе он препятствует вытеканию содержимого):
Изображение
Это было проделано через новую широкую горловину при помощи длинной иглы и тонкого пинцета. Тут главное не повредить сам пузырь.


Переходим к "тушке" Скубы
-------------------------------

Аккуратно удалён штуцер слива из бака:
Изображение

По диаметру тонкой трубки (она как раз входит внутрь штуцера) просверленно отверстие - насквозь внутрь скубовского бака. В отверстие пропущена трубка, второй её конец пропущен через Fill-порт.
Изображение



Трубка, пропущенная в бак Скубы:
Изображение

Соединительная "муфточка" на конце трубки. Она помогла соединиться с более широкой сливной трубой пузыря:
Изображение

Соединение трубок получилось очень плотным, но для надёжности залито ещё и суперклеем:
Изображение

Далее пузырь был сложен "гармошкой" и просунут через Fill-порт в бак. Сливная трубка вытянута, насколько можно. Новая "заливная горловина" заняла своё место и для герметичности опять-же залита суперклеем:
Изображение

Сливная трубка обрезана с отступом в 1,5 см, чтобы можно было надеть на неё штуцер:
Изображение

Штуцер надет на трубку (и тут суперклей):
Изображение

Штуцер вставлен на клею на своё место:
Изображение



Нижняя крышка Скубы несёт на себе "задние" сопла для разбрызгивания воды. В своё время в процессе восстановления контроллера нижняя крышка была снята (оторвана), а подающая трубка аккуратно перерезана. Для восстановления этой трубки от толстой иглы из системы перелива крови был отрезан кусок примерно в 7мм:
Изображение

Отрезанный кусок иглы вставлен в отверстие трубки на крышке Скубы:
Изображение

При вклейке крышки ответная часть вставлена в отверстие трубки на корпусе Скубы и соединение залито клеем и замазано герметиком:
Изображение

Нижняя крышка Скубы приклеена к корпусу с помощью силиконового автомобильного герметика, который заполнил все щели:
Изображение

Изображение

Изображение

Изображение



Загерметизированное место соединения трубки, подающей воду к задним соплам:
Изображение

Отверстие для разъёма программирования контроллера заклеено скотчем:
Изображение



Теперь о недостатке такого метода восстановления пузыря
----------------------------------------------------------------------------

При сверлении отверстия через подающий штуцер в бак, повреждается датчик CTE (Clear Tank Empty - Бак чистой воды пуст). А даже если бы он не повреждался, трубка от нового пузыря, пропущенная через просверленное отверстие, не позволяет контактировать датчику с чистой водой из пузыря. Поэтому мне в моём самодельном контроллере пришлось отказаться от работы с этим датчиком, а освободившийся вход использовать для контроля температуры аккумулятора.

В случае восстановления пузыря на Скубе с родным контроллером, придётся делать блокировку для датчика CTE, иначе Скуба откажется работать.

Для блокировки датчика CTE необходимо срезать небольшой кусок пластика с нижней крышки и аккуратно удалить
компаунд с угла платы для доступа к ножкам разъёма этого датчика:
Изображение

На крайние ножки разъёма припаять резистор сопротивлением 1-10 кОм, после чего плату загерметизировать герметиком или эпоксидным "пластелином":
Изображение



Добавлено спустя 10 минут 35 секунд:
Re: Восстановление iRobot Scooba 230 - самодельный контроллер
Т.к. после восстановления "пузыря" перестал работать датчик CTE (Clear Tank Empty - Бак чистой воды пуст), то мне в моём самодельном контроллере пришлось отказаться от работы с этим датчиком, а освободившийся вход теперь используется для контроля температуры аккумулятора во время зарядки.

Изменённая схема:
Изображение

После пробных запусков с новым пузырём, вылезло много новых ньюансов.
Не с пузырём, с ним-то как раз пока всё нормально - сдувается-надувается, вода сливается, утечек нет. А вот программу контроллера пришлось "пилить" дальше.
Во-первых, без датчика сте мне показалось бессмысленно работать по времени, логичнее работать до разряда батарей (или до выключения пользователем).
Во-вторых, батарея у меня оказалась поддохшая, хватает на 35 мин. работы.
В-третьих, скорость движения была задрана - плохо прижималась к полу и плохо собирала грязную воду.
В-четвёртых, оказалось, что вся чистая вода выливается примерно за 10-12 мин. потом водяная помпа работает впустую.

Поэтому, исходя из вышесказанного, изменён алгоритм работы водяной помпы и вакуумного насоса - первые 12 мин. после запуска ездит быстро с работающими помпой и насосом. При маневрировании помпа временно отключается. После 12 мин. работы робот отключает помпу, в 1.5-2 раза снижает скорость движения и ездит с работающим насосом до разряда батареи.

Ссылки на текущие исходник и прошивку - https://yadi.sk/d/35_ZunswZY8Pd

Видео с результатом работы восстановленной Скубы:
https://yadi.sk/i/kK_K9v-ecPnBj
Serge_ISA
 
Сообщения: 54
Зарегистрирован: 21 май 2014, 11:43
Откуда: SPb
прог. языки: Bascom AVR

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение Serge_ISA » 05 ноя 2014, 16:08

По логике работы 230-й Скубы, для достижения хороших результатов она должна активно "двигать телом", чтобы работали её неподвижные щётки. А что мы видим на практике? Прямолинейные движения со случайными поворотами и спирали. И всё! Но если присмотреться, то в самом начале уборки оригинальная Скуба делает вот такой финт, который больше не повторяет - https://yadi.sk/i/wdZhnZnWcVpHM

Очень понравилось мне это "виляние задом", так что теперь реализован новый "примитив" движения.
Видео раз - https://yadi.sk/i/38sSnq2ecVpHb
Видео два - https://yadi.sk/i/3HA6uYzYcVpHV

В текущей версии алгоритм движения таков:
- если с момента срабатывания бампера прошло ~ от 0 до 4 сек., двигаемся прямолинейно, помпа работает;
- на 4-й сек. если ещё есть вода, отключаем помпу, разворот на 180 град. и едем "виляя задом" по только что намоченному, и так до 14й сек.;
- на 14й сек. поворот случайно направо или налево на 90град., включили помпу, и вперёд прямолинейно до 20й сек.;
- с 20й сек. начинаем спираль.
В любой момент при срабатывании бампера - манёвр уклонения на случайный угол. Для более экономного расхода воды помпа работает только при прямолинейном движении (в т.ч. и в составе "спиралей").

Субъективно мыть пол Скуба стала лучше. Для объективности грядёт сравнение с "оригинальной" Скубой.
Serge_ISA
 
Сообщения: 54
Зарегистрирован: 21 май 2014, 11:43
Откуда: SPb
прог. языки: Bascom AVR

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение Kulverstukas » 05 ноя 2014, 17:43

Как же много продумано, вы молодец! Я вот пока до тележки только дошел. Прочитав ваши описания понимаю что ситуация поставившая вас в тупик вам же и помогла (все на борту готовое). Думаю не проще ли вам сделать алгоритм движения змейкой зиг-загом. сейчас именно это пишу для своей тележки.
кто со мной тот герой, кто без меня, тот... нереально крут потому что сам во всем разбирается.
Аватара пользователя
Kulverstukas
 
Сообщения: 53
Зарегистрирован: 17 окт 2014, 20:39
прог. языки: с++

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение Serge_ISA » 05 ноя 2014, 18:20

Kulverstukas писал(а):Как же много продумано, вы молодец!


Да какой там молодец... Ничего там не продумано, лепится всё "по ходу пьесы", опыта ведь никакого. Программа написана страшно, сплошные заплатки. Сейчас с высоты полученного опыта многое сделал бы не так. Впрочем, ради этого (наработки опыта) всё и затевалось.

Kulverstukas писал(а):Я вот пока до тележки только дошел. Прочитав ваши описания понимаю что ситуация поставившая вас в тупик вам же и помогла (все на борту готовое).


У меня как раз с механикой вечно не складывается. А тут "не было бы счастья, да несчастье помогло". :)

Kulverstukas писал(а):Думаю не проще ли вам сделать алгоритм движения змейкой зиг-загом. сейчас именно это пишу для своей тележки.


Уже. "Виляние задом" в исполнении моего робота это и есть "змейка", только с очень короткими прямолинейными участками. :good:
Serge_ISA
 
Сообщения: 54
Зарегистрирован: 21 май 2014, 11:43
Откуда: SPb
прог. языки: Bascom AVR

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение Serge_ISA » 01 дек 2014, 17:57

Ну что ж, проект потихоньку движется к завершению, т.к. в текущей версии меня почти всё устраивает, и Скуба уже некоторое время как "встала на боевое дежурство". :)

В текущей версии 7.17 реализовано:
1. Зарядка/подзарядка аккумулятора.
Уже пару недель как я перешёл на литий-ионный аккумулятор емкостью 1600мАч.
Т.к. родное зарядное устройство слишком "умное" и просто так не работает, то я использую блок питания 9в/0.5А от какого-то модема.
При подключённом заряднике режим работы индицируется красным и зелёным светодиодами "Power":
красный горит, зелёный не горит - идёт зарядка, напряжение на аккумуляторе менее 6В,
красный мигает, зелёный не горит - идёт зарядка, напряжение от 6 до 8 В,
красный мигает, зелёный горит - идёт зарядка, напряжение от 8 до 8,4 В,
зелёный горит, красный не горит - напряжение больше 8,4В.
В процессе зарядки производится контроль температуры аккумулятора.
2. Режим уборки.
Чтобы включить режим уборки, нужно отключить зарядное устройство, если оно подключено (контроль подключённого зарядника) и кратковременно нажать кнопку "Power".
Если аккумулятор не разряжен, подсветится зелёным кнопка "Clean". В течении 2 мин. кнопка будет светиться, ожидая нажатия. Если нажатия не будет, робот отключится.
Если нажать на светящуюся кнопку "Clean", робот проиграет стартовую мелодию и начнёт 35-минутный цикл уборки ("длинная уборка").
Если одновременно с кнопкой "Clean" нажать и кнопку "Power", робот проиграет другую стартовую мелодию (ноты мелодий хранятся в EEPROM в формате Длительность:Тон:Пауза (по 3 байта на ноту)) и начнёт 20-минутный цикл уборки ("короткая уборка").
Во время уборки подсветка кнопки "Clean" будет мигать.
Экспериментально установлено, что вся чистая вода из "пузыря" выкачивается примерно за 13-15 мин. Пэтому в "длинном" цикле уборки помпа, разбрызгивающая чистую воду, работает первые 15 мин., в "коротком" цикле - 7 мин.
Оставшееся время до окончания цикла уборки, робот двигается, отключив помпу и снизив скорость в 1,5 раза для лучшего сбора грязной воды с пола и экономии заряда аккумулятора.
Цикл уборки может заканчиваться по нажатию кнопки "Clean", разрядке аккумулятора, по прошествии 35 или 20 мин. с начала уборки или если робот застрял и не смог самостоятельно выбраться.
По окончанию уборки проигрывается финальная мелодия и робот отключается.
3. Режимы движения:
В текущей версии программы реализованы три "примитива" движения - по левой или правой псевдоспирали, псевдохаотическое передвижение ("свободное блуждание") и прямолинейное движение "виляя задом"
Последний "примитив" призван заставить более эфективно работать щётки.
В текущей версии алгоритм движения таков:
- с движения по спирали робот начинает цикл уборки и переходит к псевдослучайным перемещениям при столкновении с препятствием.
- если с момента срабатывания бампера прошло ~ от 0 до 4 сек., двигаемся прямолинейно, помпа работает;
- на 4-й сек. если ещё есть вода, отключаем помпу, разворот на 180 град. и едем "виляя задом" по только что намоченному, и так до 7й сек.;
- на 7й сек. разворот на 180 град., включили помпу, и вперёд прямолинейно до 20й сек.;
- с 20й сек., если всё ещё не срабатывал бампер, начинаем спираль.
В любой момент при срабатывании бампера - манёвр уклонения на случайный угол. Для более экономного расхода воды и заряда аккумулятора, помпа работает только при прямолинейном движении (в т.ч. и в составе "спиралей").
После 15 мин. (7 мин., если "короткая уборка"), в алгоритм движения вносятся изменения - отключается помпа, не используется "виляние задом" и скорость движения снижается в 1,5 раза.
После выключения помпы, т.е. перехода в режим "сушки", мигает подсветка кнопки "Clean" и светодиод "Ok".
4. Скорость движения робота не зависит от степени разряженности аккумулятора, т.к. постоянно корректируется в зависимости от напряжения на нём..
5. Режим антизастревания.
Если в течение 2-х минут не было срабатывания датчиков бампера или датчики бампера постоянно находятся в сработавшем состоянии, робот "считает". что застрял.
В этом случае выключаются моторы помпы и насоса и робот пытается выбраться, "раскачиваясь" вперёд-назад/назад-вперёд и пытаясь развернуться по псевдослучайному
алгоритму. После 10 попыток, если ситуация с датчиками бампера не меняется, робот "считает". что застрял окончательно.
В этом случае выключаются все моторы, мигает красный светодиод "Error" и 100 раз воспроизводится короткий звуковой сигнал, похожий на сирену.
Если в процессе этого действа будет нажата кнопка "Clean", робот продолжит цикл уборки (т.е. считает, что человек его освободил на дал команду на продолжение).
Если кнопка нажата не будет, робот отключается с зажжёным индикатором "Error".
6. Работа с ИК-аксессуарами Scooba_2xx-3xx/Roomba_5xx-7xx.
Поддерживаются:
- Scooba Virtual Wall (а т.к. параметры сигнала Скубовской стенки сильно "гуляют" в зависимости от всего, то заодно поддерживается куча всего, передающего ИК-сигнал, близкий к меандру с периодом от 1.52 до 4,8 мсек. В частности, работает со стенкой от китайского пылесоса),
- Roomba Auto Virtual Wall,
- Roomba IR Remote (ИК-пульт, короче говоря),
- Roomba Compact Base (т.к. что с нею делать, непонятно, то робот реагирует на её сигналы, как на сигналы виртуальной стены).
7. Работа через BlueTooth-адаптер.
Посредством BlueTooth-адаптера робот может общаться с хост-системой через эмуляцию стандартного COM-порта с параметрами 2400,8,N,1.
"Общение" происходит путём передачи роботу символов команд и приёмом со стороны робота различных сообщений.
В текущей версии программы поддерживаются следующие команды:
? - вывод помощи по командам и информации о версии прошивки.
s - вывод статусной информации: текущий режим работы робота, состояние аккумулятора, состояние датчиков бампера, а также оставшееся время уборки.
w - включение питания, равносильно нажатию кнопки "Power". Не доступно, если подключён зарядник.
с - включение режима уборки, равносильно нажатию кнопки "Clean". Не доступно, если подключён зарядник или не включено питание.
Далее следует группа команд, управляющая движением робота и включением/выключением исполнительных механизмов. Эти команды доступны только если не подключён зарядник, включено питание, но не активирован режим уборки).
Курсорные клавиши - движение вперёд/назад, повороты вправо/влево. Срабатывания датчиков бампера не учитываются.
Пробел - стоп/продолжить движение.
p - включить/выключить мотор помпы,
v - включить/выключить мотор насоса.

Ссылки на текущие исходник и прошивку, и содержимое EEPROM - https://yadi.sk/d/35_ZunswZY8Pd
Serge_ISA
 
Сообщения: 54
Зарегистрирован: 21 май 2014, 11:43
Откуда: SPb
прог. языки: Bascom AVR

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение Serge_ISA » 17 дек 2014, 13:20

Реализовал "движение вдоль плинтуса" - на удивление простой код получился. :shock:

Теперь алгоритм движения выглядит так:
- Перво-наперво робот делает полный оборот на месте. Таким образом происходит "заливка" центра первой спирали в начале цикла уборки;
- после этого робот начинает движение по спирали и переходит к псевдослучайным перемещениям при столкновении с препятствием;
- если с момента срабатывания бампера прошло ~ от 0 до 4 сек., двигаемся прямолинейно, помпа работает;
- на 4-й сек. если ещё есть вода, отключаем помпу, разворот на 180 град. и едем "виляя задом" по только что намоченному, и так до 7й сек.;
- на 7й сек. разворот на 180 град., включили помпу, и вперёд прямолинейно;
- c 8 по 19 сек. времени без срабатывания бампера, если срабатывает левый бампер, начинаем движение "вдоль плинтуса". Во время движения вдоль плинтуса "время без сраб.бампера" при срабатывании бампера не сбрасывается.
- с 20й сек., если всё ещё не срабатывал бампер или если двигались вдоль плинтуса, начинаем спираль.
В любой момент (кроме движения вдоль плинтуса) при срабатывании бампера - манёвр уклонения на случайный угол.

Ссылка на текущие исходник, прошивку и содержимое EEPROM - https://yadi.sk/d/35_ZunswZY8Pd

PS: Достигнутый на текущий момент функционал меня полностью устраивает, новых "плюшек" добавлять в программу я не планирую (да и некуда их добавлять - осталось 30 байт программной памяти). Дальше будет только ловля багов в процессе эксплуатации. :Yahoo!:
Serge_ISA
 
Сообщения: 54
Зарегистрирован: 21 май 2014, 11:43
Откуда: SPb
прог. языки: Bascom AVR

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение otrineo » 16 янв 2015, 00:39

Отлично выполненная работа я Вами восхищен буду пытаться за Вами повторить именно в части контроллера,схемы и программной части. :good:
otrineo
 
Сообщения: 11
Зарегистрирован: 16 май 2014, 11:06

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение Serge_ISA » 16 янв 2015, 11:24

otrineo писал(а):Отлично выполненная работа я Вами восхищен буду пытаться за Вами повторить именно в части контроллера,схемы и программной части. :good:

Спасибо. Я вам ответил здесь - http://roboforum.ru/post319021.html#p319021
Serge_ISA
 
Сообщения: 54
Зарегистрирован: 21 май 2014, 11:43
Откуда: SPb
прог. языки: Bascom AVR

Re: Восстановление iRobot Scooba 230 - самодельный контролле

Сообщение Serge_ISA » 21 апр 2015, 19:02

Некоторое время назад умудрился проколоть с таким трудом изготовленный новый "пузырь". Решил его не восстанавливать и переделать режим работы на последовательно-двухпроходный. Т.е. первые 27 из 45 мин. длинной (12 из 20 мин. короткой) уборки робот "размазывает" воду щётками по полу, оставшееся время собирает её.

Прошивка всё там-же - https://yadi.sk/d/35_ZunswZY8Pd
Serge_ISA
 
Сообщения: 54
Зарегистрирован: 21 май 2014, 11:43
Откуда: SPb
прог. языки: Bascom AVR

Самодельный контроллер для iRobot Scooba 230 #2

Сообщение Serge_ISA » 22 апр 2015, 02:57

Заканчиваю работу над восстановлением второй попавшей мне в руки Скубы.
В этот раз решил ни в чём себе не отказывать и взял "жирный" контроллер - ATMega128 8)
Теперь поддерживается работа со всем железом Скубы.

Схема:
Изображение
Извиняюсь за "качество", но схема пока существует только в виде рабочего черновика.

Схема - зарядник аккумулятора, питание контроллера и питание подключаемой периферии:
Изображение
В отличие от первой версии, теперь оно работает. :wink:

Схема - токи потребления моторов и расчёты делителей:
Изображение
Опять же черновик, пардон.

Очищенный от останков родного контроллера и компаунда корпус Скубы:
Изображение

Плата самодельного контроллера - вид сверху:
Изображение

Плата самодельного контроллера - вид снизу:
Изображение

Плата самодельного контроллера с установленным модулем BlueTooth-Serial на порту#2:
Изображение

Плата самодельного контроллера в корпусе Скубы перед заливкой герметиком:
Изображение

Не обошлось, увы, без "косяков".
В первом контроллере мне очень не хватало ШИМ-а для регулировки скорости мотора помпы, поэтому здесь он был добавлен.
Но оказалось, что в данном случае ШИМ гораздо нужнее на моторе насоса, ибо в этом экземпляре Скубы он (мотор) невероятно прожорлив.
Но, т.к. плата уже была залита герметиком, пришлось делать программную "эмуляцию ШИМ-а". Ну кто бы мог подумать, что разные экземпляры одной модели будут иметь такие разительные разбросы по параметрам железа?...

Для ускорения "выхода" готового изделия была адаптирована программа из первого проекта на ATMega8. Т.к. то была моя первая программа на Bascom и написана она по принципу "что вижу, о том пою", то результат весьма громоздок. Но пока нет ни времени, ни желания писать программу "правильно" с нуля.

Реализованные новые "фишки":
1. Режим глубокого сна с отключением периферии - теперь робот может храниться без зарядки несколько месяцев и не высадить батарею в "0".
2. Работа с датчиками перепада высоты вообще и реализация режима "подняли на руки" в частности.
3. Реализован режим "Пауза во время уборки".
4. Контроль датчика "Бак чистой воды пуст" и датчика вращения помпы перед началом уборки.
5. Разные звуковые сигналы на ошибки разных датчиков.
6. Сильно расширено количество выводимой при запросе статуса информации.
7. Тестовый режим для проверки всего железа - датчиков, моторов, индикаторов и т.д.

В планах:
1. Расширение функций самоконтроля и, соответственно, звуковых кодов ошибок
1.1. контроль вращения помпы во время работы;
1.2. контроль токовых датчиков моторов.
2. "Обход плинтуса" обоими бортами. При обходе правым задействовать датчик стены.
3. Реализовать на светодиодах датчиков стены/высоты возможность передачи ИК-команд другим устройствам.

Все файлы проекта, а также видео работы с новыми "фишками" здесь - https://yadi.sk/d/jAAeG3mig95pL
Последний раз редактировалось Serge_ISA 06 май 2015, 02:24, всего редактировалось 1 раз.
Serge_ISA
 
Сообщения: 54
Зарегистрирован: 21 май 2014, 11:43
Откуда: SPb
прог. языки: Bascom AVR

След.

Вернуться в Роботы-пылесосы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2