Obsah:

Digitální vodováha založená na Arduinu a MPU6050: 3 kroky
Digitální vodováha založená na Arduinu a MPU6050: 3 kroky

Video: Digitální vodováha založená na Arduinu a MPU6050: 3 kroky

Video: Digitální vodováha založená na Arduinu a MPU6050: 3 kroky
Video: Rozbalení digitální vodováhy IGM o délce 400 mm 📏 najdete na našem e-shopu 🛒 #igmtools #vodovaha 2024, Listopad
Anonim
Image
Image
Okruh
Okruh

Vítejte u mé vůbec první instruktáže! Doufám, že vám to přijde poučné. Neváhejte nám zanechat zpětnou vazbu, ať už pozitivní nebo negativní.

Tento projekt má vytvořit digitální vodováhu na bázi arduina a MPU6050. Zatímco hotový design a kód je můj, původní koncept a velká část kódu, ze kterého jsem pracoval, nejsou. Nejsem na plagiátorství, takže jsem více než šťastný, že mohu ocenit myšlenky, na kterých jsem stavěl. 2 hlavní lidé, na které bych chtěl křičet, jsou Paul McWhorter a DroneBot Workshop společnosti YouTuber. Odkazy na ně vkládám do svých užitečných odkazů na youtube ve formátu PDF. Děkujeme také EEEnthusiast za jeho informativní video o používání MPU6050 včetně nastavení a čtení z modulu bez externí knihovny (jeho odkaz je ve stejném PDF).

Projekt, který jsem vytvořil, funguje „tak, jak je“a je pohádkově přesný, určitě až 45% v obou směrech. Můžete ji použít přesně tak, jak jsem ji navrhl, nebo si ji můžete přizpůsobit podle svého vkusu. Ti bystřejší z vás si všimnou, že můj projekt vypadá téměř shodně s tím, který vyrobila dílna DroneBot, ale buďte si jisti, že existují značné rozdíly, zejména pokud jde o kód pro výpočet úhlů, plus možnost ukládat kalibrační hodnoty do Eeprom!

Některé funkce, které povzbudí vaši chuť k jídlu:

Úhly rozteče a rolování jsou k dispozici v rozmezí 0,1 stupně.

Automatická detekce orientace gyro jednotky (horizontální nebo vertikální)

Plná kalibrace s výsledky automaticky uloženými do eeprom

LED indikace od -2 do +2 stupňů (lze změnit v kódu)

Další zvuková indikace úrovně (lze zapnout/vypnout za běhu)

Kompaktní obvod vyžadující minimum komponent

Začněme.

Zásoby

Tento projekt (jak je) používá následující položky:

1 x Arduino nano (můj je klon)

1 x modul gyroskopu/akcelerometru MPU6050

1 x LCD - 16 x 2 + připojení I2C

1 x Přepínač Push to make

1 x Piezo bzučák

1 x zelená LED

2 x žluté LED diody

2 x červené LED diody

Rezistory 5 x 220 ohmů

Různé propojovací kabely

Prkénko

Napájení (můj používal 5v USB napájecí banku, když není připojen k mému počítači, ale můžete použít vhodně připojenou baterii)

Krok 1: Okruh

Okruh
Okruh
Okruh
Okruh

Za předpokladu, že máte všechny komponenty, budete si muset postavit prkénko.

Své nastavení zobrazuji jako průvodce, ale připojení jsou následující:

Arduino pin D2 se připojuje k 1 straně spínače. Druhá strana spínače se připojuje k zemi

Arduino pin D3 se připojuje na 1 stranu rezistoru 220 ohmů. Druhá strana rezistoru se připojuje k anodě červené LED. Katoda červené LED jde na zem.

Arduino pin D4 se připojuje na 1 stranu rezistoru 220 ohmů. Druhá strana rezistoru se připojuje k anodě žluté LED. Katoda žluté LED jde na zem.

Arduino pin D5 se připojuje k 1 straně rezistoru 220 ohmů. Druhá strana rezistoru se připojuje k anodě zelené LED. Katoda zelené LED jde na zem.

Arduino pin D6 se připojuje na 1 stranu rezistoru 220 ohmů. Druhá strana rezistoru se připojuje k anodě žluté LED. Katoda žluté LED jde na zem.

Arduino pin D7 se připojuje na 1 stranu rezistoru 220 ohmů. Druhá strana rezistoru se připojuje k anodě červené LED. Katoda červené LED jde na zem.

Arduino pin D8 se připojuje k jedné straně bzučáku Piezo. Druhá strana bzučáku se připojuje k zemi.

Arduino pin A4 se připojuje k pinům SDA na MPU6050 A LCD.

Arduino pin A5 se připojuje k pinům SCL na MPU6050 A LCD

Napájení 5v a Gnd pro MPU6050 a LCD pochází z pinů Arduino Nano 5v a GND.

Po dokončení by měl být podobný mému zobrazenému nastavení. Dal jsem blu tak pod MPU6050, aby se zastavil pohyb, a také na LCD, aby byl na okraji prkénka.

Krok 2: Kód

Připojený kód je kód, který jsem použil pro tento projekt. Jediná knihovna, se kterou můžete mít problém, je

Knihovna LiquidCrystal_I2C.h, jak jsem ji importoval, když jsem poprvé začal pracovat s LCD. Bohužel existuje několik knihoven, které používají stejný příkaz #include, ale jsou mírně odlišné. Pokud máte problémy s vaším, najděte jiný kód LCD, který vám vyhovuje, a podle toho jej změňte. Je pravděpodobné, že se liší pouze nastavení. Všechny příkazy pro tisk by měly fungovat stejně.

Celý kód byl okomentován a za předpokladu, že jsem to udělal správně, bude také video vysvětlující vše, ale zde je několik bodů, které je třeba poznamenat:

LiquidCrystal_I2C lcd (0x27, 16, 2);

Výše uvedený kód je nastavení pro můj LCD. Pokud je vaše knihovna jiná, možná budete muset změnit nejen svou knihovnu, ale i tento řádek.

{lcd.setCursor (0, 1); lcd.print ("Horizontální!"); orientace = HORIZONTÁLNÍ; // 1000krát přečtěte surová acc a gyro data z MPU-6050 pro (int cal_int = 0; cal_int <1000; cal_int ++) {read_mpu_6050_data (); // Přidejte gyro x offset do proměnné gyro_x_cal gyro_x_cal += gyro_x; // Přidejte offset gyro y do proměnné gyro_y_cal gyro_y_cal += gyro_y; // Přidejte offset gyro z do proměnné gyro_z_cal gyro_z_cal += gyro_z; // Přidání ofsetu acc x do proměnné acc_x_cal acc_x_cal += acc_x; // Přidání ofsetu y y do proměnné acc_y_cal acc_y_cal += acc_y; } // Rozdělením všech výsledků na 1000 získáte průměrný offset 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; horizonalCalibration = 255; eeprom_address = 0; EEPROM.put (eeprom_address, horizonalCalibration); eeprom_address += sizeof (int); EEPROM.put (eeprom_address, gyro_x_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, gyro_y_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, gyro_z_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, acc_x_cal); eeprom_address += sizeof (float); EEPROM.put (eeprom_address, acc_y_cal); eeprom_address += sizeof (float); // Všimněte si, že neukládáme ofset pro acc_z, kvůli gravitaci! zpoždění (500); }

Výše uvedený blok kódu se spustí do kalibrační rutiny. Tento kód je pro horizontální kalibraci. Pro vertikální kalibraci existuje téměř stejný kód (kód ví, zda je váš MPU6050 namontován vodorovně nebo svisle!). MPU6050, je přečteno 1000krát. kumulativně se sčítají příslušné hodnoty a poté se dělí 1000, aby se získala průměrná „offsetová“hodnota. Tyto hodnoty jsou poté uloženy do Nano eeprom. Všechny hodnoty horizontální kalibrace jsou uloženy počínaje eepromovou adresou 0. Všechny svislé hodnoty jsou uloženy počínaje adresou eeprom 24. Kalibrace MUSÍ být provedena na zcela rovném povrchu, jinak nic neznamenají.

/ * * Několik následujících řádků zpracuje nezpracovaná data, aby je změnila na úhly, které lze vyvést na LCD a LED diody. * Hodnota 4096, kterou jsou data zrychlení rozdělena, je převzata z datového listu MPU6050 a je založena na vzorkovací frekvenci. * Hodnota 9,8 je gravitace * Funkce atan2 je z matematického modulu a slouží k výpočtu úhlů z daných dat */thetaM = -atan2 ((acc_x/4096,0)/9,8, (acc_z/4096,0)/9,8) /2/3.141592656 * 360; // nezpracovaná data phiM = -atan2 ((acc_y/4096.0) /9.8, (acc_z/4096.0) /9.8) /2/3.141592656 * 360; // Nezpracovaná data dt = (millis ()-millisOld)/1000.; millisOld = millis (); / * * Tato část používá gyroskopická data, aby systém lépe reagoval * hodnota 65,5, kterou jsou gyroskopická data rozdělena, je převzata z datového listu MPU6050 a vychází ze vzorkovací frekvence */ theta = (theta+(gyro_y/ 65,5)*dt)*. 96 + thetaM*, 0,04; // Dolní propust phi = (phi + (gyro_x/65,5)*dt)*. 96 + phiM*.04; // Nízkoprůchodový filtr

Výše uvedený kód je věc, která vypočítává úhly. Naštěstí komentáře poskytnou malý přehled o tom, jak to funguje, ale pro hloubkové vysvětlení se podívejte na video Paula McWhorters, na které je odkaz v přiloženém PDF. Řeknu však, že můžete změnit vzorkovací frekvenci pro gyroskop a akcelerometr (což se provádí v podprogramu nastavení MPU6050 v dolní části mého kódu). Pokud změníte vzorkovací frekvenci, musíte také změnit, o kolik se dělí nezpracovaná data. Pro data akcelerometru je aktuální hodnota 4096. Pro gyroskop je aktuální hodnota 65,5.

Podrobnější informace o tom, jak se nacházejí hodnoty vzorkování a ofset, najdete v přiložených datových listech a videu od EEEntusiast (odkaz v přiloženém PDF).

Krok 3: Další kroky

Do tohoto bodu snad tento projekt provedeme, ale co teď?

Za prvé, proč to vlastně nevybudovat do vodováhy, kterou můžete použít. Můžete si koupit levnou vodováhu (ujistěte se, že je to typ krabice), kterou můžete přizpůsobit, nebo pokud máte sadu, vytiskněte si vlastní úroveň/krabici.

Možná si zahrajte se vzorkovacími frekvencemi gyroskopu a akcelerometru, abyste zjistili, zda fungují lépe s jednou rychlostí než s jinou.

Zkuste kód dále upřesnit. Například v současné době, nad 45 stupňů, je uvedený úhel přinejmenším hrubý. Jde to nějak obejít?

Pokud máte nějaké otázky, bez ohledu na to, jak jednoduché se mohou zdát, zeptejte se. Pokud mohu pomoci, udělám.

Pokud se vám tento návod líbí, dejte mu lajk, ať vím.

Pokud to uděláte, ukažte mi to (zvláště pokud je to v pracovním případě).

DĚKUJI

Doporučuje: