- Szükséges anyagok:
- Kördiagramm:
- A beállítás bekapcsolása:
- Az Arduino programozása:
- Az Android alkalmazás előkészítése feldolgozással:
- Az Arduino Inclinometer működése:
Az MPU6050 egy IC 3 tengelyes gyorsulásmérő és egy 3 tengelyes giroszkóp, egyetlen egységbe egyesítve. Egy komplex feladat elvégzéséhez hőmérséklet-érzékelő és DCM is helyet kapott. Az MPU6050-et általában a Drone és más távoli robotok, például egy önkiegyensúlyozó robot építéséhez használják. Ebben a projektben megtanuljuk, hogyan kell használni az MPU6050 épített Inclinometer vagy vízmértéket. Mint tudjuk, egy inklinométerrel ellenőrizzük, hogy egy felület tökéletesen ki van-e szintezve vagy sem, ezek elérhetőek akár spritt buborékként, akár digitális mérőként. Ebben a projektben egy digitális inclinométert fogunk építeni, amely egy Android alkalmazás segítségével nyomon követhető. A távoli kijelző, mint például a mobiltelefon használatának oka az, hogy az MPU6050-től származó értékeket figyelemmel kísérhetjük anélkül, hogy meg kellene néznünk a hardvert, ez nagyon hasznos lenne, ha az MPU6050-et egy drónra vagy más elérhetetlen helyre helyeznék.
Szükséges anyagok:
- Arduino Pro-mini (5V)
- MPU6050 giroszkóp érzékelő
- HC-05 vagy HC-06 Bluetooth modul
- FTDI tábla
- Kenyérlemez
- Csatlakozó vezetékek
- Okos telefon
Kördiagramm:
Az Arduino Tilt Sensor Project teljes kapcsolási rajza alább látható. Csak három alkatrésze van, és könnyen felépíthető a kenyérlapon.
Az MPU6050 az I2C segítségével kommunikál, és ezért az SDA tű csatlakozik az Arduino A4-es tűjéhez, amely az SDA tű, az SCL tű pedig az Arduino A5 tűjéhez csatlakozik. A HC-06 Bluetooth modul a soros kommunikáció segítségével működik, ezért a Bluetooth Rx tűje csatlakozik a D11 csatlakozóhoz, a Bluetooth Tx tűje pedig az Arduino D10 tűjéhez. Ezeket a D10 és D11 tűket soros tűként konfiguráljuk az Arduino programozásával. A HC-05 modul és az MSP6050 modul + 5 V feszültséggel működik, ezért az Arduino Vcc tűjéből táplálják őket, amint azt fentebb bemutattuk.
Néhány kenyérlemez csatlakozó vezetéket használtam, és egy kis kenyérlapra építettem a berendezést. Miután a kapcsolatok elkészültek, a táblám az alábbiakban így néz ki.
A beállítás bekapcsolása:
Az áramkört az FTDI kezelőpanelen keresztül táplálhatja, ahogy én tettem, vagy használhat egy 9V-os akkumulátort vagy 12V-os adaptert, és csatlakoztathatja az Arduino pro mini Raw tűjéhez. Az Arduino Pro-mini beépített feszültségszabályozóval rendelkezik, amely átalakítja ezt a külső feszültséget + 5V-ra.
Az Arduino programozása:
Miután a hardver készen áll, elkezdhetjük az Arduino programozását. Mint mindig, a projekt teljes kódja az oldal alján található. De hogy jobban megértsem a projektet, apró chinkekre bontottam a kódot, és az alábbi lépésekként ismertettem őket.
Az első lépés az MPU6050 és az Arduino összekapcsolása lenne. Ehhez a projekthez a Korneliusz által kifejlesztett könyvtárat fogjuk használni, amely letölthető az alábbi linkről
MPU6050 Liberty - Korneliusz Jarzebski
Töltse le a ZIP fájlt, és adja hozzá az Arduino IDE-hez. Ezután menjen a Fájl-> Példák-> Arduino_MPU6050_Master -> MPU6050_gyro_pitch_roll_yaw menüpontra . Ez megnyitja a példa programot, amely az imént letöltött könyvtárat használja. Tehát kattintson a feltöltés gombra, és várja meg, amíg a program feltöltődik Arduino Pro mini készülékére. Ha ez megtörtént, nyissa meg a soros monitort, és állítsa az átviteli sebességet 115200-ra, és ellenőrizze, hogy a következőket kapja-e.
Kezdetben mindhárom érték nulla lesz, de amikor mozgatja a kenyérlapot, megfigyelheti, hogy ezek az értékek megváltoznak. Ha megváltoztatják, az azt jelenti, hogy a kapcsolatod megfelelő, különben ellenőrizd a kapcsolatot. Szánjon rá egy kis időt, vegye figyelembe, hogy a Pitch Roll és Yaw három érték hogyan változik az érzékelő dőlésmódjától függően. Ha összezavarodik, nyomja meg az Arduino reset gombját, és az értékek újra nullára inicializálódnak, majd döntse meg az érzékelőt egy irányba, és ellenőrizze, hogy mely értékek változnak. Az alábbi kép segít jobban megérteni.
E három paraméter közül csak a Roll and Pitch érdekel minket. A Roll érték az X-tengely dőléséről, a Pitch pedig az Y-tengely dőléséről árulkodik. Most, hogy megértettük az alapokat, lehetővé teszi az Arduino programozását, hogy ezeket az értékeket elolvassa, Bluetooth-on keresztül továbbítsa az Arduino-nak. Mint mindig, kezdjük azzal, hogy belefoglaljuk a projekthez szükséges összes könyvtárat
#include
Ezután inicializáljuk a szoftver modul sorozatát. Ez az Arduino-i Software Serial könyvtár miatt lehetséges, így az IO csapok soros csapként működhetnek. Itt a D10 és D11 digitális csapokat használjuk, ahol D10 id Rx és D11 Tx.
SoftwareSerial BT (10, 11); // RX, TX
Ezt követően inicializáljuk a programhoz szükséges változókat és objektumokat, és áttérünk a setup () függvényre, ahol meghatározzuk a soros monitor és a Bluetooth adatátviteli sebességét. A HC-05 és HC-06 esetében az átviteli sebesség 9600, ezért kötelező ezt használni. Ezután ellenőrizzük, hogy az Arduino IIC buszja csatlakoztatva van-e az MPU6050-hez, ha nem nyomtatunk figyelmeztető üzenetet, és ott maradunk, amíg az eszköz csatlakoztatva van. Ezt követően kalibráljuk a gyro-t és beállítjuk a küszöbértékeit a megfelelő funkciókkal az alábbiak szerint.
void setup () {Soros.kezdés (115200); BT.kezdés (9600); // indítsa el a Bluetooth kommunikációt 9600 baudrate-en // Inicializálja az MPU6050-et, míg (! mpu.begin (MPU6050_SCALE_2000DPS, MPU6050_RANGE_2G)) {Serial.println ("Nem található érvényes MPU6050 érzékelő, ellenőrizze a vezetékeket!"); késés (500); } mpu.calibrateGyro (); // kalibrálja a giroszkópot az indítás során mpu.setThreshold (3); // Irányítja az érzékenységet}
Az „ mpu.calibrateGyro ();” sor kalibrálja az MPU6050- et a pillanatnyi helyzetére. Ez a sor a program belsejében többször is meghívható, amikor az MPU6050-et kalibrálni kell, és az összes értéket nullára kell állítani. „Mpu.setThreshold (3);” ez a funkció szabályozza, hogy az érzékelő mozgásának értéke mennyire változik, a túl alacsony érték növeli a zajt, ezért légy óvatos, miközben ezen ficánkolsz.
A void loop () belsejében többször elolvassuk a Gyroscope és a Temperature sensor értékeit, kiszámoljuk a pitch, roll and yaw értékét, elküldjük a Bluetooth modulba. A következő két sor a nyers gyro-értékeket és a hőmérsékleti értékeket írja le
Vektornorm = mpu.readNormalizeGyro (); temp = mpu.readTemperature ();
Ezután kiszámoljuk a hangmagasságot, a gördülést és az ásítást úgy, hogy megszorozzuk az idő lépésével, és összeadjuk az előző értékekhez. A timeStep nem más, mint az egymást követő olvasások közötti intervallum.
hangmagasság = hangmagasság + norma. YAxis * timeStep; tekercs = tekercs + norm.XAxis * timeStep; ásítás = ásítás + norm. ZAxis * timeStep;
Hogy jobban megértsük az időbeli lépéseket, nézzük meg az alábbi sort. Ez a sor az MPU6050 értékeinek pontosan 10 mS vagy 0,01 másodperces időközönként történő leolvasására szolgál. Tehát deklaráljuk a timeStep értékét 0,01-nek. És használja az alábbi sort a program megtartásához, ha van, ha több idő van hátra. (millis () - timer ()) megadja a program végrehajtásához szükséges időt. Csak 0,01 másodperccel vonjuk ki, és a fennmaradó idő alatt csak ott tartjuk programunkat a delay funkció segítségével.
késleltetés ((timeStep * 1000) - (millis () - időzítő));
Miután befejeztük az értékek kiolvasását és kiszámítását, Bluetooth-on keresztül elküldhetjük őket a telefonunkra. De itt van egy fogás. Az általunk használt Bluetooth modul csak 1 bájtot (8 bit) képes küldeni, ami lehetővé teszi számunkra, hogy csak 0 és 255 közötti számokat küldjünk. Tehát fel kell osztanunk az értékeinket, és ezt a tartományon belül kell feltérképeznünk. Ezt a következő sorok teszik meg
if (roll> -100 && roll <100) x = térkép (roll, -100, 100, 0, 100); if (hangmagasság> -100 && hangmagasság <100) y = térkép (hangmagasság, -100, 100, 100, 200); if (temp> 0 && temp <50) t = 200 + int (temp);
Amint kitalálhatja, a tekercs értéke 0–100 értékre van leképezve az x változóba, a hangmagasság pedig 100–200 értékre van leképezve az y változóba, a hőmérséklet pedig 200-ba és ennél magasabbra a t változóba. Ugyanazokat az információkat felhasználhatjuk az adatok lekérdezéséhez abból, amit elküldtünk. Végül ezeket az értékeket a Bluetooth segítségével a következő sorok segítségével írjuk fel.
BT.write (x); BT. Írja (y); BT.ír (t);
Ha megértette a teljes programot, görgessen lefelé, hogy megnézze a programot, és töltse fel az Arduino táblára.
Az Android alkalmazás előkészítése feldolgozással:
Az Arduino Inclinometer androidos alkalmazását a Processing IDE segítségével fejlesztették ki. Ez nagyon hasonlít az Arduinóra, és felhasználható rendszeralkalmazások, Android-alkalmazások, webtervek és még sok más létrehozására. A feldolgozást már felhasználtuk néhány további, az alábbiakban felsorolt jó projektünk fejlesztéséhez
- Ping Pong játék az Arduino használatával
- Intelligens telefon által vezérelt FM rádió feldolgozással.
- Arduino radarrendszer feldolgozással és ultrahangos érzékelővel
Az alkalmazás létrehozásának teljes kódját azonban nem lehet megmagyarázni. Tehát kétféleképpen lehet ezt átvenni. Vagy letöltheti az APK fájlt az alábbi linkről, és telepítheti az android alkalmazást közvetlenül a telefonjára. Vagy görgessen alább, hogy megtalálja a teljes feldolgozási kódot, és saját maga tudja meg, hogyan működik
A ZIP fájlban található egy adat nevű mappa, amely az összes képből és egyéb forrásból áll, amelyeket be kell tölteni az android alkalmazásba. Az alábbi sor dönti el, hogy melyik névhez kell automatikusan csatlakoznia a Bluetooth-hoz
bt.connectToDeviceByName ("HC-06");
A draw () függvényben a dolgok ismételten végrehajtásra kerülnek, itt rajzoljuk a képeket, megjelenítjük a szöveget és animáljuk a sávokat a Bluetooth modul értékeinek alapján. A program végigolvasásával ellenőrizheti, hogy mi történik az egyes funkciók belsejében.
void draw () // A végtelen hurok {háttér (0); imageMode (CENTER); kép (logó, szélesség / 2, magasság / 1,04, szélesség, magasság / 12); load_images (); textfun (); getval (); }
Végül még egy fontos dolgot meg kell magyarázni, ne feledje, hogy a hangmagasság, a tekerés és a hőmérséklet értékét 0-ról 255-re osztjuk. Tehát itt ismét a normál értékekre visszahelyezzük a normál értékekre.
if (info <100 && info> 0) x = térkép (info, 0, 100, - (szélesség / 1,5) / 3, + (szélesség / 1,5) / 3); // x = info; else if (info <200 && info> 100) y = térkép (info, 100, 200, - (szélesség / 4,5) /0,8, + (szélesség / 4,5) /0,8); // y = info; else if (info> 200) temp = info -200; println (temp, x, y);
Sokkal jobb módszerek vannak arra, hogy adatokat gyűjtsünk egy Bluetooth-modulról a telefonra, de mivel ez csak egy hobbi projekt, figyelmen kívül hagytuk őket, ha érdekel, elmélyülhet.
Az Arduino Inclinometer működése:
Miután felkészült a hardverre és az alkalmazásra, itt az ideje, hogy szórakozzon az általunk építettekkel. Töltse fel az Arduino kódot a táblára, és a Serial.println sorokra vonatkozó megjegyzéseket is eltávolíthatja, és a soros monitor segítségével ellenőrizheti, hogy a hardver a várt módon működik-e. Egyébként ez teljesen opcionális.
A kód feltöltése után indítsa el az Android alkalmazást mobiltelefonján. Az alkalmazásnak automatikusan csatlakoznia kell a HC-06 moduljához, és az alkalmazás tetején megjelenik a „Csatlakozás: HC-06” felirat, az alábbiak szerint.
Kezdetben az összes érték nulla lesz, kivéve a hőmérsékleti értéket. Ennek oka, hogy az Arduino referenciaként kalibrálta az MPU-6050-et ehhez a pozícióhoz, most megdöntheti a hardvert és ellenőrizheti, hogy a mobilalkalmazás értékei is változnak-e az animációval együtt. Az alkalmazás teljes működése az alábbi videón található. Tehát most bárhová elhelyezheti a kenyérlapot, és ellenőrizheti, hogy a felület tökéletesen kiegyenlített-e.
Remélem, megértette a projektet, és valami hasznosat tanult belőle. Ha kétségei vannak, kérjük, használja az alábbi megjegyzések részt vagy a fórumokat a megoldáshoz.