Denne gangen vil vi forholde oss til å koble ADXL335 analogt triaksial akselerometer til Arduino.
Nødvendig
- - Arduino;
- - akselerometer ADXL335;
- - en personlig datamaskin med Arduino IDE-utviklingsmiljø.
Bruksanvisning
Trinn 1
Akselerometre brukes til å bestemme akselerasjonsvektoren. ADXL335 akselerometer har tre akser, og takket være dette kan den bestemme akselerasjonsvektoren i et tredimensjonalt rom. På grunn av at tyngdekraften også er en vektor, kan akselerometeret bestemme sin egen orientering i et tredimensjonalt rom i forhold til sentrum av jorden.
Illustrasjonen viser bilder fra passet (https://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf) for akselerometeret ADXL335. Her vises koordinataksene til akselerometerets følsomhet i forhold til den geometriske plasseringen av enhetens kropp i rommet, samt en tabell over spenningsverdier fra 3 akselerometerkanaler, avhengig av dens orientering i rommet. Dataene i tabellen er gitt for en sensor i ro.
La oss se nærmere på hva akselerometeret viser oss. La sensoren ligge horisontalt, for eksempel på et bord. Da vil projeksjonen av akselerasjonsvektoren være lik 1g langs Z-aksen, eller Zout = 1g. De to andre aksene vil ha nuller: Xout = 0 og Yout = 0. Når sensoren dreies "på ryggen", vil den bli rettet i motsatt retning i forhold til tyngdekraftsvektoren, dvs. Zout = -1g. På samme måte blir det tatt målinger på alle tre aksene. Det er klart at akselerometeret kan plasseres som ønsket i rommet, så vi tar andre målinger enn null fra alle tre kanalene.
Hvis sonden ristes kraftig langs den vertikale Z-aksen, vil Zout-verdien være større enn "1g". Den maksimale målbare akselerasjonen er "3g" i hver av aksene i hvilken som helst retning (dvs. begge med "pluss" og "minus").
Steg 2
Jeg tror vi fant ut prinsippet om akselerometeret. La oss nå se på tilkoblingsskjemaet.
ADXL335 analog akselerometerbrikke er ganske liten og ligger i en BGA-pakke, og det er vanskelig å montere den på et tavle hjemme. Derfor vil jeg bruke en ferdig GY-61-modul med et ADXL335 akselerometer. Slike moduler i kinesiske nettbutikker koster nesten en krone.
For å drive akselerometeret er det nødvendig å levere spenning +3, 3 V til VCC-pinnen på modulen. Sensorens målekanaler er koblet til de analoge pinnene til Arduino, for eksempel "A0", "A1" og " A2 ". Dette er hele kretsen:)
Trinn 3
La oss laste denne skissen inn i Arduino-minnet. Vi vil lese avlesningene fra de analoge inngangene på tre kanaler, konvertere dem til spenning og sende dem til serieporten.
Arduino har en 10-bit ADC, og den maksimale tillatte pin-spenningen er 5 volt. De målte spenningene er kodet med biter som bare kan ta to verdier - 0 eller 1. Dette betyr at hele måleområdet vil bli delt med (1 + 1) til 10. effekt, dvs. på 1024 like store segmenter.
For å konvertere målingene til volt, må du dele hver verdi målt ved den analoge inngangen med 1024 (segmenter), og deretter multiplisere med 5 (volt).
La oss se hva som virkelig kommer fra akselerometeret ved hjelp av Z-aksen som et eksempel (den siste kolonnen). Når sensoren er plassert horisontalt og ser opp, kommer tallene (2.03 +/- 0.01). Så dette skal tilsvare akselerasjonen "+ 1g" langs Z-aksen og en vinkel på 0 grader. Vend sensoren. Tallene ankommer (1, 69 +/- 0, 01), som skal svare til "-1g" og en vinkel på 180 grader.
Trinn 4
La oss ta verdiene fra akselerometeret i vinkler på 90 og 270 grader og legge dem inn i tabellen. Tabellen viser rotasjonsvinklene til akselerometeret (kolonne "A") og de tilsvarende Zout-verdiene i volt (kolonne "B").
For tydelighetens skyld vises et spenningsdiagram ved Zout-utgangen versus rotasjonsvinkelen. Det blå feltet er området i ro (ved 1g akselerasjon). Den rosa boksen på grafen er en margin slik at vi kan måle akselerasjon opp til + 3g og opp til -3g.
Ved 90 graders rotasjon har Z-aksen null akselerasjon. De. en verdi på 1,67 volt er en betinget null Zo for Z-aksen. Da kan du finne akselerasjonen slik:
g = Zout - Zo / sensitivitet_z, her er Zout den målte verdien i millivolt, Zo er verdien ved null akselerasjon i millivolt, sensitivitet_z er følsomheten til sensoren langs Z-aksen. kalibrer akselerometeret og bereg følsomhetsverdien spesielt for din sensor ved hjelp av formelen:
sensitivitet_z = [Z (0 grader) - Z (90 grader)] * 1000. I dette tilfellet er følsomheten til akselerometeret langs Z-aksen = (2, 03 - 1, 68) * 1000 = 350 mV. På samme måte må følsomheten beregnes for X- og Y-aksene.
Kolonne "C" i tabellen viser akselerasjonen beregnet for fem vinkler ved en følsomhet på 350. Som du ser, faller de praktisk talt sammen med de som er vist i figur 1.
Trinn 5
Når vi husker det grunnleggende geometriske forløpet, får vi formelen for å beregne akselerometerets rotasjonsvinkler:
vinkel_X = arctg [sqrt (Gz ^ 2 + Gy ^ 2) / Gx].
Verdiene er i radianer. For å konvertere dem til grader, divider med Pi og multipliser med 180.
Som et resultat vises en fullstendig skisse som beregner akselerasjonsmålerens akselerasjons- og rotasjonsvinkler langs alle akser i illustrasjonen. Kommentarene gir forklaringer på programkoden.
Når du skriver ut til "Serial.print ()" -porten, betegner "\ t" -tegnet et fanetegn slik at kolonnene er jevne og verdiene ligger under hverandre. "+" betyr sammenføyning (sammenføyning) av strenger. Videre forteller operatøren "String ()" eksplisitt kompilatoren at den numeriske verdien må konverteres til en streng. Rund () operatøren runder hjørnet til nærmeste 1 grad.
Trinn 6
Så vi lærte å ta og behandle data fra ADXL335 analog akselerometer ved hjelp av Arduino. Nå kan vi bruke akselerometeret i designene våre.