Innehållsförteckning:

Vinkelmätning med hjälp av gyro, accelerometer och Arduino: 5 steg
Vinkelmätning med hjälp av gyro, accelerometer och Arduino: 5 steg

Video: Vinkelmätning med hjälp av gyro, accelerometer och Arduino: 5 steg

Video: Vinkelmätning med hjälp av gyro, accelerometer och Arduino: 5 steg
Video: Mäta vinklar med hjälp av en gradskiva 2024, November
Anonim
Vinkelmätning med hjälp av gyro, accelerometer och Arduino
Vinkelmätning med hjälp av gyro, accelerometer och Arduino

Enheten är en grov prototyp av vad som så småningom kommer att bli en självbalansrobot, detta är den andra delen av hålsaken (läs accelerometer och styr en motor för självbalans). Den första delen med endast gyro kan hittas här. På denna instruerbara mäter vi vinkeln med både gyro och accelerometer, och använder en teknik för att slå ihop båda sensorerna för att få en smidig signal. Tekniken kallas "kompletterande filter". Tidigare

Steg 1: Vad vi kommer att behöva:

Vad vi kommer att behöva
Vad vi kommer att behöva
Vad vi kommer att behöva
Vad vi kommer att behöva
Vad vi kommer att behöva
Vad vi kommer att behöva
Vad vi kommer att behöva
Vad vi kommer att behöva

Några delar kan bytas ut, och vissa ändringar i koden måste göras för att passa din hårdvara. På det här projektet kommer vi att använda:- Brödbräda- Mikrokontroller, jag använde Arduinoboard- Wire- Jumper Wires- Gyroscope XV-8100- Nunchuck Wii (för accelerometern)- Nunchuck Wii-adapter för Arduino

Steg 2: Bygg …

Byggnad…
Byggnad…
Byggnad…
Byggnad…
Byggnad…
Byggnad…

Kretsen består av ett gyroskop som är anslutet direkt till port 0 på din arduino och en nunchuck wii -anslutning vid I2C -porten. Montering av gyro: 1. - anslut gyro på brödbrädan2. - tråd någonting:- Vo-stift från gyro ansluten till analog port0 på arduino (ljusorange ledare)- G-stift från gyro ansluten till jord (vit ledning)- V+ stift från gyro ansluten till Vdd (3.3V) (orange tråd) Montering accelerometern: 1. - Anslut adaptern vid nunchuck2. - anslut nunchuck på arduino med hjälp av adaptern3. - placera accelgivaren som bilden ovan

Steg 3: Lite extra information innan vi fortsätter

Lite extra information innan vi fortsätter
Lite extra information innan vi fortsätter
Lite extra information innan vi fortsätter
Lite extra information innan vi fortsätter
Lite extra information innan vi fortsätter
Lite extra information innan vi fortsätter

Från båda sensorerna kan vi mäta vinkeln men med hjälp av två olika tekniker. För att mäta vinkeln med gyro måste vi integrera signalen. Men varför måste vi göra detta? Eftersom gyro ger oss vinkelhastigheten, så är ett enkelt sätt att få vinkeln att ha vinkelhastigheten multiplicerad med tiden [vinkel = vinkel + w * dt] För att mäta vinkeln med en accelerometer måste vi känna gravitationen i varje accelerometerns axel, vad det betyder, projiceringen av gravitationens acceleration på varje sensorriktning ger oss en uppfattning om vinkeln. [angle_accel = arctg (Ay / sqrt (Ax^2 + Az^2))] Så varför ska vi använda två sensorer istället en? För att dra fördel av båda sensoregenskaperna. Om du tittar på grafiken för gyrodata kontinuerlig ökning, detta kallas drift och accelerometerdata förändras mycket på en liten tid. Och hur man slår ihop båda signalerna? Vi kommer att använda en teknik som kallas kompletterande filter. Jag vet inte den exakta teorin bakom detta, men det fungerar bra. Det finns lite information på internet, bara googla om du behöver mer information. Denna länk har mycket information och kan vara användbar. Filtered_angle = HPF*(filtered_angle + w*dt) + LPF*(angle_accel); där HPF + LPF = 1Värdena för HPF och LPF finns på denna länk, i filen filter.pdf. Tack ni från "The DIY Segway". Bara för teständamål kommer vi att ställa in dessa värden så här, HPF = 0,98 och LPF = 0,02.

Steg 4: Kod:

Koden är en anpassning från en kod som jag använde i ett annat projekt. Förmodligen finns det några variabler som inte används. Jag använde ett bibliotek för att läsa nunchuckdata från https://todbot.com/blog/. Tack Tod E. Kurt. Kommentarer om koden är på portugisiska, så snart jag har ledig tid kommer jag att översätta den. Kodutmatningen genom serienumret några nummer med detta mönster: dt: w: teta: pitch: filter_teta $ time: angular_velocity: gyro_angle: accel_angle: filtered_angle $ Så du kan spara dessa värden på en seriell terminal och plotta en grafik eller använda vinkeln för andra saker. om du behöver någon förklaring om koden blev du fri att fråga. Koden är dragkedja. Koppla bara av, öppna och ladda upp den till din arduino.

Steg 5: Testning och slutsats

Testning och slutsats
Testning och slutsats
Testning och slutsats
Testning och slutsats

För att testa systemet sparade jag data med ett program som heter Termite, importera sedan dessa data till excel och plotta grafiken för att se hur bra mitt filter är. Resultaten är fantastiska. Självklart kan du använda signalen för att driva en motor eller andra saker. Alla kommentarer, tvivel, all information som saknas, berätta bara för mig och jag rättar den. Snälla, om du gillar det här, betygsätt. Tack alla.

Rekommenderad: