Këtë herë do të merremi me lidhjen e akselerometrit tre-boshtor analog ADXL335 me Arduino.
E nevojshme
- - Arduino;
- - akselerometër ADXL335;
- - një kompjuter personal me mjedisin e zhvillimit Arduino IDE.
Udhëzimet
Hapi 1
Accelerometers përdoren për të përcaktuar vektorin e nxitimit. Akselerometri ADXL335 ka tre boshte, dhe falë kësaj, ai mund të përcaktojë vektorin e nxitimit në hapësirën tre-dimensionale. Për shkak të faktit se forca e gravitetit është gjithashtu një vektor, akselerometri mund të përcaktojë orientimin e tij në hapësirën tre-dimensionale në krahasim me qendrën e Tokës.
Ilustrimi tregon fotografi nga pasaporta (https://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf) për akseleometrin ADXL335. Këtu tregohen boshtet koordinative të ndjeshmërisë së akseleometrit në lidhje me vendosjen gjeometrike të trupit të pajisjes në hapësirë, si dhe një tabelë e vlerave të tensionit nga 3 kanale akseleometri në varësi të orientimit të tij në hapësirë. Të dhënat në tabelë janë dhënë për një sensor në qetësi.
Le të shohim më nga afër atë që na tregon akseleometri. Lëreni sensorin të shtrihet horizontalisht, për shembull, në një tavolinë. Atëherë projeksioni i vektorit të nxitimit do të jetë i barabartë me 1g përgjatë boshtit Z, ose Zout = 1g. Dy boshtet e tjera do të kenë zero: Xout = 0 dhe Yout = 0. Kur sensori të kthehet "në shpinë", ai do të drejtohet në drejtim të kundërt në krahasim me vektorin e gravitetit, dmth. Zout = -1g. Në mënyrë të ngjashme, matjet bëhen në të tre boshtet. Shtë e qartë se akselerometri mund të pozicionohet siç dëshirohet në hapësirë, kështu që ne do të marrim lexime përveç zero nga të tre kanalet.
Nëse sonda lëkundet fuqishëm përgjatë boshtit vertikal Z, vlera e Zout do të jetë më e madhe se "1g". Nxitimi maksimal i matshëm është "3g" në secilin prej akseve në çdo drejtim (dmth. Të dy me "plus" dhe "minus").
Hapi 2
Unë mendoj se kemi kuptuar parimin e funksionimit të akseleometrit. Tani le të shohim diagramin e lidhjes.
Çipi i akseleometrit analog ADXL335 është mjaft i vogël dhe i vendosur në një paketë BGA, dhe është e vështirë ta montoni në një bord në shtëpi. Prandaj, unë do të përdor një modul të gatshëm GY-61 me një akseleometër ADXL335. Module të tillë në dyqanet online kineze kushtojnë pothuajse një qindarkë.
Për të furnizuar akselerometrin, është e nevojshme të furnizoni tensionin +3, 3 V në kunjin VCC të modulit. Kanalet matëse të sensorit janë të lidhura me kunjat analoge të Arduino, për shembull, "A0", "A1" dhe " A2 ". Ky është i gjithë qark:)
Hapi 3
Le ta ngarkojmë këtë skicë në kujtesën Arduino. Ne do të lexojmë leximet nga hyrjet analoge në tre kanale, t'i konvertojmë në tension dhe t'i nxjerrim në portin serik.
Arduino ka një ADC 10-bit, dhe voltazhi maksimal i lejuar i pinit është 5 volt. Tensionet e matura janë të koduara me bit që mund të marrin vetëm 2 vlera - 0 ose 1. Kjo do të thotë që i gjithë diapazoni i matjes do të ndahet me (1 + 1) në fuqinë e 10-të, d.m.th. në 1024 segmente të barabarta.
Në mënyrë që të ktheni leximet në volt, duhet të ndani secilën vlerë të matur në hyrjen analoge me 1024 (segmente), dhe pastaj të shumëzoni me 5 (volt).
Le të shohim se çfarë vjen me të vërtetë nga akselerometri duke përdorur boshtin Z si shembull (kolona e fundit). Kur sensori pozicionohet horizontalisht dhe shikon lart, numrat vijnë (2.03 +/- 0,01). Pra, kjo duhet të korrespondojë me nxitimin "+ 1g" përgjatë boshtit Z dhe një kënd prej 0 gradë. Rrokullisni sensorin. Numrat arrijnë (1, 69 +/- 0, 01), i cili duhet të korrespondojë me "-1g" dhe një kënd prej 180 gradë.
Hapi 4
Le të marrim vlerat nga akselerometri në kënde 90 dhe 270 gradë dhe t'i fusim ato në tabelë. Tabela tregon këndet e rrotullimit të akselerometrit (kolona "A") dhe vlerat përkatëse të Zout në volt (kolona "B").
Për qartësi, tregohet një komplot i tensioneve në daljen Zout kundrejt këndit të rrotullimit. Fusha blu është diapazoni në qetësi (me përshpejtim 1g). Kutia rozë në grafik është një diferencë në mënyrë që të mund të masim nxitimin deri në + 3g dhe deri në -3g.
Në 90 gradë rrotullim, boshti Z ka nxitim zero. Ata. një vlerë prej 1.67 volt është një zero kushtëzuar Zo për boshtin Z. Pastaj mund të gjesh nxitimin si kjo:
g = Zout - Zo / ndjeshmëria_z, këtu Zout është vlera e matur në milivolt, Zo është vlera në nxitimin zero në milivolts, ndjeshmëria_z është ndjeshmëria e sensorit përgjatë boshtit Z. kalibroni akselerometrin dhe llogaritni vlerën e ndjeshmërisë posaçërisht për tuajin sensori duke përdorur formulën:
ndjeshmëria_z = [Z (0 gradë) - Z (90 gradë)] * 1000. Në këtë rast, ndjeshmëria e akselerometrit përgjatë boshtit Z = (2, 03 - 1, 68) * 1000 = 350 mV. Në mënyrë të ngjashme, ndjeshmëria do të duhet të llogaritet për boshtet X dhe Y.
Kolona "C" e tabelës tregon nxitimin e llogaritur për pesë kënde në një ndjeshmëri prej 350. Siç mund ta shihni, ato praktikisht përkojnë me ato të treguara në Figurën 1.
Hapi 5
Duke kujtuar kursin bazë të gjeometrisë, ne marrim formulën për llogaritjen e këndeve të rrotullimit të akselerometrit:
kënd_X = arctg [sqrt (Gz ^ 2 + Gy ^ 2) / Gx].
Vlerat janë në radian. Për t'i shndërruar ato në gradë, ndajeni me Pi dhe shumëzoni me 180.
Si rezultat, një skicë e plotë që llogarit këndet e përshpejtimit dhe rrotullimit të akseleometrit përgjatë të gjitha akseve është treguar në ilustrim. Komentet japin shpjegime për kodin e programit.
Kur dilni në portën "Serial.print ()", karakteri "\ t" tregon një karakter tab, në mënyrë që kolonat të jenë çift dhe vlerat të vendosen njëra nën tjetrën. "+" do të thotë bashkim (bashkim) i vargjeve. Për më tepër, operatori "String ()" shprehimisht i thotë përpiluesit se vlera numerike duhet të shndërrohet në një varg. Operatori raund () rrumbullakos këndin në 1 shkallë më të afërt.
Hapi 6
Pra, mësuam si të marrim dhe përpunojmë të dhëna nga përshpejtuesi analoge ADXL335 duke përdorur Arduino. Tani mund të përdorim akselerometrin në dizajnet tona.