Obsah:
Video: Digitální vodováha založená na Arduinu a MPU6050: 3 kroky
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:18
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
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:
Digitální vodováha s křížovým laserem: 15 kroků (s obrázky)
Digitální úroveň s křížovým laserem: Ahoj všichni, dnes vám ukážu, jak vytvořit digitální úroveň s volitelným integrovaným křížovým laserem. Asi před rokem jsem vytvořil digitální multi-nástroj. Přestože tento nástroj nabízí mnoho různých režimů, pro mě nejběžnější a nejpoužívanější
DIY Lab - HD centrifuga založená na Arduinu: 3 kroky
DIY Lab - HD centrifuga založená na Arduinu: PT // Konstrukce hlavní centrifugy s využitím HD velho com ovládající a snižující rychlost základny Arduino. CS // Postavili jsme odstředivku pomocí starého HD s řízením rychlosti na základě Arduina
DIY digitální vodováha: 5 kroků (s obrázky)
DIY Digital Spirit Level: V tomto projektu se blíže podíváme na integrované obvody akcelerometru a zjistíme, jak je můžeme použít s Arduinem. Poté zkombinujeme takový integrovaný obvod s několika doplňkovými komponentami a 3D tištěným pouzdrem, abychom vytvořili digitální
Meteostanice založená na Arduinu: 9 kroků
Meteostanice založená na Arduinu: Hardwarové součásti systému se skládají ze senzoru vlhkosti a teploty, atmosférického tlaku, snímače nadmořské výšky, kompasu, senzoru detekce světla, hodinového modulu, modulu Secure digital card (SD card), vývojové desky Arduino mega a LCD. A de
Stolní pinball s využitím technologie Evive- vestavěná forma založená na Arduinu: 18 kroků (s obrázky)
Stolní Pinball Machine využívající Evive- integrovaná platforma založená na Arduinu: Další víkend, další vzrušující hra! A tentokrát to není nikdo jiný než oblíbená arkádová hra všech - Pinball! Tento projekt vám ukáže, jak si snadno vyrobit svůj vlastní stroj Pinball doma. Vše, co budete potřebovat, jsou komponenty z evive