Obsah:

UCL Embedded - B0B the Linefollower: 9 Steps
UCL Embedded - B0B the Linefollower: 9 Steps

Video: UCL Embedded - B0B the Linefollower: 9 Steps

Video: UCL Embedded - B0B the Linefollower: 9 Steps
Video: How To Make A DIY Arduino Obstacle Avoiding Car At Home 2024, Červenec
Anonim
UCL Embedded - B0B the Linefollower
UCL Embedded - B0B the Linefollower

Toto je B0B.*

B0B je obecný radiem řízený vůz, který dočasně slouží jako základ pro robot sledující linii.

Jako tolik robotů sledujících Line před ním udělá maximum, aby zůstal na linii způsobené přechodem mezi podlahou a kontrastním materiálem, v našem případě lepicí páskou.

Na rozdíl od mnoha jiných robotů sledujících řádky, B0B také sbírá data a odesílá je přes WiFi.

Zcela přehnané pro hobby projekt, zahrnuje řadu předmětů, které by vás mohly zajímat. Tato příručka popisuje jeho narození, jeho funkce a způsob, jak si jej můžete vyrobit stejně jako on.

Zahrnuje to také vztek na různé elektroniky, že nefungují tak, jak bychom chtěli, a kroky, které jsme podnikli k překonání těchto obtíží (dívám se na tebe ESP 8266-01).

Aby projekt fungoval, existují 2 kódy. První kód je pro modul ESP8266, který používáme Arduino jako programátor, a druhý kód poběží na Arduinu.

Krok 1: Součásti

Pro tento projekt budete potřebovat:

Hardware:

• 1x auto s rádiovým ovladačem, (musí mít ESC a servo řízení).

Použili jsme většinou zásobní Traxxas 1/16 E-Revo VXL, většinou proto, že to je to, co jsme měli, a byli jsme si docela jistí, že to budeme moci ovládat pomocí Arduina. Také proto, že to skončí s nezanedbatelným množstvím dalšího hardwaru, jsme byli přesvědčeni, že to nebude problém pro 1/16 E-Revo.

Místo toho by však pravděpodobně mohla být použita většina rádiem řízených vozů (které lze snadno rozebrat) a postup bude velmi podobný.

• Tuna lepicí pásky.

Barva by měla podlahu co nejvíce kontrastovat. V našem testovacím prostředí jsme použili bílou pásku na tmavou podlahu.

• 1x Arduino Mega 2560.

Menší Arduino jsou pravděpodobně také v pořádku, ale budete tlačeni na kolíky.

• 1x velká chlebová deska.

Jeden stačí, ale měli jsme také menší, abychom oddělili ostatní napájecí vedení, abychom snížili riziko uživatelské chyby.

• 1x IR analogový senzor TCRT5000 (používá se pro zamezení kolizí).

Přesná značka/model nezáleží na tom, zda je kompatibilní s Arduino a měří vzdálenost. Vyhledejte klíčová slova, například senzor „vzdálenost“nebo „překážka“. Technicky by digitální senzor fungoval i s menšími změnami kódu, ale používáme analogový.

• Gravitace 1x nebo 2x: Analogový snímač ve stupních šedi v2

Jeden je pro následovníka linky nutností. Na přesném modelu nezáleží, pokud sleduje intenzitu odraženého světla a vydává analogový signál. Druhý pro detekci „místnosti“nefungoval tak, jak se očekávalo, a lze jej vynechat, nebo lze najít alternativu, jako je barevný snímač RGB, pravděpodobně pro lepší efekt. To ještě musíme vyzkoušet.

• 1 x ESP 8266-01.

Existuje mnoho verzí ESP 8266. Máme pouze zkušenosti s 8266-01 a nemůžeme zaručit, že kód ESP bude fungovat s jinou verzí.

• 1 x ESP8266-01 Wi-Fi štít.

Technicky volitelné, ale pokud toto nepoužíváte, vše zahrnující modul Wi-Fi bude mnohem komplikovanější. Průvodce však bude předpokládat, že to máte (pokud ne, najděte průvodce online pro správné zapojení ESP-01 do Arduina), protože nesprávné provedení může a pravděpodobně poškodí modul.

• Baterie pro samotné vozidlo a baterie pro napájení přídavné elektroniky.

K napájení všeho jsme použili paralelně dvojici baterií 2,2 AH, 7,4V Lipo. Měli byste být schopni používat jakékoli baterie, které byste normálně používali s vybraným vozidlem. Pokud jste nad 5 V, ale pod 20 V, je kapacita důležitější než nominální napětí.

• Mnoho propojovacích kabelů.

Přestal jsem počítat jejich přesný počet. Pokud si myslíte, že máte dost, pravděpodobně ne.

• Konečně, abyste vše připojili, budete muset namontovat Arduino, senzory, prkénko (y) a modul Wi-Fi na vozidlo podle vašeho výběru. Váš výsledek se bude lišit v závislosti na tom, co používáte jako základ a jaké materiály jsou k dispozici.

Použili jsme:

• Kravaty na zip.

• Nějaké super lepidlo.

• Malé kousky šrotu/pryskyřičné trubice, které jsme měli s vhodným průměrem.

• Stará masonitová zadní deska z rámečku obrázku, nařezaná na míru.

• Trochu více lepicí pásky.

• Jakékoli nástroje potřebné k práci na vašem rádiem řízeném automobilu dle vašeho výběru.

Většinou jsme používali malou sadu šroubováků s několika bity, ale občas jsme museli vytáhnout sadu nástrojů, která byla součástí auta.

Software:

• Uzel červený

Důležitá součást sběru dat.

• Server MQTT.

Prostřední muž mezi naším vozidlem a Node-red. Zpočátku jsme pro testování používali test.mosquitto.org

Později jsme použili:

• CloudMQTT.com

To bylo mnohem spolehlivější, což více než vynahradilo, že nastavení bylo trochu komplikovanější.

• WampServer.

Poslední část sběru dat. Konkrétně budeme používat jeho SQL databázi pro ukládání našich shromážděných dat.

Krok 2: Elektrické schéma

Elektrické schéma
Elektrické schéma

Krok 3: Fyzická konstrukce

Fyzická konstrukce
Fyzická konstrukce
Fyzická konstrukce
Fyzická konstrukce
Fyzická konstrukce
Fyzická konstrukce

Naše řešení má přímý přístup k fyzické montáži.

Původní přijímač a jeho vodotěsný kryt byl odstraněn z RC auta, protože to není potřeba.

Zjistili jsme, že mezi předními koly pro naše čidlo sledování čáry bylo jedno vhodné umístění, a tak jsme jej přidrželi na místě smyčkou zipu nad přední krycí deskou.

Senzor, který používáme pro ochranu před kolizí, je jakoby zaklíněný za předním nárazníkem. Stále je chráněn před nárazy a odpovídá tření. Nakonec to vypadá při pohledu vpřed v tak mírném úhlu nahoru. Toto je perfektní.

Masonitová deska (zadní deska ze starého rámečku obrázku) nahoře má malé části trubky z papíru/pryskyřice nařezané na velikost a přilepené na dno. Ty se vyrovnávají s úchyty pro sloupky těla a jednoduše sedí nahoře a vše bezpečně drží. Za předpokladu, že lepidlo připevňující trubku k desce drží a že se nadměrně nenaklání, zůstane na svém místě. Za zmínku také stojí, že deska je v ochranné sféře kol a nárazníků. Arduino Mega a dvě prkénka byly připevněny k desce buď oboustrannou páskou, nebo smyčkou lepicí pásky, která byla obtočena.

K zabezpečení modulu WiFi nebyla přijata žádná zvláštní opatření. Není to naše, takže lepení nebo lepení páskou bylo považováno za zbytečné, protože je tak lehké, že se nebude příliš pohybovat a dráty stačí na to, aby držely na svém místě.

Nakonec máme senzor pro detekci „místností“, které byly připevněny ke komponentům odpružení jedním ze zadních kol. Během provozu to musí být mimo čáru, kterou vozidlo používá k navigaci.

Krok 4: Modul ESP8266

Modul ESP8266
Modul ESP8266
Modul ESP8266
Modul ESP8266

Modul WiFi, ESP8266, vyžaduje nastavení dvou různých pinů. Jedno nastavení má být použito při blikání modulu novým programem a používání Arduino Mega 2560 jako programátoru. Další nastavení je pro modul, když je používán a odesílá informace do MQTT Broker.

Pomocí Arduino IDE k nahrání kódu do modulu ESP8266 budete muset nainstalovat správce desek a dalšího správce desek

Pod správcem desky nainstalujte správce desky esp8266. Lze jej snadno najít hledáním „esp“. Je důležité, abyste nainstalovali verzi 2.5.0, ne starší, ne novější.

V části Nastavení v adresách URL dalších správců desek zkopírujte tento řádek:

arduino.esp8266.com/stable/package_esp8266c…

Abyste mohli cokoli nahrát do modulu ESP8266, budete muset použít konkrétní nastavení pinů, abyste mohli modul blikat. To je třeba provést pokaždé, když chcete provést změnu aktuálního kódu spuštěného v modulu. Před blikáním modulu nezapomeňte ve správci desky vybrat správný modul ESP8266. V tomto projektu jsme vybrali obecnou desku ESP8266. Nastavení kolíků pro blikání modulu najdete na prvním obrázku v tomto segmentu.

Po probliknutí modulu ESP8266 musíte přepnout nastavení pinů. Můžete se také rozhodnout použít adaptér, který vám usnadní nastavení. V tomto projektu jsme se rozhodli mít adaptér, kdykoli jsme měli modul spuštěný. Nastavení kolíku s adaptérem najdete na druhém obrázku v tomto segmentu.

Kód, který má být přenesen na modul ESP8266, nastavuje připojení k WiFi a MQTT Broker, v tomto případě s uživatelským jménem a heslem, ale lze to provést bez provedení nezbytných změn popsaných v komentářích ke kódu. Pro tento projekt náš Broker vyžadoval k práci uživatelské jméno a heslo. Modul čte příchozí zprávy ze sériového portu, ke kterému je připojen. Přečte každý nový řádek vytvořený kódem Arduino, dešifruje zprávu a znovu vytvoří zprávu. Poté odešle zprávu makléři MQTT, který byl zadán v kódu. Kód pro modul ESP8266:

Krok 5: Arduino

Poté, co jsme nakonfigurovali modul WiFi, se podíváme na program, který bude použit pro ovládání motoru a serva na RC autě. Vůz bude reagovat podle informací šedé stupnice z centrálního senzoru, v tomto projektu také známého jako „Line Detector“. Zcela jednoznačně má za cíl udržet informace z detektoru čar blízko přednastavené hodnoty, která se rovná informacím zaznamenaným při změně mezi světlem a tmou nebo v tomto projektu, bílou a černou. Pokud se tedy hodnota příliš liší, odpovídající výstup na servo bude řídit auto poblíž přednastavené hodnoty linky.

Program má dvě tlačítka, která fungují jako tlačítko start a stop pro RC auto. Technicky je tlačítko "stop" tlačítko "zapnutí", které se v podstatě rovná hodnotě PWM odeslané do motoru, což způsobí zastavení RC auta. Tlačítko Start odešle hodnotu PWM, která se rovná RC vozu, který se sotva pohybuje vpřed, protože bude příliš rychle jet, pokud získá příliš velkou hybnost.

Na přední část RC vozu je přidán detektor vyhýbání se kolizím, který detekuje, zda je nebo není zablokována cesta vpřed. Pokud je zablokované, RC auto se zastaví, dokud překážka nezmizí/není odstraněna. Analogový signál z detektoru se používá k určení, zda něco blokuje cestu, a je stanoveno jako kritérium pro pohyb vpřed a zastavení.

Sekundární snímač šedé stupnice, „Room Detector“, slouží k detekci, do které místnosti RC auto vstoupilo. Funguje na podobném principu jako Line Detector, ale nehledá změnu mezi světlem a tmou, ale spíše hodnoty v určitém rozsahu, který odpovídá různým místnostem v závislosti na hodnotě pozorované z Room Detector.

Nakonec program vytvoří ze senzorů řadu informací, které modul WiFi přečte a poté odešle makléři MQTT. Informační řádek je vytvořen jako řetězec a zapsán do odpovídajícího seriálu, ke kterému je připojen modul WiFi. Je důležité, aby zápis do seriálu probíhal pouze tak často, jak WiFi modul dokáže přečíst příchozí zprávu, ale nezapomeňte v tomto kódu nepoužívat žádná zpoždění, protože by to narušilo schopnost RC auta sledovat linii. Místo toho použijte "millis", protože to umožní programu běžet bez zpoždění, ale poté, co uplyne definované množství milis od zapnutí Arduina, napíše zprávu do seriálu bez blokování kódu stejným způsobem jako zpoždění.

Kód pro Arduino Mega 2560:

Krok 6: Databáze MySQL

WampServer je prostředí pro vývoj webu pro Windows, které nám umožňuje vytvářet aplikace pomocí PHP a databáze MySQL. PhpMyAdmin nám umožňuje snadnou správu našich databází.

Chcete -li začít, přejděte na:

V tomto projektu používáme verzi 3.17 x64 bitů pro Windows. Po instalaci zkontrolujte, zda jsou spuštěny všechny služby, což znamená, že se malá ikona místo červené nebo oranžové změní na zelenou. Pokud je ikona zelená, můžete přistupovat k PhpMyAdmin a spravovat svou databázi MySQL.

Získejte přístup k MySQL pomocí PhpMyAdmin a vytvořte novou databázi. Pojmenujte to něčím vhodným, co si můžete zapamatovat, v tomto projektu se to jmenovalo „line_follow_log“. Po vytvoření databáze byste měli v tabulce vytvořit tabulku. Ujistěte se, že počet sloupců odpovídá. V projektu používáme 4 sloupce. Jeden sloupec je pro časové razítko a poslední tři slouží k ukládání dat z vozidla. Pro každý sloupec použijte správný datový typ. Pro sloupec časových razítek jsme použili „dlouhý text“a pro zbytek „střední text“.

To by mělo být vše, co musíte v PhpMyAdmin a MySQL udělat. Pamatujte si svou databázi a tabulku pro sekci o Node-Red.

Krok 7: Node-Red

Abychom zvládli sběr dat, použijeme v Node-red poměrně jednoduchý tok. Připojuje se k našemu serveru MQTT a zapisuje do naší databáze MYSQL.

K tomu potřebujeme několik palet, aby různé funkce fungovaly, a potřebujeme nějaký skutečný kód, aby mohl běžet.

Pěkně popořádku. Budeme potřebovat následující palety.

Node-red-contrib-mqtt-broker: Toto je připojení k našemu brokerovi MQTT.

Node-red-dashboard: Náš hlavní panel, potřebný k vizuální reprezentaci shromážděných dat.

Node-red-node-mysql: Naše připojení k databázi SQL.

Toto není zamýšleno jako plnohodnotný průvodce po Node-red, ale vysvětlím, co tok Node-red dělá.

Zpočátku jsme měli problémy s tím, že náš server MQTT podle volby umírá/odpojuje se, zdánlivě náhodně, což dělalo provádění jakýchkoli změn frustrující snahu, protože nebylo jasné, zda byly změny prospěšné, nebo ne, když jsme neviděli výsledek. Takže tlačítko 'Zemřel server?' vstřikuje „Ne“následující blok jej vloží na náš server MQTT. Pokud to není mrtvé, v okně Debug se zobrazí 'No'. To se provádí nejen za účelem testování, ale také za účelem vynucení Node-red, aby se pokusil znovu připojit k serveru MQTT.

'Testovací řetězec' odešle kostýmní řetězec makléři MQTT. Tento řetězec jsme naformátovali tak, aby byl podobný tomu, který bychom získali z Arduina. To mělo usnadnit konfiguraci sítě, která dekóduje zprávy, aniž by bylo nutné mít spuštěný projekt a sbírat data.

Poslední tok v pracovním prostoru lze rozdělit na dva segmenty. Spodní větev jednoduše přečte příchozí zprávy, zveřejní je v okně ladění a uloží je na server SQL.

Velká síť připojených přepínačů sledujících funkční uzel, pokud dojde ke skutečnému „kouzlu“.

Funkce Pokračování čte příchozí řetězec, rozděluje jej na každé středník a předává sekce na každém z výstupů. Následující přepínače hledají jednu ze dvou různých příchozích informací. Z jednoho výstupu je vždy předána jedna konkrétní informace, druhá možnost opouští druhý výstup. V návaznosti na to je druhá skupina spínacích bloků. Aktivují se pouze s jedním konkrétním vstupem a vyvedou něco jiného.

Příklad: „Překážka“, stejně jako všechny ostatní, je binární volbou, buď je řízení jasné, nebo není. Obdrží tedy 0 nebo 1. A 0 bude odesláno do „jasné“větve, 1 bude odesláno do „zablokované“větve. Přepínače 'Clear', 'Obstructed', pokud jsou aktivovány, vydají něco konkrétního, Clear, nebo zablokované. Zelené pokračující bloky budou zveřejněny v okně ladění, modré budou zapisovány na náš řídicí panel.

Větve „stav“a „umístění“fungují úplně stejně.

Krok 8: MQTT Broker

Broker je server, který směruje zprávy z klientů do vhodných cílových klientů. Broker MQTT je ten, kde klienti používají knihovnu MQTT k připojení k brokerovi přes síť.

Pro tento projekt jsme vytvořili makléře MQTT pomocí služby CloudMQTT s bezplatným předplatným pro verzi „Cute Cat“. Má to své omezení, ale nepřekračujeme ty v tomto projektu. Modul WiFi se může připojit k brokerovi a broker poté směruje zprávy na vhodného cílového klienta. V tomto případě je klientem náš Node-Red. Služba CloudMQTT nastavuje pro svůj server uživatelské jméno a heslo, takže máme zaručeno vyšší zabezpečení. V zásadě to znamená, že k této konkrétní službě CloudMQTT mají přístup pouze ti, kteří mají uživatelské jméno a heslo. Uživatelské jméno a heslo jsou klíčové při nastavování připojení na kódu ESP8266 i Node-Red.

Průběžná statistika zpráv, které Broker dostává, je příjemná funkce, pomocí které můžete zjistit, jak dobře váš plán předplatného zpracovává informace, které směruje.

Příjemnou funkcí je možnost posílat zprávy od Broker do modulu WiFi, ale ty jsme v tomto projektu nepoužili.

Krok 9: Hobby Electronics

Před začátkem jsme z minulého projektu věděli, že servo řízení serva lze ovládat z Arduina se signálem PWM, s podobným zapojením a připojením do různých kanálů na stejném rádiovém přijímači, předpokládali jsme elektronické ovládání rychlosti (ESC od nyní), který ovládá motor, lze podobně ovládat pomocí PWM z Arduina.

Abychom tuto teorii otestovali, vytvoříme malou skicu Arduina. Skica čte analogový vstup z potenciometru, přemapuje hodnotu z 0, 1024 na 0, 255 a výslednou hodnotu vyvede na pin PWM pomocí analogWrite (), zatímco měl R/C auto na malém boxu a měl kola odstraněna.

Po prohlédnutí rozsahu na potmetru se zdálo, že se ESC „probudí“a mohli jsme to škrtit nahoru a dolů, také jsme nechali Arduino vytisknout hodnoty do sériového připojení, abychom je mohli sledovat.

Zdálo se, že ESC nemá rád hodnoty pod určitou prahovou hodnotou, v tomto případě 128. Signál 191 viděl jako neutrální plyn a 255 byl maximální plyn.

Nepotřebovali jsme měnit rychlost vozidla a perfektně jsme ho nechali projít nejpomalejší rychlostí, díky které se bude pohybovat. 192 byla nejnižší hodnota, která by otáčela motor, ale musíme ještě všechno sestavit a nejsme si jisti, zda by tento výkon stačil k pohybu vozidla po konečné montáži, ale zadání mírně větší hodnoty by mělo být triviální.

Obcházení potenciometru a zadávání pevné hodnoty do kódu však nefungovalo. Pažba ESC jednoduše zamrkala a nevytočila motor, „upravte nastavení plynu“podle manuálu.

Zuřivé řešení problémů, házení různých hodnot, používání různých vodičů a dokonce experimentování se změnou frekvence PWM, kterou Arduino používá, vedlo k větší podivnosti.

Vypadalo to, že jde o občasný problém, někdy se spustil, jindy odmítl cokoli udělat. Jednoduše to stále blikalo. Test s původním ovladačem a přijímačem potvrdil, že ESC stále funguje přesně tak, jak bylo zamýšleno, což způsobilo, že problémy byly ještě podivnější. Vyšší hodnoty ignorovaly a stále blikaly, nižší hodnoty ESC se vrátilo k zářivé veselé zelené, ale stále se neotočilo.

Co se lišilo od nastavení pomocí potenciometru nebo základního vysílače a přijímače a verze, která poskytovala pevné hodnoty?

Někdy práce podle plánu a práce podle očekávání se ve Vennově diagramu ve skutečnosti příliš nepřekrývají. V tomto případě by jako hračka neměla existovat šance, že by model při spuštění modelu jednoduše sundal nebo lámal prsty nebo se mu zachytily vlasy v kolech nebo hnacím ústrojí, i když něco jako podivné držení vysílače má plyn jakoukoli jinou polohu než neutrální.

„Upravit nastavení plynu“, to přesně znamená. Když se ESC zapne, očekává neutrální signál, než dojde k tomu, že nic neudělá. Normálně by byl vysílač vždy v neutrálu, když je ESC zapnutý a odtud bude šťastně řídit. V případě, že tomu tak není, pravděpodobně se alespoň jednou vrátí na neutrál, než bude model pevně na zemi a operátor se bude cítit připraven závodit.

Při používání potenciometru jsme „projížděli“rozsahy a pak to začalo fungovat. Když se potenciometr přehnal kolem neutrální polohy, jednoduše se aktivoval a pak to fungovalo.

Nižší rozsahy však stále vypadaly, že se ESC nelíbí. Ukázalo se, že je to produkt pracovních cyklů PWM.

Buď záměrně, nebo z technického důvodu, servo řízení i ESC ignorují signály pod 50% pracovních cyklů. To by mohlo být v případě, že přijímač/vysílač přestane fungovat nebo dojde energie, model by se vrátil do neutrálu a nevyrazil do dálky na plný plyn. Servo se také otáčí pouze o 180 stupňů a nepotřebuje celý rozsah.

S těmito novými znalostmi v ruce byla vytvořena nová skica Arduina. Počáteční verze přijímá řetězce zadané do sériového monitoru, převádí je na celé číslo a přesouvá je na pin PWM pomocí servo knihovny a write ()*. Pokud je do sériového monitoru zadána nová hodnota, hodnota write () se aktualizuje.

Během testování byl Traxxas ESC nahrazen Mtroniks G2 Micro, ale měly by fungovat stejně, i když přesné hodnoty se mohou mírně lišit.

Tato knihovna považuje ESC za servo, podle všeho je to v pořádku. Funkce write () z knihovny Servo.h se pohybuje od 0 do 180, očekávaný signál zapnutí se očekává přibližně uprostřed.

Ramena G2 Micro při zápisu () v rozsahu hodnot blízkých 90, nicméně bylo těžké určit, jak se zdá, že si 'pamatoval', že byl ozbrojen.

Očekává se, že Traxxas VXL-s3 se aktivuje při hodnotě write () 91.

Po aktivaci signálu buď ESC s potěšením přijal signály PWM, bez ohledu na to, jaké funkce Arduino je k jejich generování zavolalo, a podle toho řídí motor.

Když už mluvíme o funkcích; standardní analogWrite (), stejně jako write () a writeMicroseconds () z knihovny Servo.h lze používat zaměnitelně, mějte na paměti, co dělá co, a nakonec nic jiného než záležitosti pracovního cyklu. Pokud je požadována větší zrnitost, lze použít funkci WriteMicroseconds (), mějte však na paměti, že rozsah je zde od 1 000 do 2 000, přičemž aktivace nebo „neutrální“se očekává na 1 500. U standardního analogWrite () se očekává použitelný rozsah být od 128 do 255, přičemž kolem 191 je neutrální.

Doporučuje: