Accelerometer & Gyro handledning (1 / 3 steg)

Steg 1: Accelerometern



För att förstå denna enhet kommer vi börja med accelerometern. När man tänker på accelerometrar är det ofta användbart att bild en låda i form av en kub med en boll inuti den. Du kan tänka dig något annat som en cookie eller en munk, men jag ska föreställa en boll:

Om vi tar denna ruta på en plats med ingen gravitation fält eller för den delen med inga andra fält som kan påverka bollens position - flyter helt enkelt bollen i mitten av rutan. Du kan tänka dig i rutan är i yttre rymden långt-långt från alla kosmiska kroppar, eller om sådan plats är svårt att hitta föreställa sig minst ett rymdskepp som kretsar kring planeten där allt är i tyngdlös tillstånd. Från bilden ovan kan du se att vi tilldelar varje axel ett par väggar (vi bort väggen Y + så vi kan se i rutan). Tänk dig att varje vägg är tryckkänslig. Om vi flyttar plötsligt rutan till vänster (vi påskynda det med acceleration 1g = 9,8 m/s ^ 2), bollen kommer att slå i väggen X-. Vi sedan mäta trycket styrkan att bollen gäller väggen och produktionen ett värde av-1 g på X-axeln.

Observera att accelerometern faktiskt kommer att upptäcka en kraft som riktas i motsatt riktning från acceleration vektorn. Denna kraft kallas ofta tröghetsbaserad tvinga eller fiktiv kraft . En sak du bör lära av detta är att en accelerometer mäter acceleration indirekt genom en kraft som tillämpas på en av sina väggar (enligt vår modell, kan det vara en fjäder eller något annat i verkliga livet accelerometrar). Denna kraft kan orsakas av acceleration, men som vi ser i nästa exempel den alltid orsakas inte av acceleration.

Om vi tar vår modell och lägga den på jorden bollen kommer att falla på Z-väggen och en styrka på 1g på gäller den nedre väggen, som visas i bilden nedan:

I detta fall rutan är inte flytta men vi får fortfarande en läsning av-1 g på Z-axeln. Det tryck som bollen har tillämpat på väggen orsakades av en gravitation kraft. I teorin kunde det vara en annan typ av kraft - till exempel om du tänker dig att vår boll metallic, utsläppande en magnet bredvid rutan kunde flytta bollen så den träffar en annan vägg. Det säger bara för att bevisa att i huvudsak accelerometer åtgärder kraft inte acceleration. Det händer bara som accelerationen orsakar en tröghetsbaserad kraft som fångas av kraft upptäckt mekanismen av accelerometern.

Medan denna modell är inte exakt hur en MEMS sensor konstrueras är det ofta bra lösa accelerometer relaterade problem. Det finns faktiskt liknande sensorer som har metallic bollar inne, de kallas tilt växlar, men de är mer primitiva och oftast de kan bara berätta om enheten lutas ned inom vissa sträcker eller inte, inte omfattningen av lutning.

Vi har hittills analyserat accelerometern utgången på en enda axel och detta är allt får du med en enda axel accelerationsmätare. Det verkliga värdet av treaxiala accelerationsmätare kommer från det faktum att de kan upptäcka tröghetsbaserad styrkor på alla tre axlarna. Låt oss gå tillbaka till vår boxmodell, och låt oss rotera box 45 grader åt höger. Bollen kommer att röra 2 väggarna nu: Z- och X-som visas i bilden nedan:

Värdena på 0,71 är inte godtyckliga, de är faktiskt en approximation för SQRT(1/2). Detta kommer att bli mer tydliga som vi inför vår nästa modell för accelerometern.

I den tidigare modellen har vi fast kraften som gravitationen och roteras vår imaginära låda. I sista 2 exemplen har vi analyserat produktionen i 2 olika box positioner, medan force vector förblev konstant. Detta var användbart för att förstå hur accelerometern samverkar med utomstående krafter, är det mer praktiskt att utföra beräkningar om vi fixa koordinatsystemet till yxor av accelerometern och föreställa sig att force vector roterar runt oss.

Gärna ta en titt på modellen ovan, jag bevarade färgerna på axlarna så att du kan göra en mental övergång från den tidigare modellen till den nya. Tänk bara att varje axel i den nya modellen är vinkelrätt mot rutan i den tidigare modellen respektive ansikten. Vektorn R är kraft vektorn som accelerometern mäter (det kan vara antingen kraften som gravitation eller tröghetsbaserad kraften från exemplen ovan eller en kombination av båda). RX, Ry, Rz är projektionen av R vektorn på X, Y, Z-axlar. Observera följande förhållande:

R ^ 2 = Rx ^ 2 + Ry ^ 2 + Rz ^ 2 (ekv. 1)

vilket är i princip motsvarande av Pythagoras sats i 3D.

Kom ihåg att lite tidigare jag berättat att värdena för SQRT(1/2) ~ 0,71 är inte slumpmässigt. Om du ansluter dem formeln ovan, efter att att våra gravitation kraft var 1 g kan vi kontrollera att:

1 ^ 2 = (-SQRT(1/2)) ^ 2 + 0 ^ 2 + (-SQRT(1/2)) ^ 2

helt enkelt genom att ersätta R = 1, Rx = - SQRT(1/2), Ry = 0, Rz =-SQRT(1/2) i Eq.1

Efter en lång ingress teori får vi närmare till verkliga livet accelerometrar. De värden som Rx, Ry, Rz är faktiskt linjärt relaterade till de värden som din verkliga accelerometer kommer ut och som du kan använda för att utföra olika beräkningar.

Innan vi kommer dit låt oss prata lite om hur accelerometrar kommer att leverera denna information till oss. De flesta accelerometrar faller i två kategorier: digitala och analoga. Digital accelerometrar ger dig information med ett seriellt protokoll som I2C, SPI eller USART, medan analoga accelerometrar kommer ut en spänning nivå inom ett fördefinierat intervall som du måste konvertera till ett digitalt värde använder en ADC (analog till digital omvandlare) modul. Jag går inte in i detalj om hur ADC fungerar, dels för att det är ett omfattande ämne och dels för att det är olika från en plattform till en annan. Vissa mikrokontroller har en inbyggd ADC moduler några av dem behöver externa komponenter för att utföra ADC konverteringar. Oavsett vilken typ av ADC modul du använder du kommer att sluta med ett värde i ett visst intervall. För exempel en 10-bitars ADC modul kommer ut ett värde i intervallet 0..1023, Observera att 1023 = 2 ^ 10 -1. En 12-bitars ADC modul kommer utgång ett värde i intervallet 0..4095, Observera att 4095 = 2 ^ 12-1.

Låt oss gå vidare genom att betrakta ett enkelt exempel, anta att vår 10 bitars ADC modul gav oss följande värden för de tre accelerometer kanalerna (axlar):

AdcRx = 586
AdcRy = 630
AdcRz = 561

Varje ADC modul kommer att ha en referens spänning, låt oss anta att i vårt exempel är det 3.3V. Om du vill konvertera en 10 bitars adc värde till spänning använder vi följande formel:

VoltsRx = AdcRx * Vref / 1023

En snabb anteckning här: för 8-bitars ADC senaste delaren att 255 = 2 ^ 8-1, och för 12 bitars ADC senaste divider vore 4095 = 2 ^ 12 -1.

Tillämpning av denna formel på alla 3 kanaler får vi:

VoltsRx = 586 * 3.3V / 1023 = ~ 1.89V (vi runt alla resultat till 2 decimaler)
VoltsRy = 630 * 3.3V / 1023 = ~ 2.03V
VoltsRz = 561 * 3.3V / 1023 = ~ 1.81V

Varje accelerometer har en noll-g spänningsnivån, du hittar den i specs, detta är den spänning som motsvarar 0g. För att få ett signerat spänning värde måste vi beräkna övergången från denna nivå. Låt oss säga våra 0g spänningsnivån är VzeroG = 1.65V. Vi beräkna spänningen skiftar från zero-g spänning så här::

DeltaVoltsRx = 1.89V - 1.65V = 0.24V
DeltaVoltsRy = 2.03V - 1.65V = 0.38V
DeltaVoltsRz = 1.81V - 1.65V = 0.16V

Vi har nu vår accelerometer avläsningar i volt, det är fortfarande inte i g (9,8 m/s ^ 2), att göra slutliga konverteringen tillämpar vi accelerometer känsligheten, vanligen uttryckt i mV/g. kan säga vår känslighet = 478.5mV / g = 0.4785V / g. känslighet värden finns i accelerometer specifikationer. Slutliga kraft värden uttryckt i g använder vi följande formel:

RX = DeltaVoltsRx / känslighet

RX = 0.24V / 0.4785V / g = ~ 0,5 g
Ry = 0.38V / 0.4785V / g = ~ 0,79 g
RZ = 0.16V / 0.4785V / g = ~ 0,33 g

Vi kan naturligtvis kombinera alla steg i en formel, men jag gick igenom alla steg för att klargöra hur du går från ADC avläsningar till en force vector komponent uttryckt i g.

RX = (AdcRx * Vref / 1023 - VzeroG) / känslighet (Eq.2)
Ry = (AdcRy * Vref / 1023 - VzeroG) / känslighet
RZ = (AdcRz * Vref / 1023 - VzeroG) / känslighet

Vi har nu alla 3 komponenter som definierar våra tröghetsbaserad force vector, om enheten inte är föremål för andra krafter än gravitation, vi kan anta detta är riktningen av våra gravitation force vector. Om du vill beräkna lutningen på enheten i förhållande till marken kan du beräkna vinkeln mellan denna vektor- och Z-axeln. Om du är också intresserad av per-axel riktning av lutning kan du dela upp detta resultat i 2 delar: lutning på X- och Y-axeln som kan beräknas som vinkeln mellan gravitation vektor och X / Y-axlarna. Beräkningen av dessa vinklar är enklare än du kanske tror, nu när vi har beräknas värdena för Rx, Ry och Rz. Låt oss gå tillbaka till vår sista accelerometer modell och gör några ytterligare anteckningar:

Vinklarna som vi är intresserade av är vinklarna mellan X, Y, Z-axlar och force vector R. Vi ska definiera dessa vinklar som Axr, Ayr, Azr. Du kan märka från en rätvinklig triangel som utgörs av R och Rx som:

cos(AXR) = Rx / R, och på samma sätt:
cos(Ayr) = Ry / R
cos(AZR) = Rz / R

Vi kan dra av från Eq.1 att R = SQRT (Rx ^ 2 + Ry ^ 2 + Rz ^ 2).

Vi kan nu hitta våra vinklar med hjälp av arccos() funktion (inverterad cos() funktion):

AXR = arccos(Rx/R)
Ayr = arccos(Ry/R)
AZR = arccos(Rz/R)

Vi har gått långt för att förklara den accelerometer modellen, bara för att komma upp till dessa formler. Beroende på dina program kan du använda alla mellanliggande formler som vi har härlett. Kommer vi också att introducera gyroskop modellen snart och vi får se hur accelerometer och gyroskop data kan kombineras för att ge ännu mer exakt lutning anseende.

Men innan vi gör det låt oss göra några mer användbara anteckningar:

cosX = cos(Axr) = Rx / R
Mysig = cos(Ayr) = Ry / R
cosZ = cos(Azr) = Rz / R

Här triplett kallas brukar Riktning cosinus och det representerar i grunden enhet vektorn (vektor med längden 1) som har samma riktning som vår R vektor. Du kan enkelt kontrollera att:

SQRT (cosX ^ 2 + mysig ^ 2 + cosZ ^ 2) = 1

Detta är en trevlig egenskap eftersom det befriar oss från övervakning modulus(length) av R vektor. Ofta om vi är bara intresserad av riktningen av våra tröghetsbaserad vektor, är det vettigt att normalisera det är modul för att förenkla andra beräkningar.

Se Steg
Relaterade Ämnen

MPU6050: Arduino 6 axlig Accelerometer + Gyro - GY 521 Test & 3D-simulering

Är du ute efter för att göra din egen quadcopter drone eller RC plan med Arduino men vet inte hur man få gyro fungerar? Kanske har du redan köpt några 6 axel MPU6050 moduler (på GY-521 breakout styrelser) bara för att finna de var inte så enkelt att...

Gyro kamera för motorcykel

som sett i MotoGP Race, ryttaren ses ridande genom hörn samtidigt som man lägger undan sin cykel till vänster och höger. Men det finns en intressant stund när motorn ser ut för att kollapsa sideward, framför åsikter förblir horisontellt. Hur kan det...

Hur använder jag RFduino med en 6 axlig accelerometer

Kolla in den RFduino finger-tip storlek, Arduino kompatibla, trådlösa aktiverade micro controller:http://www.rfduino.com/Product/rfd90101-rfduino-2p...Detta instructable visar dig hur gränssnittet till Accelerometer/Gyro med RFduino och dra data från...

Använda en Accelerometer och gyroskop med Arduino

jag köpte nyligen en kombination 3 axlig accelerometer och 2 axis gyroskop från Sparkfun och jag ville lägga upp några av koden jag brukade få det igång. Jag planerar att använda den i en Arduino baserad MIDI-controller som jag kommer att utstationer...

Sockerbit MIDI Controller

Detta projekt är en bärbar, Arduino-powered, grid-baserad MIDI-controller som startar upp till olika apps att göra massor av saker med ljud. Den har 16 bakgrundsbelysta knappar, används som både in- och utgångar för att ge registeransvarige lite visu...

Multi-Functional Star Wars Astromech Droid

E4-B4Astromechdroid för hemmet.Videolänkar för mobila enheter som inte kommer att spela video bilderna ovan:Tillverkningen av E4-B4 Astromech Droid VideoE4-B4: Showcase Video, en del 1E4-B4: Rocket Man VideoE4-B4: Sugen på en Drink?E4-B4: Dome viftar...

K-9 2.0. WiFi kontrollerade och autonom Robot hund.

OBS:I steg 22, har jag postat en uppdatering, förklarar några senaste förändringar/förbättringar som jag har gjort, främst på K-9's elsystem och sensor array som du kan ha nytta.FunktionerRobust trä (MDF) och akryl designHelt mikroprocessorstyrda anv...

Rideable Segway klon - låg kostnad och enkel Build

Detta Instructable visar dig hur man bygger en ride-stånd Segway klon. Här är dess funktioner:Lätt att bygga med ingen svetsning, inte komplicerad styrning koppling och minimal lödning.Använder en lättillgänglig $3 digitala MPU6050 accelerometer/gyro...

Automatisk Magnetometer kalibrering

Det finns flera typer av billiga magnetometer nu tillgänglig, där du kan känna en kompassriktningen, men alla av dem (såvitt jag vet) behöver kalibreras innan du kan få vettiga resultat.Jag beskriva en manuell metod för att göra detta i en annan Inst...

Enkel manuell Magnetometer kalibrering

Det finns flera typer av billiga magnetometer nu tillgänglig, där du kan känna en kompassriktningen, men alla av dem (såvitt jag vet) behöver kalibreras innan du kan få vettiga resultat. I detta Instructable, ska jag visa en enkel manuell metod med b...

DIY virtuell verklighet Skateboard erfarenhet med Arduino och Google kartong

Detta är ett riktigt roligt och enkelt projekt som kan göras ungefär en timme. På botten av skateboard är en accelerometer/gyro med en Arduino ombord som överför kantiga rörelse i styrelsen via bluetooth till en liten virtuell verklighet spel jag gjo...

Motorcykel/PushBike larmsystem

En vän till mig har köpt en ny motorcykel nyligen, tillsammans med det han också köpt ett larm. Men eftersom han bor i en andra berättelse lägenhet var han orolig att om larmet ljud, han inte skulle kunna höra det.Han frågade om jag kunde komma med n...

Arduino temperaturvakt web

i detta instructable du lär att etablera kommunikation mellan arduino styrelsen (eller en mikrokontroller som suports UART) och Internet via en android-enhet. När du vet hur man gör att du kan styra en lampa i sovrummet från andra sidan av jordklotet...

Anpassade Arduino Micro Quadcopter koncept

redigera 14 APRIL: Sorry killar för posten sen. livet har varit riktigt hektiskt nyligen för mig eftersom vi var tvungna att byta ut ett avloppsrör begravd i betongplattan vårt hus sitter på. Men vi har gjort vissa framsteg! koden kommit något in men...

Nils-Johan-själv Balancing robot

Efter att få så mycket frustrerad över PID trimning av quadcopter, beslutade jag att behärska PID först på några grundläggande projekt. Självbalanserande robot verkar en inaktiv val. Eftersom det inte är ny och fortfarande utmanande, beslöt jag att g...

Enkla självbalanserande Robot med Galileo Gen 2

Efter volontärarbete på den lokala mini Maker Faire, och att få en chans att spela med Intel Galileo Gen 2 Arduino styrelsen, var jag motiverad att hitta ett maker projekt för mig själv. Efter en snabb undersökning av alternativen och mina intressen...

Arduino & MPU-6050 IMU kontrollerade Bee Bot / stora Trak klona

Introduktionhttps://github.com/lawsonkeith/Bee-botEn enkel hjulförsedda robot som kan programmeras att följa en kurs. Roboten har ett tangentbord som accepterar rörelse kommandon och sedan kör dem. En ovanlig egenskap är att jag har använt en 6 DOF M...

Borstlösa Gimbal med Arduino

Detta är ett våren 2014 elektronik projekt på Pomona College skapad av Andreas Biekert och Jonah Grubb. Tack till Professor Dwight Whitaker, Tony Grigsby och Pomona Fysikum.Vårt mål med detta projekt var att skapa en 2 axis borstlös gimbal styrs enba...

Self balancing one wheeled electric skateboard

OBS:Maj 2011: Detta instructable är nu ganska gammal (relativt) och jag kunde nu bygga detta projekt helt enkelt med en Arduino som registeransvarig.Jag arbetar för närvarande på en enhjuling med samma OSMC motor styrenhet och en Arduino. När jag får...