Направете си WI FI робот
| Категория: Как се прави ? | юли 4th, 2009 |
Направете си WI FI робот , с който ще си обикаляте пред къщата и ще наблюдавате какво се случва там докато си стоите пред компютъра и го контролирате с подходящия софтуер през мрежата.Това ви дава възможност да бъдете където си поискате стига да имате интернет.Ограничението на робот-колата зависи от покритието на ва вашата безжична връзка.Всичко необходимо за направата е описано.
Въведение
Wifi Робот: Дистанционно управлявана кола, контролирана през интернет или безжично през лаптоп от до 500 м. разстояние.Разполага с камера,предаваща на живо по мрежата,така че можете да управлявате колата без да имате пряка видимост, както и да шпионирате някого.
Наскоро ми направи впечатление рутерът Linksys WRT54GL .Той е доста податлив на хакване,тъй като работи под Линукс и част от хардуера му е добре анализиран.Написани са и доста алтернативни версии на софтуера му.Версията, която този проект ще използва е удобната за внасяне на промени и работеща под Линукс Open-WRT. Освен страхотния софтуер,този рутер търпи и доста хардуерни хакове.Разполагайки със евтин,податлив на хакване и вървящ под Линукс рутер,бях сигурен, че ще се получи нещо интересно. Така се роди идеята за Wifi Робота.
Целта на тази статия е да ви даде подробно описание на проекта,както и да обясни някои важни детайли, засягащи софтуера и електрониката.. Не е типичното “стъпка -по-стъпка” ръководство, но би трябвало да е достатъчно за някой с достатъчно базови знания и мотивация да си направи собствен Wifi Робот. Всички сорс кодове са писани под лиценза GNU GPL v2, което значи,че можете да го ползвате свободно,както и да го подобрите!


Разглобих около 20 радио коли.Почти всяка от тях използва чип Realtek RX2/TX2 или съвместима с изводите алтернатива. Линковете са за техните документации,така че няма да е трудно да настроим електрониките на колата,без да се налага да вкарваме купища от нашето окабеляване. Можем да сложим микроконтролер директно на изводите.(преден,заден,ляв и десен)и директно да контролираме колата.Така пряко намесвайки се в оригиналната схема на колата си спестяваме доста време и усилия.
Модифицирал съм моят WRT54GL за да му монтирам два сериийни порта и 1 ГБ SD мемори карта(играеща ролята на 1 гигабабайтов харддиск)Мемори картата не е използвана в този проект, но един от серийните портове е.Единият е порта за конзолата, другият,който всъщност ще използваме е TTS/1.за този проект използвам Open-WRT White Russian v0.9. В случая нямаме нужда от последните версии и функции на софтуера.Ръководството за сглобяване използва тази версия и затова я избрах.
МАлко по-нататък в статията съм дал линкове, които да ви помогнат с връзването на серийния порт.
Избор на Микроконтролер
Тествах три различни микроконтролера за този проект.Ето резултатите:
| Microcontroller | PIC16F628A | Arduino (ATmega168) Freeduino MaxSerial |
AVR Butterfly (ATmega169) |
| Pros | Цена.
контролируемост на софтуера. |
Лесен за програмиране („C” с много вградени библиотеки). интегриран сериен. готово сглобен, почти няма нужда от запояване. |
По-лесен за програмиране от PIC (C). интегриран сериен. няма нужда от много запояване. |
| Cons | труден за програмиране. трябва ръчно да се окабели схемата. нуждае се от допълнителен хардуер(MAX232A). нуждае се от допълнителен програмер. |
Цена | Буутлоудър грешка (виж долу) интегрираната периферия причинява странни изхосни волтажи. цена |
Аз избрах PIC16F628A заради:
- Имам много от тях
- Имам опит в работата с тях
- Исках табло с малки отпечатъци, а този беше с най-малки.
- Исках пълен контрол над това,какво ще прави кодът.
Freeduino MaxSerial е вторият ми избор и наистина ми хареса колко лесно се настройва.
Първоначало използвах AVR Butterfly табло. Работеше добре,докато не му се изтощиха батериите.Получи се и грешка в буутлоудера,която поврежда кода и не позволява репрограмиране, докато не заредиш нов такъв.За мен- просто колата си работеше един ден а на другият-не!Отне ми доста време да открия и оправя проблема,така че се отказах от тази контролна система. Също така открих,че изходните волтажи са доста непредвидими,туй като изходите управляват също и интегрираната периферия,като LCD екрана.
По-долу съм включил сорс кодовете за микроконтролиращите системи PIC и Arduino.И двете са тествани, така че използвайте която ви е удобно.Arduino (Freeduino MaxSerial) е по-безболезнения начин да го направите.Аз купих този.
Всъщност използвам две контролни табла за колата.Причината е ,че прецаках оригиналните транзистори,които идваха с таблото на колата.За щастие успях да ги махна,както и RX2( който също изгоря) и така спасих управляващата верига.Повечето от тези радио-управляеми играчки имат около 6 кабела,влизащи към задвижването на мотора.Това е защото вътре в кутията има метален ексцентрик, който се движи с мотора и допълнителните кабели са нужни да определят в каква позиция е моторът.всяка различна радио-кола има различна настройка за този ексцентрик,затова еМНОГО полезно да ползваме този,който идва с колата.
Изгорих транзисторите, опитвайки се да подкарам веригата на ~16 V,при положение, че батерията имаше номинал от 9.6 V.Транзисторите яха за 5А, но The transistors are rated for 5A но явно съм ги претоварил и те изгърмяха,обвити в ефектни пушеци. Взех таблото от друга кола и използвах неговите транзистори.Това го ползвам на 12 V и засега нямам проблеми.Все-пак транзисторите са доста нагряти.
Батерии
Този проект гълта доста енергия от батериите.Затова купих качествени батерии за радио-кола от ebay за $50.Те са на 3800mAhи идват със 1.8А зарядно устройство.Може да ги намерите в eBay. Всяка батерия се зарежда за около час и половина.Те са 7.2 V, но току-що заредени показват ~8.3 V, а изтощени(да не могат да задвижат колата ~7.1 V.
Замених всички конектори за батерии на колата със стандартни такива на ATX захранване Molex.Това беше с цел-да мога да използвам от евтините конектори,каквито вече имах и щеше да е по-лесно да направя сплитер-конектор за замерване на захранването.Батериите са свързани на серии от по 16V, когато са напълно заредени.
Захранващи писти
| 5V (7805 1A регулатор) |
9.2V (от 12V-7812 писта) |
12V (7812 1A регулатор) |
12V (LT1083 7.5A Регулатор) |
| микроконтролер | камера контролер за управлението клаксон |
wifi рутер | Табло за управление
с моторен контролер |
9.6 волтовата писта е захранена чрез слагане на 4 диода в серии заедно със 7812 12V писта. Един диод изисква ~0.7V за да се включи.Чрез поставянето на 4 такива в серии, пускаме ~2.8V по тях и сега имаме 9V за устройствата,които изискват по-малко от 12V. След като изгорих първата серия от транзистори да подкарам веригата на по-нисък волтаж.7812 регулатора е приложим само за 1A но моторите ще харчат доста повече от това.Digikey предлагат 7.5A 12V регулатор за около $14 който купих. Закачих го към охлаждане,тъй като мислех че ще се нагрява доста,но след като това не стана за доста време,охлаждането отпадна.
Не ми се рискуваше да изгоря и веригата за контрол на управлението,кака че я включих на най-близката до оригиналния волтаж на колата писта.Камерата изискваше 9V и клаксона не звучеше достатъчно силно, когато опитах на 5 волтовата писта,затова тези устройства са на 9.2 волтовата писта.
Всичката захранващяа електроника е на табло прототип и са поставени под кутията на проекта.
Верига на микроконтролера
Упътване за свързването на Arduino
| Сигнал | Arduino извод |
| Напред | Digital Pin 8 |
| Назад | Digital Pin 9 |
| Ляво | Digital Pin 10 |
| Дясно | Digital Pin 11 |
| Зелен LED | Digital Pin 7 |
| Червен LED | Digital Pin 6 |
| Клаксон | Digital Pin 5 |
Freeduino MaxSerial серийния порт може да бъде свързан със стандартен сериен кабел към серийния порт на рутера.
Freeduino MaxSerial използва сериен извод 4 – DTR (data terminal ready) за да занули контролера и да му позволи да свали нов код.При нормална компютърна операция, този извод е или +10 или -10V в зависимост дали серийния порт е включен или изключен. Така или иначе-този извод е заземен за серийния порт на рутера и не е активен.Когато серийния порт на рутера започне да изпраща данни, MaxSerial се занулява. Това не е добре за нас.Така,че ще издърпаме DTR извода до +9V. Тази бърза хардуерна модификация на практика добавя програмно-заключен режим и така не позволява новият код да бъде качен и микроконтролера няма да бъде занулен от серийния порт.Ако искате да го репрограмирате, просто превключете ключа.
Забележка:ако използвате USB версия на Arduino, може просто да свържетеRX & TX изводи към MAX232Aи после към серийния порт на рутера,така че тази модификация няма да е нужна. Аз имам само MaxSerial версията така че не мога да го потвърдя със сигурност.
Един от най забавните аспекти на този проект е, че колата може да се управлява без да е в зрителното ни поле.това става, благодарение на мрежовата камера.ТАзи, която съм избрал е Panasonic BL-C1A. На практика най-евтината мрежова камера с добри отзиви.Софтуерът е само за Windows и не е нищо особено, но върши работа.Нужен е за да получим картина от предаването на живо. Има и по-скъпи модели, които имат възможност за „панорама/наклон” но цената им е доста по-висока, а аз нямах нужда от тази функция.
Забележка:
Получих коментари, които ме поправиха,че камерата всъщност има доста полезен уеб интерфейс,което на практика я прави използваема не само с Windows.Можете да ползвате тази команда за да включите живото предаване:
http://<camera_ip>/ImageViewer?Resolution=320×240?Quality=standard
Достъпните резолюции са: 640×480, 320×120, и 160×60. Опциите за контрол, които могат да се ползват са налично качество (компресия) ,настройки и прецизност,стандарт, и движение.
Качеството на видеото е доста добро.Възможно е от време на време да се получи замръзване на картината за секунда и после да продължи.Дори и при добра връзка.Предполагам,че контролерът не е достатъчно мощен едновременно да фокусира и да излъчва на живо.Но като цяло съм доволен от резултатите.
Поглеждайки вътре в камерата,се вижда че работи с процесор ARM на 250MHz.Според уебсайта им има също 64МВ RAM.Интересно ми е колко ли трудно ще бъде да подкарам Linux на това нещо…
Клаксон
Исках да направя нещата по-забавни, можейки да бибиткам на хората.Беше сравнително просто.Купих за клаксон и го закачих за микроконтролера , използвайки транзистор за по-голям волтаж и сила на тока.
Сглобяване на всичко
Използвах само основата на радио-колата.Всички декоративни и нефункционални части бяха премахнати.Монтирах камерата отпред, само с малка модификация в монтажния хардуер на камерата.мрежовите табла сложих от двете страни на предната част,закрепени с пластмасови болтове за да избегна проблеми с електропроводимостта.
Таблото на PIC контролера също беше закрепено с болтове отстрани на колата.Пробих и няколко дупки за да мога да прокарам кабелите.Тях нарочно ги бях оставил по-дълги, за да мога свободно да движа частите преди да ги закрепя окончателно. След като всичко беше монтирано, прибрах и завързах висящите кабели за по-голяма компактност.А кабелите са доста-около 30, които трябваше да бъдат насочени от/до предната и задната част на колата,без да броим Етернет кабела.
Всички мрежови вериги се намират в кутията на проекта в задната част на колата.,с изключение на Регулатора LT1083 7.5A ,който е на дъното на колата,тъй като го добавих в последния момент след изгарянето на една платка.диод в задната част на кутията свети червено, докато рутера зарежда,а когато изпрати съобщение за готовност към микроконтролера-светва зелено и знам,че мога да се свържа с клиентското приложение на VB. Този диод беше много полезен и при дебъгването.
Цялата електроника беше тествана на демонстрационна платка, преди да бъде инсталирана на колата.Батериите са подсигурени с лепило и свински опашки.Рутерът беше прекалено широк,за да се постави върху колата без модификации,така че добавих малко плексиглас за да разширя основата на колата.
Евентуални добавки
Има няколко неща, които би било интересно ако се добавят:
Фарове-много ярки диоди.Лесно могат да се вържат към микроконтролера.
Сензор за изразходвания ток,който да измерва колко ток харчи колата и да го изписва на екрана.Микроконтроерът може да прочита данните от сензора и да ги препраща.
Софтуер
Има три основни части софтуер, които направиха възможен този проект. Приложението VB6 Wifi_Robot (рабптещо под Windows), CarServer писано под С и функциониращо на рутера чрез OpenWRT WhiteRussian v0.9 (Linux), и фърмуеъра на микроконтролера. Предоставям ви тестваният фърмуеър за PIC16F628A микроконтролера, както и за Arduino (Freeduino MaxSerial). Всичкият софтуер е направен под GNU GPL v2 лиценз.
Долунаписаните инструкции предполагат, че имате инсталиран и свързан към интернет Linksys WRT54GL със OpenWRT WhiteRussian v0.9Вижте това упътване за инструкции за инсталацията на OpenWRT.
Инсталиране на CarServer
Ако просто искате да използвате софтуера
SSH in към рутера ви и след това …
# cd /tmp
# wget http://www.jbprojects.net/projects/wifirobot/carserver_1_mipsel.ipk
# ipkg install ./carserver_1_mipsel.ipk
Компилиране и инсталиране на CarServer
Ако искате да видите как работи или да го модифицирате
Ще трябва да свалите OpenWRT SDK (само за Linux ) и да следвате следните инструкции за компилиране: Eric Bishop’s писане и компилиране на проста програма за OpenWRT (просто следвайте част I)
Makefile поставете в /OpenWrt-SDK-Linux-i686-1/package/carserver/
Makefile поставете в /OpenWrt-SDK-Linux-i686-1/package/carserver/src
carserver.c поставете в /OpenWrt-SDK-Linux-i686-1/package/carserver/src
Компилираният ipkg ще се покаже в /OpenWrt-SDK-Linux-i686-1/bin/packages. После
# scp carserver_1_mipsel.ipk root@<router_ip>:/tmp/.
за да го копирате в рутера. SSH in и инсталирайте.
Подкарване на серийния порт
Ще трябва да използваме TTS/1, така че ако сте добавили само един сериен порт,убедете се че е точно този. Предполагам имате инсталиран OpenWRT WhiteRussian v0.9 SSH в рутера. Ето инструкциите:
# ipkg update
# ipkg install setserial
# cd /usr/sbin
# wget http://www.jbprojects.net/projects/wifirobot/stty.tgz
# tar -zxvf stty.tgz
# chmod 755 stty
Добавете следните редове към /etc/init.d/custom-user-startup за да накарате серииния порт да работи при стартиране и за да може CarServer да стартира автоматично. /usr/sbin/setserial /dev/tts/1 irq 3
/usr/sbin/stty -F /dev/tts/1 raw speed 9600
/bin/carserver &
Стартиране на Wifi_Robot Client App:
wifi_robot_client.zip
този файл съдържа сорс кода за VB6 и за компилираното EXE. Може просто да извлечете wifi_robot_client.exe и config.txt не ви трябва да се занимавате с програмистки подробности. проектът ще се отвори и компилира в VB6 ако искате да го модифицирате. Върви само под Windows но ако някой иска и може да направи Linux алтернатива, ще се радвам да я публикувам тук и да му отдам заслуженото.Този софтуер е само леко променен от проекта Computer Controller RC Car , публикуван преди няколко години.
Фърмуеър за Микроконтролера
PIC
Нужен ви е PIC програмер за да запишете фърмуеъра.Лично аз използвам P16PRO40, който купих от eBay. можете сами да компилирате HEX , използвайки Microchip’s MPLAB oили просто да свалите и програмирате предоставеният HEX .
Arduino (Freeduino MaxSerial)
Следвайте тези инструкции за да накарате вашият Arduino да работи по-бързо. Кодът може да бъде свален в Freeduino MaxSerial без допълнителен програмер
car_arduino.c
Ако използвате Freeduino MaxSerial, убедете се че сте направили малката модификация която ще попречи на Freeduino да се занулява всеки път щом получи информация от серииния порт на рутера.
Сваляне на всички файлове
wifi_robot_software.zip
Архивът съдържа всички бинарни кодове и сорс файлове, споменати по-горе.
Измервания и характеристики
Колата изминава 3m за 0.7 секунди
Максимална скорост: 4.3m/s = 15.5km/h = 9.6 miles/h
Разстояние
Занесох рутера на голямо поле.Връзката с лаптопа ми беше възможна до 500 метра. (на 1Mb). След това разстояние, веше не можех да се свържа.Алтернативният фърмуеър (OpenWRT) позволява да се увеличи периметъра на действие.Аз пробвах, но при мен не се забеляза увеличване.Може би лаптопа ми(Dell Inspiron 6000), който по принцип има добра wifi свързваща способност да е ограничаващият фактор.
Измервателни данни
Контролни сигнали: 3.5KB/s
Камера: 50-190KB/s
Използваната от камерата памет зависи от това,колко осветено е изображението.Колкото повече светлина-толкова повече зает ресурс.
Ако колата трябваше да се управлява от много далече,рутерът щеше да поддържа по-ниска скорост, докато не достигне1Mb (megabit). При тази скорост, камерата няма да може да изпраща данни, но контролните сигнали ще работят.
Измервания на мощността
Камера
| Time (seconds) |
Current (mA @ 15.3V) |
Current (mA @ 9.2V) |
Power (W) |
| 0 | 39 | 65 | 0.6 |
| 5 | 58 | 96 | 0.9 |
| 8 | 98 | 163 | 1.5 |
Рутер
| Time (seconds) |
Current (mA @ 15.3V) |
Current (mA @ 12V) |
Power (W) |
| 0 | 185 | 235 | 2.8 |
| 23 | 263 | 335 | 4.0 |
| 30 | 250 | 319 | 3.8 |
Клаксон
| Time (seconds) |
Current (mA @ 15.3V) |
Current (mA @ 9.2V) |
Power (W) |
| 0 | 40 | 66 | 0.6 |
Кола
| State | Current (mA @ 15.3V) |
Current (mA @ 12V) |
Power (W) |
| Booting 0 – 23s |
Fluctuates ~400 |
510 | 6.1 |
| PIC+LED, Voltage Regulators, 2 control circuit boards (no router or camera) |
102 | 130 | 1.6 |
| After Booting, not driving (steady-state) |
479 | 611 | 7.3 |
| Driving – Accelerating | 5500 | 7012 | 84.1 |
| Driving – Constant Speed | 4000 | 5100 | 61.2 |
Спирачките изискват много малко мощност.takes very little power. Веригата на ексцентрика спира да върти колелата, веднага щом отчете че са обърнати.Това става за по-малко от секунда.
От опита си заключих, че батериите издържат около час и половина при нормално ползване.
Температури/Пренагряване
От горните замервания виждаме, че транзисторите надвишават 7A @ 12V при ускоряване. Тъй като са предназначени за 5А, стават доста горещи.
Температурата им след 25 минути ползване на закрито беше 89°C. Моторът също доста се загря- 85°C. При каране на открито температурите не бяха толкова високи(може би защото на открито се кара с по-постоянна скорост). Транзисторите понасят до 150°C, така че няма проблем.За моторът не открих информация.










































может пригодится…
Направете си WI FI робот , с който ще си обикаляте пред къщата и ще наблюдавате какво се случва там докато си[...]…