- Material som krävs:
- Kretsschema:
- Driva din installation:
- Programmering av din Arduino:
- Förbereda Android-applikationen med bearbetning:
- Arduino Inclinometer:
Den MPU6050 är ett IC 3-axlig accelerometer och en tre-axlig gyroskop kombinerade till en enhet. Det innehåller också en temperatursensor och en DCM för att utföra en komplex uppgift. MPU6050 används ofta för att bygga Drone och andra fjärrrobotar som en självbalanserande robot. I detta projekt lär vi oss hur man använder MPU6050 är byggd en lutningsmätare eller Spirit Leveler. Som vi vet används en lutningsmätare för att kontrollera om en yta är perfekt utjämnad eller inte, de finns antingen som spritbubblor eller som digitala mätare. I det här projektet ska vi bygga en digital lutningsmätare som kan övervakas med en Android-applikation. Anledningen till att man använder en fjärrskärm som en mobiltelefon är att vi kan övervaka värdena från MPU6050 utan att behöva titta på hårdvaran, detta skulle vara mycket praktiskt när MPU6050 placeras på en drönare eller någon annan otillgänglig plats.
Material som krävs:
- Arduino Pro-mini (5V)
- MPU6050 gyrosensor
- HC-05 eller HC-06 Bluetooth-modul
- FTDI-kort
- Bakbord
- Anslutande ledningar
- Smart telefon
Kretsschema:
Det fullständiga kretsschemat för detta Arduino Tilt Sensor Project visas nedan. Den har bara bara tre komponenter och kan enkelt byggas över panelen.
De MPU6050 kommunicerar med hjälp av I2C och följaktligen SDA stift är ansluten till A4-stiftet i Arduino som är SDA-pinnen och SCL-pinnen är förbunden med A5-stiftet i Arduino. Den HC-06 Bluetooth-modulen fungerar med hjälp av Seriell kommunikation därmed Rx-stiftet i Bluetooth är ansluten till stift D11 och Tx-stiftet på Bluetooth är ansluten till stift D10 av Arduinoen. Dessa stift D10 och D11 kommer att konfigureras som seriell stift genom att programmera Arduino. HC-05-modulen och MSP6050-modulen fungerar på + 5V och de drivs därför av Vcc-stiftet på Arduino som visas ovan.
Jag använde några anslutningstrådar för brädbrädor och byggde uppställningen över en liten brädbräda. När anslutningarna är klara ser mitt bräde ut så här nedan.
Driva din installation:
Du kan antingen driva din krets genom FTDI-programmeringskortet som jag gjorde, eller använda ett 9V-batteri eller 12V-adapter och ansluta det till Raw-stiftet på Arduino pro mini. Arduino Pro-mini har en inbyggd spänningsregulator som skulle konvertera denna externa spänningsreglerade + 5V.
Programmering av din Arduino:
När hårdvaran är klar kan vi börja programmera vår Arduino. Som vanligt finns den fullständiga koden för detta projekt längst ner på denna sida. Men för att förstå projektet bättre har jag brutit koden till små chinks och förklarat dem som steg nedan.
Det första steget skulle vara gränssnittet mellan MPU6050 och Arduino. För detta projekt kommer vi att använda biblioteket som utvecklats av Korneliusz som kan laddas ner från länken nedan
MPU6050 Liberty - Korneliusz Jarzebski
Ladda ner ZIP-filen och lägg till den i din Arduino IDE. Gå sedan vidare till Arkiv-> Exempel-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw . Detta öppnar exempelprogrammet som använder biblioteket som vi just laddade ner. Så klicka på uppladdning och vänta tills programmet laddas upp till din Arduino Pro mini. När det är klart, öppna din seriella bildskärm och ställ in din baudhastighet till 115200 och kontrollera om du får följande.
Till en början kommer alla de tre värdena att vara noll, men när du flyttar din breadboard kan du observera att dessa värden ändras. Om de ändras betyder det att din anslutning är korrekt, annars ska du kontrollera dina anslutningar. Ta lite tid här och notera hur de tre värdena Pitch Roll och Yaw varierar beroende på hur du lutar din sensor. Om du blir förvirrad trycker du på återställningsknappen på Arduino och värdena initialiseras till noll igen, luta sedan sensorn i en riktning och kontrollera vilka värden som varierar. Bilden nedan hjälper dig att förstå bättre.
Av dessa tre parametrar är vi bara intresserade av Roll and Pitch. Rullvärdet berättar om lutningen i X-axeln och Pitch-värdet berättar om lutningen i Y-axeln. Nu när vi har förstått grunderna kan vi faktiskt börja programmera Arduino för att läsa dessa värden skicka det till Arduino via Bluetooth. Låt oss som alltid börja med att inkludera alla bibliotek som behövs för detta projekt
#omfatta
Sedan initialiserar vi mjukvaruserien för Bluetooth-modulen. Detta är möjligt på grund av Software Serial-biblioteket i Arduino kan IO-stiften programmeras för att fungera som seriella stift. Här använder vi de digitala stiften D10 och D11, där D10 id Rx och D11 är Tx.
SoftwareSerial BT (10, 11); // RX, TX
Följt av det initialiserar vi variablerna och objekten som behövs för programmet och går vidare till setup () -funktionen där vi anger baudhastigheten för seriell bildskärm och Bluetooth. För HC-05 och HC-06 är överföringshastigheten 9600 så det är obligatoriskt att använda densamma. Därefter kontrollerar vi om IIC-bussen i Arduino är ansluten till MPU6050, om inte vi skriver ut ett varningsmeddelande och förblir där så länge enheten är ansluten. Därefter kalibrerar vi Gyro och ställer in tröskelvärdena med hjälp av respektive funktioner som visas nedan.
ogiltig installation () {Serial.begin (115200); BT.begin (9600); // starta Bluetooth-kommunikationen vid 9600 baudrate // Initiera MPU6050 medan (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Det gick inte att hitta en giltig MPU6050-sensor, kontrollera kabeldragning!"); fördröjning (500); } mpu.calibrateGyro (); // Kalibrera gyroskop under start mpu.setThreshold (3); // Kontrollerar känsligheten}
Raden “ mpu.calibrateGyro ();” kalibrera MPU6050 för den position den för närvarande är placerad på. Denna linje kan anropas flera gånger i programmet när MPU6050 behöver kalibreras och alla värden ska ställas in på noll. “Mpu.setThreshold (3);” den här funktionen styr hur mycket värdet varierar för rörelsen på sensorn. Ett för lågt värde kommer att öka bruset, så var försiktig när du rör dig med det här.
Inuti tomrumsslingan () läser vi upprepade gånger värdena på gyroskop och temperaturgivare beräknar värdet på tonhöjd, rulla och ge, skicka det till Bluetooth-modulen. Följande två rader läser de råa gyrovärdena och temperaturvärdet
Vektornorm = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Därefter beräknar vi tonhöjd, rullning och yaw genom att multiplicera med tidssteget och lägga till det till de tidigare värdena. En timeStep är inget annat än intervallet mellan på varandra följande avläsningar.
tonhöjd = tonhöjd + norm.YAxis * timeStep; rulla = rulla + norm.XAxis * timeStep; yaw = yaw + norm.ZAxis * timeStep;
För att förstå tidssteget bättre, låt oss ta en titt på raden nedan. Denna rad är placerad för att läsa av värdena från MPU6050 exakt med ett intervall på 10mS eller 0,01 sekund. Så vi förklarar värdet på timeStep som 0,01. Och använd raden nedan för att hålla programmet om det finns om det är mer tid kvar. (millis () - timer ()) ger den tid det tar för programmet att köra hittills. Vi subtraherar det bara med 0,01 sekunder och för återstående tid håller vi bara vårt program där med fördröjningsfunktionen.
fördröjning ((timeStep * 1000) - (millis () - timer));
När vi är klara att läsa och beräkna värdena kan vi skicka dem till vår telefon via Bluetooth. Men det finns en fångst här. Bluetooth-modulen som vi använder kan bara skicka 1 byte (8 bitar) vilket gör att vi bara kan skicka nummer från 0 till 255. Så vi måste dela upp våra värden och mappa det inom detta intervall. Detta görs med följande rader
om (rulle> -100 && rulle <100) x = karta (rulle, -100, 100, 0, 100); om (tonhöjd> -100 && tonhöjd <100) y = karta (tonhöjd, -100, 100, 100, 200); om (temp> 0 && temp <50) t = 200 + int (temp);
Som du kan räkna ut kartläggs värdet på rullen till 0 till 100 i variabeln x och tonhöjd mappas till 100 till 200 i variabeln y och temp mappas till 200 och högre till variabel t. Vi kan använda samma information för att hämta data från det vi har skickat. Slutligen skriver vi dessa värden via Bluetooth med följande rader.
BT.write (x); BT.write (y); BT.write (t);
Om du har förstått hela programmet, bläddra ner för att titta på programmet och ladda upp det till Arduino-kortet.
Förbereda Android-applikationen med bearbetning:
Android-applikationen för denna Arduino Inclinometer utvecklades med hjälp av Processing IDE. Detta liknar väldigt mycket Arduino och kan användas för att skapa systemapplikationer, Android-applikationer, webbdesign och mycket mer. Vi har redan använt bearbetning för att utveckla några av våra andra coola projekt som listas nedan
- Ping Pong Game med Arduino
- Smart telefonstyrd FM-radio med bearbetning.
- Arduino Radar System med Processing and Ultrasonic Sensor
Det är dock inte möjligt att förklara den fullständiga koden för hur du skapar denna applikation. Så du har två sätt att gå igenom detta. Antingen kan du ladda ner APK-filen från länken nedan och installera Android-applikationen direkt på din telefon. Eller bläddra nedan för att hitta hela bearbetningskoden och lär dig själv hur den fungerar
Inuti ZIP-filen kan du hitta en mapp som heter data som består av alla bilder och andra källor som ska laddas in i Android-applikationen. Raden nedan bestämmer till vilket namn Bluetooth automatiskt ska ansluta till
bt.connectToDeviceByName ("HC-06");
Inuti draw () -funktionen kommer sakerna att köras upprepade gånger här ritar vi bilderna, visar texten och animerar staplarna baserat på värdena från Bluetooth-modulen. Du kan kontrollera vad som händer i varje funktion genom att läsa igenom programmet.
void draw () // Den oändliga slingan {bakgrund (0); imageMode (CENTER); bild (logotyp, bredd / 2, höjd / 1.04, bredd, höjd / 12); load_images (); textfun (); getval (); }
Slutligen finns det en viktigare sak att förklara, kom ihåg att vi delar upp värdet på tonhöjd, rulla och temp till 0 till 255. Så här återför vi det till normala värden genom att omvänd mappa det till normala värden.
om (info <100 && info> 0) x = karta (info, 0, 100, - (bredd / 1,5) / 3, + (bredd / 1,5) / 3); // x = info; annars om (info <200 && info> 100) y = karta (info, 100, 200, - (bredd / 4.5) /0.8, + (bredd / 4.5) /0.8); // y = info; annars om (info> 200) temp = info -200; println (temp, x, y);
Det finns mycket bättre sätt att få data från en Bluetooth-modul till telefonen, men eftersom detta bara är ett hobbyprojekt har vi ignorerat dem, kan du gräva djupt om du är intresserad.
Arduino Inclinometer:
När du är redo med hårdvaran och applikationen är det dags att ha kul med det vi har byggt. Ladda upp Arduino-koden till kortet, du kan också ta bort kommentarerna på Serial.println- linjerna och kontrollera om hårdvaran fungerar som förväntat med den seriella bildskärmen. Hur som helst, det är helt frivilligt.
När koden har laddats upp startar du Android-applikationen på din mobiltelefon. Applikationen ska automatiskt anslutas till din HC-06-modul och den visar "Anslut till: HC-06" överst i applikationen enligt nedan.
Till en början kommer alla värden att vara noll utom temperaturvärdet. Detta beror på att Arduino har kalibrerat MPU-6050 för denna position som referens, nu kan du luta hårdvaran och kontrollera att värdena på mobilapplikationen också förändras tillsammans med animationen. Den fullständiga bearbetningen av ansökan finns i videon nedan. Så nu kan du placera brädbrädan var som helst och kontrollera om ytan är perfekt jämn.
Hoppas att du förstod projektet och lärde dig något användbart ur det. Om du är osäker, använd kommentarsektionen nedan eller forumen för att få det löst.