Управлявайте машината чрез wifi. Създаване на бюджетен кораб-чудо с WiFi контрол, базиран на ESP8266

10.09.2021

Този проект описва създаването на Wi-Fi машина с управление на модел автомобил през интернет или с помощта на лаптоп с Wi-Fi на разстояние до 500 метра. Машината е оборудвана с камера в реално време, която ви позволява да контролирате машината, като гледате екрана на лаптопа.

Преди време намерих рутер Linksys WRT54GL. Много е удобен за хакване и модифициране, защото... работи с Linux. За този рутер са написани куп алтернативни фърмуери. Този проект използва персонализиран фърмуер на Linux Open-WRT. В допълнение към големите възможности за модифициране на софтуера на този рутер, има много възможни хардуерни модификации и хакове. Тоест имах на разположение евтин и хакваем рутер с вграден Linux - знаех, че да правя нещо с него е добре и удобно. Така се роди идеята за Wi-Fi машина.

Целта на тази статия е да предостави общ прегледна проекта и показват някои особености на изпълнението на софтуера и електронните части. Тази статия не е ръководство стъпка по стъпка за сглобяване на машината, но има достатъчно информация за хора с добра мотивация и основни познанияпо електроника и програмиране. Всички програми са написани съгласно условията на GNU Open License v2, така че кодът може да се използва свободно и подобрява.

Хардуер

Пишеща машина

Добавянето на мрежова камера, рутер, тежки батерии, допълнителни схеми и куп кабели добавя много допълнително тегло, а повечето модели не са предназначени за това. Следователно, заради всички екстри, е необходимо да се намери доста голяма RC кола. Използвани радиоуправляеми можете да намерите в интернет. превозни средствабез дистанционно управление за 200-300 рубли. Купих няколко машини, за да извадя части от тях. 1:10 или по-голямо превозно средство ще се справи добре и вероятно няма да искате нищо по-малко. Купих тази машина за 150 рубли.

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

Модифицирах моя WRT54GL, така че да има 2 серийни порта и 1GB SD карта (работи като твърд дискза 1 GB). Този проект не използва SD карта, но се използва един от серийните портове. Моят рутер има два серийни порта: конзолния порт и TTS/1, който ще използваме. За този проект използвам OpenWRT White Russian v0.9. Има по-нови версии, но не са ни необходими за този проект. Ръководството за компилиране на програмата (вижте по-долу) използва тази версия, така че аз избрах нея.

Избормикроконтролер

Оцених три различни микроконтролера за този проект. По-долу е показано обобщение на оценката.

Микроконтролер

PIC16F628A

Arduino (ATmega168)
Freeduino MaxSerial

AVR Butterfly (ATmega169)

Цена.
Ниво на контрол на програмата.

Много лесен за програмиране (C с много вградени библиотеки).

Готов комплект за разработка, практически не се изисква запояване.

По-лесен за програмиране от PIC.
Интегриран сериен интерфейс.
Рядко се налага запояване.

Против

Труден за програмиране (асемблер).
Веригите трябва да бъдат свързани ръчно.
Необходим е допълнителен хардуер (MAX232A).
Изисква се програмист.

Грешки на зареждащия механизъм (вижте по-долу).
Интегрираните периферни устройства имат странни изходни напрежения.
Цена.

Избрах PIC16F628A по няколко причини:

  • Имах много от тях.
  • Имам малък опит с тях.
  • Исках малка платка и PIC платката беше най-малката от всичките 3 опции.
  • Исках да имам пълен контрол върху действията на програмата и това е напълно възможно с програмирането на асемблер.

Arduino (Freeduino MaxSerial) беше вторият ми избор, който много ми хареса заради лесното му сглобяване и работа. Има и добра подкрепа от общността и лекота на използване.

Първоначално използвах развойната платка AVR Butterfly. Работеше добре, докато един ден батериите умряха. Има грешка в буутлоудъра на AVR Butterfly, която е описана подробно тук. Той поврежда кода и не позволява да бъде препрограмиран с друг буутлоудър. Машината работеше един ден, а на другия не. Отне известно време за намиране на проблема и много малко време за отстраняването му, така че не продължих да използвам тази платка като система за управление. Аз също открих това изходно напрежениена щифтовете могат да бъдат непредвидими, тъй като в допълнение към управлението на периферни устройства, те управляват LCD екрана.

По-долу е изходният код за PIC и Arduino. И двете са тествани, така че използвайте това, което ви е по-комфортно и знаете. Arduino (Freeduino MaxSerial) е най-много най-добрият вариантЗа бърз старт. купих го.

Контролна верига

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

Изгорих транзисторите като подадох захранващо напрежение 16V вместо стандартното 9.6V. Транзисторите са предназначени за ток 5А, но май ги натоварих много и започнаха да пушат живописно. Взех платка от друга RC кола и използвах транзистори от там. Пуснах тази верига на 12V и не създаде никакви проблеми, въпреки че транзисторите станаха доста горещи. Използването на стандартни машинни платки, вместо да направите свой собствен H-мост, спестява много време и пари.

Този проект използва мощни батерии. Купих ги за RC автомобили от висок клас за $50 + доставка от eBay. Те имат 3800 mAh и зарядно устройство 1.8A включени. Можете да ги намерите в търсачката на eBay. Една батерия се зарежда за около 1,5 часа (от пълно разреждане). Напрежението им е 7.2V, но само заредени им е около 8.3V, а когато са напълно разредени (вече не могат да захранват колата) дават около 7.1V.

Смених всички конектори на батериите със стандартни Molex ATX конектори. Това беше направено, за да използвам евтини конектори, от които имах много, които улесняват направата на сплитер за измерване на ток. Батериите, свързани последователно, произвеждат около 16 V, когато са напълно заредени.

Линията 9.6V се получава чрез инсталиране на 4 диода последователно с 12V шина, взета от 7812. Падът на напрежението върху диода е около 0.7V. С поставянето на 4 диода в един ред губим около 2.8V и печелим 9V за устройства, които се нуждаят от по-малко от 12V. След като изгорих транзисторите, реших да захранвам повече веригата ниско напрежение. 7812 е оценен на 1A, а двигателите черпят значително повече. Digikey продава регулатор 7.5A 12V за около $14 и аз го купих. Закачих го за радиатора, защото мислех, че може да стане горещо. След като работи известно време, дори не се нагорещи, така че няма нужда от радиатор.
Не искам да рискувам управляващата верига, така че го захранвам с напрежение, възможно най-близко до стандартното. Камерата изисква 9V, сигналът е доста тих, когато се захранва от 5V, така че всички тези устройства работят на 9,2V линия.

Цялата силова електроника е сглобена на макетна платка и е разположена в корпус.

Схеми

Arduino:

Arduino връзка:
Напред - щифт 8
Гръб - щифт 9
Ляво - щифт 10
Вдясно - щифт 11
Зелен светодиод - щифт 7
Червен светодиод - щифт 6
Сигнал - Pin 5

Серийният порт Freeduino MaxSerial може да бъде свързан към серийния порт на рутера с помощта на стандартен сериен кабел.

Freeduino MaxSerial използва сериен пин 4 - DTR (Data Terminal Ready), за да нулира микроконтролера и да позволи зареждането на нов код. При нормална работас компютър на този щифт или +10 V или -10 V в зависимост от това дали сериен порт. Въпреки това, на серийния порт на рутера, този щифт е заземен и неактивен. Когато рутерът започне да предава данни през серийния порт, MaxSerial се нулира. Това не ни устройва. Ще дръпнем DTR щифта до +9V. Тази проста промяна активира режима затворена програма, тоест микроконтролерът не може да се презарежда и нулира през серийния порт. Ако трябва да презаредите микроконтролера, просто трябва да завъртите превключвателя.

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

Камера

Един от основните аспекти на този проект е, че машината може да се управлява без пряка видимост с помощта на мрежовата камера Panasonic BL-C1A. Това е почти най-евтината кабелна мрежова камера с добри отзиви. Софтуерът е достъпен само за Windows - това е малък, но поносим недостатък. За да видите изображението софтуерне се изисква. По-скъпите модели имат възможности за панорамиране и накланяне, но са значително по-скъпи и функционалността им е ненужна.

Камерата има много удобен уеб интерфейс, което я прави не само Windows устройство. Можете да видите изображението на камерата, като използвате следната команда:
http:///ImageViewer?Resolution=320x240?Quality=standard
Налични резолюции 640x480, 320x120, 160x60. Налично качество (компресия) прецизност (качество), стандарт (стандарт), движение (движение).

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

Поглеждайки вътрешността на камерата, можете да видите, че тя се захранва от 250 MHz ARM процесор. Според информация от официалния сайт има и 64MB RAM. Чудя се колко трудно би било да накарам Linux да работи с това...

Сглобяване

От колата е ползвана само ходовата част. Премахнати са всички декоративни и нефункционални части. Камерата е монтирана отпред с лека модификация на стандартната стойка. Платката беше монтирана отпред на машината и закрепена с пластмасови гайки и болтове, за да се предотврати късо съединение.

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

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

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

Софтуерна част

За този проектНеобходими са 3 програми. Клиентско приложение VB6 Wifi_Robot на Windows, CarServer, написано на C и работещо на рутер, работещ с OpenWRT WhiteRussian v0.9 (Linux), както и фърмуер на микроконтролера. Тествах фърмуер за микроконтролера PIC16F628A и популярния Arduino (Freeduino MaxSerial). Целият софтуер се разпространява съгласно лицензионното споразумение с отворен код GNU v2.

Следните инструкции предполагат, че имате свързан с интернет Linksys WRT54GL с инсталиран OpenWRT WhiteRussian v0.9. Ръководството за инсталиране на OpenWRT можете да намерите тук.

Инсталиране на CarServer
Ако искате да използвате софтуера
Влезте през SSH във вашия рутер, след което...
# cd /tmp
# wget http://www.jbprojects.net/projects/wifirobot/carserver_1_mipsel.ipk
# ipkg инсталиране ./carserver_1_mipsel.ipk

Компилиране и инсталиране на CarServer
Ако искате да видите как работи или да го промените

Ще трябва да изтеглите OpenWRT SDK (само за Linux) и да следвате това ръководство за програмиране: Писане и компилиране на проста програма OpenWRT от Ерик Бишоп (просто следвайте първата част)
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@:/tmp/.
за копиране на рутера. Влезте през SSH и инсталирайте

Има един безплатен електронна книгапосветен на серията рутери WRT54G, която се нарича Linksys WRT54G Maximum hacking. Мисля, че е безплатно. Може да се види в Google Books. Може да бъде изтеглен и от тази връзка. Тази книга обхваща как да добавите сериен порт, да конфигурирате софтуер и много други хакове и модификации. Свързах се с един от авторите. Това не е безплатна електронна книга. Можете да го видите в Google Books и да подкрепите авторите, като го закупите от Amazon. Това е страхотна книга!

Получаване на работещ сериен порт
Ние използваме TTS/1, така че ако сте добавили един сериен порт, уверете се, че това е всичко. Ако имате инсталиран OpenWRT WhiteRussian v0.9, влезте в SSH. Инструкциите в горната книга са малко остарели. Ето актуализираната версия:
# ipkg актуализация
# ipkg инсталирайте 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 необработена скорост 9600
/bin/carserver&

Стартиране на клиентското приложение Wifi_Robot

Този файл съдържа изходния код на VB6 и компилирания EXE. Можете просто да извлечете wifi_robot_client.exe и config.txt, ако не искате да програмирате. Можете да отворите и компилирате VB6, ако искате да го промените. Тази програма е просто леко модифицирана програма от проекта за радиоуправляема кола, управлявана от компютър.

Софтуер за микроконтролер

СНИМКА
Ще ви трябва PIC програмист. Използвам P16PRO40, закупен от eBay. Има много програмисти, които можете да закупите или изградите сами. Можете сами да компилирате HEX с помощта на Microchip MPLAB или просто да изтеглите и флашнете готов HEX файл. PIC asm се основава на този тест PIC16F628 UART.

Arduino (Freeduino MaxSerial)
Програмата може да се зареди във Freeduino MaxSerial без допълнителен програмист.
Ако използвате Freeduino MaxSerial, уверете се, че сте направили малка хардуерна модификация, която ще попречи на Freeduino да се нулира всеки път, когато получава данни от рутера през серийния порт. Вижте по-горе за повече подробности.

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

Максимална скорост
Да се ​​изчисли максимална скоростНаправих две отметки на разстояние 3м една от друга и свалих машината няколко пъти. Камерата записва 30 кадъра в секунда, т.н възможна грешкакамери +/- 3,3% и +/- 1% грешка на разстоянието.

Колата изминава 3 метра за 0,7 секунди (21 от 30 кадъра за 1 секунда).
Максимална скорост: 4,3 m/s = 15,5 km/h = 9,6 mph

Разстояние
Взех рутера в голямо поле. Успях да се свържа от моя лаптоп на разстояние до 500 м (1 Mbit). Отвъд това разстояние вече не можех да се свържа. Алтернативният фърмуер (OpenWRT) ви позволява да увеличите изходната мощност. Опитах се да променя тази стойност, но нямаше ефект върху разстоянието. Може би моят лаптоп (Dell Inspiron 6000), който винаги е имал добър WiFi (по-добър от 6400 на моя приятел), може да е ограничаващият фактор.

При създаването на бота бяха поставени следните задачи:

  • Контрол на бот безжична мрежа
  • Наличие на онлайн камера
  • Лесно програмиране
Бордови компютър

За бордовия компютър избрах двуядрен Android миникомпютър UG-802, който беше под ръка. като операционна система- пълноценна дистрибуция на Linux, сборка на Ubuntu от Linaro.

Първо, трябваше да направим нещо относно проблемния вграден wifi адаптер, който упорито отказваше да стартира под преустроеното ядро. Основното решение беше да го разпоите и да инсталирате втори USB хост конектор, в който можете да включите нормален usb wifi (или дори 3G модем). Веднага казано, сторено, вградената wifi платка беше разпоена и на нейно място беше запоен втори хост.

Първа проверка на вътрешния USB хост:

Крайният изглед на инсталирания USB хост:

Колесна платформа

Веднъж поръчах платформа Ardubot и колела с двигатели за нея, но така и не стигнах до нея. Без колебание беше решено да се използва. Върху него е монтирана преобразувателна платка от 12 до 5 волта, откъсната от зарядно за кола, специално закупено в магазин (микросхемата, използвана в него, има по-широк обхват входно напрежение). Литиево-полимерната батерия от 11,1 V/1250 mA вече беше от катастрофирал модел на самолет в миналото. Платката Ardubot трябваше да бъде леко модифицирана поради характеристиките на контролната платка (пистата е отрязана от D9 и запоена към D7). Инсталиран е и USB конектор, към който се извежда само 5 волта мощност:

Отзад можете да видите кабелите, идващи от енкодерите на колелата:

Управление на двигателя и светлината

Първоначално платформата Ardubot е проектирана да се използва заедно с Arduino, защо да не се възползвате от нея. Вместо Arduino взех OLIMEX PIC32-PINGUINO-MX220, съвместим с конектори. Беше открита неприятна дреболия - един от щифтовете за управление на двигателя е използван за светодиод на платката PINGUINO. Всичко би било наред, но този светодиод мига в режим на зареждане на фърмуера, като в същото време завърта колелото. Затова трябваше да запоя отново пистата, както е описано по-горе.

За по-лесно отстраняване на грешки и гъвкавост контролната платка е свързана чрез USB. Фърмуерът PINGUINO емулира CDC-ACM устройство, видимо за потребителя като сериен порт /dev/ttyACM0. Изпратените контролни команди изглеждат така:

Номерация на мотора: 0 - ляв, 1 - десен.
Състояния: 0 - спряно, 1 - напред, -1 - назад.

Например, за да включите задния светодиод на платформата, просто изпратете командите от конзолата:
echo "LIGHT 1 1" > /dev/ttyACM0 echo "COMMIT" > /dev/ttyACM0

За да продължите напред:
echo "MOTOR 0 1" > /dev/ttyACM0 echo "MOTOR 1 1" > /dev/ttyACM0 echo "COMMIT" > /dev/ttyACM0

Камера и хъб

един USB портБордовият (бот) компютър се използва от wifi адаптер и друга платка за управление на платформата. Къде да свържа камерата? Има решение - използвайте хъб. Една от най-евтините уеб камери и подозрително изглеждащ USB хъб бяха закупени от един от компютърните магазини.

Поставяне на електроника

В процеса на търсене на нещо, от което да направим бот, успешно намерихме пластмасова опаковъчна кутия от IPOD TOUCH, която идеално пасва на UG802 и разглобен USB хъб. Отстрани е направен изрез за трите конектора на главината. В четвъртия (вътрешен) конектор беше включена камера (с предварително скъсен кабел). Капакът също имаше изрез за USB конектора на UG802, което му попречи да се затвори:

Цялото това нещо е завинтено върху платката за управление на платформата PINGUINO-MX220:

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

Време е да съберем всичко заедно:

Цялото окабеляване беше включено където трябва - PINGUINO в хъба, UG802 захранване в USB конектора на Ardubot:

Бордовият компютър е конфигуриран за достъп чрез ssh, всички необходими инструменти за работа (компилатор, библиотеки, mc) са инсталирани от хранилището на Linaro. Влезте, пишете, компилирайте и дебъгвайте директно върху него. красота!

За тестване е разработена контролна конзола, която показва онлайн изображение от камерата на бота и му изпраща команди къде да отиде, кои лампи да включва и изключва. Софтуерът на бота приема команди и изпраща онлайн видео към контролната конзола. Текущият статус е дълбока бета. Въпреки това вече можете да използвате системата!

Видео демонстрация

Не е нужно да използвате Sparkfan Ardubot, има по-евтини и по-добри опции.
UG802 също може да бъде заменен с евтини аналози (MK802, CX-01), но трябва да се уверите, че източниците на ядрото, които работят на конкретно устройство за клониране, са налични. В противен случай инсталирането на пълноценен Linux ще бъде проблематично или дори невъзможно.

Може ли RC кола да бъде WiFi кола...?

RC колата е добра, но евтините RC коли имат ограничен обхват и се управляват само от специално дистанционно управление, предоставено в комплекта.

Купих RC Jeep 4x4 с гъвкаво окачване и офроуд гуми за около $30. След като си поиграх с машината, реших, че може да се подобри с помощта на Wi-Fi и Android. След като прекарах малко време, напълно премахнах дъската от машината. Измерих напреженията на тази платка и разработих система за управление на двигателя при Помощ за Arduino. Оригиналната система за управление не използва ШИМ за управление на скоростта. Колата е проектирана да преминава през препятствия на много ниска предавка и в резултат на това много бавно. Моята схема използва ШИМ.

Използвам Arduino от няколко месеца. Също така закупих asynclabs WiFi Sheild за Duemilanoe Arduino, за да експериментирам с WiFi. Той идва с библиотека, която се инсталира в Arduino IDE. Успях да направя програма, която ви позволява да контролирате двигателите и посоката на движение с помощта на WiFi.

Използвайки Visual Studio, разработих програмен прозорец, който се свързва със сървъра на автомобила и му дава команди. След това, след няколко опита, написах приложение за Android, което използва акселерометъра за управление на колата.

Инструменти и елементи

Това е общ списък с инструменти и елементи, използвани в този проект. Документацията на Eagle предоставя точното технически спецификацииизползвани компоненти.

Мултиметър
Поялник
Спойка
Отвертки
Разтвор за ецване на дъска
Фолио фибростъкло
Клещи
Ардуино
AsyncLabs WiFi Shield
RJ45 конектори
Моторен драйвер H-Bridge
Кондензатори

Моторен драйвер

Използвайки Eagle, проектирах и направих тази схема печатна платказа нея. Функционира като двигателен драйвер и регулатор на мощността за Arduino.
Това позволява използването на стандартна батерия от 7,2 V за захранване на главния и кормилния двигател и Arduino.

Тази схема използва SN754410 двоен интегриран H-мост драйвер за управление на двигателите. Контролните щифтове на драйвера са свързани към RJ45 кабел, който се свързва към AsyncLabs WiFi Sheild.

Arduino Shield

Използвайки библиотеката SparkFun в Eagle, проектирах Arduino Shield, който ще прехвърли щифтовете към WiFi Shield и ще се свърже с драйвера на двигателя чрез RJ45 конектор и 2 винтови клеми.

Разпределението на изводите на RJ45 е много важно. Грешка във връзката може да доведе до непредвидими резултати и ще трябва да преработите платката.

Гравиране на печатни платки

Тази тема е разглеждана многократно и няма да навлизам в подробности.
Ползвам го и ми пасва, а с опит дава отлични резултати.

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

програма

Моят код може да не е достатъчно ефективен, но работи.

Пишеща машина

Успях да създам CarServer въз основа на примера за SocketServer, който получих с AsynLabs Wifi Sheild.
Ще трябва да въведете информацията за вашата безжична мрежа в кода на Arduino. След като устройството е включено, дайте му 15-45 секунди, за да установи връзка с рутера. Червеният светодиод на WiFi Shield означава, че връзката е установена.

Направих тази програма с C# и MS Visual Studio 2008. Направих хубав прозорец и колата може да се управлява със стрелки.

Защо не управлявате колата от телефона си?

Тази мисъл ми дойде около седмица след закупуването на DroidX. Започнах да експериментирам и в крайна сметка използвах Android SDK. Намерих подобни приложения, които използват акселерометър за контрол. Гледайки тези приложения, аз написах своето.

Поставете IP адреса и порта, посочени в кода на Arduino. Дръжте телефона си хоризонтално. След това го наклонете настрани от вас, за да отидете напред и към вас, за да отидете назад. Използвайте телефона си като волан.
Това е първото ми голямо приложение за Android. Все още има някои грешки, но най-вече работи добре.

Карайте своя автомобил 4x4 с WiFi във вашия двор!

Прекарах страхотно при създаването на този проект. Натрупах много знания и нови умения и сега имам кола 4x4, която мога да управлявам от телефона си.

Имам нужда от камера, която да инсталирам зад предното стъкло, за да мога да виждам къде карам. Той трябва да консумира малко енергия и също така да предава видео самостоятелно. (Мисля, че Arduino може да се справи с това).

Списък на радиоелементите

Наименование Тип Деноминация Количество ЗабележкаМагазинМоят бележник
Моторен драйвер
IC1 ЧипSN7544101 Към бележника
Линеен регулатор5 V1 Към бележника
Биполярен транзистор

2N3904

1 Към бележника
C1, C2 Електролитен кондензатор 2 Към бележника
Конектор2 изхода7 Към бележника
Конектор8 щифта1 Към бележника
Arduino Shield
U1 Ардуино платка 1 Към бележника
Т1 Биполярен транзистор

2N3904

1 Към бележника
R1 Резистор 1 Към бележника
3 U$ Тример резистор 1 Към бележника
Конектор2 изхода2

Каналът Science Vetal показа как се прави кола, която може да се управлява от почти всеки смартфон с Android. В този случай няма да използваме „Arduino“, ще вземем микроконтролер от китайския производител „Espressive“ „esp 8266“, нещото е „Arduino“ плюс wi-fi модул.
Всички радио компоненти и модули са в този китайски магазин.

помниш ли" Arduino uno“, той е голям, но ето едно малко нещо, което има Wi-Fi, Arduino възможности. Китайците са разработили такъв щит за този микроконтролер. Удобно е: можете да свържете 2 двигателя или дори 4, докато можете да използвате 11 пина. Ще вземем и 2 мотора, 2 стандартни колела “Arduino”.

Когато въведете „Arduino“ в търсенето на „aliexpress“, се отварят не само дъски, но и свързани продукти. Интересни елементи, със сигурност ще намерите нещо интересно, опитайте го.

Да вземем 2 батерии 18650 за захранване, кутия за 2 батерии, ще вземем и 2 ъгъла, размерите са около 5 инча, не е толкова важно, плюс или минус половин инч, инч. Факт е, че дизайнът може да е ваш, но авторът, представен във видеото, е сполучлив и прост.

Взимаме 2 ъгъла, те трябва да бъдат свързани с помощта на винтове, така че щитът да може лесно да се побере тук. С бормашина с диаметър 3 мм правим 4 дупки. Взимаме малки винтове, затягаме ги и свързваме тази структура. Това нещо се оказва силно на тази връзказа такава машина, каквато правим ние, има много.

Отстрани за видео вала пробиваме отвор с диаметър 8 mm, получава се дизайн, но също така е необходимо да се направят 3 отвора с диаметър 3 mm: един за тази издатина, още 2 за тези монтажни отвори .

Взимаме го, поставяме го по този начин и го затягаме с винтове. Един от идеалните случаи, харесва ми машината, тук няма какво да добавя, няма нужда да я правя отново. Правим дупки за монтаж на дъската.

Не променяме нищо, освен тук, където има отметка, изберете адреса на файла, който ще качим, след това изберете желания com порт, натиснете бутона за стартиране. Също така под видеоклипа има връзка към програмата, която трябва да бъде инсталирана на любимия ви Android.

Закрепихме тази платка и вкарахме микроконтролера. Свързваме проводниците от двигателите, вижте дали долният е „A-“, тогава от тази страна „B-“ ще има горен. Сега е време да закрепите колелата. Това е лесно да се направи, тъй като колелата на двигателя са комплект. На това място пробиваме дупка с диаметър 4 мм и вкарваме винт. Правим тази проста операция, регулираме височината, възможно е и по-ниска, някак си се оказваме с винт, който стърчи много. Това е ненужно. Оказва се, че устройството е с една стотинка по-скъпо, което като цяло не ни трябва, някак си изглежда тромаво.

Така че нека да видим как ще получим устройство, което ще се управлява от Android дистанционно чрез wifi. Разбира се, това е по-добро нещо. Закрепваме отделението за батерии с горещо лепило и имаме машина.

Поставяме батериите, трябва да внимавате, тъй като често се случва всичко да изглежда правилно сглобено, батериите са поставени, но устройството не работи. Оказва се, че това са черни пластмасови кутии. Те не позволяват на батерията да си дойде на мястото.


Програма и скица http://bbs.smartarduino.com/showthread.php?tid=2013
Приложение за управление https://play.google.com/store/apps/details?id=com.doit.carset

През лятото възникна идеята да се направи радиоуправляема кола, но не просто нещо като творение на китайската техника, което се продава на всяка крачка, а кола, която да се управлява от компютър или телефон. Ясно е, че машина, която може да се управлява през Wi-Fi в чист вид, не е никак интересна. Но какво, ако имаше камера? Ами ако има управление и през 3G/EDGE/GPRS? Това е друг въпрос! Това означава, че устройството за управление трябва да има USB и Wi-Fi (или само USB, можете да закупите USB Wi-Fi адаптер). Сега трябва да разберем как да управляваме двигателите. Първоначално исках да направя това с помощта на COM порт и регистър за смяна (74HC595), но след като записах 5 от тези чипове, изоставих този метод. По-късно погледът ми падна върху Arduino, а именно Arduino Duemilanove. Тази платка има 14 цифрови I/O порта, шест от тях са PWM (можете да контролирате напрежението на мотора и да прикачите серво за камерата), два могат да се използват като Tx и Rx серийни портове.

Рутер

След като открих рутер D-Link DIR-320 в моя град, който има USB порт, веднага го купих. Когато се прибрах вкъщи, разбрах, че този рутер има несвързан UART порт. Така имаме комуникационен канал между рутера и arduino.
За рутера избрах OpenWrt фърмуер. Можете да изтеглите готов фърмуер от OpenWrt за DIR-320. Не помня защо, но реших сам да сглобя фърмуера (описан подробно). За това ще ви трябва Linux (създадох на Ubuntu 11.10). Първо, нека изтеглим източниците на фърмуера и да съберем всичко необходимо:
svn co svn://svn.openwrt.org/openwrt/branches/backfire dir320 cd dir320 ./scripts/feeds update -a && ./scripts/feeds install –a make prereq && make tools/install && make toolchain/install
Конфигурация на фърмуера
направи menuconfig
Избираме следните пакети:
  • Целева система ---><*>Broadcom BCM947xx/953xx – ядро ​​2.6
  • Конфигурация на изображението ---><*>LAN IP адрес ---> – [по избор] Можете да изберете IP адреса, който рутерът ще има след зареждане на ядрото и всички модули
  • Модули на ядрото ---><*>Файлови системи ---><*>kmod-fs-ext3 - Повече за това по-късно
  • Помощни програми ---> Файлова система ---><*>e2fsprogs – И за това
  • Помощни програми ---> диск ---><*>block-extroot – И за това също
  • Модули на ядрото ---><*>USB поддръжка ---><*>kmod-usb-core – USB поддръжка
  • Модули на ядрото ---><*>USB поддръжка ---><*>kmod-usb-ohci – за USB хъб. защо той Повече за това също по-късно
  • Модули на ядрото ---><*>USB поддръжка ---><*>kmod-usb-storage – поддръжка на USB флаш устройства
  • Модули на ядрото ---><*>USB поддръжка ---><*>kmod-usb2 – USB 2.0
  • Администриране --> webif ---><*>webif-applications – админ панел
  • Модули на ядрото ---><*>Видео поддръжка ---><*>kmod-usb-video-core – поддръжка на USB-видео
  • Модули на ядрото ---><*>Видео поддръжка ---><*>kmod-usb-video-uvc – поддръжка за UVC уеб камери
Изберете последната точка сами, имах UVC уеб камера.
Тогава защо избрахме тези пакети, чиято цел не обясних? Проблемът е, че количеството флаш памет, инсталирана в рутера, е 4MB, което може да попречи на по-нататъшната ни работа. Ще прехвърлим rootfs на флаш устройство и рутерът ще стартира от него.
Между другото, относно флаш паметта: трябва да запомните следното:
направи kernel_menuconfig
  • Драйвери на устройства ---><*>Поддръжка на Memory Technology Device (MTD) ---> RAM/ROM/Flash драйвери за чипове ---> [*] Разширени опции за конфигуриране на драйвера за Flash чип --> [*] Избор на специфична CFI Flash геометрия --> [*] Поддръжка 8 -битова широчина на шината
  • Драйвери на устройства ---><*>Поддръжка на Memory Technology Device (MTD) ---> RAM/ROM/Flash чип драйвери ---> [*] Разширени опции за конфигуриране на драйвера на Flash чип --> [*] Избор на специфична CFI Flash геометрия --> [*] Поддръжка 16 -битова широчина на шината
И в Kernel Hacking трябва да коригирате console=/dev/ttyS0 на console=/dev/null, така че рутерът да не използва този порт като порт за отстраняване на грешки.
Компилирайте и флашнете
Компилация на фърмуер:
направи V=99 -j2
Сега трябва да го флашнете:
За bash:
#!/bin/bash echo "============================================= =============== =========================" echo "Този скрипт ще качи dd-wrt фърмуер (firmware.bin)" echo "в текущата директория до 192.168 " echo "по време на стартиране на рутера. " echo "" echo "* Задайте настройките на вашата Ethernet карта на: " echo " IP: 192.168.0.10 " echo " Маска: 255.255.255.0 " echo " Шлюз: 192.168.0.1 " echo "* Изключете захранването на рутера кабел. " echo "" echo "Натиснете Ctrl+C, за да прекратите или който и да е друг клавиш, за да продължите... " read echo "" echo "* Включете отново захранващия кабел на рутера. " echo "" echo "===== == ===================================================== = ==========" echo "Изчакване на рутера... Натиснете Ctrl+C, за да прекъснете " echo "" try() ( ping -c 1 -w 1 192.168.0.1 ) опитайте докато. [ "$?" != "0" ] ; опитайте готово echo "*** Започнете да мигате **** " atftp --no-source-port-checking -p -l firmware.bin 192.168.0.1 echo "Фърмуерът е зареден успешно!"
За Windows:
@echo off echo ================================================= = ==================== echo Този пакетен файл ще качи dd-wrt фърмуер в текущата директория, за да echo 192.168.0.1 по време на стартиране на рутера. echo. echo * Задайте настройките на вашата Ethernet карта на: echo IP: 192.168.0.2 echo Mask: 255.255.255.0 echo Gateway: 192.168.0.1 echo * Изключете захранващия кабел на рутера. echo. echo Натиснете Ctrl+C, за да прекъснете клавиш. пауза > нулево ехо * Включете отново захранващия кабел на рутера. ехо. ехо ==================================================== ================ ================== echo Изчакване на рутера... Натиснете Ctrl+C за прекъсване. ехо. задайте FIND=%WINDIR%\command\find.exe ако съществува %FIND% отидете на LPING задайте FIND=%WINDIR%\system32\find.exe ако съществува %FIND% отидете на LPING задайте FIND=find:LPING ping -n 1 -w 50 192.168.0.1 | %FIND% "TTL=" if errorlevel 1 goto LPING echo *** Start Flashing **** tftp -i 192.168.0.1 put firmware.bin if errorlevel 1 goto LPING set FIND= echo. ехо ==================================================== ================ ================= echo * ИЗЧАКАЙТЕ около 2 минути, докато фърмуерът се флашва. echo * Нулирайте настройките на вашата ethernet карта обратно към DHCP * Адресът на рутера по подразбиране ще бъде 192.168.1.1
Настройка на зареждане от флашка
След като го включите за първи път, отидете в уеб интерфейса на рутера и сменете паролата. Сега се свързваме с него чрез SSH. Трябва да конфигурирате зареждане от флаш устройство, първо трябва да го маркирате. Имах два дяла: първият беше ext3 дял за rootfs, вторият беше swap. Отворете /etc/config/fstab във vim и напишете какво съответства на нашия fstab. Имам го така:
config глобална опция за автоматично монтиране from_fstab 1 опция anon_mount 1 config глобална автоматична смяна опция from_fstab 1 опция anon_swap 0 конфигурация за монтиране опция цел / опция устройство /dev/sda1 опция fstype ext3 опция опции rw, активирана опция за синхронизиране 1 опция enabled_fsck 1 опция is_rootfs 1 конфигурация за опция за смяна устройство /dev/sda2 опцията е активирана 1
Запазване, рестартиране.
Демон
Arduino ще контролира двигателите, така че ще напишем демон, който ще пренасочва всичко, което идва към TCP порт 5554 към /dev/ttyS0.
Потърсете компилираната ми версия на демона в архива (карта)
Ние компилираме с помощта на gcc, който беше компилиран в подготовка за асемблиране на фърмуера:
<…>/dir320/staging_dir/toolchain-mipsel_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mipsel-openwrt-linux-uclibc-gcc-4.3.3<имя файла с исходниками>-о<имя выходного файла>
Кратко отклонение за удобството на организиране на работа с рутер
  • След всяко включване трябваше да напиша opkg update, така че го добавих към /etc/rc.local
  • Доста удобно е да използвате FTP сървър. Инсталирах pure-ftpd. За да направим това, ние пишем:
    opkg инсталирайте чист ftpd
    Нека го добавим към /etc/rc.local:
    pure-ftpd -4 –B –M –l unix –U 000:000
  • Ще бъде удобно да промените уеб интерфейса на luci, за това пишем:
    opkg премахнете webif* opkg инсталирайте luci
Демон [продължение]
Качваме нашия демон на рутера и го добавяме към стартиране.
Сега инсталирайте mjpg-streamer:
opkg инсталирайте mjpg-streamer
Пишем следното в /etc/config/mjpg-stramer:
config mjpg-streamer option device “/dev/video0” option resolution “640x480” option fps “24” option port “8080” option enabled “true”
Нека се опитаме да свържем камерата. Ако всичко е наред, можете да видите изображението тук:
http:// /?action=stream .

Arduino и връзка

Първо, нека вземем решение за схемата на свързване на двигателя. Тъй като взех тялото от готова машина, имах късмет с двигателите - те вече бяха там. Предният отговаряше за завоите (наляво, надясно, направо), а задният отговаряше за движението (трябваше да го сменя на двигателя на бутона за заключване на вратата на някои VAZ). Можете да контролирате натоварванията с помощта на Arduino полеви транзистори(95N2LH5, но използвах IRF 630, защото намерих тези смърчови дървета в моя град). Връзката е следната: маса на транзистора - към контролния щифт на ардуиното, източник - към масата на ардуино и мощността на товара минус, дрейн - към минуса на товара, плюс плюс към товара плюс. Но по този начин можем да караме само напред и да се въртим само в една посока. За да се справим с проблема ни идва на помощ реле с две групи контакти. Имах един двигател (преден) на 6 волта, а другия на 12. В случая бяха използвани два акумулатора по 6 волта (единият беше оловно-киселинен от непрекъсваемо захранване), имайки предвид, че минусът на рутера по-късно ще трябва да бъде свързан към земята на arduinos, тогава получавате 6 волта. Не работи за рутер (проверете колко волта подавате към рутера - трябваше да купя друг след това Доставих му 12 волта). Следователно трябваше да използвам друго реле за захранване/незахранване на предния двигател.

Диаграмата я начертах отдавна. Сега има всички полеви транзистори и никакви резистори.
Сега за самия код. За мен всичко е много просто - има 4 команди, които имат собствен параметър от 1 байт:

  • m – Отговаря за напрежението и следователно за скоростта, на двигателя стойността е от 0 до 255
  • r – Отговаря за завоите. “1” – завъртане, “0” – не завъртане
  • n – “1” – върви назад, “0” – върви напред
  • e – “1” – завъртане в другата посока
Ето моя програмен код за Arduino:
int inByte, val; void setup() ( Serial.begin(9600); pinMode(2, OUTPUT); pinMode(4, OUTPUT); pinMode(7, OUTPUT); ) void loop() ( if (Serial.available() > 0) ( inByte = Serial.read(); if ((inByte=="n")||(inByte=="e"))( while (Serial.available()==0) () val=Serial.read() ; if (inByte=="n")( if (val=="1")( digitalWrite(2, HIGH); Serial.print("Записване на 2 пина\n\r"); ) if (val== "0")( digitalWrite(2, 0); Serial.print("Записване на 2 пина\n\r"); ) ) if (inByte=="e")( if (val=="1")( digitalWrite(4, HIGH); Serial.print("Запис на 4 пина\n\r"); if (val=="0")( digitalWrite(4, LOW); Serial.print("Запис на 4 пина \ n\r"); ) ) ) if ((inByte=="m")||(inByte=="r"))( while (Serial.available()==0) () val=Serial.read ( ); if (inByte=="m")( if (val!="0") analogWrite(3, val); else analogWrite(3, 0); Serial.print("Записване на 3 пина\n\r " ); ) if (inByte=="r")( if (val=="1")( digitalWrite(7, HIGH); Serial.print("Записване в 7 pin\n\r"); ) if ( val =="0")( digitalWrite(7, LOW); Serial.print("Записване на 7 пина\n\r");
Както можете да видите, моят заден мотор е свързан към щифт 3, предният мотор е свързан към пин 7, задното реле е свързан към щифт 2, предният мотор е свързан към пин 4. Тъй като 3 е щифт PWM, тогава използвайте analogWrite(3, val);, където val От 0 до 255, можем да контролираме напрежението на двигателя.
Нека разглобим нашия рутер. Виждаме UART порта. Свързваме го към Arduino.

Сега да видим как работи всичко. Свързваме се чрез telnet към нашия порт и проверяваме:
  • n1 – щракане на релето
  • м<пробел>- колелата започват да се въртят малко
  • n0 – колелата се въртят в другата посока
  • m0 – колелата спират да се въртят
  • r1 – завъртете предните колела
  • e1 – колелата се въртят в другата посока
  • r0 – колелата стават прави
  • e0 – щракване на релето
За отстраняване на грешки при работа с com порта на рутера можете да използвате minicom (opkg install minicom).

Софтуерна част

В архива е моята програма за управление на машината (rotate и power от архива трябва да се копират в /bin/ на рутера, картата ми е демон). Работи само с джойстик. В раздела за планиране можете да напишете bash скрипт (не забравяйте opkg да инсталирате bash на рутера), за да го стартирате с помощта на cron демон. Тъй като този демон трябва да се рестартира след промяна на настройките му, моята програма изпълнява скрипта на