Sadržaj:

Rover kontroliran pokretima pomoću akcelerometra i para RF odašiljača i prijamnika: 4 koraka
Rover kontroliran pokretima pomoću akcelerometra i para RF odašiljača i prijamnika: 4 koraka

Video: Rover kontroliran pokretima pomoću akcelerometra i para RF odašiljača i prijamnika: 4 koraka

Video: Rover kontroliran pokretima pomoću akcelerometra i para RF odašiljača i prijamnika: 4 koraka
Video: 🟡 POCO X5 PRO - САМЫЙ ДЕТАЛЬНЫЙ ОБЗОР и ТЕСТЫ 2024, Srpanj
Anonim
Rover kontroliran pokretima pomoću parametra akcelerometra i para RF odašiljača i prijamnika
Rover kontroliran pokretima pomoću parametra akcelerometra i para RF odašiljača i prijamnika

Zdravo, Jeste li ikada poželjeli izgraditi 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 mikrokontrolerom, a da ne spominjemo uzbrdanu bitku za svladavanje lošeg dometa i linije problemi s vidom? Pa, ne bojte se … jer postoji jednostavan izlaz! Gle, dok vam predstavljam moćni AKCELEROMETAR! *ba dum tsss*

Akcelerometar je stvarno cool uređaj koji mjeri gravitacijsko ubrzanje duž linearne osi. To predstavlja kao razinu napona koja 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. Nemojte se uzrujavati! Neće nam trebati matematika ili fizika; bavit ćemo se samo sirovim vrijednostima koje mjeri akcelerometar. Zapravo, zapravo se ne morate puno brinuti o tehničkim karakteristikama akcelerometra za ovaj projekt. Dotaknut ću se samo nekih specifičnosti i razraditi samo onoliko koliko vam je potrebno da biste razumjeli širu sliku. Iako, ako ste zainteresirani za proučavanje njegove unutarnje mehanike, pogledajte ovdje.

Zasad samo trebate ovo imati na umu: akcelerometar je gizmo (često povezan s žiroskopom) koji otvara vrata svim onim igrama senzora pokreta koje igramo na svojim pametnim telefonima; na primjer, automobilska trkaća igra u kojoj upravljamo vozilom jednostavno naginjanjem uređaja u bilo kojem smjeru. I taj učinak možemo oponašati lijepljenjem akcelerometra (s nekoliko pomoćnih tvari, 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č-prijamnik koji radi na 434MHz čime se daje raspon od oko 100-150 m u otvorenom prostoru, što nas također spašava od linije problemi s vidom.

Prilično sjajan hack, a? Uronimo…

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 + kotači x2 svaki
• goveđi kotač* x1
• Upravljački program motora L293D + 16 -polna IC utičnica x1 svaki
• RF odašiljač 434 MHz x1
• RF prijemnik 434 MHz x1
• IC-koder HT-12E IC + 18-polna IC utičnica x1 svaki
• HT-12D dekoder IC + 18-polna IC utičnica x1 svaki
• Regulator napona LM7805 x1
• Prekidač s gumbom x2
• Crvena 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 priključci, 2-pinski vijčani terminali, PCB, Chasis i vaš uobičajeni pribor za lemljenje

Ako se pitate zašto koristimo goveđi kotač, stvar je u tome što moduli RF odašiljača i prijamnika imaju samo 4 pinova podataka, š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 hladnije sa četiri kotača, ne brinite, posla ima! U ovom slučaju, samo izgrebite goveđi kotač s popisa i dodajte još par 5V istosmjernih motora, popraćenih svakim kotačem, i pazite na jednostavan hack o kojem se raspravljalo na kraju koraka 3.

Konačno, za hrabra srca, postoji prostor za još jednu malu izmjenu u dizajnu, koja nekako uključuje inženjering vlastitog Arduina. U sljedećem koraku prijeđite na odjeljak bonusa i uvjerite se sami. Trebat će vam i nekoliko dodatnih zaliha: 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č

Projekt ćemo podijeliti na dvije sastavnice: krug odašiljača i prijamnika. Odašiljač se sastoji od akcelerometra, Arduino i RF odašiljačkog modula spojenog s IC-enkoderom HT-12E, a sve ožičeno 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 budući da rover možemo voziti samo u četiri smjera: naprijed ili natrag (tj. Po osi y) i lijevo ili desno (tj. Duž osi x). Osa z bi nam bila potrebna da smo gradili bespilotnu letjelicu, tako da smo također mogli kontrolirati njezino uspinjanje ili spuštanje gestama. U svakom slučaju, te analogne vrijednosti koje daje akcelerometar moraju se pretvoriti u digitalne signale kako bi se mogli pokretati motori. Za to se brine Arduino koji također prenosi te signale, nakon pretvorbe, 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, što nam omogućuje da napravimo mjesta za do 24 = 16 različitih I/O kombinacija za razliku od pojedinačnog pina za podatke na RF odašiljaču. Preostalih 8 bitova, izvučenih iz linija A0 do A7 na davača, čine bajt adrese, što olakšava uparivanje RF odašiljača s odgovarajućim RF prijamnikom. 12 bitova se zatim sastavljaju i serijaliziraju te prosljeđuju na podatkovni pin RF odašiljača, koji zauzvrat ASK-modulira podatke na nosivi val od 434MHz i izbacuje ih putem antene na pin 1.

Koncepcijski, svaki RF prijamnik koji sluša na 434Mhz trebao bi moći presresti, demodulirati i dekodirati ove podatke. Međutim, adresne linije na HT-12E, i one na HT-12D pandanu (12-bitni serijski-paralelni dekoder podataka), omogućuju nam da par RF odašiljača i prijamnika učinimo jedinstvenim usmjeravanjem podataka samo na 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 retke za naš HT-12E, moramo učiniti isto za HT-12D na prijemnom kraju ili inače rover neće moći primiti signale. Na taj 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 prijamnika. 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 adresnim linijama, a druga s visoko podignutom linijom, ili jedna s jednom uzemljenom linijom, 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 pozornost prilikom sastavljanja kruga 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 one u HT-12D. Stoga smo, budući da radimo na 5V, odabrali otpornike od 1 MΩ i 51 kΩ kao Rosc za krugove HT-12E i HT-12D. Ako planirate raditi sa krugovima na drugom napajanju, pogledajte grafikon “Frekvencija oscilatora vs napon napajanja” na stranici 11 priloženog podatkovnog lista HT-12E kako biste odredili točnu frekvenciju oscilatora i otpornik koji ćete koristiti.

Također, napominjemo da ćemo ovdje upotrijebiti ženska zaglavlja (koja imaju sličnu svrhu kao IC utičnice) za uključivanje mjerača ubrzanja, RF odašiljača i Arduina u krug umjesto izravnog lemljenja na PCB. Namjera je prilagodba male komponente za ponovnu upotrebu. Recimo, prošlo je dosta vremena otkad ste izradili 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 utječe na učinkovitost mjerila ubrzanja. Što radiš? Jednostavno ga izvučete iz rovera i gurnete u svoj novi krug. Nema potrebe pozivati "Amazonke" da biste dobili novu:-p

Bonus: Uklonite Arduino, 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 (zapravo mozak Arduina; da, govorim o ATmega IC!) Stalnim članom tima. ATmega bi bila programirana za izvođenje samo jedne skice iznova i iznova kako bi mogla poslužiti kao stalni dio sklopa, baš kao i HT-12E-obična IC, samo sjedi tamo i radi ono što bi trebala. Nije li tako trebao izgledati bilo koji pravi ugrađeni sustav?

U svakom slučaju, kako biste nastavili s ovom nadogradnjom, samo izmijenite krug prema drugoj priloženoj shemi. Ovdje jednostavno zamjenjujemo ženska zaglavlja za Arduino s 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 sklop LM7805 koji smo upotrijebili za prijemnik i ovdje. Dodatno, također koristimo razdjelnik napona za crtanje 3,3 V 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 prijemničkog modula spojenog s IC dekoderom HT-12D i para istosmjernih motora koji rade uz pomoć upravljačkog programa motora L293D, svi ožičeni prema priloženoj shemi.

Jedini posao RF prijamnika je demodulacija nosivog vala (primljenog putem njegove antene na pinu 1) i renderiranje dohvaćenih "serijskih" podataka 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 podatkovnih linija (D8 do D11) na HT-12D, vozaču motora, koji pak interpretira te signale za pogon motora.

Opet, obratite pozornost 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 smo, budući da radimo na 5V, odabrali otpornike od 1 MΩ i 51 kΩ kao Rosc za krugove HT-12E i HT-12D. Ako namjeravate upravljati krugovima na drugom opskrbnom naponu, 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đer, ne zaboravite ženska zaglavlja za RF prijemnik.

Izborno, LED se može spojiti preko otpornika za ograničavanje struje od 330 Ω na svaki od 4 podatkovna pina HT-12D kako bi se lakše odredio bit primljen na tom pinu. LED bi svijetlila ako je primljeni bit VISOK (1) i prigušila bi 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, vraški je lako! Samo spojite dva motora u svakom kompletu paralelno kako je prikazano na drugoj shemi. Ovo funkcionira kako treba 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. Odnosno, da bi se rover mogao okrenuti udesno, prednji i stražnji 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 stražnji motor s lijeve strane moraju se voziti unatrag, a prednji i stražnji motor s desne strane moraju se voziti naprijed. Stoga je sigurno napajanje u istom paru napona na oba motora u kompletu. Način na koji to možete učiniti je jednostavno paralelno povezivanje motora.

Korak 4: Prijeđite na Kodeks

Prijeđite na Kodeks
Prijeđ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 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 postaviti analognu referencu za 10-bitni ADC (koji dolazi integriran u ATmeagu na Arduinu) na 3.3V. To će samo pojednostaviti razumijevanje stvari; iako, za naš mali eksperiment neće biti mnogo važno čak ni 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,3 V i označimo ovu promjenu koda pozivom analogReference (EXTERNAL).

Sada, kad 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 kopate po detaljima č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; orijentirajte mjerač ubrzanja na takav način da su njegove iglice usmjerene prema dolje i da se drže bliže vama ili biste mogli obrnuti/zamijeniti osi. To znači da bismo, ako nagnemo mjerač ubrzanja udesno, trebali č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 akcelerometar nagnemo prema naprijed, trebali bismo pročitati vrijednost veću od 511 duž osi y, a ako akcelerometar nagnemo unatrag, trebali bismo pročitati vrijednost nižu od 511 duž osi y. Ovako, u kodu, zaključujemo smjer u kojem bi se rover trebao voziti. No, to također znači da akcelerometar moramo držati stvarno 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 su očitanja x i y unutar granica, a mi zasigurno znamo da se rover mora postaviti u kretanje nakon prelaska praga.

Na primjer, ako na osi y stoji 543, znamo da je mjerač ubrzanja nagnut prema naprijed, stoga moramo usmjeriti rover prema naprijed. To činimo postavljanjem pinova D2 i D4 VISOKO, a iglica D3 i D5 NISKIM. 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 prijamnik koji sjedi na roveru, a koji uz pomoć HT-12D deserijalizira signale i prenosi ih na L293D, koji pak interpretira te signale i pokreće motore prema naprijed

Možda biste htjeli promijeniti ove pragove kako biste umjerili osjetljivost. Jednostavan način za to je da jednostavno povežete 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/Resetiranje (Pin 1) preko kapice od 0,1 μF
Rx Tx (pin 3)
Tx Rx (pin 2)
Vcc +5v izlaz
CTS (nekorišteno)
Gnd Uzemljenje

Sada, priključite jedan kraj USB kabela u probojnu ploču, a drugi u svoje računalo i prenesite kôd kao i inače: 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 natrag u krug odašiljača. Lako kao pita!

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

Andddd, službeno smo gotovi! Nadam se da ste uživali u ovom bizarno dugotrajnom uputstvu. Sada, nastavite, završite s izgradnjom svog rovera ako već niste gotovi, poigrajte 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 prenio nijednu sliku gotovog projekta je taj š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šiljačkom i na prijemnom kraju. No, 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 izgradio koristeći module iz jednog od svojih prethodnih projekata; video možete pogledati ovdje.

Preporučeni: