Obsah:

Rover ovládaný gesty pomocí akcelerometru a dvojice vysílač-přijímač RF: 4 kroky
Rover ovládaný gesty pomocí akcelerometru a dvojice vysílač-přijímač RF: 4 kroky

Video: Rover ovládaný gesty pomocí akcelerometru a dvojice vysílač-přijímač RF: 4 kroky

Video: Rover ovládaný gesty pomocí akcelerometru a dvojice vysílač-přijímač RF: 4 kroky
Video: Ovládání pomocí gest rukou 2024, Červenec
Anonim
Rover ovládaný gesty pomocí akcelerometru a dvojice RF vysílač-přijímač
Rover ovládaný gesty pomocí akcelerometru a dvojice RF vysílač-přijímač

Zdravím, Kdykoli jste chtěli postavit rover, který byste mohli řídit jednoduchými gesty rukou, ale nikdy jste nenašli odvahu pustit se do složitostí zpracování obrazu a propojení webové kamery s vaším mikrokontrolérem, nemluvě o náročné bitvě o překonání špatného dosahu a řady problémy se zrakem? Nebojte se … protože existuje snadná cesta ven! Hle, jak vám představuji mocný ACCELEROMETER! *ba dum tsss*

Akcelerometr je opravdu skvělé zařízení, které měří gravitační zrychlení podél lineární osy. Představuje to jako úroveň napětí kolísající mezi zemí a napájecím napětím, kterou náš mikrokontrolér načítá jako analogovou hodnotu. Pokud trochu použijeme svůj mozek (jen trochu matematiky a nějaké newtonovské fyziky), můžeme jej nejen použít k měření lineárního pohybu podél osy, ale také jej můžeme použít k určení úhlu náklonu a snímání vibrací. Nestresuj se! Nebudeme potřebovat matematiku ani fyziku; budeme se zabývat pouze surovými hodnotami, které akcelerometr vyplivne. Ve skutečnosti si ve skutečnosti nemusíte dělat starosti ohledně technických vlastností akcelerometru pro tento projekt. Jen se dotknu několika specifik a upřesním jen tolik, kolik potřebujete k pochopení celkového obrazu. I když, pokud máte zájem o studium jeho vnitřní mechaniky, podívejte se sem.

Jen to musíte mít prozatím na paměti: akcelerometr je gizmo (často spojené s gyroskopem), které otevírá dveře všem těm pohybovým senzačním hrám, které hrajeme na našich smartphonech; například automobilová závodní hra, kde řídíme vozidlo jednoduše nakloněním zařízení v obou směrech. A tento efekt můžeme napodobit tím, že na rukavici nalepíme akcelerometr (samozřejmě s několika pomocnými prostředky). Prostě jsme si nasadili kouzelné rukavice a zaklonili ruce doleva nebo doprava, dopředu nebo dozadu a viděli, jak naši rovers tančí na naše melodie. Vše, co zde musíme udělat, je převést hodnoty akcelerometru na digitální signály, které mohou motory na roveru interpretovat, a navrhnout mechanismus pro přenos těchto signálů do roveru. Abychom toho dosáhli, vyzýváme dobrého Arduina a jeho pomocníky pro dnešní experiment, dvojici vysílač-přijímač RF pracující na frekvenci 434 MHz, čímž získáme dosah asi 100 až 150 m v otevřeném prostoru, což nás také ušetří od řady problémy se zrakem.

Docela šikovný hack, co? Pojďme se ponořit do…

Krok 1: Shromážděte své zásoby

Shromážděte své zásoby
Shromážděte své zásoby
Shromážděte své zásoby
Shromážděte své zásoby
Shromážděte své zásoby
Shromážděte své zásoby
Shromážděte své zásoby
Shromážděte své zásoby
• Arduino Nano x1
• Akcelerometr (ADXL335) x1
• 5V DC motor + kola x2 každý
• Skotské kolo* x1
• Ovladač motoru L293D + 16pinová zásuvka IC x1 každý
• RF vysílač 434 MHz x1
• RF přijímač 434 MHz x1
• HT-12E kodér IC + 18pinová zásuvka IC x1 každý
• HT-12D dekodér IC + 18pinová zásuvka IC x1 každý
• Regulátor napětí LM7805 x1
• Tlačítko x2
• Červená LED + odpor 330O x2 každý
• Žlutá LED + odpor 330O x1 každý
• Zelená LED + odpor 330O (volitelně) x4 každý
• Rezistory 51 kO a 1 MO x1 každý
• Radiální kondenzátory 10 µF x2
Baterie, konektory baterií, kabel USB, propojovací vodiče, zásuvka, 2kolíkové šroubové svorky, PCB, Chasis a vaše obvyklé příslušenství pro pájení

Pokud vás zajímá, proč používáme skotské kolo, jde o to, že moduly RF vysílače a přijímače mají pouze 4 datové piny, což znamená, že můžeme pohánět pouze 2 motory, a proto použít skotu podepřít konstrukci. Pokud však máte pocit, že by váš rover se čtyřmi koly vypadal mnohem chladněji, nebojte se, je tu práce! V takovém případě stačí vyškrtnout hovězí kolo ze seznamu a přidat další pár 5V stejnosměrných motorů, každý s kolečkem, a podívat se na jednoduchý hack diskutovaný na konci kroku 3.

Konečně, pro odvážné, existuje prostor pro další malou úpravu designu, která trochu zahrnuje konstrukci vlastního Arduina. V dalším kroku přejděte do bonusové sekce a přesvědčte se sami. Budete také potřebovat několik dalších dodávek: ATmega328P, 28pinová IC zásuvka, 16MHz krystalový oscilátor, dvě keramické krytky 22pF, další regulátor napětí 7805, další dvě radiální krytky 10μF a odpory 10kΩ, 680Ω, 330Ω a ano, minus Arduino!

Krok 2: Zapojte vysílač

Zapojte vysílač
Zapojte vysílač
Zapojte vysílač
Zapojte vysílač
Zapojte vysílač
Zapojte vysílač
Zapojte vysílač
Zapojte vysílač

Projekt rozdělíme na dvě složky: obvody vysílače a přijímače. Vysílač se skládá z akcelerometru, modulu Arduino a RF vysílače spojeného s IC kodéru HT-12E, vše zapojené podle přiloženého schématu.

Akcelerometr, jak byl představen dříve, slouží k rozpoznávání našich gest rukou. Ke splnění našich potřeb použijeme tříosý akcelerometr (v zásadě tři jednoosé akcelerometry v jednom). Lze jej použít k měření zrychlení ve všech třech rozměrech, a jak jste asi uhodli, nepřináší vzhledem ke svým třem osám (x, y az) žádnou, ale sadu tří analogových hodnot. Ve skutečnosti potřebujeme pouze zrychlení podél os x a y, protože vozítko můžeme řídit pouze ve čtyřech směrech: vpřed nebo vzad (tj. Podél osy y) a doleva nebo doprava (tj. Podél osy x). Osu z bychom potřebovali, kdybychom stavěli dron, abychom mohli jeho vzestup nebo sestup ovládat také pomocí gest. V každém případě musí být tyto analogové hodnoty, které poskytuje akcelerometr, převedeny na digitální signály, aby mohly pohánět motory. O to se stará Arduino, který také tyto signály při převodu přenáší do roveru prostřednictvím modulu RF vysílače.

RF vysílač má pouze jednu úlohu: přenášet „sériová“data dostupná na pinu 3 z antény na pinu 1. To podporuje použití HT-12E, 12bitového kodéru paralelních a sériových dat, který shromažďuje až 4 bity paralelních dat z Arduina na linkách AD8 až AD11, což nám umožňuje vytvořit prostor až pro 24 = 16 různých kombinací I/O oproti jednomu datovému pinu na RF vysílači. Zbývajících 8 bitů, odebíraných z linek A0 až A7 na kodéru, tvoří adresový bajt, který usnadňuje párování RF vysílače s odpovídajícím RF přijímačem. 12 bitů se poté spojí a serializuje a předá datovému kolíku vysokofrekvenčního vysílače, který zase ASK moduluje data na nosnou vlnu 434 MHz a vystřelí je přes anténu na kolíku 1.

Koncepčně by každý RF přijímač poslouchající na 434 MHz měl být schopen tato data zachytit, demodulovat a dekódovat. Adresní řádky na HT-12E a řádky na protějšku HT-12D (12bitový dekodér sériově-paralelních dat) nám však umožňují vykreslit jedinečnou dvojici vysílač-přijímač RF směrováním dat pouze do zamýšlený přijímač, čímž omezuje komunikaci se všemi ostatními. Vše, co od nás požadujeme, je nakonfigurovat adresní řádky identicky na obou frontách. Například, protože jsme uzemnili všechny adresní řádky pro naše HT-12E, musíme udělat totéž pro HT-12D na přijímacím konci, jinak rover nebude schopen přijímat signály. Tímto způsobem můžeme také ovládat více roverů s jediným obvodem vysílače identickou konfigurací adresních linek na HT-12D na každém z přijímačů. Nebo bychom si mohli nasadit dvě rukavice, z nichž každá je opatřena obvodem vysílače, který obsahuje odlišnou konfiguraci adresového řádku (řekněme, jeden se všemi adresními řádky uzemněný a druhý se všemi drženými vysoko, nebo jeden s jedním uzemněným, zatímco zbývajících sedm je drženo vysoký a druhý se dvěma liniemi uzemněnými, zatímco zbývajících šest je drženo vysoko, nebo jakákoli jejich kombinace) a každý řídí několik identicky konfigurovaných roverů. Zahrajte si maestro na symfonii Android!

Jedna důležitá věc, kterou je třeba při sestavování obvodu poznamenat, je hodnota Rosc. HT-12E má vnitřní obvod oscilátoru mezi piny 15 a 16, který je umožněn připojením odporu, zvaného Rosc, mezi tyto piny. Hodnota zvolená pro Rosc ve skutečnosti určuje frekvenci oscilátoru, která se může lišit v závislosti na napájecím napětí. Výběr vhodné hodnoty pro Rosc je pro fungování HT-12E zásadní! V ideálním případě by frekvence oscilátoru HT-12E měla být 1/50krát vyšší než u protějšku HT-12D. Protože pracujeme na 5V, vybrali jsme pro obvody HT-12E a HT-12D jako Rosc odpory 1MΩ a 51kΩ. Pokud plánujete provozovat obvody na jiném napájecím napětí, viz graf „Frekvence oscilátoru vs. napájecí napětí“na straně 11 přiloženého datového listu HT-12E, kde určíte přesnou frekvenci oscilátoru a odpor, který se má použít.

Jako vedlejší poznámku zde také použijeme samičí záhlaví (sloužící podobnému účelu jako zásuvky IC) k připojení akcelerometru, RF vysílače a Arduina do obvodu místo jejich přímého pájení na PCB. Záměrem je přizpůsobení znovupoužitelnosti malé součásti. Řekněme, že je to už nějaký čas, co jste zkonstruovali svůj rover ovládaný gesty a jen tak seděl, napůl pokrytý prachem, na vrcholu poličky s trofejemi a narazil jste na další skvělý návod, který využívá účinnost akcelerometru. Takže, co děláš? Jednoduše ho vytáhnete ze svého roveru a zatlačíte do nového okruhu. Není třeba svolávat „Amazonky“, abyste získali nový:-p

Bonus: Odstraňte Arduino, a přesto ne

Jen v případě, že se cítíte trochu dobrodružnější, a zvláště pokud si myslíte, že vynaložit tento krásně navržený zázrak (samozřejmě Arduino) na tak triviální úkol, jako je ten náš, je trochu přehnané, vydržte se mnou trochu déle; a pokud ne, klidně přeskočte na další krok.

Naším cílem je udělat z Arduina (ve skutečnosti mozek Arduina; ano, mluvím o ATmega IC!) Stálého člena týmu. ATmega by byla naprogramována tak, aby běžela jen jednu skicu znovu a znovu, aby mohla sloužit jako věčná součást okruhu, stejně jako HT-12E-a pouhý IC, jen tam sedět a dělat, co má. Neměl by takový skutečný vestavěný systém být?

Každopádně, abyste mohli pokračovat v této aktualizaci, stačí upravit obvod podle druhého připojeného schématu. Zde jednoduše nahradíme samičí záhlaví pro Arduino IC zásuvkou pro ATmega, přidáme 10K pull-up odpor na resetovací pin (pin 1) IC a napumpujeme to externími hodinami mezi piny 9 a 10. Bohužel, pokud se zbavíme Arduina, pustíme také jeho vestavěné regulátory napětí; ergo, musíme zde také replikovat obvod LM7805, který jsme použili pro přijímač. Kromě toho také používáme dělič napětí k odběru 3,3 V potřebného k napájení akcelerometru.

Jediným dalším úlovkem zde je naprogramování ATmega, aby plnila svou úlohu. Na to si však budete muset počkat až do kroku 4. Zůstaňte tedy naladěni…

Krok 3: A přijímač

A přijímač
A přijímač
A přijímač
A přijímač
A přijímač
A přijímač
A přijímač
A přijímač

Přijímač se skládá z modulu RF přijímače spojeného s IC dekodéru HT-12D a dvojice stejnosměrných motorů ovládaných pomocí ovladače motoru L293D, vše zapojené podle přiloženého schématu.

Jedinou úlohou RF přijímače je demodulovat nosnou vlnu (přijímanou přes její anténu na pinu 1) a vykreslit načtená „sériová“data na pinu 7, odkud jsou vyzvednuta HT-12D pro deserializaci. Nyní, za předpokladu, že adresní řádky (A0 až A7) na HT-12D jsou konfigurovány shodně s jeho protějškem HT-12E, jsou 4 paralelní bity dat extrahovány a předávány dále prostřednictvím datových linek (D8 až D11) na HT-12D, do ovladače motoru, který zase interpretuje tyto signály k pohonu motorů.

Opět věnujte pozornost hodnotě Rosc. HT-12D má také vnitřní oscilátorový obvod mezi piny 15 a 16, který je umožněn připojením odporu, zvaného Rosc, mezi tyto piny. Hodnota zvolená pro Rosc ve skutečnosti určuje frekvenci oscilátoru, která se může lišit v závislosti na napájecím napětí. Výběr vhodné hodnoty pro Rosc je zásadní pro fungování HT-12D! V ideálním případě by frekvence oscilátoru HT-12D měla být 50krát vyšší než u protějšku HT-12E. Protože pracujeme na 5 V, vybrali jsme pro obvody HT-12E a HT-12D jako Rosc odpory 1MΩ a 51kΩ. Pokud plánujete provozovat obvody na jiném napájecím napětí, podívejte se do grafu „Frekvence oscilátoru vs napájecí napětí“na straně 5 přiloženého datového listu HT-12D, kde určíte přesnou frekvenci oscilátoru a odpor, který se má použít.

Nezapomeňte také na záhlaví RF přijímače.

Volitelně lze LED diodu připojit přes odpor omezující proud 330 Ω ke každému ze 4 datových pinů HT-12D, což pomůže určit bit přijatý na tomto pinu. LED dioda se rozsvítí, pokud je přijímaný bit HIGH (1), a zhasne, pokud je přijatý bit LOW (0). Alternativně by mohla být k VT pinu HT-12D připoutána jedna LED (opět přes odpor omezující proud 330Ω), která by se rozsvítila v případě platného přenosu.

Pokud nyní hledáte hack s motory, o kterých jsem mluvil v prvním kroku, je to zatraceně snadné! Stačí zapojit dva motory v každé sadě paralelně, jak ukazuje druhé schéma. Funguje to tak, jak má, protože motory v každé sadě (přední a zadní motory vlevo a přední a zadní motory vpravo) nejsou nikdy poháněny v opačných směrech. To znamená, že k otočení roveru doprava musí být přední i zadní motor vlevo poháněn dopředu a přední a zadní motor vpravo musí být poháněn dozadu. Podobně, aby se rover otočil doleva, musí být přední a zadní motory vlevo poháněny dozadu a přední a zadní motory vpravo musí být poháněny dopředu. Proto je bezpečné napájet stejným párem napětí oba motory v sadě. A způsob, jak toho dosáhnout, je jednoduše zapojit paralelně motory.

Krok 4: Přejděte ke kódu

Ještě ke Kodexu
Ještě ke Kodexu

Zbývá udělat jen jednu věc, aby se rover dostal do provozu. Ano, uhodli jste správně! (Doufám, že jste to udělali) Stále musíme překládat naměřené hodnoty z akcelerometru do podoby, kterou může řidič motoru interpretovat, aby mohl pohánět motory. Pokud si myslíte, že vzhledem k tomu, že údaje z akcelerometru jsou analogové a řidič motoru očekává digitální signály, budeme muset implementovat nějaký ADC, no, ne technicky, ale to je to, co musíme udělat. A je to celkem jednoduché.

Víme, že akcelerometr měří gravitační zrychlení podél lineární osy a že toto zrychlení je reprezentováno jako úroveň napětí kolísající mezi zemí a napájecím napětím, což náš mikrokontrolér čte jako analogovou hodnotu kolísající mezi 0 a 1023. Ale protože jsme Pokud provozujeme akcelerometr na 3,3 V, doporučujeme nastavit analogovou referenci pro 10bitový ADC (který je integrován v ATmeaga na palubě Arduina) na 3,3 V. Jen to věci usnadní pochopení; i když na našem malém experimentu nebude moc záležet, i kdybychom to neudělali (kód budeme muset jen trochu vyladit). K tomu však jednoduše připojíme pin AREF na Arduinu (pin 21 na ATmega) na 3,3 V a tuto změnu kódu označíme voláním analogReference (EXTERNAL).

Nyní, když položíme akcelerometr naplocho a analogově, přečtěte si zrychlení podél os x a y (pamatujete? Potřebujeme pouze tyto dvě osy), dostaneme hodnotu asi 511 (tj. Na půli cesty mezi 0 a 1023), což je jen znamená to, že podél těchto os je 0 zrychlení. Spíše než kopat do podrobností skutečnosti si to představte jako osy x a y na grafu, přičemž hodnota 511 označuje počátek a 0 a 1023 koncové body, jak je znázorněno na obrázku; nasměrujte akcelerometr tak, aby jeho kolíky směřovaly dolů a byly drženy blíže k vám, jinak můžete osy převrátit/zaměnit. To znamená, že pokud nakloníme akcelerometr doprava, měli bychom odečíst hodnotu větší než 511 podél osy x, a pokud nakloníme akcelerometr doleva, měli bychom získat hodnotu nižší než 511 podél osy x. Podobně pokud nakloníme akcelerometr dopředu, měli bychom odečíst hodnotu větší než 511 podél osy y, a pokud nakloníme akcelerometr dozadu, měli bychom odečíst hodnotu nižší než 511 podél osy y. A takto v kódu odvodíme směr, kterým by měl být rover veden. To ale také znamená, že musíme udržovat akcelerometr skutečně stabilní a zarovnaný rovnoběžně s rovným povrchem, abychom byli schopni číst 511 podél obou os aby byl rover zaparkovaný. Abychom tento úkol trochu usnadnili, definujeme určité prahy tvořící hranici, jak ukazuje obrázek, aby rover zůstal nehybný, dokud budou hodnoty xay ležet v mezích a my víme jistě, že rover musí být nastaven v pohyb, jakmile je překročen práh.

Pokud například osa y ukazuje 543, víme, že akcelerometr je nakloněn dopředu, takže musíme rover řídit dopředu. To provedeme nastavením pinů D2 a D4 HIGH a pinů D3 a D5 LOW. Protože jsou tyto piny zapojeny přímo k HT-12E, signály jsou serializovány a vysílány vysokofrekvenčním vysílačem, aby je zachytil pouze přijímač RF sedící na roveru, který pomocí HT-12D deserializuje signály a předává je L293D, který tyto signály interpretuje a pohání motory vpřed

Možná však budete chtít tyto prahy změnit, abyste mohli kalibrovat citlivost. Snadný způsob, jak to udělat, je jednoduše připojit akcelerometr k Arduinu a spustit skicu, která vyplivne hodnoty xay na sériový monitor. Nyní jen trochu pohněte akcelerometrem, podívejte se na naměřené hodnoty a rozhodněte se o prahových hodnotách.

A to je vše! Nahrajte kód do svého Arduina a užívejte si !! Nebo možná ne tak brzy:-(Pokud jste nepřekročili sekci bonusů, nahrání kódu do ATmega by znamenalo trochu více práce. Máte dvě možnosti:

Možnost A: Použijte zařízení USB to Serial, jako je základní deska FTDI FT232 basic breakout. Jednoduše spusťte vodiče ze záhlaví TTL na odpovídající piny na ATmega podle níže uvedeného mapování:

Piny na Breakout Board Piny na mikrokontroléru
DTR/GRN RST/Reset (kolík 1) pomocí uzávěru 0,1 µF
Rx Tx (kolík 3)
Tx Rx (kolík 2)
Vcc +5V výstup
CTS (nepoužitý)
Gnd Přízemní

Nyní zapojte jeden konec kabelu USB do odpočinkové desky a druhý do počítače a nahrajte kód jako obvykle: spusťte Arduino IDE, vyberte příslušný sériový port, nastavte typ desky, sestavte skicu a nahrajte.

Možnost B: Použijte UNO, pokud někde ležíte. Jednoduše zapojte ATmega do UNO, nahrajte kód jako obvykle, vytáhněte IC a zasuňte jej zpět do obvodu vysílače. Snadné jako koláč!

Každá z těchto možností by měla fungovat za předpokladu, že jste byli dostatečně chytří na to, abyste vypálili zavaděč předem na ATmega, nebo pokud jste byli ještě chytřejší, abyste si koupili ATmega s již nainstalovaným zavaděčem na prvním místě. Pokud ne, pokračujte podle níže uvedených kroků.

Andddd, jsme oficiálně hotovi! Doufám, že se vám tento bizarně dlouhý návod líbil. Nyní pokračujte, dokončete stavbu svého roveru, pokud jste to ještě nedokončili, chvíli si s ním pohrajte a vraťte se, abyste níže uvedenou sekci komentářů zaplavili dotazy a/nebo konstruktivní kritikou.

Dík

P. S. Důvod, proč jsem nenahrál žádné fotky hotového projektu, je ten, že jsem ho nedokončil sám. V polovině stavby jsem přemýšlel o některých rozšířeních, jako je ovládání rychlosti, vyhýbání se překážkám a možná LCD na roveru, což ve skutečnosti není tak obtížné, pokud použijeme mikrokontrolér na vysílacím i přijímacím konci. Ale proč to neudělat natvrdo ?! Aktuálně tedy pracuji tímto směrem a zveřejním aktualizaci, jakmile to přinese nějaké ovoce. Nicméně jsem vyzkoušel kód a design pomocí rychlého prototypu, který jsem postavil pomocí modulů z jednoho z mých předchozích projektů; na video se můžete podívat zde.

Doporučuje: