Obsah:

Ovládání serva pomocí MPU6050 mezi Arduino a ESP8266 s HC-12: 6 kroků
Ovládání serva pomocí MPU6050 mezi Arduino a ESP8266 s HC-12: 6 kroků

Video: Ovládání serva pomocí MPU6050 mezi Arduino a ESP8266 s HC-12: 6 kroků

Video: Ovládání serva pomocí MPU6050 mezi Arduino a ESP8266 s HC-12: 6 kroků
Video: Arduino: Základy 01 | Seznámení s Arduinem [sub] 2024, Listopad
Anonim
Ovládání serva pomocí MPU6050 mezi Arduino a ESP8266 s HC-12
Ovládání serva pomocí MPU6050 mezi Arduino a ESP8266 s HC-12

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í

Obvod a připojení
Obvod a připojení
Obvod a připojení
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

PRACOVNÍ
PRACOVNÍ

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: