Tartalomjegyzék:

Arduino és MPU6050 alapú digitális vízmérték: 3 lépés
Arduino és MPU6050 alapú digitális vízmérték: 3 lépés

Videó: Arduino és MPU6050 alapú digitális vízmérték: 3 lépés

Videó: Arduino és MPU6050 alapú digitális vízmérték: 3 lépés
Videó: Arduino Nano and GY-521 MPU6050 3-осевой гироскоп, 3-осевой акселерометр и DMP 2024, November
Anonim
Image
Image
Az áramkör
Az áramkör

Üdvözöllek az első oktatható művemben! Remélem, hogy informatívnak találja. Kérjük, bátran küldjön visszajelzést, legyen az pozitív vagy negatív.

A projekt célja egy arduino és MPU6050 alapú digitális vízmérték létrehozása. Míg a kész terv és kód az enyém, az eredeti koncepció és a kód nagy része, amelyből dolgoztam, nem az. Nem foglalkozom plágiummal, ezért örömmel adok elismerést azoknak, akiknek az ötleteire építettem. A 2 fő ember, akit szeretnék kiáltani, a YouTuber Paul McWhorter és a DroneBot Workshop. A hozzájuk tartozó linkeket a YouTube hasznos linkjeimben, PDF -ben helyezem el. Köszönet az EEEnthusiast -nak az MPU6050 használatáról szóló informatív videóért, beleértve a modul beállítását és olvasását külső könyvtár nélkül (linkje ugyanabban a PDF -ben található).

Az általam készített projekt úgy működik, ahogy van, és tündéri pontosságú, minden bizonnyal akár 45% -ban is. Pontosan használhatja, ahogy terveztem, vagy személyre szabhatja saját ízlése szerint. Az okosabbak észre fogják venni, hogy a projektem majdnem megegyezik a DroneBot műhely által készítettvel, de biztos lehet benne, hogy jelentős különbségek vannak, különösen a szögek számítási kódja, valamint a kalibrációs értékek tárolásának lehetősége tekintetében Eeprom!

Néhány funkció az étvágy felkeltésére:

Dőlésszög és dőlésszög 0,1 fokon belül elérhető.

A giroszkóp tájolásának automatikus felismerése (vízszintes vagy függőleges)

Teljes kalibrálás, az eredményeket automatikusan az eeprom tárolja

LED kijelző -2 és +2 fok között (kódban változtatható)

Kiegészítő hangjelzés a szintről (be- és kikapcsolható repülési módban)

Kompakt áramkör, amely minimális alkatrészeket igényel

Lássunk neki.

Kellékek

Ez a projekt (ahogy van) a következő elemeket használja:

1 x Arduino nano (az enyém egy klón)

1 x MPU6050 giroszkóp/gyorsulásmérő modul

1 x LCD - 16 x 2 + I2C csatlakozás

1 x Nyomja meg a váltáshoz

1 x Piezo hangjelző

1 x zöld LED

2 x sárga LED

2 x piros LED

5 x 220 ohmos ellenállás

Különféle áthidaló kábelek

Kenyeretábla

Tápegység (az enyém 5 voltos USB tápegységet használt, ha nem csatlakozott a számítógéphez, de használhat megfelelően csatlakoztatott akkumulátort)

1. lépés: Az áramkör

Az áramkör
Az áramkör
Az áramkör
Az áramkör

Feltételezve, hogy rendelkezik az összes összetevővel, meg kell építenie a kenyértáblát.

A beállításokat útmutatóként mutatom be, de a kapcsolatok a következők:

Az Arduino D2 csap a nyomógomb 1 oldalához csatlakozik. A nyomókapcsoló másik oldala a földhöz csatlakozik

Az Arduino D3 csap a 220 ohmos ellenállás 1 oldalához csatlakozik. Az ellenállás másik oldala a piros LED annódjához csatlakozik. A piros LED katódja a földre kerül.

Az Arduino D4 csap a 220 ohmos ellenállás 1 oldalához csatlakozik. Az ellenállás másik oldala csatlakozik a sárga LED annódjához. A sárga LED katódja földel.

Az Arduino D5 csap a 220 ohmos ellenállás 1 oldalához csatlakozik. Az ellenállás másik oldala a zöld LED annódjához csatlakozik. A zöld LED katódja a földre kerül.

Az Arduino D6 csap a 220 ohmos ellenállás 1 oldalához csatlakozik. Az ellenállás másik oldala csatlakozik a sárga LED annódjához. A sárga LED katódja földel.

Az Arduino D7 csap a 220 ohmos ellenállás 1 oldalához csatlakozik. Az ellenállás másik oldala csatlakozik a piros LED annódjához. A piros LED katódja a földre kerül.

Az Arduino D8 csap a Piezo csengő egyik oldalához csatlakozik. A hangjelző másik oldala a földhöz csatlakozik.

Az Arduino A4 tű az MPU6050 és az LCD SDA csapjaihoz csatlakozik.

Az A5 Arduino csap az MPU6050 és az LCD SCL csapjaihoz csatlakozik

Az 5V teljesítmény és a Gnd az MPU6050 és az LCD esetében az Arduino Nano 5v és GND csapokból származnak.

Miután elkészült, hasonlónak kell lennie a bemutatott beállításokhoz. A blu tak -t az MPU6050 alá tettem, hogy ne mozduljon el, és az LCD -re is, hogy a kenyértábla szélén maradjon.

2. lépés: A kód

A mellékelt kód az a kód, amelyet ehhez a projekthez használtam. Az egyetlen könyvtár, amellyel problémája lehet, az

LiquidCrystal_I2C.h könyvtár, mivel ezt importáltam, amikor először kezdtem dolgozni az LCD -kkel. Sajnos néhány könyvtár ugyanazt a #include utasítást használja, de kissé eltérnek egymástól. Ha problémái vannak a sajátjával, keresse meg az Ön számára megfelelő LCD -kódot, és ennek megfelelően módosítsa a kódot. Valószínűleg csak a beállítás különbözik. Minden nyomtatási parancsnak ugyanúgy kell működnie.

Minden kódot megjegyzést fűztek hozzá, és feltéve, hogy jól tettem, lesz egy videó is, amely mindent elmagyaráz, de itt van néhány megjegyzés:

LiquidCrystal_I2C LCD (0x27, 16, 2);

A fenti kód az LCD kijelzőm beállítása. Ha a könyvtára eltérő, akkor nemcsak a könyvtárát, hanem ezt a sort is módosítania kell.

{lcd.setCursor (0, 1); lcd.print ("Vízszintes!"); orientáció = VÍZSZINTES; // Olvassa el a nyers acc és gyro adatokat az MPU-6050-ből 1000-szer (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // A gyro x eltolás hozzáadása a gyro_x_cal változóhoz gyro_x_cal += gyro_x; // Add hozzá a gyro y eltolást a gyro_y_cal változóhoz gyro_y_cal += gyro_y; // Add hozzá a gyro z eltolást a gyro_z_cal változóhoz gyro_z_cal += gyro_z; // Add hozzá az acc x eltolást az acc_x_cal változóhoz acc_x_cal += acc_x; // Add hozzá az acc y eltolást az acc_y_cal változóhoz acc_y_cal += acc_y; } // Ossza el az összes eredményt 1000 -gyel, hogy megkapja az átlagos eltolást gyro_x_cal /= 1000.0; gyro_y_cal /= 1000,0; gyro_z_cal /= 1000,0; acc_x_cal /= 1000,0; acc_y_cal /= 1000,0; horizontonalCalibration = 255; eeprom_cím = 0; EEPROM.put (eeprom_cím, horizontonalCalibration); eeprom_cím += sizeof (int); EEPROM.put (eeprom_cím, gyro_x_cal); eeprom_cím += sizeof (float); EEPROM.put (eeprom_cím, gyro_y_cal); eeprom_cím += sizeof (float); EEPROM.put (eeprom_cím, gyro_z_cal); eeprom_cím += sizeof (float); EEPROM.put (eeprom_cím, acc_x_cal); eeprom_cím += sizeof (float); EEPROM.put (eeprom_cím, acc_y_cal); eeprom_cím += sizeof (float); // Megjegyzés: a gravitáció miatt nem tárolunk eltolást az acc_z számára! késleltetés (500); }

A fenti kódblokk végrehajtja a kalibrálási rutint. Ez a kód a vízszintes kalibrálásra szolgál. A függőleges kalibráláshoz közel azonos kód van (vegye figyelembe, a kód tudja, hogy az MPU6050 vízszintesen vagy függőlegesen van felszerelve!). MPU6050, 1000 -szer olvasható. a megfelelő értékeket halmozottan hozzáadjuk, majd elosztjuk 1000 -el, hogy egy átlagos „eltolási” értéket kapjunk. Ezeket az értékeket a Nano eeprom tárolja. Minden vízszintes kalibrálási érték a 0 eeprom címtől kezdődően tárolódik. Minden függőleges érték kezdettől a 24 eeprom címen kerül tárolásra. A kalibrálást teljesen vízszintes felületen KELL elvégezni, különben semmit sem jelent.

/ * * A következő néhány sor feldolgozza a nyers adatokat, hogy azokat szögekké alakítsa át, amelyek az LCD -re és a LED -ekre továbbíthatók. * A 4096 érték, amelyre a gyorsulási adatok fel vannak osztva, az MPU6050 adatlapjából származik, és a mintavételi gyakoriságon alapul. * A 9.8 értéke gravitáció. * Az atan2 függvény a matematikai modulból származik, és a szögek kiszámítására szolgál a megadott adatokból /2/3.141592656 * 360; // Nyers adatok phiM = -atan2 ((acc_y/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // Nyers adatok dt = (millis ()-millisOld)/1000.; millisOld = millis (); / * * Ez a szakasz a giroszkóp adatait használja a rendszer reagálóképességének javítására * a 65,5 értéket, amelyre a giroszkóp adatai vannak osztva, az MPU6050 adatlapból veszik, és a mintavételi arányon alapul */ theta = (theta+(gyro_y/ 65,5)*dt)*. 96 + thetaM*.04; // Aluláteresztő szűrő phi = (phi + (gyro_x/65,5)*dt)*. 96 + phiM*.04; // Aluláteresztő szűrő

A fenti kód az, ami kiszámítja a szögeket. Remélhetőleg a megjegyzések adnak egy kis betekintést a működésébe, de a részletes magyarázatért nézze meg Paul McWhorters videóját, amely a mellékelt PDF -ben található. Azt mondom azonban, hogy megváltoztathatja a giroszkóp és a gyorsulásmérő mintavételi gyakoriságát (ez a beállítás alján, a kód alján található MPU6050 szubrutinban történik). Ha megváltoztatja a mintavételi gyakoriságot, akkor azt is meg kell változtatnia, hogy a nyers adatok hányadosa van osztva. A gyorsulásmérő adataihoz az aktuális érték 4096. A giroszkóp esetében az aktuális érték 65,5.

Tekintse meg a mellékelt adatlapokat és az EEEntusiast videóját (link a mellékelt PDF -ben), ahol részletesebb információkat talál a mintavételi és eltolási értékek megtalálásáról.

3. lépés: Következő lépések

Ekkor már remélhetőleg elkészült ez a projekt, de mi lesz most?

Először is, miért nem építed fel egy vízmértékre, amelyet használhatsz. Vásárolhat egy olcsó vízmértéket (győződjön meg róla, hogy a doboz típusa), amelyet adaptálhat, vagy ha rendelkezik a készlettel, nyomtassa ki a saját szintjét/dobozát.

Esetleg játsszon a giroszkóp és a gyorsulásmérő mintavételi gyakoriságával, hogy lássa, jobban működnek -e az egyik ütemnél, mint a másiknál.

Próbálja tovább finomítani a kódot. Például jelenleg 45 fokon túl a megadott szög finoman szólva is durva. Van rá mód?

Ha bármilyen kérdése van, bármennyire egyszerűnek is tűnik, tegye fel. Ha tudok segíteni, segítek.

Ha tetszik ez az oktatható, kérlek nyomj egy lájkot, hogy tudjam.

Ha ezt elkészíti, kérem, mutassa meg (különösen, ha működő tokban van).

KÖSZÖNÖM

Ajánlott: