Заголовок сообщения: MR-1 – Дешевый робот из радиоуправляемой машинки
Добавлено: 27 мар 2011, 00:38
Зарегистрирован: 26 мар 2011, 10:00 Сообщения: 27 Откуда: Запорожье, Украина
прог. языки: C++, PHP
Признаюсь честно, изначально я, как и многие, насмотрелся сайтов/форумов по роботостроению и захотел сделать себе полезного робота – робота-пылесоса (ну а что еще просто и полезное можно придумать, если ни в каких соревнованиях я не участвую и даже не знаю есть ли какая-то роботостроительная активность в моем городе?). Но жизнь научила в омут с головой сразу не бросаться, поэтому для начала было решено собрать простого, супер-дешевого робота – на пробу. Поскольку с электроникой я как-то разобрался, проблема стала с механикой (шасси, корпусом, подвеской) и выбор пал на игрушечную машинку, как самый доступный вариант шасси, не требующий особых трудозатрат на модернизацию под мои нужды. На местном базаре, в рядах с детскими игрушками был найден продавец, который согласился продать мне подешевке поломанную машинку на радиоуправлении (без пульта, с побитым корпусом, частично разломанную, но (!) с работающими движками и редукторами (что мне собственно было и нужно). Дальше начался творческий процесс…
Датчик препятствия на 3-х светодиодах Признаюсь честно, в электронике я новичок и до этого только повторял чужие готовые конструкции. На глаза мне попалась статья (http://habrahabr.ru/blogs/arduino/55470/ или forum68/topic6768.html) о том, что обычный светодиод можно приспособить в качестве датчика освещенности. Крутенько принцип такой: подается питание не на анод (как обычно), а на катод, заряжая паразитическую емкость между светодиодом и ножками микроконтроллера; через несколько миллисекунд питание паразитическая емкость заряжается и питание с катода снимается, а соответствующий выход микроконтроллера переводится во вход и подсчитывается время, необходимое чтобы сигнал на ножке микроконтроллера упал в логический 0, которое зависит от освещенности светодиода (чем сильнее освещен светодиод, тем быстрее разрядится паразитическая емкость на его ножке). Собрал. Проверил. Заработало. Народ в сети делает еще и сенсорные модули на основе таких светодиодов. Работают они от того, что предмет над модулем частично перекрывает окружающее освещение и отдельно взяты элемент на общем фоне разряжается намного дольше остальных. Как говориться, долго думал… Шутка. Пришла в голову мысль, а почему только датчик освещенности? Почему не датчик препятствий? Вроде бы простая мысль – освещать один светодиод вторым (оба светодиода смотрят в одном направлении) и если свет отражается от препятствия, то время разряда светодиода-датчика значительно уменьшится. Есть только одна проблема. Такой датчик совершенно не защищен от внешней «засветки» (т.е. не учитывается освещенность «местности», ведь например днем и ночью она будет кардинально разная). Поэтому было решено добавить второй светодиот-датчик, который бы не засвечивался светодиодом-фарой, а «измерял» бы общую освещенность, зная которую можно корректно интерпретировать показания датчика препятствий. Для того, чтобы светодиод-датчик общей освещенности не засвечивался светодиодом-фарой было решено направить его вверх (обычно свет Солнца/лампочки для робота идет сверху). Была нарисована плата, собрана конструкция. Программка управления супер простая: если время разряда светодиода-датчика направленного вперед меньше, чем того, что направлен вверх, то в наличие препятствие (иначе – препятствия нет).
Модуль управления двигателями (драйвер двигателей) В самой машинке была платка, отвечающая за прием, перекодировку и последующее управление движением машинки. Собрана она была на китайской микросхеме SM6135W (это специализированная микросхема-приемник для радиоуправляемых машинок, аналог RX-2B, которая сама декодирует получаемые по радиоканалу команды в 4 команды: FORWARD, BACKWARD, LEFT и RIGHT). Каждой из команд соответствует вывод микросхемы (LEFT и RIGHT поворачивают передние колеса влево/вправо). Вначале загорелась мысль симулировать для это микросхемы команды по проводу, как будто они получены по радиоканалу, но тестовые попытки не увенчались успехом (во-первых в даташите на саму микросхему система команд не описана (я промолчу, как я читал дата шит на китайском в переводе гугла), был найден аналог – дата шит на RX-2B (аналог), но попытка симулировать систему команд от RX-2B результатов не дала (хотя в даташите на RX-2B они вроде толково описаны), может я недопонял чего-то, или RX-2B не полный аналог, ну да ладно)… Ввиду провала попытки использовать родную микросхему SM6135W (достоинством была-бы возможность управлять двигателями по одному проводу, при некотором усложнении программы управления), я эту микруху выпаял и переделал управление на прямой контроль микроконтроллером команд FORWARD, BACKWARD, LEFT и RIGHT непосредственно с портов микроконтроллера (при этом стало задействовано 4 ножки микроконтроллера, но в целом мне ног хватило). Управление двигателями ввиду этого получилось тоже простое – выставляем 1 на соответствующей ножке микроконтроллера (чтобы двигатся вперед на ножке FORWARD, чтобы назад на ножке BACKWARD, влево на ножке LEFT и вправо на ножке RIGHT).
Плата микроконтроллера ATtiny2313 То ли я не люблю излишеств, да и стояла задача сделать тестового робота как можно дешевле, выбор пал на микроконтроллер ATtiny2313 (подсчеты показали, что ножек хватит, хотя задействованы были буквально все ножки, кроме RESET и одного пина порта PORTD). Плата микроконтроллера была полностью взята с сайта RoboZone.su (http://robozone.su/2009/06/30/prostaya- ... y2313.html). (PS: Вообще большое спасибо авторам сайта, с их конструкций я начинал и до сих пор часто туда заглядываю). Единственное, отличие – не ставил внешний кварц (опять же как за ненадобность, так и для удешевления конструкции). Встроенного вполне достаточно (стабилизация частоты для робота ни к чему, а через COM-порт отладка успешно проходила и от встроенного генератора).
Сборка конструкции Решено было использовать 4 датчика препятствий (по одному над каждым колесом). 4 датчика по два вывода на каждый (катод светодиода направленного вверх и светодиода направленного вперед) заняли 8 ножек (весь PORTB), 4 ножки порта PORTD заняли команды управления драйвером двигателей от радиоуправляемой машинки, 2 порта используются для отладки программы по COM-порту (PORTD.0 и PORTD.1), и даже задействовал PORTA (кнопки START и STOP). Так что почти все ножки микроконтроллера оказались при деле. В процессе работы оказалось, что почему-то (я так точно и не знаю почему до сих пор) на ножке PORTB.5 (отвечающую за сигнал SCK при программировании) уровень сигнала никогда сам не падает до логического 0 (хотя если дотронуться щупом вольтметра, то все начинает работать), поэтому PORTB.5 был перенесен на PORTD.6 (единственную свободную ножку порта PORTD). Но это для тех кто решит посмотреть исход ник прошивки, чтобы не удивлялись. Вопрос с питанием был решен использованием 4-х аккумуляторов по 1.2 вольта каждый (итого 4.8 вольта). Изначально машинка была рассчитана на 6 вольт (4 батарейки АА), но подавать 6 вольт на микроконтроллер мне как-то не хотелось (хотя я читал, что должен выдержать), да и идея возможности заряжать аккумуляторы многократно привлекает намного больше чем одноразовые батарейки (хотя покупка двух дополнительных аккумуляторов стоила столько-же сколько вся остальная машинка с механикой и электроникой вместе взятая, но, пожалуй, это говорит больше о дешевизне самого робота). Вся конструкция собрана на кусочке прозрачного плексигласа, завалявшегося в квартике, который в последствии был дополнен бампером, сделанном из пластиковой крышки от банки с майонезом (потому как надоело в процессе отладки программы разгибать «помятые» светодиоды). Бампер из пластиковой крышки оказался на удивление отличным. Достаточно жестким и в то же время достаточно упругим. Одним словом, хоть и из того что было, но пожалуй лучше было бы и не сделать. При включении-выключении двигателей наблюдались заметные просадки по питанию, вплоть до сброса микроконтроллера, так что по питанию был добавлен конденсатор 2200мкФ/16Вольт (я не знал как правильно рассчитать необходимую емкость, поэтому просто взял «наобум» достаточно емкий, небольной и не дорогой). Хватил за глаза (хотя создается впечатление, что питание от аккумуляторов более стабильно и меньше подвержено «проседанию» напряжения, чем тестовое питание через КР142ЕН5А, которой я подавал на робота пока занимался отладкой на столе в стационарных условиях (колеса в воздухе). В дополнение к "родному" отсеку для батареет, находящемуся под днищем машинки, был добавлен еще один такой же сверху, включенный параллельно, для возможности установки 8 аккумуляторов (дающих в сумме больший ток), потому как практика показала, что жрет этот ненасытный малыш достаточно много (минут за 40 активной езды садит комплект аккумуляторов).
Программирование В принципе задач у робота никаких не стояло. Пока что просто ездит не натыкаясь на препятствия. Так что и программа получилась простая. Датчики опрашиваются последовательно (вначале пробовал опрашивать параллельно, но видимо «земля» для всех ножек микроконтроллера общая, потому что для всех светодиодом время разряда было всегда строго одинаковое). Но последовательного опроса датчиков тоже вполне достаточно. Типично время разряда светодиода-датчика в пасмурную погоду – около 7-10 миллисекунд. Т.е. все 8 светодиодных датчики можно опросить за 80 милисекунд, это примерно 12.5 опросов в секунду. Роботу большый FPS и не нужен. Кроме того, приняты меры предотвращения «зависания» на опросе датчиков. (дело в том, что в полной темноте дветодиодные датчики могут разряжатся до 2-3 секунд, что конечно неприемлемо медленно для робота, но если датчик смотрящий вперед не разрядился за 7-10 миллисекунд, как в пасмурную погоду, то он уже наверняка не засвечивается от препятствия соседним светодиодом, а потому дальше ждать нет смысла да и общая «освещенность» нас в этом случае не волнует, т.к. препятствия заведомо нет). Движение робота можно описать словами «где свободно туда и едем». Т.е. если оба передних датчика не показываю препятствий – едем вперед. Если препятствие спереди слева, то еде все еще вперед, но поворачиваем вправо (вдруг это ножка стула и мы ее успеем объехать?), и т.д. Аналогично действуем когда едем назад, а назад едем, если оба передних датчика показывают препятствия. Если препятствия показываю все 4 датчика (ну в угол какой-то между мебель заехали), то отключаем двигатели и ждем пока «разработчик» заботливо переставит на свободно пространство.
Испытания Признаюсь честно, датчики на светодиодах всетаки не так защищены от засветки, как датчики на TSOP-ах, но наличие второго светодиода, измеряющего общую освещенность всеже заметно улучшает ситуацию. Единственный случай, когда датчик неправильно интерпретирует обстановку, когда например Солнце из окна утром/вечером под маленьким углом засвечивает светодиод направленный вперед больше чем направленный вверх, но и это бывает как правило с одним датчиком из 4-х (не может же Солнце засветить и датчики направленные вперед и направленные назад одновременно?). Решается путем направления всех 4-х датчиков в разные стороны (например передние под углом 120 градусов между собой и задние под углом 120 градусов между собой). Таким образом Солнце, даже находясь низко над горизонтом «ошибочно» засвечивает не более одного датчика, и когда машинка едет «на» Солнце, то она просто поочередно «петляет» поворачиваясь к Солнцу то одним передним датчиком то другим (змейкой ездит). При комнатном освещении (лампочка на потолке), без света или при дневном свете аппарат ведет себя адекватно (нет такого, чтобы светодиод направленный вперед был освещен больше, чем тот, что направлен вверх при отсутствии препятствия). Хотя при ярком Солнце, конечно «дальность» обнаружения препятствия сильно падает (светодиот-фара дает слабую «добавку» к и без того сильной фоновой освещенности). Ночью или в темноте – вообще хорошо себя ведет. Если давать роботу название, то я бы его наверное назвал «The Bat!» (Летучая Мышь) за наиболее адекватную работу в сумерках и темноте и желание «смыться» с от прямых Солнечных лучей в тень. Питания в 5 вольт для 6-ти вольтовых двигателей вполне достаточно. Хотя по мягкому ковру ездит с трудом. Подводный камень, на который я напоролся с драйвером двигателей был следующий: понятное дело, что нельзя одновременно подавать противоположные сигналы FORWARD и BACKWARD или LEFT и RIGHT, т.к. это приводит к КЗ в драйвере двигателей. И эта возможность была программно исключена. Но оказалось, что если быстро (а микроконтроллер работает на 8 мГц) менять сигналы, то КЗ все равно остается (видимо транзисторы в драйвере так быстро не переключаются), да и нужно «гасить» ток, протекающий в обмотках двигателя в обратном направлении. Так что перед каждой сменой направления двигателя контролер вначале делает паузу 0.7 секунды, и только потом меняет направление вращения двигателя. 0.7 секунды выбраны экспериментально (как их посчитать я тоже не знаю).
Вложения:
Комментарий к файлу: Робот в сборе (с бампером) - плата микроконтроллера IMG_0202_resize.JPG [ 136.78 КиБ | Просмотров: 15977 ]
Комментарий к файлу: Робот в сборе (с бампером) - вид сзади IMG_0195_resize.JPG [ 174.38 КиБ | Просмотров: 15968 ]
Комментарий к файлу: Робот в сборе (с бампером) - вид спереди IMG_0194_resize.JPG [ 147.09 КиБ | Просмотров: 15936 ]
Комментарий к файлу: Робот в сборе (с бампером) - датчик на 3-х светодиодах IMG_0189_resize.JPG [ 99.41 КиБ | Просмотров: 15936 ]
Комментарий к файлу: Робот в сборе (с бампером) - отсек для батареек (родной) IMG_0187_resize.JPG [ 97.19 КиБ | Просмотров: 15930 ]
Комментарий к файлу: Робот в сборе (с бампером) IMG_0186_resize.JPG [ 134.87 КиБ | Просмотров: 15914 ]
Комментарий к файлу: Робот в сборе (без бампера) IMG_0173_resize.JPG [ 138.97 КиБ | Просмотров: 15931 ]
Комментарий к файлу: Плата управления радиоуправляемой машинки (верх) IMG_0128_resize.JPG [ 110.03 КиБ | Просмотров: 16064 ]
Комментарий к файлу: Плата управления радиоуправляемой машинки (низ) IMG_0126_resize.JPG [ 153.98 КиБ | Просмотров: 15936 ]
Комментарий к файлу: Поломанная радиоуправляемая машинка, используемая как основа робота IMG_0119_resize.JPG [ 144.84 КиБ | Просмотров: 16084 ]
Комментарий к файлу: Типовая схема китайской машинки на радиоуправлении на основе SM6135W. В схеме оставлены только два транзисторных моста для управления двигателями (6, 7, 10 и 11 выводы микросхемы SM6135W) 200810200959408504.gif [ 110.97 КиБ | Просмотров: 17602 ]
Комментарий к файлу: Простая прошивка робота (для ATtiny2313) в CodeVisionAVR (исходники+hex) ATtiny2313-Simple-Robot.rar [45.53 КиБ]
Скачиваний: 0
Комментарий к файлу: Тестовая прошивка для проверки платы датчика препятствий на основе 3-х светодиодов (для Atmega8) в CodeVisionAVR (исходники+hex) LED-Sensor2.rar [37.02 КиБ]
Скачиваний: 0
Комментарий к файлу: Тестовая прошивка для проверки использования светодиода в качестве датчика освещенности (для Atmega8) в CodeVisionAVR (исходники+hex) LED-Sensor.rar [32.36 КиБ]
Скачиваний: 0
Комментарий к файлу: Модуль датчика на основе 3-х светодиодов (схема в sPlan + плата в Spring Layout) Модуль датчика на основе 3xLED.rar [247.12 КиБ]
Скачиваний: 0
Заголовок сообщения: Re: MR-1 – Дешевый робот из радиоуправляемой машинки
Добавлено: 27 мар 2011, 09:51
Зарегистрирован: 26 мар 2011, 10:00 Сообщения: 27 Откуда: Запорожье, Украина
прог. языки: C++, PHP
HarryStar писал(а):
Во это я понимаю, грамотное и подробное описание. Что планируешь в версии 2? Пылесос, как хотел или появились еще идеи?
Планируется пылесос, но опять из переделанной радиоуправляемой машинки (мне все еще тяжело сделать шасси самому, хотя схема круглого борта с двумя независимыми ведущими колесами по центру, дающая возможность разворота на месте, мне больше нравится). На рынке еще до этой купил вторую б/у машинку, гораздо больших габаритов, с большей подвеской (еще советскую, на транзисторах КТ315 и ГТ). Вместо пальчиковых аккумуляторов - аккумулятор от UPS (12 вольт 7.2 ампер-часа, тоже б/у, с "убитой" емкостью, но пока мне хватит) и уже куплен автомобильный пылесос на 12 вольт. Первые "прикидки" показали, что на платформу это все влезет. Смущает вес аккумулятора (2.5 кг), но думаю шасси должно потянуть. В качестве платы микроконтроллера все та же "Простая плата контроллера на базе ATTINY2313" (http://robozone.su/2009/06/30/prostaya- ... y2313.html), в качестве драйвера двигателей "Модуль драйвера двигателя на основе L293x" (http://robozone.su/2008/03/28/modul-dra ... snove.html) (тут я пока тоже не уверен, потянет ли L293D движки на 9 вольт, но плата уже собрана, посмотрим; Если что - планирую поставить две L293D параллельно (одну над другой в одном слоте), вроде две штуки так еще можно поставить, или соберу другой драйвер двигателей, а этот пойдет в какой-то другой проект), в качестве датчика препятствий более помехозащищенный "Модуль ИК-датчика на основе TSOP2136" (http://robozone.su/2008/04/09/modul-ik- ... p2136.html) (только в моем случае я его слегка переделал под TSOP4836 и чуть доработал схему, добавив пару ограничительных резисторов, чтобы как бы я не крутил подстроечный резистор, ток на светодиодах никогда не превышал максимально допустимый) и к ним генератор "Модуль аппаратного генератора для инфракрасных датчиков TSOP" (http://robozone.su/2008/04/22/modul-app ... -dlja.html). Практика первого робота показала, что ATtiny2313 вполне достаточно (с отладочной информацией по COM-порту программа занимает 66% памяти, без отладочной информации - 35-40%), так что даже запас есть для несколько более "продвинутого" алгоритма. Так же первый робот показал, что для робота-пылесоса все же нужен механический бампер-датчик. Потому что на основе световых датчиков робот не может достаточно точно подъехать в препятствию и остановиться возле него (а для пылесоса это нужно чтобы полностью обойти комнату), поэтому предполагается добавить механический датчики касания (на обычных кнопках). При этом план алгоритма такой - как только TSOP-ы видят препятствие, не останавливаемся полностью, но снижаем скорость (допустим до 20%), и едем дальше в том же направлении до срабатывания датчика касания. Таким образом робот всегда "надежно" должен доезжать бампером до плинтусов и таким образом "полноценно" пылесосить во всех "укромных уголках".
Отличное описание Присоединяюсь - надо видео. Для этого заводится аккаунт на ютюбе, видео заливается туда, а сюда вставляется тег ютюбовский. Насчет пылесосов - приглашаю в подфорум про роботов-пылесосов. Там есть описания, как без сложной механической работы сделать приличную механику для робота. Также там аргументируют почему автопылесос на колесиках - не очень хороший вариант и как сделать его лучше.
ЗЫ. Что админы скажут: достойна тема золотого фонда?
Заголовок сообщения: Re: MR-1 – Дешевый робот из радиоуправляемой машинки
Добавлено: 28 мар 2011, 10:00
Зарегистрирован: 26 мар 2011, 10:00 Сообщения: 27 Откуда: Запорожье, Украина
прог. языки: C++, PHP
Видео постараюсь сделать. Может быть на выходных, т.к. на неделе работаю. Провода было бы конечно хорошо уложить аккуратнее, но провода по питанию для передних датчиков получились "коротковаты", чтобы их можно было уложить по бокам, надо перепаивать. В принципе проводами он ни за что не цепляется (проблем не было), а "фокус" внимания уже направлен на следующую конструкцию (большую часть опыта и выводов, которые можно было извлечь из этой конструкции, я уже видимо получил), хочется собрать что-то лучшее, а не "топтаться на месте" полируя до блеска не очень совершенную конструкцию (все таки нужны датчики касания, а свободных пинов поставить их просто не осталось, все таки нужно ставить датчик препятствий на TSOP, но это сильная переделка конструкции), так что уже "собирается" (правда не спеша, в свободное время) второй экземпляр, надеюсь без недостатков первого.
Заголовок сообщения: Re: MR-1 – Дешевый робот из радиоуправляемой машинки
Добавлено: 28 мар 2011, 11:56
скрытый хозяин вселенной :)
Зарегистрирован: 18 сен 2006, 12:26 Сообщения: 18018 Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич
Шикарно! Молодец! текст не осилил правда, тока картинки но объём написанного показывает серьёзность подхода
_________________ <telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode> Всё уже придумано до нас!
Заголовок сообщения: Re: MR-1 – Дешевый робот из радиоуправляемой машинки
Добавлено: 03 апр 2011, 14:49
Зарегистрирован: 26 мар 2011, 10:00 Сообщения: 27 Откуда: Запорожье, Украина
прог. языки: C++, PHP
elesy писал(а):
Команды на управление 5 влольт или 3 вольта? Если есть возможность то проверьте от уровня 3.3 вольта
Мысль интересная, хорошо бы проверить, но микросхема SM6135W уже выпаяна и благополучно пылится в коробочке (в хламозборнике радиодеталей), а плата управления от машинки уже использована (и глубоко запрятана в середине, под желтым днищем, так что ее даже не на всех фото видно, в машинке). Так что попробовать в железе не получится - уже поздно. Еще раз глянул на схему радиоуправляемой машинки (она прикреплена к посту) - и "на первый взгляд" каких-либо элементов понижающих питание на управляющих входах до 3.3 вольта не нашел.
автопылесос к сожалению полное УГ. в машине им можно только пыль с ковриков убрать. Он очень маломощный, но так сказать прототип можно на нем сделать, но потом надо менять на что-то более мощное.
Ну какой отчет о работе ах все по полочкам разложил =) Заполняй город, кстати шасси есть у меня в гараже воляеться мшинка хорошая только с поврежднным колесом, ну какой там моторчик только надо глянуть работоспособность, давно лежит =) и по размерам подойдет, намного больше твоей =) (багги) не джип)
Заголовок сообщения: Re: MR-1 – Дешевый робот из радиоуправляемой машинки
Добавлено: 11 апр 2011, 09:45
Зарегистрирован: 26 мар 2011, 10:00 Сообщения: 27 Откуда: Запорожье, Украина
прог. языки: C++, PHP
Valera123 писал(а):
Ну какой отчет о работе ах все по полочкам разложил =) Заполняй город, кстати шасси есть у меня в гараже воляеться мшинка хорошая только с поврежднным колесом, ну какой там моторчик только надо глянуть работоспособность, давно лежит =) и по размерам подойдет, намного больше твоей =) (багги) не джип)
Заполнил город и страну. Посмотрел где именно находится Сургут в России. Шасси конечно буду очень благодарен, только не уверен, как (можно ли и целесообразно ли) пересылать шасси из Сургута (Россия) в Запорожье (Украина)?
Как правильно вставить тег для видео с YouTube, чтобы он появился в виде окошка в котором проигрывается видео, а не в виде текстовой ссылки, окруженной тегами [youtube] и [/youtube]?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 27
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения