Hierdie keer gaan ons oor die koppeling van die ADXL335 analoog triaksiale versnellingsmeter met die Arduino.
Nodig
- - Arduino;
- - versnellingsmeter ADXL335;
- - 'n persoonlike rekenaar met die Arduino IDE-ontwikkelingsomgewing.
Instruksies
Stap 1
Versnellingsmeters word gebruik om die versnellingsvektor te bepaal. Die ADXL335-versnellingsmeter het drie asse, en hierdeur kan dit die versnellingsvektor in drie-dimensionele ruimte bepaal. Vanweë die feit dat die swaartekrag ook 'n vektor is, kan die versnellingsmeter sy eie oriëntasie in 'n driedimensionele ruimte ten opsigte van die middelpunt van die Aarde bepaal.
Die illustrasie toon foto's uit die paspoort (https://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf) vir die ADXL335 versnellingsmeter. Hier word die koördinaatasse van die sensitiwiteit van die versnellingsmeter in verhouding tot die geometriese plasing van die toestel se liggaam in die ruimte getoon, asook 'n tabel met spanningswaardes van 3 versnellingsmeterkanale, afhangende van die oriëntasie in die ruimte. Die gegewens in die tabel word gegee vir 'n sensor in rus.
Kom ons bekyk wat die versnellingsmeter ons wys, van naderby. Laat die sensor horisontaal lê, byvoorbeeld op 'n tafel. Dan sal die projeksie van die versnellingsvektor gelyk wees aan 1g langs die Z-as, of Zout = 1g. Die ander twee asse sal nulle hê: Xout = 0 en Yout = 0. As die sensor "op sy rug" gedraai word, sal dit in die teenoorgestelde rigting gerig word in verhouding tot die swaartekragvektor, dws. Zout = -1g. Net so word metings op al drie asse geneem. Dit is duidelik dat die versnellingsmeter in die ruimte na wense geposisioneer kan word, dus sal ons lesings behalwe nul uit al drie kanale neem.
As die sonde sterk langs die vertikale Z-as geskud word, sal die Zout-waarde groter wees as "1g". Die maksimum meetbare versnelling is "3g" in elke as in enige rigting (dws albei met "plus" en "minus").
Stap 2
Ek dink ons het die werking van die versnellingsmeter uitgevind. Kom ons kyk nou na die verbindingsdiagram.
Die ADXL335-analoog-versnellingsmeterskyfie is redelik klein en in 'n BGA-pakket gehuisves, en dit is moeilik om dit tuis op 'n bord te plaas. Daarom sal ek 'n klaargemaakte GY-61-module met 'n ADXL335-versnellingsmeter gebruik. Sulke modules in Chinese aanlynwinkels kos amper 'n sent.
Om die versnellingsmeter aan te dryf, is dit nodig om spanning +3, 3 V aan die VCC-pen van die module te gee. Die sensormaatkanale is gekoppel aan die analoogpennetjies van die Arduino, byvoorbeeld "A0", "A1" en " A2 ". Dit is die hele kring:)
Stap 3
Kom ons laai hierdie skets in die Arduino-geheue. Ons sal die lesings van die analoog-insette op drie kanale lees, omskakel na spanning en dit na die seriële poort uitvoer.
Die Arduino het 'n 10-bit ADC en die maksimum toelaatbare pen spanning is 5 volt. Die gemete spanning is gekodeer met stukkies wat slegs 2 waardes kan inneem - 0 of 1. Dit beteken dat die hele meetbereik gedeel word deur (1 + 1) tot die 10de krag, d.w.s. op 1024 gelyke segmente.
Om die lesings in volt om te skakel, moet u elke waarde gemeet aan die analoog-ingang deur 1024 (segmente) verdeel en dan vermenigvuldig met 5 (volt).
Kom ons kyk wat regtig van die versnellingsmeter af kom, met behulp van die Z-as as voorbeeld (die laaste kolom). Wanneer die sensor horisontaal geposisioneer is en opkyk, kom die getalle (2.03 +/- 0.01). Dit moet dus ooreenstem met die versnelling "+ 1g" langs die Z-as en 'n hoek van 0 grade. Draai die sensor om. Die getalle kom (1, 69 +/- 0, 01), wat moet ooreenstem met "-1g" en 'n hoek van 180 grade.
Stap 4
Kom ons neem die waardes vanaf die versnellingsmeter onder 'n hoek van 90 en 270 grade en voer dit in die tabel in. Die tabel toon die draaihoeke van die versnellingsmeter (kolom "A") en die ooreenstemmende Zout-waardes in volt (kolom "B").
Vir duidelikheid word 'n plot van die spanning by die Zout-uitset teenoor die draaihoek getoon. Die blou veld is die rusafstand (teen 1g versnelling). Die pienk blokkie op die grafiek is 'n kantlyn sodat ons die versnelling tot + 3g en tot -3g kan meet.
As dit 90 grade draai, het die Z-as geen versnelling nie. Diegene. 'n waarde van 1,67 volt is 'n voorwaardelike nul Zo vir die Z-as. Dan kan u die versnelling soos volg vind:
g = Zout - Zo / sensitiwiteit_z, hier is Zout die gemeten waarde in millivolt, Zo is die waarde teen nulversnelling in millivolt, sensitiwiteit_z is die sensitiwiteit van die sensor langs die Z-as. kalibreer die versnellingsmeter en bereken die sensitiwiteitswaarde spesifiek vir u sensor met behulp van die formule:
sensitiwiteit_z = [Z (0 grade) - Z (90 grade)] * 1000. In hierdie geval is die sensitiwiteit van die versnellingsmeter langs die Z-as = (2, 03 - 1, 68) * 1000 = 350 mV. Net so moet die sensitiwiteit vir die X- en Y-as bereken word.
Kolom "C" van die tabel toon die versnelling bereken vir vyf hoeke teen 'n sensitiwiteit van 350. Soos u kan sien, val dit feitlik saam met die in Figuur 1 getoon.
Stap 5
Onthou die basiese meetkundige verloop, kry ons die formule om die draaihoeke van die versnellingsmeter te bereken:
hoek_X = arctg [sqrt (Gz ^ 2 + Gy ^ 2) / Gx].
Waardes is in radiale. Deel dit deur Pi en vermenigvuldig dit met 180 om dit in grade om te skakel.
As gevolg hiervan word 'n volledige skets getoon wat die versnellings- en draaihoeke van die versnellingsmeter langs alle asse bereken, in die illustrasie. Die opmerkings gee 'n verduideliking vir die programkode.
Wanneer u die "Serial.print ()" -poort uitvoer, dui die "\ t" -karakter 'n tab-karakter aan sodat die kolomme gelyk is en die waardes onder mekaar geleë is. "+" beteken aaneenskakeling (aaneenskakeling) van snare. Boonop vertel die operateur "String ()" die samesteller eksplisiet dat die numeriese waarde in 'n string omgeskakel moet word. Die ronde () operateur rond die hoek tot die naaste 1 graad.
Stap 6
So, ons het geleer hoe om data met behulp van die Arduino van die ADXL335 analoog versnellingsmeter te neem en te verwerk. Nou kan ons die versnellingsmeter in ons ontwerp gebruik.