Начало » Как се прави ?

Направете си WI FI робот

Направете си WI FI робот с който ще си обикаляте пред къщата и ще наблюдавате какво се случва там докато си стоите пред компютъра и го контролирате с подходящия софтуер  през мрежата. Това ви дава възможност да бъдете където си поискате стига да имате интернет. Ограничението на робот-колата зависи от покритието на вашата безжична връзка.Всичко  необходимо за  направата е описано.

Въведение

Wifi Робот: Дистанционно управлявана кола, контролирана през интернет или безжично през лаптоп от до 500 м. разстояние.Разполага с камера,предаваща на живо по мрежата,така че можете да управлявате колата без да имате пряка видимост, както и да шпионирате някого.

Наскоро ми направи впечатление рутерът Linksys WRT54GL .Той е доста податлив на хакване,тъй като работи под Линукс и част от хардуера му е добре анализиран.Написани са и доста алтернативни версии на софтуера му.Версията, която този проект ще използва е удобната за внасяне на промени и работеща под Линукс Open-WRT. Освен страхотния софтуер,този рутер търпи и доста хардуерни хакове.Разполагайки със евтин,податлив на хакване и вървящ под Линукс рутер,бях сигурен, че ще се получи нещо интересно.Така се роди идеята за Wifi Робота.

Целта на тази статия е да ви даде подробно описание на проекта,кактои да обясни някои важни детайли, засягащи софтуера и електрониката.. Не е типичното стъпка -по-стъпка ръководство, но би трябвало да е достатъчно за някой с достатъчно базови знания и мотивация да си направи собствен Wifi Робот.Всички сорс кодове са писани под лиценза GNU GPL v2, което значи,че можете да го ползвате свободно,както и да го подобрите! car_before_sm car_price_sm rx2_smpinout_sm

 

Разглобих около 20 радио коли.Почти всяка от тях използвачип Realtek RX2/TX2 или съвместима с изводите алтернатива. Линковете са за техните документации,така че няма да е трудно да настроим електрониките на колата,без да се налага да вкарваме купища от нашето окабеляване. Можем да сложим микроконтролер директно на изводите.(преден,заден,ляв и десен)и директно да контролираме колата.Така пряко намесвайки се в оригиналната схема на колата си спестяваме доста време и усилия.

Рутер     router_bolted_smrouter_car_smrouter_open_sm

Модифицирал съм моят 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) е по-безболезнения начин да го направите. Аз купих  този.

Управляваща верига  burned_sm

Всъщност използвам две контролни табла за колата.Причината е ,че прецаках оригиналните транзистори,които идваха с таблото на колата.За щастие успях да ги махна,както и RX2( който също изгоря) и така спасих управляващата верига.Повечето от тези радио-управляеми играчки имат около 6 кабела,влизащи към задвижването на мотора.Това е защото вътре в кутията има метален ексцентрик, който се движи с мотора и допълнителните кабели са нужни да определят в каква позиция е моторът.всяка различна радио-кола има различна настройка за този ексцентрик,затова еМНОГО полезно да ползваме този,който идва с колата.

Изгорих транзисторите, опитвайки се да подкарам веригата на ~16 V,при положение, че батерията имаше номинал от 9.6 V.Транзисторите яха за 5А, ноThe transistors are rated for 5A ноявно съм ги претоварил и те изгърмяха,обвити в ефектни пушеци. Взех таблото от друга кола и използвах неговите транзистори.Това го ползвам на 12 V и засега нямам проблеми.Все-пак транзисторите са доста нагряти.

Батерии

batteries_sm

Този проект гълта доста енергия от батериите.Затова купих качествени батерии за  радио-кола от 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 волтовата писта.

power_sm project_box_sm12v_regulator_sm

Всичката захранващяа електроника е на табло прототип и са поставени под кутията на проекта.

Верига на микроконтролера

pic_sch_sm

Упътване за свързването на 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_circuit_sm

 

Freeduino MaxSerial използва сериен извод 4 – DTR (data terminal ready) за да занули контролера и да му позволи да свали нов код.При нормална компютърна операция, този извод е или +10 или -10V в зависимост дали серийния порт е включен или изключен. Така или иначе-този извод е заземен за серийния порт на рутера и не е активен.Когато серийния порт на рутера започне да изпраща данни, MaxSerial се занулява. Това не е добре за нас.Така,че ще издърпаме DTR извода до  +9V. Тази бърза хардуерна модификация на практика добавя програмно-заключен режим и така не позволява новият код да бъде качен и микроконтролера няма да бъде занулен от серийния порт.Ако искате да го репрограмирате, просто превключете ключа.

Забележка:ако използвате USB версия на Arduino, може просто да свържетеRX & TX изводи към MAX232Aи после към серийния порт на рутера,така че тази модификация няма да е нужна. Аз имам само MaxSerial версията така че не мога да го потвърдя със сигурност.

camera

camera_inside_sm

Един от най забавните аспекти на този проект е, че колата може да се управлява без да е в зрителното ни поле.това става, благодарение на мрежовата камера. ТАзи, която съм избрал е Panasonic BL-C1A. На практика най-евтината мрежова камера с добри отзиви. Софтуерът е само за Windows и не е нищо особено, но върши работа.Нужен е за да получим картина от предаването на живо.Има и по-скъпи модели, които имат възможност за „панорама/наклон” но цената им е доста по-висока, а аз нямах нужда от тази функция.

Забележка:
Получих коментари, които ме поправиха,че
камерата всъщност има доста полезен уеб интерфейс,което на практика я прави използваема не само с Windows.Можете да ползвате тази команда за да включите живото предаване:
http://<camera_ip>/ImageViewer?Resolution=320×240?Quality=standard
Достъпните резолюции са: 640×480, 320×120, и 160×60. Опциите за контрол, които могат да се ползват са налично качество (компресия) ,настройки и прецизност,стандарт, и движение.

camera_dim

Качеството на видеото е доста добро.Възможно еот време на време да се получи замръзване на картината за секунда и после да продължи.Дори и при добра връзка.Предполагам,че контролерът не е достатъчно мощен едновременно да фокусира и да излъчва на живо.Но като цяло съм доволен от резултатите.

Поглеждайки вътре в камерата,се вижда че работи с процесор ARM на 250MHz.Според уебсайта им има също 64МВ RAM.Интересно ми е колко ли трудно ще бъде да подкарам Linux на това нещо…

Клаксон

horn_smbuzzer_circuit_sm

Исках да направя нещата по-забавни, можейки да бибиткам на хората. Беше сравнително просто. Купих за  клаксон  и го закачих за микроконтролера , използвайки транзистор за по-голям волтаж и сила на тока.

Сглобяване на всичко

pPrototype_smpBase_smpWires_sm


Използвах само основата на радио-колата.Всички декоративни и нефункционални части бяха премахнати. Монтирах камерата отпред, само с малка модификация в монтажния хардуер на камерата.мрежовите табла сложих от двете страни на предната част,закрепени с пластмасови болтове за да избегна проблеми с електропроводимостта.

Таблото на PIC контролера също беше закрепено с болтове отстрани на колата. Пробих и няколко дупки за да мога да прокарам кабелите. Тях нарочно ги бях оставил по-дълги, за да мога свободно да движа частите преди да ги закрепя окончателно. След като всичко беше монтирано, прибрах и завързахвисящите кабели за по-голяма компактност.А кабелите са доста-около 30, които трябваше да бъдат насочени от/до предната и задната част на колата,без да броим Етернет кабела.

pWiredUp_smproject_box_sm

Всички мрежови вериги се намират в кутията на проектав задната част на колата.,с изключение на Регулатора LT1083 7.5A ,който ена дъното на колата,тъй като го добавих в последния момент след изгарянето наедна платка.диод в задната част на кутията свети червено, докато рутера зарежда,а когато изпрати съобщение за готовност към микроконтролера-светва зелено и знам,че мога да се свържа с клиентското приложение на VB. Този диод беше много полезен и при дебъгването.

pCar_smpRobot_sm

Цялата електроника беше тествана на демонстрационна платка, преди да бъде инсталирана на колата.Батериите са подсигурени с лепило и свински опашки.Рутерът беше прекалено широк,за да се постави върху колата без модификации,така че добавих малко плексиглас за да разширя основата на колата.

Евентуални добавки
Има няколко неща, които би било интересно ако се добавят:
Фарове-много ярки диоди. Лесно могат да се вържат към микроконтролера.
Сензор за изразходвания ток,който да измерва колко ток харчи колата и да го изписва на екрана. Микроконтроерът може да прочита данните от сензора и да ги препраща.

Софтуер

Има три основни части софтуер, които направиха възможен този проект.Приложението 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 i
n към рутера ви и след това
# 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:

vbsoftware_sm

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
Архивът съдържа всички бинарни кодове и сорс файлове, споменати по-горе.

Измервания и характеристики

Максимална скорост  rStart

Колата изминава 3m за 0.7 секунди
Максимална скорост: 4.3m/s = 15.5km/h = 9.6 miles/h

rEnd

Разстояние
Занесох рутера на голямо поле.Връзката с лаптопа ми беше възможна до 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, така че няма проблем.За моторът не открих информация.



4 юли 2009 Няма коментари

Вашият коментар!

Вие трябва да бъдетелогнати за да публикувате коментар.