Sadržaj:

Rover kontroliran pokretima pomoću parametra ubrzanja i para RF odašiljača i prijemnika: 4 koraka
Rover kontroliran pokretima pomoću parametra ubrzanja i para RF odašiljača i prijemnika: 4 koraka

Video: Rover kontroliran pokretima pomoću parametra ubrzanja i para RF odašiljača i prijemnika: 4 koraka

Video: Rover kontroliran pokretima pomoću parametra ubrzanja i para RF odašiljača i prijemnika: 4 koraka
Video: Technical animation: How a Servo Motor works 2024, Novembar
Anonim
Rover kontroliran pokretima pomoću parametra akcelerometra i para RF odašiljača i prijemnika
Rover kontroliran pokretima pomoću parametra akcelerometra i para RF odašiljača i prijemnika

Zdravo, Jeste li ikada poželjeli da napravite rover kojim biste mogli upravljati jednostavnim pokretima ruku, ali nikada niste mogli skupiti hrabrosti da se upustite u zamršenost obrade slika i povezivanja web kamere s vašim mikrokontrolerom, da ne spominjemo uzbrdanu bitku za savladavanje lošeg dometa i linije problemi sa vidom? Pa, ne bojte se … jer postoji lak izlaz! Evo, dok vam predstavljam moćni AKCELEROMETAR! *ba dum tsss*

Akcelerometar je zaista cool uređaj koji mjeri gravitacijsko ubrzanje duž linearne osi. To predstavlja kao naponski nivo koji fluktuira između uzemljenja i napona napajanja, što naš mikrokontroler čita kao analognu vrijednost. Ako malo primijenimo naš mozak (samo malo matematike i nešto Newtonove fizike), ne samo da ga možemo koristiti za mjerenje linearnog kretanja po osi, već ga možemo koristiti i za određivanje kuta nagiba i osjetnih vibracija. Ne brinite! Neće nam trebati matematika ili fizika; bavit ćemo se samo sirovim vrijednostima koje akcelerometar izbacuje. Zapravo, ne morate se puno brinuti o tehničkim karakteristikama akcelerometra za ovaj projekt. Dotaknut ću se samo nekih specifičnosti i elaborirati samo onoliko koliko vam je potrebno da biste razumjeli širu sliku. Iako, ako ste zainteresirani za proučavanje njegove unutrašnje mehanike, pogledajte ovdje.

Morate samo imati na umu ovo zasad: akcelerometar je gizmo (često u kombinaciji s žiroskopom) koji otvara vrata svim onim igrama senzora pokreta koje igramo na svojim pametnim telefonima; na primjer, trkaća igra u automobilu, gdje upravljamo vozilom jednostavno naginjanjem uređaja u bilo kojem smjeru. I ovaj efekat možemo oponašati lijepljenjem akcelerometra (s nekoliko pomoćnih sredstava, naravno) na rukavicu. Samo stavljamo čarobne rukavice i naginjemo ruke lijevo ili desno, naprijed ili natrag i vidimo naše rovere kako plešu uz naše melodije. Sve što ovdje moramo učiniti je prevesti očitanja akcelerometra u digitalne signale koje motori na roveru mogu protumačiti i osmisliti mehanizam za prijenos ovih signala do rovera. Da bismo to postigli, pozivamo dobrog starog Arduina i njegovih pomoćnika za današnji eksperiment, par RF odašiljač-prijemnik koji radi na 434MHz čime se daje raspon od oko 100-150m u otvorenom prostoru, što nas također spašava od linije problemi sa vidom.

Prilično sjajno hakiranje, a? Uronimo u…

Korak 1: Prikupite zalihe

Prikupite zalihe
Prikupite zalihe
Prikupite zalihe
Prikupite zalihe
Prikupite zalihe
Prikupite zalihe
Prikupite zalihe
Prikupite zalihe
• Arduino Nano x1
• Akcelerometar (ADXL335) x1
• 5V DC motor + točkovi x2 svaki
• goveđi točak* x1
• Upravljački program motora L293D + 16 -polna IC utičnica x1 svaki
• 434 MHz RF predajnik x1
• 434 MHz RF prijemnik x1
• IC-koder HT-12E IC + 18-polna IC utičnica x1 svaki
• IC-dekoder HT-12D IC + 18-polna IC utičnica x1 svaki
• Regulator napona LM7805 x1
• Prekidač na dugme x2
• Crveni LED + 330O otpornik x2 svaki
• Žuta LED + 330O otpornik x1 svaki
• Zelena LED + 330O otpornik (opcionalno) x4 svaki
• 51kO i 1MO otpornici x1 svaki
• 10µF radijalni kondenzatori x2
Baterije, konektori za baterije, USB kabel, kratkospojne žice, ženski zaglavlji, 2-pinski vijčani terminali, PCB, kućište i vaš uobičajeni pribor za lemljenje

Ako se pitate zašto koristimo goveđi kotač, stvar je u tome da moduli RF odašiljača i prijemnika imaju samo 4 pina za podatke, što znači da možemo voziti samo 2 motora, pa se upotrebom goveđeg kotača može podupiru strukturu. Međutim, ako mislite da bi vaš rover izgledao malo hladnije sa četiri kotača, ne brinite, ima posla! U ovom slučaju, samo izgrebite goveđi kotač sa popisa i dodajte još jedan par 5V DC motora, popraćenih svakim kotačem, i pazite na jednostavan hack o kojem se raspravlja na kraju koraka 3.

Konačno, za hrabra srca, postoji prostor za još jednu malu izmjenu u dizajnu, koja nekako uključuje inženjering vašeg vlastitog Arduina. U sljedećem koraku prijeđite na odjeljak bonusa i uvjerite se sami. Trebat će vam i nekoliko dodatnih potrepština: ATmega328P, 28 -pin IC utičnica, kristalni oscilator od 16 MHz, dvije 22pF keramičke kape, još jedan regulator napona 7805, još dvije radijalne kape 10μF i 10kΩ, 680Ω, 330Ω otpornici, i da, minus Arduino!

Korak 2: Povežite odašiljač

Povežite odašiljač
Povežite odašiljač
Povežite odašiljač
Povežite odašiljač
Povežite odašiljač
Povežite odašiljač
Povežite odašiljač
Povežite odašiljač

Projekat ćemo podijeliti na dvije komponente: krug predajnika i prijemnika. Predajnik se sastoji od akcelerometra, Arduino i RF odašiljačkog modula zajedno sa IC-enkoderom HT-12E, svi ožičeni prema priloženoj shemi.

Akcelerometar, kako je ranije predstavljeno, služi za prepoznavanje naših gesta rukama. Koristit ćemo troosni akcelerometar (u osnovi tri jednoosna akcelerometra u jednom) kako bismo zadovoljili svoje potrebe. Može se koristiti za mjerenje ubrzanja u sve tri dimenzije i, kao što ste možda pretpostavili, ne daje jednu, već skup od tri analogne vrijednosti u odnosu na svoje tri osi (x, y i z). Zapravo, potrebno nam je samo ubrzanje duž osi x i y jer rover možemo voziti samo u četiri smjera: naprijed ili nazad (tj. Duž osi y) i lijevo ili desno (tj. Duž osi x). Osa z bi nam bila potrebna da gradimo bespilotnu letjelicu, kako bismo mogli kontrolirati i njeno uzdizanje ili spuštanje pokretima. U svakom slučaju, ove analogne vrijednosti koje daje akcelerometar moraju se pretvoriti u digitalne signale kako bi se mogle pokretati motori. Za to se brine Arduino koji također prenosi te signale, nakon konverzije, do rovera putem RF odašiljačkog modula.

RF odašiljač ima samo jedan posao: prenijeti "serijske" podatke dostupne na pinu 3 iz antene na pinu 1. Ovo zagovara upotrebu HT-12E, 12-bitnog paralelnog kodera podataka koji prikuplja do 4 bita paralelnih podataka iz Arduina na linijama AD8 do AD11, omogućavajući nam tako da napravimo mjesta za do 24 = 16 različitih I/O kombinacija za razliku od jednog pina za podatke na RF predajniku. Preostalih 8 bita, izvučenih iz linija A0 do A7 na koderu, čine bajt adrese, što olakšava uparivanje RF predajnika sa odgovarajućim RF prijemnikom. 12 bitova se zatim sastavljaju i serijaliziraju te prosljeđuju na pin podataka RF odašiljača, koji, zauzvrat, ASK-modulira podatke na nosivom talasu od 434MHz i izbacuje ih preko antene na pin 1.

Konceptualno, svaki RF prijemnik koji sluša na 434MHz trebao bi biti u stanju presresti, demodulirati i dekodirati ove podatke. Međutim, adresne linije na HT-12E, i one na HT-12D kolegi (12-bitni serijski-paralelni dekoder podataka), omogućuju nam da par RF odašiljača i prijemnika učinimo jedinstvenim usmjeravanjem podataka samo do predviđeni prijemnik čime se ograničava komunikacija sa svim ostalim. Sve što se od nas traži je konfiguriranje linija adresa identično na oba fronta. Na primjer, budući da smo uzemljili sve adresne linije za naš HT-12E, moramo učiniti isto za HT-12D na prijemnom kraju ili rover neće moći primiti signale. Na ovaj način također možemo kontrolirati više rovera s jednim krugom odašiljača identičnom konfiguracijom adresa u HT-12D na svakom od prijemnika. Ili bismo mogli staviti dvije rukavice, svaka pričvršćena odašiljačkim krugom koji sadrži različitu konfiguraciju adresne linije (recimo, jedna sa uzemljenim svim adresama, a druga sa visoko podignutom linijom, ili jedna s jednom linijom uzemljenom, dok je preostalih sedam zadržano visoka, a druga s dvije linije uzemljene, dok je preostalih šest visoko podignutih, ili bilo koja druga njihova kombinacija) i svaki upravlja više identično konfiguriranih rovera. Svirajte maestra na android simfoniji!

Jedna važna stvar koju treba obratiti pažnju prilikom sastavljanja kola je vrijednost Rosca. HT-12E ima unutarnji oscilatorni krug između pinova 15 i 16, koji je omogućen povezivanjem otpornika, nazvanog Rosc, između tih pinova. Vrijednost odabrana za Rosc zapravo određuje frekvenciju oscilatora, koja može varirati ovisno o naponu napajanja. Odabir odgovarajuće vrijednosti za Rosc ključan je za funkcioniranje HT-12E! U idealnom slučaju, frekvencija oscilatora HT-12E trebala bi biti 1/50 puta veća od frekvencije HT-12D. Stoga, budući da radimo na 5V, odabrali smo 1MΩ i 51kΩ otpornike kao Rosc za krugove HT-12E i HT-12D. Ako planirate raditi sa krugovima na drugom naponu napajanja, pogledajte grafikon “Frekvencija oscilatora u odnosu na napon napajanja” na stranici 11 u priloženom podatkovnom listu HT-12E kako biste odredili točnu frekvenciju oscilatora i otpornik koji ćete koristiti.

Također, kao napomenu, ovdje ćemo upotrijebiti ženska zaglavlja (koja služe sličnoj namjeni kao IC utičnice) za uključivanje akcelerometra, RF odašiljača i Arduina u kolo, umjesto da ih direktno lemimo na PCB. Namjera je smještaj male komponente za ponovnu upotrebu. Recimo, prošlo je dosta vremena otkad ste konstruisali svoj rover kontroliran pokretima i samo sjedi tamo, napola prekriven prašinom, na vrhu police s trofejima, a naišli ste na još jednu odličnu instrukciju koja iskorištava učinkovitost mjerača ubrzanja. Pa čime se bavite? Jednostavno ga izvučete iz svog rovera i gurnete u svoj novi krug. Nema potrebe pozivati "Amazonke" da biste dobili novu:-p

Bonus: Odustanite od Arduina, a ipak nemojte

Za slučaj da se osjećate malo avanturističkije, a pogotovo ako mislite da je trošenje ovog lijepo dizajniranog čuda (naravno Arduino) za tako trivijalni zadatak kao što je naš pomalo pretjerano, podnesite me još malo; a ako ne, slobodno preskočite na sljedeći korak.

Naš cilj ovdje je učiniti Arduino (mozak Arduina, zapravo; da, govorim o ATmega IC!) Stalnim članom tima. ATmega bi bila programirana da izvodi uvijek jednu skicu iznova i iznova tako da može poslužiti kao stalni dio kola, baš kao i HT-12E-obična IC, samo sjedi tamo, radeći ono što bi trebala. Nije li tako bilo koji pravi ugrađeni sistem trebao biti?

U svakom slučaju, da biste nastavili s ovom nadogradnjom, samo izmijenite krug prema drugoj priloženoj shemi. Ovdje jednostavno zamjenjujemo ženska zaglavlja za Arduino sa IC utičnicom za ATmegu, dodajemo 10K pull-up otpornik na reset pin (pin 1) IC-a i napumpamo ga vanjskim satom između pinova 9 i 10 Nažalost, ako uklonimo Arduino, otpustimo i njegove ugrađene regulatore napona; ergo, moramo replicirati kolo LM7805 koje smo upotrijebili za prijemnik i ovdje. Dodatno, također koristimo razdjelnik napona za crtanje 3.3V potrebnih za napajanje akcelerometra.

Jedina druga zamka ovdje je programiranje ATmege da radi svoj posao. Ipak ćete morati pričekati do četvrtog koraka. Dakle, pratite nas…

Korak 3: I prijemnik

I, prijemnik
I, prijemnik
I, prijemnik
I, prijemnik
I, prijemnik
I, prijemnik
I, prijemnik
I, prijemnik

Prijemnik se sastoji od RF prijemnog modula, spojenog sa IC dekoderom HT-12D, i para istosmjernih motora koji rade uz pomoć upravljačkog programa motora L293D, a svi su ožičeni prema priloženoj shemi.

Jedini posao RF prijemnika je da demodulira nosivi val (primljen preko njegove antene na pinu 1) i renderira preuzete "serijske" podatke na pinu 7 odakle ih HT-12D preuzima radi deserijalizacije. Sada, pod pretpostavkom da su adresni redovi (A0 do A7) na HT-12D konfigurirani identično sa svojim HT-12E pandanom, 4 paralelna bita podataka se izdvajaju i prosljeđuju putem linija podataka (D8 do D11) na HT-12D, vozaču motora, koji zauzvrat tumači ove signale za pokretanje motora.

Opet, obratite pažnju na vrijednost Rosca. HT-12D također ima unutarnji oscilatorni krug između pinova 15 i 16, koji je omogućen povezivanjem otpornika, nazvanog Rosc, između tih pinova. Vrijednost odabrana za Rosc zapravo određuje frekvenciju oscilatora, koja može varirati ovisno o naponu napajanja. Odabir odgovarajuće vrijednosti za Rosc ključan je za funkcioniranje HT-12D! Idealno bi bilo da frekvencija oscilatora HT-12D bude 50 puta veća od frekvencije HT-12E. Stoga, budući da radimo na 5V, odabrali smo 1MΩ i 51kΩ otpornike kao Rosc za krugove HT-12E i HT-12D. Ako planirate raditi sa krugovima na drugom naponu napajanja, pogledajte grafikon “Frekvencija oscilatora vs napon napajanja” na stranici 5 priložene podatkovne tablice HT-12D kako biste odredili točnu frekvenciju oscilatora i otpornik koji ćete koristiti.

Takođe, ne zaboravite ženska zaglavlja za RF prijemnik.

Opcionalno, LED se može spojiti preko otpornika za ograničavanje struje od 330 Ω na svaki od 4 pina podataka HT-12D kako bi se lakše odredio bit primljen na tom pinu. LED dioda će zasvijetliti ako je primljeni bit HIGH (1) i prigušit će se ako je primljeni bit LOW (0). Alternativno, jedna LED dioda mogla bi biti vezana za VT pin HT-12D (opet preko otpornika za ograničavanje struje od 330 Ω), koji bi svijetlio u slučaju valjanog prijenosa.

E sad, ako tražite hack s motorima o kojima sam govorio u prvom koraku, to je vraški lako! Samo spojite dva motora u svakom kompletu paralelno kako je prikazano na drugoj shemi. Ovo funkcionira kako bi trebalo jer se motori u svakom setu (prednji i stražnji motor s lijeve strane i prednji i stražnji motor s desne strane) nikada ne voze u suprotnim smjerovima. To jest, da bi se rover mogao okrenuti udesno, prednji i zadnji motor s lijeve strane moraju se voziti prema naprijed, a prednji i stražnji motor s desne strane moraju se voziti unatrag. Slično, da bi rover skrenuo ulijevo, prednji i zadnji motor s lijeve strane moraju se voziti unatrag, a prednji i zadnji motor s desne strane moraju se voziti naprijed. Stoga je sigurno napajanje u istom paru napona na oba motora u kompletu. A način da to učinite je jednostavnim povezivanjem motora paralelno.

Korak 4: Pređite na Kodeks

Pređite na Kodeks
Pređite na Kodeks

Ostaje samo još jedna stvar za pokretanje rovera. Da, dobro ste pogodili! (Nadam se da jeste) Još uvijek moramo prevesti očitanja akcelerometra u oblik koji vozač motora može protumačiti kako bi mogao upravljati motorima. Ako mislite da budući da su očitanja akcelerometra analogna i da vozač motora očekuje digitalne signale, morat ćemo implementirati neku vrstu ADC -a, pa ne tehnički, ali to je nešto što moramo učiniti. I prilično je jednostavno.

Znamo da akcelerometar mjeri gravitacijsko ubrzanje duž linearne osi i da je to ubrzanje predstavljeno kao razina napona koja fluktuira između tla i napona napajanja, što naš mikrokontroler čita kao analognu vrijednost koja varira između 0 i 1023. No, budući da ako radite akcelerometar na 3.3V, preporučljivo je da analognu referencu za 10-bitni ADC (koji dolazi integriran u ATmeagu na Arduinu) postavite na 3.3V. To će samo pojednostaviti razumijevanje stvari; iako, za naš mali eksperiment neće biti mnogo važno čak i da nismo (samo ćemo morati malo prilagoditi kôd). Međutim, da bismo to učinili, jednostavno povežemo AREF pin na Arduinu (pin 21 na ATmegi) na 3.3V i označimo ovu promjenu u kodu pozivanjem analogReference (EXTERNAL).

Sada, kada akcelerometar položimo ravno i analognoČitamo ubrzanje duž osi x i y (sjećate se? Potrebne su nam samo ove dvije osi), dobivamo vrijednost od oko 511 (tj. Na pola puta između 0 i 1023), što je samo način da kažemo da 0 ubrzanja duž ovih osi. Umjesto da se upuštate u detalje činjenice, zamislite ovo kao osi x i y na grafikonu, s vrijednošću 511 koja označava ishodište, a 0 i 1023 krajnje točke kako je prikazano na slici; okrenite mjerač ubrzanja na takav način da su njegove iglice usmjerene prema dolje i da se drže bliže vama ili biste u suprotnom mogli obrnuti/zamijeniti osi. To znači da, ako nagnemo mjerač ubrzanja udesno, trebali bismo pročitati vrijednost veću od 511 duž osi x, a ako nagnemo mjerač ubrzanja ulijevo, trebali bismo dobiti vrijednost nižu od 511 duž osi x. Slično, ako nagnemo mjerač ubrzanja prema naprijed, trebali bismo pročitati vrijednost veću od 511 duž osi y, a ako nagnemo mjerač ubrzanja unatrag, trebali bismo pročitati vrijednost nižu od 511 duž osi y. I evo kako u kodu zaključujemo smjer u kojem bi se rover trebao voziti. No, to također znači da moramo držati akcelerometar zaista mirnim i poravnatim paralelno s ravnom površinom kako bismo mogli čitati 511 duž obje osi kako bi rover bio mirno parkiran. Kako bismo malo olakšali ovaj zadatak, definiramo određene pragove koji tvore granicu, kako je prikazano na slici, tako da rover ostaje nepomičan sve dok očitanja x i y leže unutar granica i sigurno znamo da se rover mora postaviti u kretanje nakon prelaska praga.

Na primjer, ako osa y čita 543, znamo da je mjerač ubrzanja nagnut prema naprijed, pa moramo usmjeriti rover prema naprijed. To radimo postavljanjem pinova D2 i D4 na VISOKO, a iglica D3 i D5 na NISKO. Budući da su ti pinovi spojeni izravno na HT-12E, signali se serijaliziraju i ispaljuju RF odašiljač samo da bi ih uhvatio RF prijemnik koji sjedi na roveru, a koji uz pomoć HT-12D deserijalizira signale i prenosi ih na L293D, koji zauzvrat tumači te signale i pokreće motore prema naprijed

Možda biste htjeli promijeniti ove pragove kako biste kalibrirali osjetljivost. Jednostavan način za to je da jednostavno povežete svoj mjerač ubrzanja sa svojim Arduinom i pokrenete skicu koja izlijeva očitanja x i y na serijski monitor. Sada samo malo pomaknite akcelerometar, pregledajte očitanja i odlučite se o pragovima.

I to je to! Prenesite kôd na svoj Arduino i uživajte !! Ili, možda ne tako brzo:-(Ako niste preskočili bonus odjeljak, postavljanje koda na vašu ATmegu značilo bi malo više posla. Imate dvije mogućnosti:

Opcija A: Upotrijebite USB na serijski uređaj, kao što je osnovna razvodna ploča FTDI FT232. Jednostavno povežite žice od TTL zaglavlja do odgovarajućih pinova na ATmegi prema donjem mapiranju:

Igle na ploči za razbijanje Igle na mikrokontroleru
DTR/GRN RST/Reset (Pin 1) preko kapice od 0,1µF
Rx Tx (pin 3)
Tx Rx (pin 2)
Vcc +5v izlaz
CTS (nekorišćeno)
Gnd Ground

Sada, priključite jedan kraj USB kabela u probnu ploču, a drugi u računalo i učitajte kôd kao što biste to inače učinili: pokrenite Arduino IDE, odaberite odgovarajući serijski port, postavite vrstu ploče, sastavite skicu i pritisnite upload.

Opcija B: Upotrijebite UNO ako negdje leži. Samo priključite svoj ATmega u UNO, učitajte kôd kao i inače, izvucite IC i gurnite ga nazad u krug predajnika. Lako kao pita!

Bilo koja od ovih opcija bi trebala funkcionirati, pod pretpostavkom da ste bili dovoljno pametni da prije pokrenete pokretački program na svojoj ATmegi, ili, ako ste bili još pametniji da kupite ATmegu s već instaliranim pokretačkim programom. Ako ne, nastavite i učinite to slijedeći korake navedene ovdje.

Andddd, službeno smo završili! Nadam se da ste uživali u ovom bizarno dugotrajnom uputstvu. Sada, nastavite, završite s izgradnjom svog rovera ako već niste gotovi, igrajte se s njim neko vrijeme i vratite se kako biste dolje odjeljak komentara preplavili upitima i/ili konstruktivnim kritikama.

Hvala

P. S. Razlog zašto nisam postavio nijednu sliku gotovog projekta je, pa, zato što ga nisam dovršio sam. Na pola izgradnje smišljao sam neke nadogradnje, poput kontrole brzine, izbjegavanja prepreka i možda LCD -a na roveru, što zapravo i nije tako teško ako koristimo mikrokontroler i na odašiljanju i na prijemniku. Ali, zašto to ne učiniti na teži način ?! Dakle, trenutno radim u tom smjeru i objavit ću ažuriranje čim to urodi plodom. Međutim, testirao sam kôd i dizajn uz pomoć brzog prototipa koji sam napravio koristeći module iz jednog od mojih prethodnih projekata; video možete pogledati ovdje.

Preporučuje se: