Obsah:

Rover ovládaný gestami pomocou akcelerometra a páru vysielač-prijímač RF: 4 kroky
Rover ovládaný gestami pomocou akcelerometra a páru vysielač-prijímač RF: 4 kroky

Video: Rover ovládaný gestami pomocou akcelerometra a páru vysielač-prijímač RF: 4 kroky

Video: Rover ovládaný gestami pomocou akcelerometra a páru vysielač-prijímač RF: 4 kroky
Video: 🟡 POCO X5 PRO - САМЫЙ ДЕТАЛЬНЫЙ ОБЗОР и ТЕСТЫ 2024, November
Anonim
Rover ovládaný gestami pomocou akcelerometra a páru vysielač-prijímač RF
Rover ovládaný gestami pomocou akcelerometra a páru vysielač-prijímač RF

Hej vy tam, Vždy ste chceli postaviť rover, ktorý by ste mohli ovládať jednoduchými gestami rúk, ale nikdy by ste nenašli odvahu pustiť sa do zložitosti spracovania obrazu a prepojenia webovej kamery s vašim mikrokontrolérom, nehovoriac o ťažkej bitke o prekonanie slabého dosahu a radu. problémy so zrakom? Nebojte sa … pretože existuje jednoduchá cesta von! Hľa, ako vám predstavujem mocného ACCELEROMETERA! *dum tsss*

Akcelerometer je skutočne chladné zariadenie, ktoré meria gravitačné zrýchlenie pozdĺž lineárnej osi. Predstavuje to ako úroveň napätia kolísajúcu medzi zemou a napájacím napätím, ktorú náš mikrokontrolér číta ako analógovú hodnotu. Ak trochu použijeme svoj mozog (len trochu matematiky a trochu newtonovskej fyziky), nielenže ho môžeme použiť na meranie lineárneho pohybu pozdĺž osi, ale môžeme ho použiť aj na určenie uhla náklonu a vnímania vibrácií. Neboj sa! Nebudeme potrebovať matematiku ani fyziku; budeme sa zaoberať surovými hodnotami, ktoré akcelerometer vypľuje. V skutočnosti sa v skutočnosti nemusíte veľmi zaujímať o technickú stránku akcelerometra tohto projektu. Dotknem sa iba niekoľkých špecifík a rozpracujem ich len toľko, koľko potrebujete na pochopenie celkového obrazu. Ak vás však zaujíma štúdium jeho vnútornej mechaniky, pozrite sa sem.

Len to musíte mať zatiaľ na pamäti: akcelerometer je gizmo (často spojený s gyroskopom), ktorý otvára dvere všetkým tým hrám so senzormi pohybu, ktoré hráme na našich smartfónoch; napríklad automobilová závodná hra, kde riadime vozidlo jednoducho naklonením našich zariadení v oboch smeroch. A tento efekt môžeme napodobniť prilepením akcelerometra (samozrejme s niekoľkými pomocnými látkami) na rukavicu. Jednoducho si nasadíme magické rukavice a zakloníme ruky doľava alebo doprava, dopredu alebo dozadu a vidíme, ako naše rovery tancujú podľa našich melódií. Všetko, čo tu musíme urobiť, je preložiť hodnoty akcelerometra na digitálne signály, ktoré môžu motory na vozíku interpretovať, a navrhnúť mechanizmus na prenos týchto signálov do rovera. Aby sme to dosiahli, vyzývame dobrého Arduina a jeho pomocníkov pre dnešný experiment, pár RF vysielača a prijímača pracujúci na frekvencii 434 MHz, čím poskytneme dosah asi 100-150 m v otvorenom priestore, čo nás tiež ušetrí od radu riadkov. problémy so zrakom.

Celkom šikovný hack, však? Poďme sa ponoriť do…

Krok 1: Zhromaždite svoje zásoby

Zhromaždite svoje zásoby
Zhromaždite svoje zásoby
Zhromaždite svoje zásoby
Zhromaždite svoje zásoby
Zhromaždite svoje zásoby
Zhromaždite svoje zásoby
Zhromaždite svoje zásoby
Zhromaždite svoje zásoby
• Arduino Nano x1
• Akcelerometer (ADXL335) x1
• 5V DC motor + kolesá x2 každý
• hovädzie koleso* x1
• Ovládač motora L293D + 16 -pinová zásuvka IC x1 každý
• RF vysielač 434 MHz x1
• RF prijímač 434 MHz x1
• HT-12E kodér IC + 18-pinová zásuvka IC x1 každý
• HT-12D dekodér IC + 18-pinová zásuvka IC x1 každý
• Regulátor napätia LM7805 x1
• Tlačidlový spínač x2
• Červená LED + odpor 330O x2 každý
• Žltá LED + odpor 330O x1 každý
• Zelená LED + odpor 330O (voliteľné) x4 každý
• Rezistory 51 kO a 1 MO x1 každý
• Radiálne kondenzátory 10 µF x2
Batérie, konektory batérií, USB kábel, prepojovacie vodiče, zásuvka, 2-pólové skrutkové svorky, PCB, Chasis a vaše obvyklé spájkovacie príslušenstvo

Ak sa zaujímate, prečo používame hovädzí kotúč, ide o to, že moduly RF vysielača a prijímača majú iba 4 dátové kolíky, čo znamená, že môžeme poháňať iba 2 motory, a preto používanie hovädzieho kolesa na podporovať štruktúru. Ak však máte pocit, že váš rover by so štyrmi kolesami vyzeral oveľa chladnejšie, nebojte sa, je tu práca! V takom prípade stačí zo zoznamu vyškrtnúť hovädzie koleso a pridať ďalší pár 5 V jednosmerných motorov sprevádzaných každým kolesom a dávať pozor na jednoduchý hack, o ktorom sa hovorí na konci kroku 3.

Nakoniec, pre odvážnych ľudí existuje priestor na ďalšiu miernu úpravu dizajnu, ktorá zahŕňa vývoj vlastného Arduina. V nasledujúcom kroku prejdite do sekcie bonusov a presvedčte sa sami. Budete tiež potrebovať niekoľko ďalších dodávok: ATmega328P, 28 -pinovú zásuvku IC, 16MHz kryštálový oscilátor, dve 22pF keramické krytky, ďalší regulátor napätia 7805, ďalšie dve radiálne krytky 10μF a odpory 10kΩ, 680Ω, 330Ω a áno, mínus Arduino!

Krok 2: Pripojte vysielač

Zapojte vysielač
Zapojte vysielač
Zapojte vysielač
Zapojte vysielač
Zapojte vysielač
Zapojte vysielač
Zapojte vysielač
Zapojte vysielač

Projekt rozdelíme na dve zložky: obvody vysielača a prijímača. Vysielač sa skladá z akcelerometra, modulu Arduino a RF vysielača spojeného s IC kodéra HT-12E, všetko zapojené podľa priloženej schémy.

Akcelerometer, ako bol predstavený skôr, slúži na rozpoznanie našich gest rúk. Na splnenie našich potrieb použijeme trojosový akcelerometer (v zásade tri jednoosé akcelerometre v jednom). Môže sa použiť na meranie zrýchlenia vo všetkých troch dimenziách, a ako ste asi uhádli, neposkytuje jednu, ale množinu troch analógových hodnôt vzhľadom na jeho tri osi (x, y a z). V skutočnosti potrebujeme iba zrýchlenie pozdĺž osí x a y, pretože vozítko môžeme poháňať iba v štyroch smeroch: dopredu alebo dozadu (t. J. Pozdĺž osi y) a doľava alebo doprava (t. J. Pozdĺž osi x). Osu z by sme potrebovali, keby sme stavali dron, aby sme mohli jeho vzostup alebo zostup ovládať aj gestami. V každom prípade musia byť tieto analógové hodnoty, ktoré poskytuje akcelerometer, prevedené na digitálne signály, aby mohli poháňať motory. Postará sa o to Arduino, ktoré pri prevode tiež prenáša tieto signály do rovera prostredníctvom modulu RF vysielača.

Rádiofrekvenčný vysielač má iba jednu úlohu: prenášať „sériové“údaje dostupné na pine 3 von z antény na kolíku 1. To odporúča použitie HT-12E, 12-bitového kodéra paralelných a sériových dát, ktorý zbiera až 4 bity paralelných údajov z Arduina na linkách AD8 až AD11, čo nám umožňuje vytvoriť priestor až pre 24 = 16 rôznych kombinácií I/O na rozdiel od jediného dátového kolíka na RF vysielači. Zostávajúcich 8 bitov, čerpaných z riadkov A0 až A7 v kodéri, tvorí adresový bajt, ktorý uľahčuje párovanie RF vysielača so zodpovedajúcim RF prijímačom. 12 bitov sa potom spojí a serializuje a odošle na dátový kolík RF vysielača, ktorý zase ASK moduluje údaje na nosnú vlnu 434 MHz a vystrelí ich prostredníctvom antény na kolíku 1.

Koncepčne by každý RF prijímač počúvajúci na 434 MHz mal byť schopný tieto údaje zachytiť, demodulovať a dekódovať. Adresné riadky na HT-12E a riadky na náprotivku HT-12D (12-bitový dekodér sériovo-paralelných údajov) nám však umožňujú vykresliť pár RF vysielača a prijímača jedinečným nasmerovaním údajov iba na určený prijímač, čím sa obmedzuje komunikácia so všetkými ostatnými. Všetko, čo sa od nás požaduje, je nakonfigurovať riadky adries identicky na oboch frontoch. Pretože sme napríklad uzemnili všetky adresné riadky pre náš HT-12E, musíme urobiť to isté pre HT-12D na prijímacom konci, inak rover nebude schopný prijímať signály. Týmto spôsobom môžeme tiež ovládať viac vozíkov jediným obvodom vysielača identickou konfiguráciou riadkov adries na HT-12D v každom z prijímačov. Alebo by sme si mohli obliecť dve rukavice, z ktorých každá je pripevnená k obvodu vysielača obsahujúceho odlišnú konfiguráciu riadka adresy (povedzme, jeden so všetkými uzlami adresných riadkov a druhý so všetkými vysoko držanými alebo jeden s jedným uzemneným, zatiaľ čo zvyšných sedem je držaných vysoký a druhý s dvoma líniami uzemnenými, zatiaľ čo zvyšných šesť je držaných vysoko, alebo akoukoľvek ich kombináciou) a každé riadenie viac identicky nakonfigurovaných roverov. Zahrajte si maestro na androidovej symfónii!

Jedna dôležitá vec, ktorú je potrebné pri zostavovaní obvodu zaznamenať, je hodnota Rosca. HT-12E má vnútorný obvod oscilátora medzi kolíkmi 15 a 16, ktorý je povolený pripojením odporu, nazývaného Rosc, medzi tieto piny. Hodnota zvolená pre Rosc skutočne určuje frekvenciu oscilátora, ktorá sa môže líšiť v závislosti od napájacieho napätia. Výber vhodnej hodnoty pre Rosc je zásadný pre fungovanie HT-12E! V ideálnom prípade by mala byť frekvencia oscilátora HT-12E 1/50 krát väčšia ako u náprotivku HT-12D. Pretože pracujeme na 5 V, vybrali sme pre obvody HT-12E a HT-12D ako Rosc odpory 1MΩ a 51kΩ. Ak plánujete prevádzkovať obvody na inom napájacom napätí, podľa grafu „Frekvencia oscilátora vs. napájacie napätie“na strane 11 v priloženom technickom liste HT-12E určte presnú frekvenciu oscilátora a odpor, ktorý sa má použiť.

Ako vedľajšiu poznámku tu tiež použijeme zásuvkové lišty (slúžiace na podobný účel ako zásuvky IC) na zapojenie akcelerometra, RF vysielača a Arduina do obvodu namiesto ich priameho spájkovania na DPS. Zámerom je prispôsobiť malú znovupoužiteľnosť komponentov. Povedzte, už je to nejaký čas, čo ste skonštruovali svoj rover ovládaný gestami a len tak tam sedí, napoly pokrytý prachom, na vrchole poličky s trofejami a narazíte na ďalší skvelý návod, ktorý využíva účinnosť akcelerometra. Tak čo robíš? Jednoducho ho vytiahnite zo svojho rovera a zatlačte ho do svojho nového okruhu. Nie je potrebné vyvolávať „amazonky“, aby ste získali nového:-p

Bonus: Vyhnite sa Arduinu a napriek tomu nie

Len aby ste sa cítili trochu dobrodružnejšie, a najmä ak si myslíte, že vynaložiť tento krásne navrhnutý zázrak (samozrejme Arduino) na takú triviálnu úlohu, ako je tá naša, je trochu prehnané, vydržte so mnou trochu dlhšie; a ak nie, pokojne preskočte na ďalší krok.

Našim cieľom je dosiahnuť, aby sa Arduino (vlastne mozog Arduina; áno, hovorím o ATmega IC!) Stal členom tímu. ATmega by bola naprogramovaná tak, aby znova a znova bežala iba jednu skicu, aby mohla slúžiť ako večná časť obvodu, rovnako ako obyčajný integrovaný obvod HT-12E-a, ktorý tam len sedel a robil to, čo mal. Nemal by taký byť akýkoľvek skutočný vstavaný systém?

V každom prípade, aby ste mohli pokračovať v tejto aktualizácii, upravte obvod podľa druhej priloženej schémy. Tu jednoducho nahradíme ženské hlavičky pre Arduino zásuvkou IC pre ATmega, pridáme 10K pull-up odpor na resetovací kolík (pin 1) IC a načerpáme ho pomocou externých hodín medzi kolíkmi 9 a 10 Bohužiaľ, ak sa zbavíme Arduina, pustíme aj jeho vstavané regulátory napätia; ergo, musíme aj tu replikovať obvod LM7805, ktorý sme použili pre prijímač. Okrem toho používame aj rozdeľovač napätia na čerpanie 3,3 V potrebného na napájanie akcelerometra.

Jediným ďalším úlovkom je programovanie ATmega, aby vykonala svoju prácu. Na to si však budete musieť počkať do kroku 4. Takže zostaňte naladení…

Krok 3: A prijímač

A prijímač
A prijímač
A prijímač
A prijímač
A prijímač
A prijímač
A prijímač
A prijímač

Prijímač pozostáva z modulu RF prijímača spojeného s IC dekodéra HT-12D a dvojice jednosmerných motorov ovládaných pomocou ovládača motora L293D, všetky zapojené podľa priloženej schémy.

Jedinou úlohou RF prijímača je demodulovať nosnú vlnu (prijatú prostredníctvom jej antény na kolíku 1) a vykresliť načítané „sériové“údaje na pine 7, odkiaľ ich HT-12D zachytí na deserializáciu. Teraz, za predpokladu, že riadky adresy (A0 až A7) na HT-12D sú konfigurované identicky s jeho náprotivkom HT-12E, 4 paralelné bity dát sa extrahujú a odovzdávajú ďalej prostredníctvom dátových liniek (D8 až D11) na HT-12D, vodičovi motora, ktorý zasa interpretuje tieto signály na pohon motorov.

Opäť dávajte pozor na hodnotu Rosca. HT-12D má tiež vnútorný obvod oscilátora medzi kolíkmi 15 a 16, ktorý je umožnený pripojením rezistora nazývaného Rosc medzi tieto piny. Hodnota zvolená pre Rosc skutočne určuje frekvenciu oscilátora, ktorá sa môže líšiť v závislosti od napájacieho napätia. Výber vhodnej hodnoty pre Rosc je zásadný pre fungovanie HT-12D! V ideálnom prípade by mala byť frekvencia oscilátora HT-12D 50-krát väčšia ako frekvencia oscilátora HT-12E. Pretože pracujeme na 5 V, vybrali sme pre obvody HT-12E a HT-12D ako Rosc odpory 1MΩ a 51kΩ. Ak plánujete prevádzkovať obvody na inom napájacom napätí, podľa grafu „Frekvencia oscilátora vs. napájacie napätie“na strane 5 priloženého datového listu HT-12D určte presnú frekvenciu oscilátora a odpor, ktorý chcete použiť.

Nezabudnite tiež na ženské hlavičky pre prijímač RF.

Voliteľne môže byť LED dióda pripojená cez rezistor obmedzujúci prúd 330Ω ku každému zo 4 dátových pinov HT-12D, aby sa pomohlo určiť bit prijatý na tomto kolíku. LED dióda sa rozsvieti, ak je prijatý bit HIGH (1) a zhasne, ak je prijatý bit LOW (0). Alternatívne by mohla byť na VT kolík HT-12D (opäť cez odpor obmedzujúci prúd 330 Ω) viazaná jedna LED dióda, ktorá by sa rozsvietila v prípade platného prenosu.

Teraz, ak hľadáte hack s motormi, o ktorých som hovoril v prvom kroku, je to sakra ľahké! Stačí zapojiť dva motory v každej súprave paralelne, ako je znázornené na druhej schéme. Funguje to tak, ako má, pretože motory v každej sade (predné a zadné motory vľavo a predné a zadné motory vpravo) nie sú nikdy poháňané v opačných smeroch. To znamená, že na zatočenie rovera doprava musia byť predné a zadné motory vľavo poháňané dopredu a predné a zadné motory vpravo musia byť poháňané dozadu. Podobne, aby rover odbočil doľava, musia byť predné aj zadné motory vľavo poháňané dozadu a predné a zadné motory vpravo musia byť poháňané dopredu. Preto je bezpečné napájať obidva motory v súprave rovnakým párom napätí. A spôsob, ako to dosiahnuť, je jednoducho zapojiť paralelne motory.

Krok 4: Prejdite na kód

Ďalej ku kódexu
Ďalej ku kódexu

Na uvedenie rovera do prevádzky je potrebné urobiť iba jednu vec. Áno, uhádli ste správne! (Dúfam, že ste to urobili) Stále musíme preložiť údaje z akcelerometra do formy, ktorú môže vodič motora interpretovať tak, aby mohol poháňať motory. Ak si myslíte, že keďže hodnoty na akcelerometri sú analógové a vodič motora očakáva digitálne signály, budeme musieť implementovať nejaký druh ADC, nie technicky, ale práve to musíme urobiť. A je to celkom jednoduché.

Vieme, že akcelerometer meria gravitačné zrýchlenie pozdĺž lineárnej osi a že toto zrýchlenie je reprezentované ako úroveň napätia kolísajúca medzi zemou a napájacím napätím, ktoré náš mikrokontrolér číta ako analógovú hodnotu pohybujúcu sa v rozmedzí od 0 do 1023. Ale keďže sme Ak pracujeme s akcelerometrom na 3,3 V, je vhodné nastaviť analógovú referenciu pre 10-bitový ADC (ktorý je integrovaný v ATmeaga na palube Arduina) na 3,3 V. Jednoducho to uľahčí pochopenie vecí; aj keď na našom malom experimente nebude veľmi záležať, aj keď by sme to neurobili (kód budeme musieť iba trochu vyladiť). Aby sme to však urobili, jednoducho zapojíme pin AREF na Arduino (pin 21 na ATmega) na 3,3 V a túto zmenu kódu označíme volaním analogReference (EXTERNAL).

Teraz, keď položíme akcelerometer na plocho a analógovo, prečítajte si zrýchlenie pozdĺž osí x a y (pamätáte? Potrebujeme iba tieto dve osi), dostaneme hodnotu asi 511 (tj. Polovicu cesty medzi 0 a 1023), čo je len znamená to, že pozdĺž týchto osí je 0 zrýchlenia. Skôr než sa vŕtať v podrobnostiach skutočnosti, predstavte si to ako osi x a y na grafe, pričom hodnota 511 označuje pôvod a 0 a 1023 koncové body, ako je znázornené na obrázku; Akcelerometer nasmerujte tak, aby jeho kolíky smerovali nadol a držali vás bližšie, inak by ste mohli obrátiť/zameniť osi. To znamená, že ak nakloníme akcelerometer doprava, mali by sme odčítať hodnotu väčšiu ako 511 pozdĺž osi x a ak nakloníme akcelerometer doľava, mali by sme získať hodnotu nižšiu ako 511 pozdĺž osi x. Podobne, ak nakloníme akcelerometer dopredu, mali by sme odčítať hodnotu väčšiu ako 511 pozdĺž osi y a ak nakloníme akcelerometer dozadu, mali by sme odčítať hodnotu nižšiu ako 511 pozdĺž osi y. A takto v kóde odvodzujeme smer, v ktorom by sa malo rover riadiť. To však tiež znamená, že musíme udržiavať akcelerometer skutočne stabilný a zarovnaný rovnobežne s plochým povrchom, aby sme dokázali prečítať 511 pozdĺž oboch osí. aby bol rover zaparkovaný. Aby sme túto úlohu trochu uľahčili, definujeme určité prahy tvoriace hranicu, ako ukazuje obrázok, aby rover zostal nehybný, pokiaľ sú hodnoty x a y v medziach a my s istotou vieme, že rover musí byť nastavený v pohyb, akonáhle je prah prekročený.

Napríklad, ak je na osi y 543, vieme, že akcelerometer je naklonený dopredu, tj. Ergo, musíme rover nasmerovať dopredu. Vykonáme to tak, že nastavíme piny D2 a D4 HIGH a piny D3 a D5 LOW. Teraz, pretože tieto kolíky sú zapojené priamo do HT-12E, signály sú serializované a vysielané z RF vysielača, aby ich zachytil RF prijímač sediaci na roveri, ktorý pomocou HT-12D deserializuje signály a ich odovzdáva L293D, ktorý tieto signály následne interpretuje a poháňa motory dopredu

Tieto prahové hodnoty však môžete zmeniť, aby ste mohli kalibrovať citlivosť. Jednoduchý spôsob, ako to urobiť, je jednoducho pripojiť akcelerometer k Arduinu a spustiť náčrt, ktorý vyplní hodnoty x a y na sériový monitor. Teraz trochu pohnite akcelerometrom, pozrite sa na hodnoty a rozhodnite sa pre prahové hodnoty.

A je to! Nahrajte kód do svojho Arduina a užívajte si !! Alebo možno nie tak skoro:-(Ak ste nepreskočili bonusovú sekciu, nahranie kódu do vášho ATmega by znamenalo trochu viac práce. Máte dve možnosti:

Možnosť A: Použite zariadenie USB na sériové pripojenie, ako je napríklad základná doska FTDI FT232. Jednoducho zapojte vodiče zo záhlavia TTL na zodpovedajúce kolíky na ATmega podľa nižšie uvedeného mapovania:

Kolíky na Breakout Board Kolíky na mikrokontroléri
DTR/GRN RST/Reset (kolík 1) pomocou uzáveru 0,1 µF
Rx Tx (kolík 3)
Tx Rx (kolík 2)
Vcc +5V výstup
CTS (nepoužitý)
Gnd Zem

Teraz zapojte jeden koniec kábla USB do oddeľovacej dosky a druhý do počítača a nahrajte kód obvyklým spôsobom: spustite Arduino IDE, vyberte príslušný sériový port, nastavte typ dosky, skompilovajte skicu a nahrajte.

Možnosť B: Ak máte niekde ležanie, použite UNO. Jednoducho zapojte ATmega do UNO, nahrajte kód ako obvykle, vytiahnite IC a zasuňte ho späť do obvodu vysielača. Jednoduché ako koláč!

Každá z týchto možností by mala fungovať, za predpokladu, že ste boli dostatočne inteligentní na to, aby ste na ATmega napálili bootloader vopred, alebo ak ste boli ešte múdrejší na kúpu ATmega s už nainštalovaným bootloaderom na prvom mieste. Ak nie, pokračujte podľa uvedených pokynov.

A my sme oficiálne hotoví! Dúfam, že sa vám tento bizarne dlhý návod páčil. Teraz pokračujte, dokončite stavbu svojho rovera, ak ste to ešte neskončili, chvíľu sa s ním pohrajte a vráťte sa, aby ste nižšie uvedenú sekciu komentárov zaplavili otázkami a/alebo konštruktívnou kritikou.

Vďaka

P. S. Dôvod, prečo som nenahral žiadne fotky hotového projektu, je ten, že som ho nedokončil sám. V polovici budovania som premýšľal nad niekoľkými vylepšeniami, ako je ovládanie rýchlosti, vyhýbanie sa prekážkam a možno aj LCD na vozíku, čo v skutočnosti nie je také ťažké, ak použijeme mikrokontrolér na vysielacom aj prijímajúcom konci. Ale prečo to neurobiť náročne ?! V súčasnosti teda pracujem týmto smerom a uverejním aktualizáciu, hneď ako to prinesie nejaké ovocie. Kód a návrh som však vyskúšal pomocou rýchleho prototypu, ktorý som postavil pomocou modulov z jedného z mojich predchádzajúcich projektov; video si môžete pozrieť tu.

Odporúča: