Ovaj put ćemo se pozabaviti povezivanjem analognog troaksijalnog akcelerometara ADXL335 s Arduinom.
Potrebno
- - Arduino;
- - akcelerometar ADXL335;
- - osobno računalo s razvojnim okruženjem Arduino IDE.
Upute
Korak 1
Akcelerometri se koriste za određivanje vektora ubrzanja. Akcelerometar ADXL335 ima tri osi i zahvaljujući tome može odrediti vektor ubrzanja u trodimenzionalnom prostoru. Zbog činjenice da je sila gravitacije također vektor, akcelerometar može odrediti vlastitu orijentaciju u trodimenzionalnom prostoru u odnosu na središte Zemlje.
Ilustracija prikazuje slike iz putovnice (https://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf) za akcelerometar ADXL335. Ovdje su prikazane koordinatne osi osjetljivosti akcelerometra u odnosu na geometrijski raspored tijela uređaja u prostoru, kao i tablica vrijednosti napona s 3 kanala akcelerometara, ovisno o njegovoj orijentaciji u prostoru. Podaci u tablici dati su za senzor koji miruje.
Pogledajmo pobliže što nam pokazuje akcelerometar. Neka senzor leži vodoravno, na primjer, na stolu. Tada će projekcija vektora ubrzanja biti jednaka 1g duž Z osi, odnosno Zout = 1g. Ostale dvije osi imat će nule: Xout = 0 i Yout = 0. Kad se senzor okrene "na leđa", bit će usmjeren u suprotnom smjeru u odnosu na vektor gravitacije, tj. Zout = -1g. Slično tome, vrše se mjerenja na sve tri osi. Jasno je da se akcelerometar može postaviti po želji u svemir, pa ćemo sa sva tri kanala uzimati očitanja koja nisu nula.
Ako se sonda snažno potresne duž vertikalne Z osi, vrijednost Zout bit će veća od "1g". Maksimalno mjerljivo ubrzanje je "3g" u svakoj od osi u bilo kojem smjeru (tj. I s "plus" i "minus").
Korak 2
Mislim da smo shvatili princip rada akcelerometra. Pogledajmo sada dijagram povezivanja.
Analogni akcelerometar ADXL335 čip prilično je mali i smješten je u BGA paket, a kod kuće ga je teško postaviti na ploču. Stoga ću upotrijebiti gotovi modul GY-61 s akcelerometrom ADXL335. Takvi moduli u kineskim internetskim trgovinama koštaju gotovo lipu.
Za napajanje akcelerometra potrebno je na VCC pin modula napajati napon +3, 3 V. Kanali za mjerenje senzora povezani su na analogne pinove Arduina, na primjer, "A0", "A1" i " A2 ". Ovo je cijeli krug:)
3. korak
Učitajmo ovu skicu u Arduino memoriju. Očitat ćemo očitanja s analognih ulaza na tri kanala, pretvoriti ih u napon i izvesti na serijski priključak.
Arduino ima 10-bitni ADC, a najveći dopušteni napon pin-a je 5 volti. Izmjereni naponi kodiraju se bitovima koji mogu imati samo 2 vrijednosti - 0 ili 1. To znači da će se cijeli mjerni opseg podijeliti sa (1 + 1) na 10. stepen, tj. na 1024 jednaka segmenta.
Da biste očitanja pretvorili u volte, svaku vrijednost izmjerenu na analognom ulazu morate podijeliti s 1024 (segmenti), a zatim pomnožiti s 5 (volti).
Pogledajmo što stvarno dolazi od akcelerometra koristeći Z-os kao primjer (posljednji stupac). Kada je senzor postavljen vodoravno i gleda prema gore, dolaze brojevi (2,03 +/- 0,01). Dakle, ovo bi trebalo odgovarati ubrzanju "+ 1g" duž Z osi i kutu od 0 stupnjeva. Okrenite senzor. Brojevi stižu (1, 69 +/- 0, 01), što bi trebalo odgovarati "-1g" i kutu od 180 stupnjeva.
4. korak
Uzmimo vrijednosti akcelerometara pod kutovima od 90 i 270 stupnjeva i unesite ih u tablicu. Tablica prikazuje kutove rotacije akcelerometra (stupac "A") i odgovarajuće vrijednosti Zouta u voltima (stupac "B").
Radi jasnoće prikazana je grafikon napona na izlazu Zout u odnosu na kut rotacije. Plavo polje je opseg u mirovanju (pri ubrzanju od 1 g). Ružičasti okvir na grafikonu margina je kako bismo mogli izmjeriti ubrzanje do + 3g i do -3g.
Pri rotaciji od 90 stupnjeva, Z-os ima nula ubrzanja. Oni. vrijednost 1,67 volta uvjetna je nula Zo za os Z. Tada možete pronaći ubrzanje ovako:
g = Zout - Zo / osjetljivost_z, ovdje je Zout izmjerena vrijednost u milivoltima, Zo je vrijednost pri nultom ubrzanju u milivoltima, osjetljivost_z je osjetljivost senzora duž osi Z. kalibrirajte akcelerometar i izračunajte vrijednost osjetljivosti posebno za vaš senzor pomoću formule:
osjetljivost_z = [Z (0 stupnjeva) - Z (90 stupnjeva)] * 1000. U ovom slučaju, osjetljivost akcelerometra duž Z osi = (2, 03 - 1, 68) * 1000 = 350 mV. Slično tome, osjetljivost će trebati izračunati za X i Y osi.
Stupac "C" tablice prikazuje ubrzanje izračunato za pet kutova pri osjetljivosti od 350. Kao što vidite, oni se praktički podudaraju s onima prikazanima na slici 1.
Korak 5
Prisjećajući se osnovnog tečaja geometrije, dobili smo formulu za izračunavanje kutova rotacije akcelerometra:
kut_X = arctg [sqrt (Gz ^ 2 + Gy ^ 2) / Gx].
Vrijednosti su u radijanima. Da biste ih pretvorili u stupnjeve, podijelite s Pi i pomnožite s 180.
Kao rezultat toga, na ilustraciji je prikazana cjelovita skica koja izračunava kutove ubrzanja i rotacije akcelerometara duž svih osi. Komentari pružaju objašnjenja programskog koda.
Prilikom izlaza na port "Serial.print ()", znak "\ t" označava znak kartice tako da su stupci ujednačeni, a vrijednosti smještene jedna ispod druge. "+" znači spajanje (spajanje) nizova. Štoviše, operator "String ()" izričito govori kompajleru da numerička vrijednost mora biti pretvorena u niz. Operator round () zaokružuje ugao s najbližim 1 stupnjem.
Korak 6
Dakle, naučili smo kako uzimati i obrađivati podatke s analognog akcelerometra ADXL335 pomoću Arduina. Sada možemo koristiti akcelerometar u svojim dizajnom.