Obsah:

Ovládanie serva pomocou MPU6050 medzi Arduino a ESP8266 pomocou HC-12: 6 krokov
Ovládanie serva pomocou MPU6050 medzi Arduino a ESP8266 pomocou HC-12: 6 krokov

Video: Ovládanie serva pomocou MPU6050 medzi Arduino a ESP8266 pomocou HC-12: 6 krokov

Video: Ovládanie serva pomocou MPU6050 medzi Arduino a ESP8266 pomocou HC-12: 6 krokov
Video: Servo y termometro 2024, November
Anonim
Ovládanie serva pomocou MPU6050 medzi Arduino a ESP8266 s HC-12
Ovládanie serva pomocou MPU6050 medzi Arduino a ESP8266 s HC-12

V tomto projekte riadime polohu servomotora pomocou mpu6050 a HC-12 na komunikáciu medzi Arduino UNO a ESP8266 NodeMCU.

Krok 1: O TOMTO PROJEKTE

Je to ďalší projekt internetu vecí založený na RF-module HC-12. Tu sa údaje imu (mpu6050) z arduina používajú na ovládanie servomotora (prepojeného s Nodemcu). Tu sa vizualizácia údajov vykonáva aj na strane arduina, kde sú údaje o rozstupe mpu6050 (rotácia okolo osi x) vizualizované pomocou skici spracovania (diskutované neskôr). Tento projekt je v podstate len malou rozcvičkou na zapamätanie si rôznych aspektov ovládania Imu & Servo pomocou Arduino a ESP8266 nodemcu.

CIEĽ

Cieľ tohto celkom jasného je, Riadime polohu servomotora pomocou hodnoty tónu IMU. A všetky tieto výšky a synchronizovaná poloha motora sú vizualizované pomocou Processing.

Krok 2: Vyžaduje sa hardvér

NodeMCU ESP8266 12E Wifi modul

Nepájkovateľné nepájivé pole

Prepojovací drôt

MPU6050 accelo+gyro

RF moduly HC-12 (pár)

Servomotor SG90

Krok 3: Obvod a pripojenia

Obvod a pripojenia
Obvod a pripojenia
Obvod a pripojenia
Obvod a pripojenia

Pripojenia sú priame. Servo môžete napájať 3,3 V vášho Nodemcu. Môžete tiež použiť Vin na napájanie serva, ak má váš nodemcu na tomto kolíku toľko napätia. Väčšina dosiek Lolin však nemá na Vin 5 V (závisí od výrobcu).

Tieto schémy zapojenia sú vyrobené pomocou EasyADA.

Krok 4: PRÁCA

PRÁCA
PRÁCA

Hneď ako začne arduino skica, pošle uhol sklonu (v rozsahu od -45 do 45) do prijímača hc12 Nodemcu, ktorý sa zmapuje s polohou serva 0 až 180 stupňov. Tu sme použili uhol rozstupu od -45 do +45 stupňov, aby sme to mohli ľahko zmapovať do polohy servo.

Teraz premýšľate, prečo môžeme jednoducho použiť metódu mapy takto:-

int pos = mapa (val, -45, 45, 0, 180);

Pretože negatívny uhol odoslaný vysielačom hc12 je prijatý ako:

1. polčas: (T) 0 až 45 => 0 až 45 (R)

2. polovica: (T) -45 až -1 => 255 až 210 (R)

Musíte ho teda namapovať na 0 až 180 ako

ak (val> = 0 && val <= 45) pos = (val*2) +90; else pos = (val-210)*2;

Vyhýbam sa mapovej metóde kvôli nejakej irelevantnej chybe. Môžete to skúsiť a napísať, že to s vami 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 byť 2 (môžete skontrolovať)

Výpočet uhla rozstupu MPU6050

Používam knižnicu MPU6050_tockn, ktorá je založená na poskytovaní nespracovaných údajov z IMU.

int pitchAngle = mpu6050.getAngleX ()

Tým získame uhol natočenia okolo osi x. Ako ste videli na obrázku, moja imu je vertikálne umiestnená na doske, takže si to nezamieňajte s výškou a rolkou. V skutočnosti by ste mali vždy vidieť osu vytlačenú na oddeľovacej doske.

Prostredníctvom tejto knižnice sa nemusíte starať o vnútornú elektroniku čítania konkrétnych registrov pre konkrétnu operáciu. zadáte iba prácu a ste hotoví!

Btw, ak chcete vypočítať uhol sami. Môžete to ľahko urobiť nasledovne:

#zahrnúť

const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; neplatné nastavenie () {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 ="); // Rozstup Serial.println (x); Serial.print ("AngleY ="); // Roll Serial.println (y); Serial.print ("AngleZ ="); // Yaw Serial.println (z); }

Na získanie uhla však nie je potrebné, aby ste napísali toľko kódu. Mali by ste vedieť fakty zo zákulisia, ale používanie knižnice iných ľudí je v mnohých projektoch veľmi účinné. O tomto imu a ďalších prístupoch k získaniu viac filtrovaných údajov si môžete prečítať z nasledujúceho odkazu: Explore-mpu6050.

Môj arduino kód na vysielacom konci má iba 30 riadkov pomocou knižnice MPU6050_tockn, takže používanie knižnice je dobré, pokiaľ nepotrebujete základné zmeny funkčnosti IMU. Knižnica s názvom I2Cdev od Jeffa Rowberga je veľmi užitočná, ak chcete filtrovať údaje pomocou DMP (digitálneho pohybového procesora) IMU.

Integrácia so spracovaním

Tu sa spracovanie používa na vizualizáciu rotačných údajov okolo osi x IMU vypočítaných z nespracovaných údajov pochádzajúcich z MPU6050. Prichádzajúce nespracované údaje v SerialEvent prijímame nasledujúcim spôsobom:

void serialEvent (Serial myPort) {

inString = myPort.readString (); skúste {// analyzovať údaje // 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 (dátové reťazce [i+1]); }} else {println (inString); }}} catch (Exception e) {println ("Caught Exception"); }}

Tu môžete vidieť vizualizáciu na obrázku priloženom v tomto kroku. Údaje o polohe prijaté na konci nodemcu sú tiež zobrazené na sériovom monitore, ako je znázornené na obrázku.

Krok 5: KÓD

Pripojil som úložisko github. Môžete ho klonovať a vidlicovo používať vo svojich projektoch.

môj_kód

Repo obsahuje 2 náčrty arduino pre vysielač (arduino+IMU) a prijímač (Nodemcu+servo).

A jedna skica spracovania. Označte hviezdičkou repo, ak to pomôže vo vašom projekte.

V tomto pokyne

R- prijímač a T- vysielač

Krok 6: Demonštrácia videa

Zajtra prikladám video. Nasledujte ma a dostávajte upozornenia.

Ďakujem vám všetkým!

Odporúča: