Obsah:
- Krok 1: O TOMTO PROJEKTU
- Krok 2: Je vyžadován hardware
- Krok 3: Obvod a připojení
- Krok 4: PRÁCE
- Krok 5: KÓD
- Krok 6: DEMONSTRACE VIDEA
Video: Ovládání serva pomocí MPU6050 mezi Arduino a ESP8266 s HC-12: 6 kroků
2024 Autor: John Day | [email protected]. Naposledy změněno: 2024-01-30 08:21
V tomto projektu řídíme polohu servomotoru pomocí mpu6050 a HC-12 pro komunikaci mezi Arduino UNO a ESP8266 NodeMCU.
Krok 1: O TOMTO PROJEKTU
Jedná se o další projekt IoT založený na RF-modulu HC-12. Zde jsou data imu (mpu6050) z arduina použita k ovládání servomotoru (spojeného s Nodemcu). Zde se vizualizace dat provádí také na straně arduina, kde jsou data rozteče mpu6050 (rotace kolem osy x) vizualizována pomocí skici zpracování (diskutováno dále). V zásadě je tento projekt jen malou rozcvičkou pro zapamatování různých aspektů ovládání Imu & Servo pomocí nodemcu Arduino a ESP8266.
OBJEKTIVNÍ
Cíl tohoto docela jasného, Řídíme polohu servomotoru pomocí hodnoty rozteče IMU. A dohromady je tato rozteč a synchronizovaná poloha motoru vizualizována pomocí Processing.
Krok 2: Je vyžadován hardware
NodeMCU ESP8266 12E Wifi modul
Nepájivá deska
Propojovací drát
MPU6050 accelo+gyro
Moduly RF HC-12 (pár)
Servomotor SG90
Krok 3: Obvod a připojení
Spojení jsou přímá. Servo můžete napájet 3,3 V vašeho Nodemcu. Můžete také použít Vin k napájení serva, pokud má váš nodemcu na tomto pinu tolik napětí. Ale většina desek Lolin nemá na Vin 5 V (závisí na výrobci).
Tato schémata zapojení jsou vytvořena pomocí EasyADA.
Krok 4: PRÁCE
Jakmile skica Arduina začne, odešle úhel stoupání (který se pohybuje od -45 do 45) do přijímače hc12 Nodemcu, který bude mapován s polohou servo 0 až 180 stupňů. Zde jsme použili úhel stoupání od -45 do +45 stupňů, abychom to mohli snadno namapovat do polohy Servo.
Nyní přemýšlíte, proč můžeme jednoduše použít metodu mapy takto:-
int pos = mapa (val, -45, 45, 0, 180);
Protože negativní úhel vyslaný vysílačem hc12 je přijímán jako:
1. poločas: (T) 0 až 45 => 0 až 45 (R)
2. polovina: (T) -45 až -1 => 255 až 210 (R)
Musíte to tedy namapovat na 0 až 180 jako
if (val> = 0 && val <= 45) pos = (val*2) +90; else pos = (val-210)*2;
Vyhýbám se metodě mapy kvůli nějaké irelevantní chybě. Můžete to zkusit a napsat, že to s vámi funguje
if (val> = 0 && val <= 45) pos = mapa (val, 0, 45, 90, 180); else pos = mapa (val, 255, 210, 0, 90); // 4. argument může být 2 (můžete zkontrolovat)
Výpočet úhlu stoupání MPU6050
Používám knihovnu MPU6050_tockn, která je založena na rozdávání nezpracovaných dat z IMU.
int pitchAngle = mpu6050.getAngleX ()
Tím získáme úhel otočení kolem osy x. Jak jste viděli na obrázku, moje imu je svisle umístěno na prkénku, takže si to nezaměňujte s pitch and roll. Ve skutečnosti byste měli vždy vidět osu vytištěnou na oddělovací desce.
Prostřednictvím této knihovny se nemusíte starat o vnitřní elektroniku čtení konkrétních registrů pro konkrétní operaci. zadáte pouze práci a máte hotovo!
Btw, pokud chcete vypočítat úhel sami. Můžete to snadno provést následujícím způsobem:
#zahrnout
const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; neplatné nastavení () {Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (true); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (false); Wire.requestFrom (MPU6050_addr, 14, true); AcX = Wire.read () << 8 | Wire.read (); AcY = Wire.read () << 8 | Wire.read (); AcZ = Wire.read () << 8 | Wire.read (); Teplota = Wire.read () << 8 | Wire.read (); GyroX = Wire.read () << 8 | Wire.read (); GyroY = Wire.read () << 8 | Wire.read (); GyroZ = Wire.read () << 8 | Wire.read ();
int xAng = mapa (AcX, minVal, maxVal, -90, 90); int yAng = mapa (AcY, minVal, maxVal, -90, 90); int zAng = mapa (AcZ, minVal, maxVal, -90, 90); x = RAD_TO_DEG * (atan2 (-yAng, -zAng)+PI); y = RAD_TO_DEG * (atan2 (-xAng, -zAng)+PI); z = RAD_TO_DEG * (atan2 (-yAng, -xAng)+PI); Serial.print ("AngleX ="); // Rozteč Serial.println (x); Serial.print ("AngleY ="); // Roll Serial.println (y); Serial.print ("AngleZ ="); // Vybočení Serial.println (z); }
Ale není nutné, abyste napsali tolik kódu, abyste získali úhel. Měli byste znát fakta za scénou, ale používání knihovny jiných lidí je v mnoha projektech velmi efektivní. O tomto imu a dalších přístupech si můžete přečíst další filtrovaná data z následujícího odkazu: Explore-mpu6050.
Můj arduino kód na vysílacím konci má pouze 30 řádků pomocí knihovny MPU6050_tockn, takže použití knihovny je dobré, pokud nepotřebujete základní změny ve funkcích IMU. Knihovna s názvem I2Cdev od Jeffa Rowberga je velmi užitečná, pokud chcete filtrovat data pomocí DMP (Digital Motion Processor) IMU.
Integrace se zpracováním
Zde je zpracování použito pro vizualizaci rotačních dat kolem osy x IMU vypočtených podle nezpracovaných dat pocházejících z MPU6050. Příchozí nezpracovaná data v SerialEvent přijímáme následujícím způsobem:
void serialEvent (Serial myPort) {
inString = myPort.readString (); zkuste {// analyzovat data // println (inString); String dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i+1]); }} else {println (inString); }}} catch (Exception e) {println ("Caught Exception"); }}
Zde můžete vidět vizualizaci na obrázku připojeném v tomto kroku. Data o poloze přijatá na konci nodemcu jsou také vidět na sériovém monitoru, jak je znázorněno na obrázku.
Krok 5: KÓD
Připojil jsem úložiště github. Můžete jej klonovat a vidličkovat a používat ve svých projektech.
můj_kód
Repo obsahuje 2 skici arduino pro vysílač (arduino+IMU) a přijímač (Nodemcu+Servo).
A jedna skica zpracování. Pokud to ve vašem projektu pomůže, označte repo.
V tomto pokynu
R- přijímač a T- vysílač
Krok 6: DEMONSTRACE VIDEA
Video připojím zítra. Sledujte mě a dostávejte upozornění.
Děkuji vám všem!
Doporučuje:
Ovládání 2 serva pomocí analogového joysticku: 5 kroků (s obrázky)
Ovládání 2 serva pomocí analogového joysticku: Ahoj lidi, toto je můj první návod a v tomto příspěvku sdílím, jak pomocí analogového joysticku ovládat serva pomocí Arduino UNO. Pokusím se to vysvětlit co nejjednodušeji, doufám, že se vám to líbí to
Ovládání serva Hexapod Arduino Pololu Maestro: 11 kroků
Hexapod Arduino Pololu Maestro Servo Controll: Nach dem mein erster Versuch mit einem Hexapod, daran gescheitert war das die servos zu schwach waren jetzt ein neuer Versuch mit mit 10Kg Servos aus HK. Ausserdem habe ich mich für ein neuen Sevocontroller von Pololu entschieden
Ovládání jasu Ovládání LED na základě PWM pomocí tlačítek, Raspberry Pi a Scratch: 8 kroků (s obrázky)
Ovládání jasu Ovládání LED na základě PWM pomocí tlačítek, Raspberry Pi a Scratch: Zkoušel jsem najít způsob, jak vysvětlit, jak PWM funguje u mých studentů, a tak jsem si dal za úkol zkusit ovládat jas LED pomocí 2 tlačítek - jedno tlačítko zvyšuje jas LED a druhé jej stmívá. Programovat
Rádiové ovládání RF 433MHZ pomocí HT12D HT12E - Vytvoření dálkového ovládání RF pomocí HT12E a HT12D s 433 MHz: 5 kroků
Rádiové ovládání RF 433MHZ pomocí HT12D HT12E | Výroba dálkového ovládání RF pomocí HT12E a HT12D s 433 MHz: V tomto návodu vám ukážu, jak vytvořit RADIO dálkové ovládání pomocí přijímače přijímače 433 MHz s kódováním HT12E a IC dekodér HT12D. V tomto instruktážním programu budete moci odesílat a přijímat data pomocí velmi levných KOMPONENTŮ LIKE: HT
Ovládání zařízení pomocí hlasového ovládání pomocí NodeMCU: 7 kroků (s obrázky)
Ovládání zařízení pomocí hlasového ovládání pomocí NodeMCU: Chci jen pozdravit všechny, toto je poprvé, co píšu instruktážní projekt. Angličtina není můj rodný jazyk, takže se pokusím udělat co nejkratší a nejsrozumitelnější. Ovládání zařízení hlasovým příkazem není nic zvláštního