roboforum.ru

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

WiFi робот руками чайника

Правила форума
В этом форуме новые темы не создаются, однако обсуждение допустимо.

WiFi робот руками чайника

IlgizN » 30 мар 2011, 19:27

Это длинный рассказ про то, как построить робота в виде игрушечного автомобильчика с видео камерой, которым можно управлять на компьютере через WiFi (в перспективе через интернет). Устройство не имеет никакой автономности в смысле своего поведения (типа распознавания чего-либо), управление - только от человека, поэтому «робот» - это не совсем подходящее слово в названии.
WiFiautoBOT_c.jpg
WiFiautoBOT_c.jpg (31.66 КиБ) Просмотров: 120412

Цель повествования – изложить в одном месте информацию, которую мне по крупицам пришлось собирать из разных источников, дабы облегчить жизнь таким же, как я, ищущим, но мало сведущим. Поэтому, думаю, что эта информацию будет полезна прежде всего тем, кто активно интересуется этой темой, хотел бы сделать своими руками такого WiFi робота, но мало разбирается в программировании, радиолюбительском деле, линуксе, как по отдельности в каждом предмете, так и в целом. Я, например, ни в одной из этих областей не специалист. Для таких же и пишу о том, что и как получилось.

Начало
Итак, началось все с того, что идея управления игрушечными устройствами от первого лица (т.н. FPV) мне показалась чрезвычайно интересной с точки зрения собственно процесса игры. Ведь мы можем таким образом реализовать свое присутствие, не в виртуальном мире, а в реальном, через консоль, т.е. получается некая «реальная виртуальность», где поведение в игре объектов подчиняется настоящим физическим законам.
Проще и быстрее всего применить эту идею на игрушечных или модельных автомобилях. Текущие технологии должны давать такую возможность и мне подумалось, что промышленность, должно быть, предлагает массу подобных вещей.
Однако, гугление этой темы показало, что с ready-to-use комплектами проблема – нашел один, за 11 тыс.руб., но, я так понял, он работает на BlueTooth (http://www.techmodel.net/zonda01), кроме того, там чего-то понаписано про радиоканалы, т.е. это все таки ближе к классической радиоуправляемой модели. И самое главное – 11 тыс.только за модуль управления! Второй вариант – робот от фирмы Wowee Rovio (http://www.wowwee.com/en/products/tech/ ... ovio/rovio), симпатяга - хомоспай. Кстати, интересен такой факт – этот робот на сайте данной фирмы находится в отделе «техника», а не «игрушки». Вариант – не вариант, т.к. стоит это 17 тыс.руб., и вообще это марсоход, а не автомобильчик. Похожий проект - http://www.robotadvice.com/bandai-nettansor_robot.html. Еще французская компания - http://www.wifibot.com/, не видел представительства в России, но похоже по конструкции, что у нас это будет дорого. Дальше искать не было смысла, цена вопроса теперь известна, равно как и «огромный» ассортимент.

Выбор платформы
Стало понятно, что придется делать его самому. К этому времени я пришел к выводу, что есть смысл рассматривать строительство робота только с использованием WiFi в качестве радио, как для видео, так и для команд управления. Идея использования каких-либо радиоразработок для передачи видео и управления из сферы RC мной сразу отметалась, так как сформировалось второе требование к роботу: меньше сложностей и дешевле, кроме того, идея была в управлении через компьютер, а не пульт. Не подходил и Bluetooth, в силу своей маломощности в смысле дальности связи и нагрузки на такую сеть. Если использовать такого робота на открытой площадке, то теоретически дальности WiFi должно быть достаточно для достаточно продолжительной трассы.
Погуглил на тему, кто уже что собирал. Информации оказалось настолько мало, что я поразился. Второй удивительный факт – отписывались в основном иностранчеги.
Чтоб дальше было понятно, сразу приведу типовую схему встречающихся проектов:
sceme1.jpg

По результатам ресерча я разделил попавшиеся реализованные проекты на части:
1) робот на базе настоящего PC (ноутбук или усеченная материнка). Отметаются, как не изящные и дорогие решения.
2) экзотические варианты, платформы, о которых я никогда не слышал, типа gumstix – это одноплатный комп, к нему можно подключать модули расширения, в т.ч. WiFi. Отметается, т.к. дорого и геморно.
3) роботы на базе WiFi роутера. Их можно подразделить на виды, где:
А) роутер работает в режиме точки доступа, к ней присоединены IP модули-части машинки (камера, микропроцессор). Типичный, если не единственный проект - http://www.shelato.com/SecurityRobot/. В проекте Дэвида использован WiFi роутер, но его единственное предназначение в проекте – как ни странно – именно передача данных туда-сюда и все! Не смотря на то, что страница сайта изобилует видеоуроками, вы там не найдете, пожалуй самого главного – раскрытия темы передачи видео с робота. Хотя принцип понятен. Реализовано там все так – программа на PC, отправляет данные о нажатых кнопках на роутер. К роутеру прицеплено устройство CUBLOC http://cubloc.com/product/01_01.php (это процессор в обвязке, типа проекта ARDUINO/Freeduino/ПрочиеDUINO, но со своим языком программирования – диалектом БЕЙСИКа), но прицеплен он к роутеру не напрямую.
cubloc.gif
cubloc.gif (48.01 КиБ) Просмотров: 120316

К CUBLOCу по COM-порту прицеплен крошечный веб-сервер MaxPort, а уже разъем веб-сервера прицеплен к роутеру. Т.о. с точки зрения роутера вся эта связка (CUBLOC+MAXPORT) представляет собой компьютер с IP, или по-другому – CUBLOC имеет свой IP. При такой архитектуре проще коммуницировать с микропроцессором, т.к. роутер будет заниматься тем, для чего его изготовили и не нужно с ним извращаться. Однако, веб-сервер типа MaxPorta стоит 70-110 usd. Сам CUBLOC – баксов 30-45, еще к нему нужна базовая плата и плата управления движками (еще баксов 100). Проект Дэвида Шелато получается дороговатым. Но мне кажется, что это самый простой путь для новичка и самый изящный. Больше готовых компонентов, меньше сложного программирования и пайки. Кстати, сам проект CUBLOC, несмотря на внешние прелести, видимо не особо популярен в штатах, например, на сайте кьюблока присутствуют фото с сайта Шелато, его автомобильчика, построенного на базе CUBLOCа, что видимо должно подчеркнуть юзабельность продукта, но подчеркивает лишь то, что такой частный проект с CUBLOC – один. Что касается камеры, в проекте она также IP, т.е. со встроенным сервером. Как и говорилось, соединив все это (микропроцессор, камеру) к роутеру, дальше остается организовать доступ к самому роутеру, и все.
Б) Вот где оказалась собака порыта! (с) Многие роутеры работают под управлением операционных систем основанных на линуксе. Это дало почву для развития альтернативных прошивок, в результате заливки которой роутер мало чем отличается от настоящего компа с ОС Линукс, но разумеется, маломощного (проц все-таки 200-300 Мгц). Это дает возможность, использовать роутер не по назначению, а по фантазии. После обязательных танцев с бубном, всякие продвинутые чуваки цепляют к ним торренто-качалки/раздавалки, 3G модемы, хранилища данных, видеокамеры и еще чего-то. В отношении проекта WiFiавторобота это дает отличную возможность удешевить робота – ибо как к компу можно цеплять по COM-порту и USB порту все, что душе угодно, так и здесь – не надо огород городить с подключением к роутеру только IP Устройств, можно подключать по имеющимся физическим портам. При этом роутер тоже внешне используется как точка доступа, но помимо точки доступа предоставляет функционал компьютера.
Самым документированным и полезным проектом, основанном на таком подходе, найденным мной в инете является - Wifi Robot - JBProjects.net. В этом проекте в роутере используется прошивка OpenWRT, как я говорил, это - одна из разновидностей Линукса для встраиваемых, компактных систем. Кстати, в комментах к проекту часто встречается «great tutorial», так и есть – это великолепное пособие для начинающих, несмотря на возраст автора – 23 года, студент (в 2008 г). Внимательно изучив проект, я решил делать свой на его основе. Был еще один подобный, но там автор микропроцессорную часть построил аж на 2х PICах (микропроцессоры такие) с использованием протокола I2C. «Ужос» - решил я, и закрыл ту страницу, потеряв ее навсегда.
Закончив на этом исследования предмета, далее начнем собирать автомобильчик, имея под рукой руководство Джонатана.

Общий обзор схемы работы оборудования и программ
Вначале пробежимся по схеме, рассмотрим крупноблочную теоретическую часть.
Схема 2. Крупноблочная схема реализации проекта на базе WiFi роутера
sceme2.jpg

Программ четыре: на PC, на роутере (сервер управления и видеопоток), и в микропроцессоре.
Схема работы: соединяем настольный компьютер (ноутбук, далее - PC) с роутером по WiFi. На роутере при его включении автоматически загружаются 2е программы:
1) сервер. Эта программа открывает сокет (соединение) на определенном порту и ждет, когда по этому порту с ней соединится клиент (любая прога, которая постучит в этот порт и также, особым образом скажет серверу, что она пришла работать через открытый сокет). Далее, после установки соединения, все что придет от клиента, будет перенаправлено по определенному пути, для нас это COM-порт, на этом порту подключен микропроцессор. И наоборот, все что придет со стороны COM-порта, будет переслано клиенту.
2) программа обработки видео, захватывает его с usb камеры и шлет на определенный порт. Для его просмотра нужно всего лишь иметь соединение с роутером на этом порту.
После того, как между компом и роутером установлено WiFi-соединение, запускаем на PC программу для управления роботом (тот самый клиент), эта программа соединяется с программой-сервером на роутере. Эта же или другая программа транслирует видео с WiFi роутера.
Далее, юзер может управлять автомобильчиком и нажимает, например, кнопку «вперед». Программа на PC, отсылает команду «вперед» прямо на роутер, на его IP, но на определенный порт. На роутере, эта команда поступает в программу-сервер, т.к. выслана она на его порт и в рамках открытого для этого дела сокета. Программа-сервер, ничего не делая с этой командой, просто отправляет её в COM-порт. Таким образом, команда «вперед» оказывается в микропроцессоре, который в ответ на нее, дает сигнал «вперед» на один из своих выводов. К таким выводам процессора подсоединена схема управления двигателями, т.к. сам микропроцессор управлять движками не может в силу своей маломощности.
Управлять исполнительным устройством через роутер, без микропроцессора не получится, т.к. микропроцессор может формировать сигналы «1» (напряжение >2,5v) или «0» (меньше обозначенного) на любом из десятка-другого своих выводов. У роутера же выводов нет, есть только порты ввода/вывода, типа USB или COM (serial), в которых по 2-3 проводочка.
Теперь часть практическая. Заранее скажу, что несмотря на кажущиеся сложности, все на самом деле просто, если речь идет о простом копировании этого проекта – ведь все уже сделано и работает. Нужно просто выполнить в точности эту инструкцию.

Машинка
Интересны два момента. Джо пишет, что купил на пробу 20 машинок по рублю за пучок3-5 долларов без радиоуправления. Я сначала офигел и вообще не въехал (откуда такие цены? Я потом купил чуть ли не самую простую машинку за 50$), но потом просек, что это такой спец магаз, куда как бы сдаешь не нужные тебе веще, которые все равно бы выбросил, а они продают задешево. Великолепная идея. Для Канады)). Второй момент. Джо излагает гениальную мысль – Вы, говорит, ни в коем случае, не трогайте электросхему купленной машинки. Там используется микросхема-приемник, от которой идут прямые сигналы «прямо», «назад», «влево», «вправо». Так вот, Джанатан предлагает на соответствующие выводы этой микросхемы напаять провода от микропроцессора, соответствующих выводов. Обосновывает он ее тем, что в этом случае будет съэкономлено куча денег и времени. Наверное он прав, но у меня такая экономия и вообще реализация его идеи с напаиванием не получилась. Кроме того, меня смущал тот момент, что радиоканал останется активным и машинкой параллельно можно управлять обычным пультом. А не получилось у меня вот почему. Купил я машинку Rock Crawler фирмы MAISTO за 1600 руб.:
rock crawler_c.jpg

Разобрал, предвкушая быстрый результат, и вижу:
original PCB front.jpg
original PCB front.jpg (28.1 КиБ) Просмотров: 120215

original PCB rear.jpg
original PCB rear.jpg (22.79 КиБ) Просмотров: 120103

Микросхема то есть, только во-первых, это не реалтек, во-вторых не DIP корпус (пластиковый,большой), и вообще я ее идентифицировать через инет не смог. Где там, «вперед», «назад»- пойди разбери. Я попытался было измерять напряжение на каждом выводе при подаче команды с пульта, но бросил это занятие, не найдя в нем надежной и понятной мне логики, ибо на разных контактах присутствует как + так и – 3,3в. Еще раз оглядев платку я добавил, что все равно не смог бы напаяться на нее – для меня это слишком ювелирно. В общем плату выкидываем, записав на ум, что тебе придется самому сваять нечто подобное.
На второй стороне платы мы видим то, что Джо по своей канадской наивности, не тронутой передовыми китайскими решениями, называет «steering circuit» - цепь управления рулевкой и призывает ее беречь, имея в виду, что рулевка выполнена на сервомоторе, который, в отличие мотора колес, имеет обратную связь. Могу сразу сказать, что в данном автомобиле ничего подобного, к сожалению, нет, а поворот колес выполнен чудовищно – на валу передних колес нечто вроде рулевой рейки, на нее, через Г-образную передачу идет момент от простого (не серво) моторчика. Так вот, чтобы повернуть надо подать напряжение на моторчик, а при крайнем угле поворота этот моторчик находится под напряжением и в заблокированном состоянии и естественно потребляет 1,0-1,2 Ампер, что мало того, что сажает батарейки, так и забирает почти всю мощь батареек на себя, лишая энергии моторы колес. Проблема в том, что крайний угол – достигается сразу и всегда, стоит только нажать на кнопки поворота.
Автомобильчик полноприводный – имеет 2 моста со своим движком на каждом. Однако после установки всего нового хозяйства (роутер, микропроцессор, камера, доп.батареи) на машинку, стало понятно, что моторчики полное г… Машина не едет, не смотря на наличие двух ходовых моторов…
Разобрав переднюю ось:
front suspension with stereeng.jpg

Внутри обнаруживаем 2 моторчика, один – ходовой (PF-130 SV 16140-38CB), один – для поворота (FP130-CN/14135/DU).
На моторчики удалось найти даташиты, из них выяснилось, что ходовые PF-130 очень слабые, как по мощности (грамм на см), так и по скорости (обороты в минуту). Поворотный моторчик FP-130 в два раза сильнее ходового.
На задней оси удалось поменять моторчик на более мощный, единственное, что было в наличии, это f280:
motorcompare.jpg
motorcompare.jpg (34.64 КиБ) Просмотров: 120183

На фото – сравнение старого и нового моторчиков.
Поскольку моторчик f280 в три раза мощнее и в два раза быстрее моторчиков pf-130, то машинка даже с одним более мощным мотором начала ехать. Но пришлось основательно помучаться с напильником, увеличивая нишу для более крупного мотора.
Итак, недостатка в таком автомобильчике аж три:
- маломощные, не эффективные моторы;
- не продуманная система поворота колес;
- невозможно или трудно использовать электронику.
Плюсов не нашел.
Резюме по автомобильчику:
Самый лучший вариант – использовать не игрушечную, а модельную машинку. Не получается – тогда ищите побольше, помощней, скорость должна казаться высокой не только в помещении, но и на улице. Поворотный механизм желательно на сервоприводе. Я так понимаю, что на игрушечные и более-менее подходящие машинки цена начинается от 2,5 т.р. Но такой автомобильчик, как использовал я, брать точно не нужно – придется менять ходовой мотор. Кстати в переднем мосту поменять моторы удастся, только на моторы такого же размера (другие не влезут), а моторчик такого же размера вряд ли будет мощнее.

Радиоэлектроника
Поскольку с идеей без вмешательства в электронику авто пришлось расстаться, встал вопрос хоть какого-то ликбеза. Полазив по сайтам, везде натыкался на одно и то же – сначала все понятно, потом, при рассмотрении новой темы уже ничего не понятно, в комментах пишут – «как все клево, все понятно». Видимо это только у меня какие-то проблемы с восприятием. В общем, решил почитать литературу. Перебрав кучу книг, остановился на одной - «Электроника шаг за шагом», автор Скворень Р.А. Нигде больше так не разжевывают, аж на атомарном уровне. Чайникам, себе подобным рекомендую, про всякие там «Искусство схемотехники» я в курсе, но извините, на второй странице спать уже хочу. По прочтению книги будет многое понятно. Вот теперь для закрепления можно полазить по сайтам этой тематики, рекомендую http://www.easyelectronics.ru, на сайте присутствует свой ликбез, много статей и всякой всячины.
Это нужно не для того, чтобы строить какие-то свои сложные схемы, наша цель не в этом. Просто знать закон Ома (например, для подбора источника и стабилизатора питания, исходя из энергоемкости цепи), а также функции электронных компонентов.
Далее, практическая часть. В этом проекте пришлось паять три платы (к счастью все примитивные и маленькие). Здесь можно пойти двумя пути: заказать их другу-специалисту либо изготовить самому. Во втором случае придется покупать инвентарь, минимально: паяльник, припой, бокорезы. Более качественные советы на этот счет можно найти в инете, например, на сайте, обозначенном выше, там же – уроки пайки, паять тоже надо уметь, да. Сложного ничего нет.
Поехали дальше.

Энергопотребление
Я и не подозревал, что тема энергопотребления поглотит у меня столько времени! А все из-за того, что я не придал ей изначально достойного внимания - подумаешь, какие-то там батарейки! Хотя на самом деле основную часть времени поглотило тестирование аккумуляторов.
По аналогии с проектом Джо приведем общую таблицу напряжения, ампеража и как этот вольтаж достигается:
Таблица 1. Общие сведения о напряжении и потреблении тока.
table1.jpg

Как говорилось выше, выбор отличного от Джо роутера и отказ от сетевой камеры повлекло за собой внесение ряда изменений. В числе положительных: более низкое энергопотребление и меньше видов напряжения – роутер, камера Freeduino – все потребляет по 5 вольт.
Теперь таблица токопотребления:
table2-1.jpg

table2-2.jpg

Таблица токопотребления нужна, чтобы: 1) сделать правильный подбор по мощности электронных компонентов (драйвер двигателей и стабилизатор напряжения для роутера); 2) понимать поведение компонентов при разных режимах потребления (таких, как блокировка всех моторов); 3) выполнить оптимальный подбор источников питания, имея в виду продолжительность беспрерывной работы всего хозяйства.

Раздельные цепи.
Питание полностью раздельное – роутер и Freeduino на одном источнике (8 шт аккумов по 1,2в = 9,6в), моторы – на 6 шт.батарей 1,5 в. (9в). У Джо все вместе, но там и вольтаж больше. Мне же показалось, что такая схема более удобна, да и роутер капризен к стабильности питания – бросок вниз из-за блокировки всех движков его может легко подвергнуть перезагрузке. Кроме того, если бы все это было в одной цепи, то роутер отказался бы запускаться при напряжении в ней ниже 7,5 в (подробнее об этом ниже), а моторы работать еще могут. Т.е. из-за приколов с энергопотреблением роутера пришлось бы менять еще вполне рабочие батарейки.

Преобразователи или стабилизаторы
Как видно из первой таблицы, два устройства требуют питания 5 вольт. На Freeduino стоит собственный стабилизатор питания L7805, он и преобразует питание до нужных ему 5 вольт. Для роутера стабилизатор придется делать самому. Вариантов – минимум 3, у меня сделано на обычном линейном стабилизаторе питания КРЕН (К142ЕН5А), обошлось в 29 руб.
Фото стабилизатора питания роутера
stab_c.jpg
stab_c.jpg (24.63 КиБ) Просмотров: 119957

На фото видно, что помимо стабилизатора, на плате расположены так же светодиоды. Это сделано из-за лени, более разумно было бы расположить светодиоды в каком-то отдельном и красивом месте, да и стабилизатор стоило бы куда упрятать, а не держать на виду.
КРЕН - это аналог L7805, но помощнее – до 2х Ампер, и роутер максимально может потреблять 2 А, поэтому я не стал ставить L7805, где максимальный ток потребления – 1,5А. Схема простая, если не примитивная – одна микросхема о трёх ногах и 2 кондера, схема приведена из даташита.
stabscheme.jpg
stabscheme.jpg (34.77 КиБ) Просмотров: 120009

Но, есть два но. Первое - это всё (и кренка и 7805) - линейные стабилизаторы, т.е. получая от источника питания, скажем, 9 вольт они 5 вольт отдают потребителю, а 4 вольта разницы сжигают на своем корпусе. Это плохо, т.к. поэтому КПД у них низкий и по отношению к источнику питания это не экологично. На фото видно, что стабилизатор снабжен радиатором. Это нужно, чтобы сжигаемая мощность быстренько покидала корпус, рассеивалась. Но даже с радиатором нельзя рассеять более 15ватт – т.е. при токе в цепи 2А и напряжении в ней 5 вольт, максимальное входное напряжение может быть не более 12,5 вольт, если будет выше – радиатор не поможет, КРЕН отрубится из-за перегрева. Второе. Обе микросхемы требуют разницы между входом и выходом в 2,5 вольта. Значит ни роутер, ни микропроцессор не смогут работать окажись у нас на входе ниже 7,5 вольт. Проблема 2,5 вольт решилась бы применением такой же микрухи, как у Джо – для нас это было бы LT1085-5. Ее прелесть в том, что она на 3А (есть на 5 и 7,5) и она LOW-DROP, т.е. там низкая разница между входом и выходом – 1,5 вольт. Но в нашем совхозе ее не сыскать. И для аккумуляторов она не совсем подходит, т.к. нижний ее порог работы – 6,5 вольт, губителен для аккумулятора (6,5 в поделить на 8 шт. аккумов = 0,81 вольт на один). Считается, что NiMh аккумулятор можно разряжать только до 0,9 вольт.
Если же подойти радикально, то лучше сразу делать импульсный стабилизатор на микросхеме, скажем, LM7576 на 3А или LT1074/1075 (на 5А и 2А соответственно). Преимущество импульсного стабилизатора – в высоком КПД до 80-90%, его минус – в более сложной схеме. Но этих чудо-девайсов в нашем местном магазе http://www.bashel.ru то же нет. Хотя там имеется куча DC-DC преобразователей и ни один из них мне не подходит, т.к. максимум что там есть – на 1,5А. А это мимо кассы.

Источник питания
Первоначально роутер и микропроцессор я запитал от 9в (6шт. батареек АА). И думал, что все это будет работать достаточно долго. Однако роутер перегрузился уже минут через 10, а потом и вовсе отказался включаться. Что я выяснил, потеряв кучу времени – согласно тесту батареек http://www.fcenter.ru/online.shtml?arti ... ower/23101 (и этому челу спасибо), моя батарейка Varta High Energy – хорошая батарейка. И работает на нагрузке 750мА (у меня нагрузка 500мА) до истощения (уровень 1вольт) – час времени. Почему у меня 10 минут? Дык, потому что по графику минут за 10 на такой нагрузке у нее напряжение становится 1,25 вольта, а для 6ти батареек это как раз 7,5 вольта – порог стабильности микросхемы КРЕН.
Поэтому я решил сделать так - собрать источник из 8ми аккумуляторов типоразмера АА по 1,2 вольт = 9,6 вольт. Теперь пороговое значение 7,5 вольт поделим на 8 аккумов = 0,93 вольта. Это уже дохлое состояние и предел для NiMh аккумуляторов. Смотрим тест аккумуляторов - http://www.fcenter.ru/online.shtml?arti ... ower/25589. И видим, что до падения напряжения в 1 вольт, почти все протестированные аккумы на нагрузке, как раз, в 500мА, минимально держатся часа по 3-4. Т.е., за 3 часа вся батарея должна разрядиться до 8 вольт – для меня и для здоровья аккумуляторов это вполне приемлемо. Первое же отключение (перезагрузка) роутера, таким образом – сигнал для зарядки аккумуляторов.
Несмотря на этот тест, аккумуляторы я выбрал GP2500, о чем потом пожалел. Аккумуляторы, приобретенные в комплекте с зарядкой, оказались бракованными. Понятно это стало после серии тестов – первоначально я посчитал, что аккумуляторы просто долго пролежали на полке и не могут придти в себя после этой спячки. Однако в процессе тестов выяснилось, что через 30-60 минут работы (на токе 500mA) они один за другим резко теряли напряжение с 1,1 вольт до 0,3 вольт, очень резко. К счастью, магазин http://www.bashel.ru, в отличии от этих аккумуляторов, оказался вменяемым и со стороны менеджмента даже любезным – аккумуляторы поменяли на другие.
Вторая неприятная особенность GP2500 – реальная емкость, об этом ниже.
Третья – тоже емкость, но другого порядка. Указанная крупным шрифтом на корпусе емкость (2500mA) имеет дублера, или уточнение, чуть ниже и уже мелким шрифтом – 2450mA. Для аккумуляторов 2700mA мелким шрифтом указано уже 2600mA. На мой взгляд, это просто свинство.

Разряд - тест
Ниже приведен график, иллюстрирующий, насколько долго выбранные аккумуляторы GP2500 могут питать цепь управления. Тест проведен в «тепличных» условиях, без движения, роутер находился в 1 м от связанного с ним по WiFi ноутбука. Ток потребления цепи примерно 500 mA.
График 1. Напряжение в цепи управления.
GRAPF1.jpg


ПРОДОЛЖЕНИЕ НИЖЕ.
Последний раз редактировалось IlgizN 31 мар 2011, 16:38, всего редактировалось 2 раз(а).

Re: WiFi робот руками чайника

setar » 30 мар 2011, 21:38

спасибо за отличный материал !
здесь коллеги аналогичной разработкой занимаются вот ссылка

Добавлено спустя 7 минут 28 секунд:
только КРЕН не нужно использовать в качестве стабилизатора - плохая по энегроэффективности микруха

Re: WiFi робот руками чайника

landStalker » 30 мар 2011, 21:40

Огромное спасибо!
Статья отличная почерпнул много интересного для себя.Спасибо!

Re: WiFi робот руками чайника

AndreiSk » 30 мар 2011, 22:46

Ниасилил... многабукв :sorry:
Вы походу так и не нашли Surveyor http://www.surveyor.com/ :roll:
Они кажется загибаются (не вижу новинок вообще),
но пока все еще продается.

Добавлено спустя 2 минуты 50 секунд:
IlgizN писал(а):По результатам ресерча я разделил попавшиеся реализованные проекты на части:
1) робот на базе настоящего PC (ноутбук или усеченная материнка). Отметаются, как не изящные и дорогие решения.
...


Ну и зря. Сам себе злобный буратино. Эхх... :shock:

Re: WiFi робот руками чайника

avr123.nm.ru » 30 мар 2011, 23:02

Че то поперли хорошие описания конструкций. Браво !

Весна наверно ...

Re: WiFi робот руками чайника

=DeaD= » 31 мар 2011, 00:32

IlgizN писал(а):Это длинный рассказ про то, как построить робота в виде игрушечного автомобильчика с видео камерой, которым можно управлять на компьютере через WiFi (в перспективе через интернет).

Жутко извиняюсь, а можно привести список компонент основных и их цены, с итогом - сколько в целом нужно потратить, чтобы повторить робота?

Re: WiFi робот руками чайника

EdGull » 31 мар 2011, 06:50

5 баллов! :Bravo:
если добавить материалов (подробности изготовления узлов) которые позволят другим повторить, тема поедет в золотой фонд.

Re: WiFi робот руками чайника

HarryStar » 31 мар 2011, 08:48

IlgizN писал(а):Идея использования каких-либо радиоразработок для передачи видео и управления из сферы RC мной сразу отметалась, так как сформировалось второе требование к роботу: меньше сложностей и дешевле

Статья отличная, все разобрано по косточкам, пройдусь только по этой цитате:
Почему-то популярно на данном форуме заменять простые, универсальные, широко распространенные RC-модельные компоненты собственными разработками. Тратить на это кучу времени и сил, получая при этом зачастую худший результат.

"Дешевле" - да, хотя учитывая полную несовместимость с RC-моделизмом (а эта разработка - обычная RC-модель с FPV) вопрос спорный. Если конечно нет ничего из модельного ассортимента и очень ограниченный бюджет - то да.

"Меньше сложностей" - тут как раз все наоборот. Модельные компоненты соединяются как конструктор из кубиков, сложностей там 0. FPV модель не требует ни настройки ни программирования - ничего, кроме изготовления механической платформы.

Плюс данной конструкции - только в управлении с компа, например для последующей реализации на нем какого то ИИ. Но я лично и в этом случае предпочел бы сделать наоборот - управление с компа стандартными модельными компонентами, тем более что такие решения в RC-моделизме тоже имеются. Исключение - если управление платформой не "вперед-назад-влево-вправо" а скажем по-сервам на много много каналов.

Плюсы модельных компонентов - стандартизация (для меня очень важный фактор, т.к. имею несколько моделей), дальность управления (в RC-моделизме нормальные расстояния - 1-2 км по воздуху(со спец средствами свыше 10-20) и 500-1000м по земле, и управление и видео), удобство (модельным пультам равных нет).

Мое замечание ни в коем случае не критика - каждый делает что хочет, работа проделана большая и естественно будет кому-то полезна.

После прочтения следующего поста про раскладку цен: Стоимость сопоставима с модельным оборудованием, значительной экономии тут нет. Но работа гигантская, автору огромное спасибо, опыт в любом случае очень ценный!
Последний раз редактировалось HarryStar 31 мар 2011, 11:03, всего редактировалось 1 раз.

Re: WiFi робот руками чайника

IlgizN » 31 мар 2011, 09:32

все не влезло, лимит на 15 картинок, поэтому продолжаем, где мы остановились?:
Результат – 3 с половиной часа. Похоже, номинальная емкость аккумуляторов не соответствует реальной - соответственно потребляемому току, в 500mA ёмкость аккумуляторов GP2500 составляет около 1900mAч. Это соответствует результатам теста аккумуляторов (ссылка выше), где аккумуляторы GP емкостью 2700mAч показали реальную емкость 2,05 Ач на токе 500mA:
GP2700test.png
GP2700test.png (4.94 КиБ) Просмотров: 119252

Вместе с тем, в нашем тесте не лабораторные 500mA, а примерные, т.к. в процессе работы роутера его энергопотребление скачет. Посмотрим, какая будет емкость в реальных условиях эксплуатации.

Роутер
Здесь начинается самое интересное.

Выбор «железки»
Я купил б/у роутер D-Link DIR-320, этот девайс имеет USB, что нам важно с точки зрения подключения камеры и обхода гемора со встраиванием USB туда, где его нет. Сам роутер имеет довольно много примеров в сети на предмет его прошивки и приспосабливания под разные нужды. Поскольку мы выбрали не такой роутер, как у Джо, то мы теперь не сможем слепо копировать его проект.

Прошивка
Первое. На версии OpenWRT, использованной Джонатаном (WhiteRussian, 2.4) видео не пашет, в смысле внутри роутера, а не как IP камера (для роутера IP вебка – это комп, а не видео камера).
Полопатив интернет, понимаем, что нужна прошивка версией 2.6. http://downloads.openwrt.org/backfire/10.03/. Проекты с использованием на роутере веб камер использованы именно на ней.
Инструкция по прошивке имеется в сети (http://dipcore.com/?p=117), но потом увидел тот же батник на сайте OpenWRT (http://oldwiki.openwrt.org/OpenWrtDocs% ... 29320.html).
Прошивается все на раз. В ссылке, приведенной выше, заходим в папку «brcm47xx». Смысл в том, что для каждого типа процессора необходимо компилировать свою версию ОС Линукс, поэтому в указанной ссылке указаны типы процессоров, и уже под ними находится нужная готовая прошивка. Так что эта папка отражает тип нужного нам процессора. В ней находим файл openwrt-brcm47xx-squashfs.trx, скачиваем, переименовываем в firmware.bin и устанавливаем по инструкции. Если все получилось – теперь у нас есть прошитый роутер, но он пустой, как барабан. Дело в том, что мы залили ядро с минимальным набором функций, по сути это опять тот же функционал просто роутера, но с расшаренными настройками. Причина этого в том, что объем памяти в роутере сильно ограничен, и полная версия ОС со всеми прибамбасами туда просто не влезет. А посему, каждый выбирает сам – что ему надо, что нет. Так что многие нужные нам функции вынесены в пакеты, которые необходимо устанавливать отдельно, уже средствами самой ОС. Еще одна ремарка - если мы сами напишем какую либо программку или захотим установить какую, необходимо ее скомпилировать как бы в среде нужного нам процессора. Просто взять, например готовую прогу carserver с сайта Джонатана и попытаться залить ее в свой роутер получится, только если у вас с ним одна и та же версия ядра и роутера. В остальных случаях придется компилить. Меня этот момент не устраивал, т.к. лениво было разбираться с Линуксом на столько, т.к. пришлось бы ставить его на свою основную машину, разбираться с дровами и проч. и проч.
Установив ядро, методом проб и ошибок я определил свой список нужных мне пакетов, приведу их сразу все:
list of packs.jpg
list of packs.jpg (33.26 КиБ) Просмотров: 119342

Теперь нужна программа для того, чтобы зайти в роутер и установить нужные нам пакеты. Слышал, что можно это сделать через веб-интерфейс, но сам не пробовал. Если это действительно так – думаю, это много проще. Из программ рекомендовал бы: WinSCP и Putty. Вторая будет общаться только командной строкой, у первой – NC подобный граф.интерфейс. Итак, копируем пакеты в папку /tmp. Пакеты забираем с вышеприведенной ссылке, где нашли ядро. Устанавливаем командой «opkg install имя_пакета_как_есть». Установленные пакеты смотрим командой «opkg list-installed». Кстати, устанавливать можно и из роутера, с вытягиванием нужных файлов из инета, но это уже для умников.
Теперь, когда все нужные проги для роутера мы установили, нам осталось установить физически COM-порт и настроить его.

COM-порт
Повторюсь, что ком порт нужен для того, чтобы роутер соединить с микропроцессором.
Для сбора COM-порта потребуются: монтажная платка (я купил за 30 руб., где-то 3 на 3 см), микросхема MAX3232 (не max232!), 5 шт. конденсаторов 0,1 мкФ, разъем DB-9 Female, разъем PBS-5 2,54mm. Потратил я на это 146 руб. Рекомендую как руководство: http://www.satavto.by/satellite/faq_rec ... _port.html, хорошая инструкция, спасибо этому доброму человеку.
Паял кочергой, получилось так:
rs232pcb.jpg

Все просто. Монтажная платка представляет собой кусок текстолита с лужеными отверстиями с шагом 2,54 мм. По схеме в приведенной ссылке прикидываем расположение деталей, втыкаем в платку микросхему (для первого раза это надежней делать через панель для микросхемы), кондеры, провода и все припаиваем к отверстиям, в которых находятся воткнутые ножки/провода. Потом нужные между собой соединения выполняем медной проволокой (из куска кабеля витой пары) и пропаиваем её к отверстиям и деталям. Но. Будьте внимательны, я, например, один из кондеров соединил с «землей» насквозь обе ножки. Причем, первоначально я для платки нашел такое место – приклеил ее на крышку роутера клеем «Момент», он типа как резиновый. Получилось симпотно, вывел провода наружу и припаял к ним DB-9 «папу». Но COM-порт не заработал, я перерыл весь интернет и выучил наизусть даташит на эту микруху. Обтыкал ее мультиметром, так вот там есть такой «charging pump», и на нем д.б. напряжение 5,5 вольт. А у меня было нативные 3,3 вольт на нем. Смысл всей этой микросхемы в том, что она слабый сигнал платки (TTL сигнал) поднимает при помощи зарядного насоса до приемлемого с точки зрения стандарта RS-232 уровня (5,5 в достаточно) и входящий сигнал (12 или 9 вольт) спускает на свой уровень (3,3 вольта). Так вот, поскольку этот разгон у меня не работал, то исходящего сигнала не было. В общем, потом я решился отодрать платку от крышки роутера и проверить схему. И обнаружил этот косяк с конденсатором. Аллилуйя.
Заодно поменял «папу» разъема на «маму», платку положил в спичечный коробок (сам прижимается) и вообще приделал разъем к корпусу, вот так:
mounted rs232.jpg

Еще момент, я тогда не знал, но те штырьки на фото, сверху, называются, PLS с шагом 2,54 мм. Разъем для них называется PBS-5 с шагом 2,54 мм, 5 – это кол-во контактов, реально нужно 4, но они идут так: OxOOO, где х – отсутствие штырька.
По поводу самого разъема DB9. Я сначала поставил «папу», вывел его на проводах наружу, чтобы сразу подключать этот разъем к микропроцессору через его COM-порт типа «мама». При этом «перевернул» провода TX и RX, чтобы TX роутера соединялся с RX микропроцессора и наоборот. Эта схема оказалась неудобной и ненадежной, поэтому лучше сразу прикрепить разъем к корпусу роутера, TX и RX вывести на штыри 2 и 3 соответственно и соорудить кабель – на концах по «папе», пин 2 одного разъема идет к пину 3 другого, а 3 идет к 2.
Это не все. Теперь нужно настроить COM-порт, а вся настройка заключается в том, чтобы снести с него консоль и сделать его (COM-порт) доступным при запуске роутера. Смысл такой. В системе DIR-320 опознается 2 COM-порта, один – как ttyS0, второй – ttyS1. Нулевой – это консоль, т.е. через него можно управлять роутером, а при загрузке в него льется всякая хрень. Для подключения микропроцессора правильно использовать первый порт, так сделано у Джонатана, но у DIRа этот самый первый порт не имеет физического воплощения. Придется пользоваться нулевиком, а это повлечет за собой переделку программы для микропроцессора, т.к. в ней не учтен тот момент, что при загрузке роутера в порт льется информация и микропроцессор обрабатывает ее, как если бы это были команды юзера. Попытка отключить консоль http://dipcore.com/?p=316 (скажем спасибо этому человеку, уже вторая ссылка на него), ни к чему не привела, в смысле мусор на COM-порту при загрузке так и остался, а консоли нет.
Итак, чтобы сделать COM-порт доступным при запуске, создадим файл /etc/init.d/custom-user-setup
И пропишем там строки:
START=50
boot() {
/usr/sbin/setserial /dev/ttyS0 irq 3
/usr/bin/stty -F /dev/ttyS0 raw speed 9600
}
Теперь у нас есть COM-порт физически и мы ему назначили прерывание и скорость. Проверить его работоспособность можно подключив роутер к PC через COM-порт. Для этого на PC запускаем программку HyperTerminal (или PUTTY), указываем при запуске, что будем соединяться через COM-порт (на PC нужно посмотреть какой номер у COM-порта, например, у меня COM4) и скорость 9600. Теперь связь между PC и роутером через COM-порт должна быть установлена и программка PUTTY – сторона PC в этой связке. Запускаем сторону роутера – еще один PUTTY, но соединение по сетевому кабелю (или WiFi). Теперь пошлем что-нибудь со стороны роутера. В программе PUTTY (та, что через сетевой кабель) напишем что-нибудь в COM-порт:
echo “hi, comp”>/dev/ttyS0
и в программе HyperTerminal видим на экране «hi,comp». Этим мы убедились в работоспособности приема данных COM-портом роутера. Теперь отсылка данных: в HyperTerminalе пишем какую-нибудь белиберду, переключаемся на сторону роутера, вводим команду:
more /proc/tty/driver/serial
и видим на экране счетчики: сколько байт ушло (tx), сколько пришло (rx) на устройство ttyS0 и ttyS1:
serial-txrx.jpg

Если с отсылкой белиберды счетчик RX увеличился – значит, данные на COM-порт приходят, тесты закончены.
Если где-то чего-то не видим – значит, что-то сделали не так.

Программа - сервер
Как писалось выше, в проекте Джо для общения микропроцессора и PC для роутера написана специальная прога – carserver. Она устанавливает с PC соединение и транслирует все от него в COM-порт, а с COM-порта – отправляет в PC.
Программа мне не нравилась тем, что мне пришлось бы ее компилировать под Линукс, чего мне страшно не хотелось.
И тут в камментах к его проекту вижу, что один чувачок отписался – «а чего бы, грит, Джо, вместо твоего carserver, который имеет жесткие, не изменяемые настройки (порт и IP), не использовать известный всем ser2net? Он умеет делать проброс с COM и на COM и оч.гибок и прост в настройке». Отгуглившись по сертунету, я обнаружил, что эта прога используется, главным образом, для общения в линукс системах с компортом, точнее, что за ним стоит – в основном торговое оборудование. Ссылок было немного, но одна из них- страница проги http://sourceforge.net/projects/ser2net/, и насколько я понял, для моих целей программа прекрасно подходит. В списке пакетов для сборки openwrt под мой роутер ser2net присутствовал. Качнув, я его тут же установил в роутер.
Программа сопровождается конфигурационным файлом /etc/ser2net.conf, в котором нужно закомментить символом «#» все строки, начинающиеся с цифр и добавить строку наших настроек:
1500:raw:3600:/dev/ttyS0:9600 NONE 1STOPBIT 8DATABITS -XONXOFF LOCAL –RTSCTS
Осталось добавить в custom-user-setup строку (до закрытия фигурной скобки), чтобы прога запускалась с роутером:
/usr/sbin/ser2net -u &

Почти финальная подготовка роутера
Теперь на роутере нужно включить приемо-передатчик WiFi – после заливки прошивки он отключен и нужно включить его через веб-интерфейс. После чего он всегда будет включен. Нужно: соединить роутер и ваш комп при помощи сетевого кабеля (в комплекте с роутером обычно синий), и через браузер зайти на IP роутера (по умолчанию 192.168.1.1). Теперь в программе управления роутером ищем WiFi, включаем, а также включаем шифрование WPA2, прописываем ключ шифрования в роутере и на компе. Это можно не делать, если вас не беспокоит подключение через WiFi к вашему роутеру третьих лиц, и, может даже просмотр этими лицами в веселой компании вашего видео с камеры на роутере.

Камера
Для проектов подобного рода используется обычно IP камера. Однако у меня использована UVC совместимая USB камера, втыкается прямо в роутер. Такую камеру возможно использовать благодаря существованию программы MJPEG-STREAMER. mjpeg-streamer захватывает видео и засылает его на определенный вами порт или файл (мы отсылаем на порт). Если камера выдает не сжатый поток (YUV) – роутер ляжет. У меня камеры Logitech C100 и C310- обе выдают поток в mjpeg, поэтому все ОК.
Также, mjpeg выдают:
- Genius FaceCam 1000;
- QuickCam Pro 9000;
- Logitech C200;
- Logitech c250;
- Logitech c270;
- Logitech c100.
А, да, что еще нужно – список пакетов, включая mjpeg-streamer я привел выше, теперь нужно сделать так, чтобы при запуске роутера эта прога запускалась тоже автоматически. В файл «custom-user-startup» до закрывающей фигурной скобки добавляем строку:
/usr/bin/mjpg_streamer -i "input_uvc.so -r 640x480 -y" -o "output_http.so -p 8080" &
Где –r нужное разрешение, –y –только для YUV камер.
Подключение камеры – втыкаем в USB, перегружаемся, вводим команду DMESG. Смотрим, там английским по черному должно быть написано, какая камера определилась и т.д.
Какого она типа –MJPEG или YUV – это можно узнать только запуском mjpeg-streamera:
mjpg_streamer -i "input_uvc.so " -o "output_http.so -p 8080"
если в ответ будет ошибка «Invalid format», пробуйте ключик –y
mjpg_streamer -i "input_uvc.so -y" -o "output_http.so -p 8080"
Ежели другая ошибка – здесь я не силен, но могу поделиться, что у меня после убийства запущенного процесса mjpeg-streamera при попытке запустить новый вылетает ошибка, что то про драйвер V4L2, перезагрузка лечит.
Сколько ресурсов кушает прога можно узнать, набрав команду top.
Проверка передачи видео: открываем браузер FireFox или Chrome, в строке пути пишем:
196.168.1.1:8080/?action=stream
И смотрим видео. IP роутера по умолчанию 192.168.1.1, но на своем я его поменял.
Кстати, удалось запустить сразу 2 камеры, одна - заднего вида.

Микропроцессор
FreeduinoMax2.jpg
FreeduinoMax2.jpg (26.33 КиБ) Просмотров: 119214

Еще один плюс в пользу этого проекта – это использование в качестве микропроцессора платформы Arduino. Если кратко – это микропроцессор,
конкретно - Atmega 168, заключенный в очень удобную физическую и программную оболочки. Т.е., его и программировать и подключаться к нему одинаково легко. Если бы использовался отдельно микроконтроллер, то гемора было бы много больше, только одно программирование и прошивка стоят хорошего головняка. У меня, по подобию Джо использована платформа Freeduino, версия MaxSerial – те же яйца, только с боку, разницы с Arduino нет. Физическая оболочка представляет собой плату, на которой установлен микропроцессор, кварц, COM-порт (опять микросхема Max, но Max232), штырьки ввода-вывода и стабилизатор питания на 5в – l7805. Freeduino обошелся мне с пересылкой 1120 руб, сам модуль стоит 800 руб. В своем городе я найти эту платформу (любой xxxDUINO) не смог, поэтому пришлось заказывать. Пути удешевления – собрать самому, проект открытый, и обойдется, наверное, рублей в 400. Или использовать «голый» микропроцессор. Заказывал в http://freeduino.ru/arduino/maxserial.html. В присланной коробочке находился сам Freeduino, мини CD со всем необходимым и даже более (типа схем) и, что важно - «папа» - коннектор питания. Важно это потому, что этих коннекторов при внешней схожести – огромное количество, не понятно зачем такое разнообразии. Разница между ними в толщине центрального штыря. Поэтому подбор правильного коннектора меня бы немало озадачил, тем более, что так и произошло с роутером.
Итак, микропроцессор нам нужен для того, чтобы отрабатывать команды, приходящие с компьютера (через сеть WiFi на роутер, с роутера через прогу ser2net) на COM-порт микропроцессора. Отработка команд представляет собой их получение, и отправка сигналов на выводы Freeduino, к которым подключены либо провода на существующую цепь в машинке (как в проекте Джо) или свой драйвер двигателей. С подключением к существующей сети вроде как все просто, а ниже рассмотрим самодельный драйвер двигателей и подключение к нему. Выводы и сигналы используются цифровые, это значит, что сигнал «включить» - это «1», на вывод идет +5в, сигнал «выключить» - «0», на вывод идет 0 в.
Осталось уточнить два момента. Первый – хак Джо, приведенный в его проекте, а именно подключение к 4му пину COM-порта Freeduino 9V через резистор 1Ком. Я это сделал так – с кабеля для COM-портов, с части для Freeduino, вывел с 4го пина проводок с коннектором PBS. Этот коннектор я одеваю на штырек PLS, находящийся у меня на плате драйвера моторов, штырек соединен через резистор с одним из контактов в колодке штырьков, которая одевается у меня аккурат в разъемы вводов-выводов на плате Freeduino. И этот контакт попадает в контакт 9V (если вы подаете питание на плату 9v) на плате Freeduino. В разделе про драйвер двигателей это хорошо видно на фото. Нужно все это для того, чтобы Freeduino не перезагружался, т.к. низкий сигнал на этом пине – команда Freeduino к перезагрузке.
Фото пуллапа 4го пина COM порта
pin4.jpg

Второй момент – программа для Freeduino. На диске или по ссылке ниже есть среда для разработки программ, включая набор библиотек. Сам язык Си-подобный, но вообще прост в изучении. В сети куча примеров. Единственная засада – поскольку приобреталась версия Freeduino с COM-портом, то и заливка программы на Freeduino производится через него же. Пришлось покупать USB-COM переходник, кстати, он тоже не особо сложный, если хочется сделать самому.
Итак, нужно залить в Freeduino нашу программу (скетч) управления. Я взял за основу программу Джо, выложенную на сайте его проекта и немного ее изменил, т.к. вместо его программы carserver, работающей на роутере у меня стоит ser2net, и между ними есть разница, и прямое ее следствие – оригинальный скетч от Джонатана теперь нам не подойдет. Первая разница этих программ – carserver проводит авторизацию с Freeduino - шлет ему кодовое слово, после которого Freeduino считает, что на COM-порт идут команды от юзера. Другая разница – carserver также меняет байт команды, приходящий с компа юзера. На ser2net этих фишек, разумеется, нет. Авторизация, однако, нужна, хотя бы потому, что у меня COM-порт – это системная консоль и при загрузке роутера в него летит мусор. Это не есть гуд, т.к. микропроцессор будет отрабатывать этот мусор, как команды. Поэтому авторизация выполнена в программе для PC, об этом ниже.
Относительно скетча для микропроцессора примечательно, что при работе с портами выводов в Freeduino используется спец.регистр PORTD, PORTB, который работает сразу с 6-8 портами одним обращением. На сайте http://arduino.cc/en/Reference/HomePage (есть русский аналог - http://www.arduino.ru/Reference, но переведено не всё) по этому поводу пишуть, что это нужно, например, когда критично время включения портов. Т.е., если идет последовательное обращение к портам (команда DigitalWrite(номер порта) или с использованием PORTD (пины 0-7), PORTB (пины 8-13) – это две разницы, т.к. регистр обращается к пачке портов одновременно. В качестве команды в эту функцию засылается байт, двоичное представление которого (8 нулей и/или единиц) как бы ложится на соответствующие порты вывода.
Отсюда вытекает, что байт должен быть таким, чтобы его двоичное представление ложилось на пачку выводов бесконфликтно. Другими словами, команда или байт «1» - это в двоичном формате 00000001, а значит на 0й вывод (начинается с 0, не с 1) дается +5в, на 1й-7й – 0в. Так вот, если к этим выводам 0-7 что то подключено, нужно понимать, каким может быть принятый байт, что он включит/выключит. Поэтому у Джо работает это так – 8,9,10,11 цифровые выводы Freeduino – это движение в 4х направлениях (вперед-назад, влево-вправо). И команды могут быть – «2» - двоичное представление «00000010» - дать питание на пин 9, это «назад». Или «1» - «00000001», питание на пин 8, «вперед». Влево – «4» -> «00000100», пин 10, влево. Теперь подходим к тому, чтобы понять зачем эти усложнения. Одновременный поворот влево с движением вперед, это сложение «1» и «4» = «5» = «00000101» - питание на пины 8 и 10 одновременно при отключенных прочих! Офигенское решение!
PORTB у Джо для движения, PORTD – для подлючения 2х светодиодов и бипера. У меня вместо бипера – еще один светодиод. Понятно, что можно подключать и фары или еще какую штуковину, благо остаются свободные порты.
В принципе, как я уже упоминал, голову можно этим не забивать, а просто скопировать все как есть. Т.е. берем готовый скетч, подключаем Freeduino к COM-порту своего компьютера (USB, если юзаем переходник), даем питалово на Freeduino (не ниже 7,5 в., почему так – об этом ниже) запускаем Arduinoxxxx (xxxx – номер версии) скаченный с CD или указанного выше ресурса проекта, открывает скетч, наживаем кнопку «upload», ждем слов «done uploading». Все.
Работа программы отражается на светодиодах: горит зеленый – на COM-порт поступают данные. Горит красный – данные не поступают. Горит синий – ждет авторизации или обрыв связи. Мигает синий 3 раза – авторизация пройдена. Синий можно также зажигать командой с PC (кнопка «Н»).
Ниже привожу счетч для Freeduino:
#define DEBUG 1
#define WAIT_FOR_START 1
unsigned char incomingByte = 0;
unsigned long loop_count = 0;
unsigned char horn = 32;
unsigned char redLED = 64;
unsigned char greenLED = 128;
unsigned char forward = 1;
unsigned char backward = 2;
unsigned char left = 4;
unsigned char right = 8;
unsigned char PORTB_val;
unsigned char PORTD_val;
unsigned char in_char = 0;
void setup()
{
//PORTD = цифровые порты ввода-вывода 0-7
pinMode(5, OUTPUT); // устанавливаем цифровой пин, как вывод
pinMode(6, OUTPUT); // устанавливаем цифровой пин, как вывод
pinMode(7, OUTPUT); // устанавливаем цифровой пин, как вывод
//PORTB = цифровые порты ввода-вывода 8 - 13
//вправо, влево, назад, вперед
pinMode(8, OUTPUT); // устанавливаем цифровой пин, как вывод
pinMode(9, OUTPUT); // устанавливаем цифровой пин, как вывод
pinMode(10, OUTPUT); // устанавливаем цифровой пин, как вывод
pinMode(11, OUTPUT); // устанавливаем цифровой пин, как вывод
Serial.begin(9600); // устанавливаем COM на скорость 9600 bps
flash_led(6,3,500); //мигаем красным светодиодом
digitalWrite(6, HIGH); // зажигаем красный
wait_for_start(); // Ждет авторизации с COM-порта роутера
flash_led(5,2,300); //Мигаем синим, авторизация пройдена
}
void flash_led(unsigned int Led, unsigned int count, unsigned int rate)
{
int n_count = 0;
while (n_count < count)
{
n_count++;
digitalWrite(Led, HIGH); // зажигает светодиод
delay(rate); // ждет децл
digitalWrite(Led, LOW); // гасит
delay(rate); // опять ждет
}
}
char get_char()
{
// Функция ждет символ с COM-порта
// Если ничего нет, возвращаем сигнал обрыва связи - ‘#’.
// Таймаут таков, что если роутер прекратить присылать данные на микропроцессор
// то микропроцессор остановит тачку, вместо того, чтобы двигаться постоянно по последней команде с роутера
//таймаут около 250mS.
while (loop_count < 30000)
{
loop_count++;
if (Serial.available() > 0)
{
incomingByte = Serial.read();
digitalWrite(7, HIGH); // зажигаем зеленый светодиод
digitalWrite(6, LOW); // Гасим красный светодиод
loop_count = 0;
return incomingByte;
}
}
loop_count = 0;
digitalWrite(6, HIGH); // зажигаем красный
digitalWrite(7, LOW); // гасим зеленый
return '#';
}
unsigned char wait_for_start()
{
// Функция авторизации
while(1)
{
if (get_char() =='i' && get_char()=='l' && get_char()=='g' && get_char()=='i' && get_char()=='z')
{
flash_led(7,3,100); // мигает зеленым
digitalWrite(5, LOW); // гасит синий
return 0;
}
digitalWrite(5, HIGH); // зажигает синий
}
} // void setup
void loop()
{
// Функция, которая по полученным командам двигает тачкой
in_char = get_char();
if (in_char=='#')// Потеря связи, принудительная авторизация
{
PORTD= redLED+horn;
in_char=0;
wait_for_start(); //ждем авторизации
in_char=128;
}
// Дилит полученный байт на верхний и нижний регистр.
PORTB_val = in_char & 0x0F;
PORTD_val = in_char & 0xF0;

//Удостоверимся, что зеленый горит
if ((PORTD_val & greenLED) == 0)
{
PORTD_val = PORTD_val + greenLED;
}
// Нижеприведенные конструкции нужны, чтобы исключить одновременное нажатие и отработку команд FORWARD - BACKWARD или LEFT - RIGHT
if ((PORTB_val & (left + right)) == (left + right))
{
PORTB_val = PORTB_val - right;
}
if ((PORTB_val & (forward + backward)) == (forward + backward))
{
PORTB_val = PORTB_val - backward;
}
/пишем значения в порты выводов – двигаем тачку
PORTD = PORTD_val;
PORTB = PORTB_val;
}

Драйвер двигателей (мотор-шилд)
Еще одна великолепная задумка Freeduino – «бутербродность». На плате присутствует два ряда коннекторов формата PBS (им соответствуют штыри PLS), к которым подключены все порты ввода/вывода, а также полезности в виде питания +5в, +9в, земля. Таким образом, сверху на эти коннекторы можно насадить плату, на которой впаяны штыри PLS. На сайтах проектов DUINO предлагаются различные платы расширения, использующие это свойство – например Ethernet shield, добавляющий веб-сервер или, что ближе нашей теме – motorshield, т.е. плату драйвера двигателей. Несмотря на наличие готовых решений я решил сваять свою плату, благо это просто в силу того, что по сути это – всего одна микросхема, без доп.элементов. Если это не интересно или долго, лучше вместе с Freeduino купить готовый MotorShield. Мне изготовление мотор-шилда обошлось в 376 руб.
Я снова использовал монтажную плату. Мне показалось, что для одного проекта, заморачиваться с травлением небольшой платы – это слишком. Поэтому я купил двухстороннюю монтажную плату с отверстиями с шагом 2,54мм и отрезал от нее кусок под размер Freeduino. Не знаю кто производитель, но платка очень качественная. На плату мной были напаяны штыри PLS. Две полоски штырей (по 40 шт.) обошлись мне в 9 руб., хватило на все. Камень в огород сборщиков Freeduino - PBS стоят блоками по 2 шт., с одной стороны – 2 х 8 контактов, с другой – 2 х 6. Так вот между блоками по 8 шт. шаг ни фига не 2,54 мм и мне пришлось подгибать штыри на своей плате, чтобы сели на эти разъемы.
Выглядит это так:
second floor for freeduino - motor shield.jpg

Теперь собственно самое главное - сам драйвер.
Во-первых, нужно рассчитать, какая сила тока будет потребляться двигателями.Это нужно для выбора правильной начинки. У моей машинки получалась такая картина, что рулевой движок хавал до 1,2 Ампер, ходовые в движении примерно 500mA. Это по результатам замеров мультиметром, но можно взять данные из даташита, если он есть. Погуглив, обнаруживаем, что большинство драйверов для маломощных моторчиков работает на микросхеме l293d, она очень популярна при строительстве всевозможных маленьких роботов. Одна такая микросхема может управлять двумя моторами мощностью по 600мА или одним – 1,2А. Люди пишут, что насадив одну микруху на другую, можно удвоить ее мощность, если нужно. Про принцип ее работы можно почитать на http://www.myrobot.ru/stepbystep/el_driver.php, неплохо расписано.
Здесь я повторю лишь основное – на ней 2 подводки питания – одна для логики микросхемы,одна для движков. Питалово можно объединить. Для каждого двигателя предусмотрены 2 контакта на сам движок и 3 на управление – их одключают к микропроцессору. Из этих трех один (т.н. enable) можно использовать для регулирования скорости мотора, есть такая штука ШИМ, нам не нужна в этом проекте, поэтому распинаться не будем. Два других – регулируют направление вращение, когда на одном +5в, а на другом 0 – вращение в одну сторону, если наоборот – то в другую. Если проще – на процессоре мы определили порт вывода «вперед» и порт «назад». Когда на одном +5в – на другом всегда 0в и наоборот. Они и подключены к упомянутым выводам L293D. Просто?
Из неприятного – микросхема кушает около 1,5-2 вольт, откуда бы вы думали? Из питания логики? Нет, из питания двигателей! Т.е., если напруга у нас для движков 9в, то до моторчика дойдет 7,5в.
Теперь в целом, как все устроено у меня на плате.
Фото драйвера:
motorshield_c.jpg

Моторов в игрушке три штуки – один, на рулевке, ест примерно до 1,2А (одна l293d), два других – 0,3-1А (еще одна). Верхняя микруха на фото – рулевка. Рядом (еще выше и чуть левее) напаяны PLS штыри для вывода на мотор (4 шт, по 2 шт на каждый провод, т.к. согласно даташиту на один штырь PLS полагается напруга не более 1А). От мотора идет провод, на котором сидит PBS разъемчик. Фото разъема:
PBS-PLS_c.jpg

Enablы микросхем решил подключить к Freeduinoвскому +5в. через резистор 10К. Почему резистор – продвинутые товарищи на форумах говорят, что иначе вход микросхемы может подпалиться от чистого +5в. Почему Freeduino – на enable д.б. макс +5 в, в цепи моторов его нет (там +9в) и пришлось бы ставить стабилизатор питания с 9 на 5 вольт, что мне не нравится, ввиду усложнения + стабилизатор даст +5в если к нему идет не менее 7,5в. Enable жрет мизерный ток ~10-20мА и цепь Freeduino это даже не заметит (там минимум 0,3-0,5А с роутером).
Все, что идет от микропроцессора (порты вывода)– через PLS на другой стороне платы.
Далее, внизу еще одна микросхема и провода – то же самое, но к ходовым моторам.
Теперь правая часть платы.
motorshield_rightside_c.jpg

Вверху резисторы идут от пинов Freeduino, за ними вывод на 3 светодиода через штыри PLS, сами светодиоды располагаем где-то снаружи (у меня на плате стабилизатора питания для цепи роутера и микропроцессора). Расчет номинала резисторов - Калькулятор расчета резистора | Статьи | new-soft.TK [Лучший софт], но я поставил чуть пониже, все работает. Распиновка светодиодов следующая (порт Freeduino – цвет светодиода): 7 - зеленый, 6 – красный, 5 – синий. В колодке 4 контакта, верхний – земля с Arduino, тащится вместе с проводами до светодиодов.
Ниже еще PLS – поступающее на плату питание +9в от батарей. Еще один PLS ниже – упомянутый уже пуллап (?) на 4й пин COM-порта от 9в через резистор. Сверху и справа от них по резистору – решил поставить измеритель питания и вывести показания напряжения на прогу на PC. Пока не довел до ума. Схема с Вольтметр на Arduino - Форум об автомобильных компьютерах.
И еще осталось место, может пригодится.
Схема 4. Схема всего устройства:
commonsceme.jpg

Остается добавить, что использование моторов с серьезным потреблением (от 2 Ампер) скорее всего, сделает невозможным применение изложенной схемы драйверов.

ПРОДОЛЖЕНИЕ СЛЕДУЕТ.

Добавлено спустя 8 минут 58 секунд:
ПРОДОЛЖЕНИЕ

Программа для PC
Сначала несколько вводных моментов. В настоящем проекте и, видимо, в проекте Джо, все в целом (видео + управление) не выглядит круто. Более того, это даже неудобно. Видео с камеры наблюдается через браузер FireFox, выше я писал, что нужно для этого сделать. Сама машинка управляется через отдельную программу, выглядит так:
programmview.jpg
programmview.jpg (12.7 КиБ) Просмотров: 119230

В итоге поверх браузера должно висеть окошко управляющей программы. Разумеется все это – сырой продукт. Однако у меня нет достаточной компетенции и что важнее, времени, чтобы самостоятельно реализовать сведение всего воедино. Мысли по этому поводу в одном из следующих разделов, пока же сконцентрируемся на том, что есть – на управляющей программе, т.к. работу браузера рассматривать особо нечего.
Программа для PC написана Джо на VisialBasic6. Этот язык программирования давно устарел и Microsoft (производитель) его более не поддерживает. К несчастью, мне пришлось немного переделать эту программу. Во-первых, как я говорил, в программе микропроцессора должна присутствовать авторизация, т.е. он должен отличать мусор роутера при его загрузке/перезагрузке от команд пользователя. У Джо она инициировалась программой carserver на роутере. Но в этом проекте на роутере работает другая программа – ser2net и в ней нет авторизации. Во-вторых, программа на PC отправляла команды в виде байта, модифицируя его. Программа на сервере (роутере) отрезала от него лишнее и отправляла в микропроцессор. Наша программа на роутере, опять же, увы, этим не занимается.
Т.о., в программе для PC была добавлена:
1) авторизация
2) байты отправлялись без модификации.
Теперь про ее установку.
Программы на VB6 поддерживаются Windows, однако не всегда там есть все нужные для этого библиотеки. Может потребоваться копирование в каталог программы или папку windows/system32 библиотеки MSWINSCK.OCX (для работы с сокетами). У меня XP, и мне больше ничего не потребовалось делать, чтобы программа заработала. Имеется также конфигурационный файл, куда прописывается IP роутера.
Как работает. После запуска необходимо установить связь, нажав кнопку “T”. При нажатии программа начнет долбиться на определенный в конфиге IP роутера, где ее уже ждет программа ser2net с открытым сокетом (порт 1500, настраивается ser2net, но жестко зашит в программе VB6!). Установив связь, ser2net отныне выполняет только транзитные функции. Об уставленной связи свидетельствует исчезновение надписи “Not sending data” в окне программы VB. Микропроцессор, со своей стороны, также, уже своей программой, подсоединился к COM-порту и ждет данных. По нажатию кнопки «Т» с установлением связи также будет передана команда авторизации, которая попадет на микропроцессор. Успешная авторизация отражается как мигание синего светодиода на машинке. Обрыв связи или нажатие кнопки «Т» повторно (принудительное закрытие связи) отражается надписью «Not sending data» и включением синего светодиода на машинке.
Сама программа, в принципе листинг можно выложить и здесь, но как быть тем, кто хотел бы использовать пока готовый экзешник? Не знаю, как здесь прикрепить файл, поэтому спрашивайте, что-нибудь придумаем.

Дополнение:
Все же написал свою программу на VB.NET. Для ее установки нужен 4.0 Framework.
Программа умеет:
- показывать видео формата mjpeg с двух камер;
- работать с IP и USB камерами;
- имеет настройки управления - можно настроить любые свое команды под любые кнопки;
- IP, порты робота и камер также настраиваются.
Программа на 6й странице.


Сборка
Ну-с, соберем-ка все это воедино.
thatsworks.jpg

На фото – отладочная сборка. Использовалась для окончательной проверки перед установкой на автомобиль.
Соединим все по цепям:
table3.jpg

Предполагается, что к этому моменту у нас все отдельные элементы цепи собраны (драйвер моторов, стабилизатор питания, светодиоды).
Приведу свою последовательность, хотя понятно, что много зависит от конкретного автомобильчика.
Итак:
Установка Freeduino на два болтика в удобное место:
mounted freeduino_c.jpg

Далее сажаем на Freeduino собранный нами motorshield, приведу два фото для нагядности:
freeduino&motorshieldmountview_c.jpg

Видны: верхние PLS-штыри на плате драйвера для подцепления питания, светодиодов, движков; нижние PLS на плате драйвера для соединения их с PBS-разъемом на плате Freeduino. Совмещаем разъемы PLS-PBS между собой и:
mountedmotorshield_c.jpg

Freeduino теперь снизу, снаружи остались – разъем для питания и COM-порт.
Накрываем все хозяйство крышкой, прикручиваем шурупы/болты. В крышке напротив каждого разъема PLS выпилены отверстия, чтобы соответствующие разъемы можно было подключать/отключать без снятия крышки:
cover_c.jpg

Втыкаем PBSы:
wires to motorshield_c.jpg

Подбираем излишки проводов стяжкой:
mounted wires.jpg


Настал черед установки платформы. В моей выпилены все необходимые отверстия и установлены болты для креплений всего навесного оборудования и стяжек. Сама платформа выпилена из куска пластика от оргтехники. Амортизаторы (одно название, это просто пружины) прикрепил к этой же платформе, лишив, таким образом, машинку возможности наклоняться:
mounted plate.jpg

Теперь устанавливаем роутер. Предварительно я его подготовил, установив на него 4ре лепестка из жести:
mounted router.jpg

Такая конструкция позволила подвесить роутер как бы на пружинках:
front view router.jpg

Теперь прикручиваем стабилизатор со светодиодами. У меня это выглядит не аккуратно:
mounted leds.jpg

Осталось прикрутить камеру, аккумуляторы и кнопку включения:
mounted am&batt.jpg

Подбираем оставшиеся провода стяжками и:
sideview_c.jpg

Вуаля. Вот и все.

Запуск

Включаем питание роутера, питание силовой цепи. Помигает красный светодиод, зажгется синий. Freeduino готов и ждет авторизации.
На своем компе (ноутбуке) обеспечиваем соединение по WiFi (об этом уж не буду рассказывать) с роутером.
Запускаем браузер, устанавливаем передачу видео (см.выше). Запускаем программу на VB6, далее – по описанной выше методике работы с программой.
Аллилуйя?

Что осталось сделать

В планах по дальнейшему развитию проекта:
1. осталась кое-какая отладка, например, связь (не WiFi) не всегда стабильна, пока не понятна причина.
2. решение проблемы с вебкамерой.
3. решение проблемы с интерфейсом (одна программа).
4. испытания на дальность: стабильность передачи видео; ресурсоемкость батарей на предельных дистанциях.
5. перевод на веб-платформу: управление автомобилем через интернет.
6. новая платформа для автомобиля – базу нужно взять из мира RC, что даст представление об управлении от первого лица, через возможность управлять автомобильчиком на приличной скорости.

ПРОДОЛЖЕНИЕ ДАЛЕЕ

Добавлено спустя 2 минуты 46 секунд:
ПРОДОЛЖЕНИЕ


Список деталей и стоимость проекта

Таблица 4. Список деталей.
table4-1.jpg

table4-2.jpg

Итоговая стоимость данного проекта 7 596 руб. или 253 доллара. Можно сократить до 4-5 тыс.руб., если на компе есть COM-порт и вместо аккумуляторов использовать батарейки. Если делать полностью на аккумуляторах, то стоимость уже составит 9 325 руб., однако не стоит забывать, что 40% этой суммы – стоимость аккумуляторов. При этом, видимо придется посадить силовую цепь на стабилизатор питания типа 7805, чтобы не дать моторам просадить напряжение на аккумуляторах ниже 0,9 вольт на 1 аккумулятор под нагрузкой. Для наглядности и прикидки к своему проекту приведу еще одну таблицу:
Таблица 5. Варианты исполнения проекта.
table5.jpg

Другие варианты своих расходов можно рассчитать самостоятельно. Последняя ремарка – существенное влияние на итоговую цену может оказать роутер, у меня приведена цена, по которой я купил б/у. Новый стоит в районе 2 т.р.

Обращение к тем, кому это интересно настолько, чтобы сделать свой проект
Я убежден, что есть немало людей, кому, как и мне, интересна эта тема. Для единомышленников у меня есть предложение объединить свои усилия - в частности, остро стоит проблема с интерфейсом - пока он не удобен. Может, найдется энтузиаст-программист, кому не трудно написать и ничего не стоит выложить в открытый доступ такую программу. Мне кажется, что вместе мы смогли бы сделать все то, что будем делать по отдельности не только быстрее, но и лучше. В общем, присоединяйтесь!
Ну, теперь на этом все, спасибо за внимание тем, кто устоял до конца текста. Надеюсь, что кому-то смог оказать помощь.
Последний раз редактировалось IlgizN 05 июн 2011, 23:12, всего редактировалось 4 раз(а).

Re: WiFi робот руками чайника

Myp » 31 мар 2011, 10:17

ну ну
все бы такими "чайниками" были :D

работа проделана большая, в золото)

Re: WiFi робот руками чайника

avr123.nm.ru » 31 мар 2011, 10:23

Великолепно !

И макеточка что-то знакомая :lol: :ROFL:
Вложения
motorshield_c.jpg

Re: WiFi робот руками чайника

setar » 31 мар 2011, 10:29

однако широким использованием доступных готовых компонент здесь и не пахнет ;)
я про драйверы двигателей.
и... тема поехала на золото :friends:

Re: WiFi робот руками чайника

landStalker » 31 мар 2011, 10:34

Ух как раз кстати про драйвер двигателей!Спасибо!

Re: WiFi робот руками чайника

Rockman » 31 мар 2011, 10:40

Вах.. У меня тоже имеется Dir-320, есть мысль помучить его :) Freeduino рулит! Могу принять посильное участие в написание ПО для управления с компа на .Net, поскольку имею интерес к подобной теме. Через сервисы WCF можно было бы организовать управление с интернета через комп, на котором крутился бы сервак, непосредственно общающийся с роутером. Вообще, нужно продумать структуру. При наличии нескольких таких Wi-Fi роботов, сервак мог бы принимать какие-то решения по управлению машинками или анализировать исходящую от них информацию (с датчиков и.т.д.).
У меня несколько вопросов к автору или кто с этим сталкивался:
- Что если у контроллера usb порт уже есть, тогда может его через usb репитер можно завести на роутер?
- Позволяют ли прошивки роутера обмениваться с usb устройствами данными через usb разветвитель
- как выглядит обмен данными с PC - виртуальный com порт или также по TCP/IP на определенный порт данными обмениваются?

Re: WiFi робот руками чайника

boez » 31 мар 2011, 10:55

Молодец, отличный материал! Но однозначно стоит объединять усилия с forum10/topic9534.html.
И я надеюсь что в конце-концов появится какое-то решение не на базе ардуино, а на базе какого-нибудь контроллера OR, который будет подключаться к роутеру напрямую, без двойной конверсии в rs232 и обратно. И вебкамеру к dir-320 у DeaD'а вроде как получилось подключить, причем не IP, а более дешевую и экономичную USB.


Rambler\'s Top100 Mail.ru counter