Съдържание:

UCL Embedded - B0B Linefollower: 9 стъпки
UCL Embedded - B0B Linefollower: 9 стъпки

Видео: UCL Embedded - B0B Linefollower: 9 стъпки

Видео: UCL Embedded - B0B Linefollower: 9 стъпки
Видео: Human vs Robot | Artificial Intelligence 2024, Юли
Anonim
UCL Embedded - B0B Linefollower
UCL Embedded - B0B Linefollower

Това е B0B.*

B0B е общ автомобил с радиоуправление, който временно служи в основата на робот, който следва линията.

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

За разлика от толкова много други роботи, следващи линия, B0B също събира данни и ги изпраща чрез WiFi.

Напълно прекалено много за хоби проект, той включва редица теми, които може да ви бъдат интересни. Това ръководство описва неговото раждане, функциите му и как можете да направите такъв като него.

Това включва също гняв на различна електроника, че не работи така, както бихме искали, и стъпките, които предприехме, за да преодолеем тези трудности (гледам ви ESP 8266-01).

Има 2 кода, за да работи проектът. Първият код е за модула ESP8266, който използваме Arduino като програмист, а вторият код ще работи на Arduino.

Стъпка 1: Компоненти

За този проект ще ви трябва:

Хардуер:

• 1x кола с радиоконтролер, (трябва да има ESC и серво за управление).

Използвахме предимно щатски Traxxas 1/16 E-Revo VXL, най-вече защото това беше, което имахме и бяхме напълно уверени, че ще можем да го контролираме с Arduino. Също така, тъй като в крайна сметка ще има не малко количество допълнителен хардуер, бяхме уверени, че това няма да е проблем за 1/16 E-Revo.

Въпреки това, повечето коли с радиоуправление (които лесно могат да бъдат разглобени) вероятно биха могли да бъдат използвани вместо тях и процесът ще бъде много подобен.

• Тон тиксо.

Цветът трябва да контрастира максимално с пода. В нашата тестова среда използвахме бяла лента на тъмен под.

• 1x Arduino Mega 2560.

По -малките Arduino вероятно също са добре, но ще бъдете принудени за щифтове.

• 1x голяма дъска за хляб.

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

• 1x TCRT5000 IR аналогов сензор (използва се за избягване на сблъсък).

Точната марка/модел няма значение дали е съвместим с Arduino и измерва разстоянието. Търсете ключови думи като сензор „Разстояние“, „препятствие“. Технически цифров сензор би работил също с малки промени в кода, но ние използваме аналогов.

• 1x или 2x гравитация: Аналогов сензор за сиви тонове v2

Единият е необходимост за последователя на линията. Точният модел няма значение, стига да гледа интензитета на отразената светлина и да извежда аналогов сигнал. Вторият за откриване на „стая“не работи добре както се очаква и може да бъде пропуснат, или може да се намери алтернатива, като RGB цветен сензор, вероятно за по -добър ефект. Предстои да тестваме това.

• 1 x ESP 8266-01.

Налични са много версии на ESP 8266. Ние имаме само опит с 8266-01 и не можем да гарантираме, че ESP кодът ще работи с различна версия.

• 1 x ESP8266-01 Wi-Fi щит.

Технически по избор, но ако не използвате това, всичко, свързано с Wi-Fi модула, ще стане много по-сложно. Ръководството обаче ще приеме, че имате това (ако не, намерете ръководствата онлайн за правилно свързване на ESP-01 към Arduino), тъй като това неправилно може и вероятно ще повреди модула.

• Батерии за самото превозно средство и батерии за захранване на допълнителната електроника.

Използвахме двойка капацитет 2.2 AH, 7.4V Lipo батерии паралелно, за да захранваме всичко. Трябва да можете да използвате всички батерии, които обикновено използвате с избраното от вас превозно средство. Ако сте над 5V, но под 20V, капацитетът е по -важен от номиналното напрежение.

• Много джъмперни кабели.

Отказах се от преброяването на точния брой на тези. Ако мислите, че имате достатъчно, вероятно нямате.

• И накрая, за да прикачите всичко, ще трябва да монтирате Arduino, сензорите, основната (ите) платка (и) и Wi-Fi модула към автомобила по ваш избор. Резултатът ви ще варира в зависимост от това какво използвате като основа и какви материали са налични.

Използвахме:

• Връзки с цип.

• Няколко супер лепило.

• Малки парчета скрап хартия/тръба от смола, които имахме с подходящ диаметър.

• Стара масонска задна плоча от рамка за картина, изрязана по размер.

• Още малко тиксо.

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

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

Софтуер:

• Node-червен

Важна част от събирането на данни.

• MQTT сървър.

Посредникът между нашето превозно средство и Node-red. Първоначално за тестване използвахме test.mosquitto.org

По -късно използвахме:

• CloudMQTT.com

Това беше много по -надеждно, което повече от компенсира, че е малко по -сложно за настройка.

• WampServer.

Последната част от събирането на данни. По -конкретно, ще използваме неговата SQL база данни за съхраняване на събраните ни данни.

Стъпка 2: Електрическа диаграма

Електрическа диаграма
Електрическа диаграма

Стъпка 3: Физическо изграждане

Физическа конструкция
Физическа конструкция
Физическа конструкция
Физическа конструкция
Физическа конструкция
Физическа конструкция

Нашето решение има директен подход към физическото сглобяване.

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

Открихме, че има едно подходящо място между предните колела за нашия сензор за следене на линията, затова го задържахме на място, като завързахме цип над предната плъзгаща се плоча.

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

Масонската плоча (задна плоча от стара рамка за картини) отгоре има малки участъци от тръба от хартия/смола, изрязани по размер и залепени на дъното. Те се подравняват с опорите за стойките на тялото и просто седят на върха, като държат всичко здраво. Ако приемем, че лепилото, прикрепящо тръбата към плочата, държи и че не се накланя прекомерно, това ще остане на мястото си. Заслужава да се отбележи, че плочата е в защитната сфера на колелата и броните. Arduino Mega и двете дъски са прикрепени към плочата или с двойна странична лента, или с контур от тиксо, закрепено наоколо, залепено.

Не са предприети специални мерки за защита на WiFi-модула. Не е наш, така че залепването му или залепването му се счита за ненужно, тъй като е толкова леко, че няма да се движи много, а проводниците са достатъчни, за да го задържат на място.

И накрая, имаме сензор за откриване на „стаи“, който е закопчан към компонентите на окачването от едно от задните колела. По време на работа това трябва да е далеч от линията, маркирана от автомобила за навигация.

Стъпка 4: Модул ESP8266

Модул ESP8266
Модул ESP8266
Модул ESP8266
Модул ESP8266

WiFi модулът, ESP8266, изисква две различни настройки на щифтове. Една настройка трябва да се използва, когато модулирате модула с нова програма и използвате Arduino Mega 2560 като програмист. Другата настройка е за модула, когато той се използва и изпраща информация до брокера на MQTT.

Използвайки Arduino IDE за качване на код в модула ESP8266, ще трябва да инсталирате мениджър на дъска и допълнителен мениджър на дъски

Под мениджъра на борда инсталирайте мениджъра на борда esp8266. Той лесно ще бъде намерен чрез търсене на „esp“. Важно е да инсталирате версията 2.5.0, не по -стара, не по -нова.

Под настройките в допълнителни URL адреси на мениджъра на дъски, копирайте в този ред:

arduino.esp8266.com/stable/package_esp8266c…

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

След като мигате модула ESP8266, трябва да смените настройката на щифтовете. Можете също така да изберете адаптер, за да улесните настройката. В този проект ние избрахме да имаме адаптер винаги, когато модулът работи. Настройката на щифта с адаптер се намира на втората снимка в този сегмент.

Кодът, който трябва да бъде прехвърлен в модула ESP8266, настройва връзката към WiFi и MQTT брокер, в този случай с потребителско име и парола, но може да се направи и без, ако направите необходимите промени, описани в коментарите на кода. За този проект нашият брокер изискваше потребителско име и парола, за да работи. Модулът чете входящи съобщения от серийния порт, към който е свързан. Той ще прочете всеки нов ред, създаден от кода на Arduino, ще дешифрира съобщението и ще го пресъздаде. След това изпраща съобщението до MQTT брокера, което е посочено в кода. Кодът за модула ESP8266:

Стъпка 5: Arduino

След като конфигурираме WiFi модула, разглеждаме програмата, която ще се използва за управление на двигателя и серво на RC автомобила. Автомобилът ще реагира според информация в сива скала от централния сензор, известен също като "Линеен детектор" в този проект. Очевидно той има за цел да поддържа информацията от Line Detector близо до предварително зададена стойност, която е равна на информацията, записана при промяната между светло и тъмно или в този проект, бяло и черно. Така че, ако стойността се различава твърде много, съответният изход към сервото ще насочи колата близо до предварително зададената стойност на линията.

Програмата има два бутона, които функционират като бутон за стартиране и спиране за RC автомобила. Технически бутонът „стоп“е бутон за активиране, който от гледна точка се равнява на PWM стойност, изпратена до двигателя, което кара RC колата да спре. Бутонът за стартиране изпраща PWM стойност, която е равна на RC автомобила, който едва се движи напред, тъй като той ще кара твърде бързо, ако набере твърде голяма скорост.

Детектор за избягване на сблъсък е добавен към предния край на автомобила с дистанционно управление, за да установи дали пътят напред е чист или блокиран. Ако е блокиран, автомобилът с дистанционно управление ще спре, докато препятствието изчезне/отстрани. Аналоговият сигнал от детектора се използва за определяне дали нещо блокира пътя или не и се прави като критерий за възможността да се движи напред, както и да се спира.

Вторичен сензор за сива скала, "Room Detector", се използва за откриване в коя стая е влезла RC колата. Той работи на подобен принцип като линейния детектор, но не търси промяната между светло и тъмно, а по -скоро стойности в определен диапазон, който съответства на различни помещения в зависимост от стойността, видяна от детектора на стаята.

Накрая програмата създава ред от информация от сензорите за WiFi модула за четене и след това изпращане до MQTT Broker. Линията с информация се създава като низ и се записва в съответната серия, към която е свързан WiFi модулът. Важно е записването в сериала да става само толкова често, колкото WiFi модулът може да прочете входящото съобщение, но не забравяйте да не използвате никакви закъснения в този код, тъй като това ще попречи на способността на RC автомобила да следва линията. Вместо това използвайте "millis", тъй като това ще позволи на програмата да работи без забавяне, но след като определено количество милисекунди премине от включването на Arduino, ще напише съобщение до сериала, без да блокира кода по същия начин, както забавянето.

Кодът за Arduino Mega 2560:

Стъпка 6: MySQL база данни

WampServer е среда за уеб разработка за Windows, която ни позволява да създаваме приложения с PHP и MySQL база данни. PhpMyAdmin ни позволява да управляваме нашите бази данни по лесен начин.

За да започнете, отидете на:

В този проект използваме версия 3.17 x64 бита за Windows. След инсталиране се уверете, че всички услуги работят, което означава, че малката икона става зелена, вместо червена или оранжева. Ако иконата е зелена, тогава можете да получите достъп до PhpMyAdmin, за да управлявате вашата база данни MySQL.

Достъп до MySQL с помощта на PhpMyAdmin и създаване на нова база данни. Назовете го нещо подходящо, което можете да запомните, в този проект той се наричаше „line_follow_log“. След като създадете базата данни, трябва да създадете таблица в базата данни. Уверете се, че броят на колоните е подходящ. В проекта използваме 4 колони. Една колона е за времева отметка, а последните три се използват за съхраняване на данни от превозното средство. Използвайте подходящ тип данни за всяка колона. Използвахме „longtext“за колоната с времева отметка и „mediumtext“за останалите.

Това трябва да е всичко, което трябва да направите в PhpMyAdmin и MySQL. Запомнете вашата база данни и таблицата за раздела за Node-Red.

Стъпка 7: Node-Red

За да се справим със събирането на данни, ще използваме сравнително прост поток в Node-red. Той се свързва с нашия MQTT сървър и записва в нашата MYSQL база данни.

За да направим това, имаме нужда от няколко палитри, за да работят различни функции, и се нуждаем от действителен код, за да може той да се изпълнява.

Първо най-важното. Ще ни трябват следните палети.

Node-red-contrib-mqtt-broker: Това е връзката с нашия MQTT брокер.

Node-red-dashboard: Нашето табло, необходимо за визуално представяне на събраните данни.

Node-red-node-mysql: Нашата връзка с SQL базата данни.

Това не е предназначено да бъде пълноценно ръководство за Node-red, но ще обясня какво прави потокът Node-red.

В началото имахме проблеми с нашия MQTT сървър по избор умиране/прекъсване, привидно на случаен принцип, което правеше всякакви промени разочароващо начинание, тъй като не беше ясно дали промените са били полезни или не, когато не можем да видим резултата. И така, бутонът „Сървърът умря ли?“инжектира „Не“, следният блок го инжектира на нашия MQTT сървър. Ако не е мъртъв, в прозореца за отстраняване на грешки ще се появи „Не“. Това се прави не само за тестване, но и за принуждаване на Node-red да се опита да се свърже отново към MQTT сървъра.

„Тестовият низ“изпраща ценен низ на брокера на MQTT. Ние форматирахме този низ, за да бъде подобен на този, който ще получим от Arduino. Това трябваше да улесни конфигурирането на мрежата, която декодира съобщенията, без да е необходимо проектът да работи, да събира данни.

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

Голямата мрежа от свързани превключватели след функционален възел, ако се случи истинската „магия“.

Процедурната функция чете входящия низ, разделя го с всяко запетая и предава разделите на всеки от изходите. Следните ключове търсят една от двете различни входящи части от информация. Една конкретна информация винаги се предава от един изход, другата опция напуска от втория изход. След това е втора група блокове за превключване. Те ще се активират само с един конкретен вход и ще изведат нещо друго.

Пример, „препятствие“, както всички останали са двоичен избор, или е ясно за шофиране, или не. Така че ще получи 0 или 1. 1. 0 ще бъде изпратено до „изчистения“клон, 1 ще бъде изпратен до клона „препятстван“. Превключвателите „Изчистване“, „Затруднено“, ако са активирани, ще изведат съответно нещо специфично, Изчистване или препятствие. Зелените блокове, които продължават, ще бъдат публикувани в прозореца за отстраняване на грешки, синият ще пише на нашето табло за управление.

Клоновете „status“и „location“работят абсолютно еднакво.

Стъпка 8: MQTT брокер

Брокерът е сървър, който насочва съобщения от клиенти към подходящите дестинационни клиенти. MQTT брокер е този, при който клиентите използват MQTT библиотека, за да се свържат с брокера по мрежа.

За този проект създадохме MQTT брокер, използвайки услугата CloudMQTT с безплатния абонамент за версия „Cute Cat“. Той има своите ограничения, но ние не надвишаваме тези в този проект. WiFi модулът може да се свърже с брокера и брокерът след това насочва съобщенията до подходящ дестинационен клиент. В този случай клиентът е нашият Node-Red. Услугата CloudMQTT задава потребителско име и парола за техния сървър, така че ни е гарантирана по -висока сигурност. По принцип означава, че само тези с потребителско име и парола могат да имат достъп до тази специфична услуга CloudMQTT. Потребителското име и паролата са от решаващо значение при настройката на връзката на кода ESP8266, както и Node-Red.

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

Приятна функция е възможността да изпращате съобщения от брокера към WiFi модула, но ние не използвахме тези в този проект.

Стъпка 9: Хоби електроника

Преди да започнем, ние знаехме от миналия проект, че сервоусилвателят на кормилното управление може да се управлява от Arduino с PWM сигнал, с подобно окабеляване и включване в различни канали на един и същ стоков радиоприемник, приехме електронния контрол на скоростта (ESC от сега), който управлява двигателя, може по подобен начин да се управлява чрез PWM от Arduino.

За да тестваме тази теория, ние създаваме малка скица на Arduino. Скицата чете аналогов вход от потенциометър, пренарежда стойността от 0, 1024 до 0, 255 и извежда получената стойност в PWM щифт, използвайки analogWrite (), докато е имал R/C автомобил на малка кутия и е имал свалени колела.

След като претърсихме обхвата на измервателния уред, ESC сякаш се „събуди“и можем да го намалим нагоре и надолу, също така накарахме Arduino да отпечата стойностите към серийната връзка, за да можем да ги наблюдаваме.

ESC изглежда не харесва стойности под определен праг, в случая 128. Той вижда сигнала 191 като неутрална дроселна клапа, а 255 е максимална дроселна клапа.

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

Заобикалянето на потенциометъра и въвеждането на фиксирана стойност в кода обаче не работи. Стоковият ESC просто мига и няма да върти двигателя, „регулирайте регулирането на дроселната клапа“според ръководството.

Яростното отстраняване на проблеми, хвърлянето на различни стойности, използването на различни проводници и дори експериментирането с промяна на честотата на ШИМ, използвано от Arduino, доведоха до повече странност.

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

Какво беше различното от настройката с потенциометъра, или предавателя и приемника на стоката, и версията, която предоставяше фиксирани стойности?

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

„Регулирайте тапицерията на газта“, това е точно това. ESC очаква неутрален сигнал, когато се включи, преди да разбере, че няма да направи нищо. Обикновено предавателят винаги ще бъде в неутрално положение, когато ESC е включен и оттам ще кара с удоволствие. В случай, че не е така, вероятно е върнат в неутрално положение поне веднъж, докато моделът е здраво стъпил на земята и операторът се чувства готов да се състезава.

Докато използвахме потенциометъра, „претърсвахме“обхватите и след това той започна да работи. Той просто се въоръжи, когато потенциометърът премина покрай неутралната позиция и след това заработи.

По -ниските граници обаче изглежда все още не харесват ESC. Това се оказва продукт от работните цикли на ШИМ.

Или по проект, или по техническа причина, и сервоусилвателят на кормилното управление, и ESC пренебрегват сигналите под 50% работни цикли. Това може да се случи в случай, че приемникът/предавателят спре да работи или остане без енергия, моделът ще се върне в неутрално положение и няма да излезе в далечината при пълен газ назад. Също така, сервото се върти само на 180 градуса и не се нуждае от пълния обхват.

С тези нови знания в ръка беше създадена нова скица на Arduino. Първоначалната версия приема низове, въведени в серийния монитор, преобразува го в цяло число и го премества в PWM пина, като използва серво библиотеката и write ()*. Ако в серийния монитор бъде въведена нова стойност, стойността write () се актуализира.

По време на тестването, запасите Traxxas ESC бяха заменени с Mtroniks G2 Micro, но те трябва да работят по същия начин, въпреки че точните стойности може да са малко по -различни.

Тази библиотека третира ESC като серво, това очевидно е добре. Функцията write () от библиотеката Servo.h преминава от 0 до 180, очакваният сигнал за активиране се очаква да бъде около средата.

G2 Micro оръжията при write () в диапазон от стойности близо до 90 обаче беше трудно да се определи, тъй като изглежда „помни“, че е бил въоръжен.

Очаква се Traxxas VXL-s3 да се включи при запис () на стойност 91.

След сигнала за включване или ESC с радост приема ШИМ сигнали, без значение функциите на Arduino, извикани да ги генерират, и съответно управлява двигателя.

Говорейки за функции; стандартният analogWrite (), както и write () и writeMicroseconds () от библиотеката Servo.h могат да се използват взаимно, просто имайте предвид какво прави каквото и в крайна сметка нищо друго освен работния цикъл няма значение. WriteMicroseconds () може да се използва, ако се изисква по -голяма детайлност, но имайте предвид, че диапазонът тук е от 1000 до 2000, като се очаква активирането или "неутрално" да бъде на 1500. Със стандартния analogWrite () се очаква използваемият диапазон да да бъде от 128 до 255, като около 191 е неутрално.

Препоръчано: