Denne gang beskæftiger vi os med at forbinde ADXL335 analogt triaksial accelerometer til Arduino.
Nødvendig
- - Arduino;
- - accelerometer ADXL335;
- - en personlig computer med Arduino IDE-udviklingsmiljøet.
Instruktioner
Trin 1
Accelerometre bruges til at bestemme accelerationsvektoren. ADXL335 accelerometer har tre akser, og takket være dette kan det bestemme accelerationsvektoren i et tredimensionelt rum. På grund af det faktum, at tyngdekraften også er en vektor, kan accelerometeret bestemme sin egen orientering i et tredimensionelt rum i forhold til Jordens centrum.
Illustrationen viser billeder fra pas (https://www.analog.com/static/imported-files/data_sheets/ADXL335.pdf) til ADXL335 accelerometer. Her vises koordinatakserne for accelerometerets følsomhed i forhold til den geometriske placering af enhedens legeme i rummet samt en tabel over spændingsværdier fra 3 accelerometerkanaler afhængigt af dets orientering i rummet. Dataene i tabellen er angivet for en sensor i hvile.
Lad os se nærmere på, hvad accelerometeret viser os. Lad sensoren ligge vandret, f.eks. På et bord. Derefter vil fremskrivningen af accelerationsvektoren være lig med 1g langs Z-aksen eller Zout = 1g. De to andre akser har nuller: Xout = 0 og Yout = 0. Når sensoren drejes "på ryggen", vil den blive rettet i den modsatte retning i forhold til tyngdekraftsvektoren, dvs. Zout = -1 g. På samme måde udføres målinger på alle tre akser. Det er klart, at accelerometeret kan placeres som ønsket i rummet, så vi tager andre målinger end nul fra alle tre kanaler.
Hvis sonden rystes kraftigt langs den lodrette Z-akse, vil Zout-værdien være større end "1g". Den maksimale målbare acceleration er "3g" i hver af akserne i enhver retning (dvs. begge med "plus" og "minus").
Trin 2
Jeg tror, vi har fundet ud af, hvordan accelerometeret fungerer. Lad os nu se på forbindelsesdiagrammet.
ADXL335 analog accelerometerchip er ret lille og ligger i en BGA-pakke, og det er svært at montere den på et kort derhjemme. Derfor vil jeg bruge et færdiglavet GY-61 modul med et ADXL335 accelerometer. Sådanne moduler i kinesiske onlinebutikker koster næsten en krone.
For at drive accelerometeret er det nødvendigt at levere spænding +3, 3 V til modulets VCC-pin. Sensorens målekanaler er forbundet til de analoge ben i Arduino, for eksempel "A0", "A1" og " A2 ". Dette er hele kredsløbet:)
Trin 3
Lad os indlæse denne skitse i Arduino-hukommelsen. Vi læser aflæsningerne fra de analoge indgange på tre kanaler, konverterer dem til spænding og sender dem til den serielle port.
Arduino har en 10-bit ADC, og den maksimalt tilladte pin-spænding er 5 volt. De målte spændinger er kodet med bits, der kun kan tage 2 værdier - 0 eller 1. Dette betyder, at hele måleområdet divideres med (1 + 1) til den 10. effekt, dvs. på 1024 lige store segmenter.
For at konvertere målingerne til volt skal du dividere hver værdi målt ved den analoge indgang med 1024 (segmenter) og derefter gange med 5 (volt).
Lad os se, hvad der virkelig kommer fra accelerometeret ved hjælp af Z-aksen som et eksempel (den sidste kolonne). Når sensoren er placeret vandret og kigger op, kommer tallene (2.03 +/- 0.01). Så dette skal svare til accelerationen "+ 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.
Trin 4
Lad os tage værdierne fra accelerometeret i vinkler på 90 og 270 grader og indtaste dem i tabellen. Tabellen viser accelerometerets (kolonne "A") rotationsvinkler og de tilsvarende Zout-værdier i volt (kolonne "B").
For klarhedens skyld vises et plot af spændinger ved Zout-udgangen i forhold til rotationsvinklen. Det blå felt er hvileområdet (ved 1 g acceleration). Den lyserøde boks på grafen er en margen, så vi kan måle acceleration op til + 3g og op til -3g.
Ved 90 graders rotation har Z-aksen nul acceleration. De der. en værdi på 1,67 volt er et betinget nul Zo for Z-aksen. Derefter kan du finde accelerationen sådan:
g = Zout - Zo / følsomhed_z, her er Zout den målte værdi i millivolt, Zo er værdien ved nulacceleration i millivolt, følsomhed_z er følsomheden af sensoren langs Z-aksen. kalibrer accelerometeret og beregn følsomhedsværdien specifikt til din sensor ved hjælp af formlen:
følsomhed_z = [Z (0 grader) - Z (90 grader)] * 1000. I dette tilfælde er accelerometerets følsomhed langs Z-aksen = (2, 03 - 1, 68) * 1000 = 350 mV. På samme måde skal følsomheden beregnes for X- og Y-akserne.
Kolonne "C" i tabellen viser accelerationen beregnet for fem vinkler ved en følsomhed på 350. Som du kan se, falder de praktisk talt sammen med dem, der er vist i figur 1.
Trin 5
Når vi husker det grundlæggende geometriske forløb, får vi formlen til beregning af accelerometerets rotationsvinkler:
vinkel_X = arctg [sqrt (Gz ^ 2 + Gy ^ 2) / Gx].
Værdierne er i radianer. For at konvertere dem til grader divideres med Pi og ganges med 180.
Som et resultat vises en komplet skitse, der beregner accelerations- og rotationsvinklerne på accelerometeret langs alle akser, i illustrationen. Kommentarerne giver forklaringer på programkoden.
Når der sendes til "Serial.print ()" -porten, betegner "\ t" -tegnet et tabulatortegn, så kolonnerne er jævne, og værdierne ligger under hinanden. "+" betyder sammenkædning (sammenkædning) af strenge. Desuden fortæller operatoren "String ()" udtrykkeligt kompilatoren, at den numeriske værdi skal konverteres til en streng. Operatoren runde () afrunder hjørnet til nærmeste 1 grad.
Trin 6
Så vi lærte at tage og behandle data fra ADXL335 analogt accelerometer ved hjælp af Arduino. Nu kan vi bruge accelerometeret i vores designs.