Ovaj put ćemo se pozabaviti povezivanjem analognog triaksijalnog akcelerometara ADXL335 na Arduino.
Potrebno
- - Arduino;
- - akcelerometar ADXL335;
- - lični računar sa razvojnim okruženjem Arduino IDE.
Instrukcije
Korak 1
Akcelerometri se koriste za određivanje vektora ubrzanja. ADXL335 akcelerometar ima tri ose 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 smještaj tijela uređaja u prostoru, kao i tablica vrijednosti napona iz 3 kanala akcelerometra, ovisno o njegovoj orijentaciji u prostoru. Podaci u tablici dati su za senzor koji miruje.
Pogledajmo bliže šta 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 će imati nule: Xout = 0 i Yout = 0. Kada 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 u željeni prostor, tako da ćemo sa sva tri kanala uzimati očitavanja 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 osi u bilo kojem smjeru (tj. I sa "plus" i "minus").
Korak 2
Mislim da smo shvatili princip rada akcelerometra. Pogledajmo sada dijagram povezivanja.
Analogni akcelerometar ADXL335 čip je prilično 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 ADXL335 akcelerometrom. Takvi moduli u kineskim internet trgovinama koštaju gotovo lipu.
Za napajanje akcelerometra potrebno je na VCC pin modula napajati napon +3, 3 V. Senzorski mjerni kanali povezani su na analogne pinove Arduina, na primjer, "A0", "A1" i " A2 ". Ovo je cijeli krug:)
Korak 3
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 port.
Arduino ima 10-bitni ADC, a najveći dopušteni napon pina je 5 volti. Izmjereni naponi kodirani su bitovima koji mogu imati samo 2 vrijednosti - 0 ili 1. To znači da će se čitav opseg mjerenja podijeliti sa (1 + 1) na 10. stepen, tj. na 1024 jednaka segmenta.
Da biste očitanja pretvorili u volte, morate svaku vrijednost izmjerenu na analognom ulazu podijeliti s 1024 (segmenti), a zatim pomnožiti s 5 (volti).
Pogledajmo šta zaista 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 stepeni. Okrenite senzor. Stižu brojevi (1, 69 +/- 0, 01), koji bi trebali odgovarati "-1g" i kutu od 180 stepeni.
Korak 4
Uzmimo vrijednosti akcelerometra pod uglovima od 90 i 270 stupnjeva i unesite ih u tablicu. Tablica prikazuje kutove rotacije akcelerometra (stupac "A") i odgovarajuće vrijednosti Zout 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 tako da možemo izmjeriti ubrzanje do + 3g i do -3g.
Pri rotaciji od 90 stepeni, Z-os ima nula ubrzanja. Oni. vrijednost 1,67 volta je uvjetna nula Zo za Z os. Tada ubrzanje možete pronaći ovako:
g = Zout - Zo / osjetljivost_z, ovdje je Zout izmjerena vrijednost u milivoltima, Zo vrijednost pri nultom ubrzanju u milivoltima, osjetljivost_z je osjetljivost senzora duž Z osi. kalibrirajte akcelerometar i izračunajte vrijednost osjetljivosti posebno za vaš senzor pomoću formule:
osetljivost_z = [Z (0 stepeni) - Z (90 stepeni)] * 1000. U ovom slučaju, osetljivost 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 uglova pri osjetljivosti od 350. Kao što vidite, oni se praktično podudaraju s onima prikazanima na slici 1.
Korak 5
Prisjećajući se osnovnog kursa geometrije, dobili smo formulu za izračunavanje kutova rotacije akcelerometra:
angle_X = arctg [sqrt (Gz ^ 2 + Gy ^ 2) / Gx].
Vrijednosti su u radijanima. Da biste ih pretvorili u stepene, podijelite sa Pi i pomnožite sa 180.
Kao rezultat toga, kompletna skica koja izračunava uglove ubrzanja i rotacije akcelerometra duž svih osi prikazana je na ilustraciji. 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 kaže kompajleru da numerička vrijednost mora biti pretvorena u niz. Operator okruglog () zaokružuje ugao na najbliži 1 stepen.
Korak 6
Dakle, naučili smo kako uzimati i obrađivati podatke sa ADXL335 analognog akcelerometra koristeći Arduino. Sada možemo koristiti akcelerometar u svojim dizajnom.