Kazalo:

Nadzor servomotorja z uporabo MPU6050 med Arduinom in ESP8266 s HC-12: 6 korakov
Nadzor servomotorja z uporabo MPU6050 med Arduinom in ESP8266 s HC-12: 6 korakov

Video: Nadzor servomotorja z uporabo MPU6050 med Arduinom in ESP8266 s HC-12: 6 korakov

Video: Nadzor servomotorja z uporabo MPU6050 med Arduinom in ESP8266 s HC-12: 6 korakov
Video: Как использовать гироскоп, акселерометр, магнитометр MPU-9250 для Arduino 2024, Julij
Anonim
Upravljanje servomotorja z uporabo MPU6050 med Arduinom in ESP8266 s HC-12
Upravljanje servomotorja z uporabo MPU6050 med Arduinom in ESP8266 s HC-12

V tem projektu nadzorujemo položaj servo motorja z uporabo mpu6050 in HC-12 za komunikacijo med Arduino UNO in ESP8266 NodeMCU.

1. korak: O TEM PROJEKTU

To je še en projekt IoT, ki temelji na RF-modulu HC-12. Tu se podatki imu (mpu6050) iz arduina uporabljajo za krmiljenje servo motorja (povezanega z Nodemcu). Tukaj se vizualizacija podatkov izvede tudi na strani arduino, kjer se podatki o višini mpu6050 (rotacija okoli osi x) vizualizirajo s skico obdelave (obravnavano kasneje). V bistvu je ta projekt le malce ogrevanja za spomin na različne vidike upravljanja Imu & Servo z nodemcu Arduino in ESP8266.

CILJ

Cilj tega precej jasnega: položaj servo motorja nadziramo z uporabo višine tona IMU. In skupaj je ta korak in sinhroniziran položaj motorja vizualiziran z obdelavo.

2. korak: Potrebna je strojna oprema

NodeMCU ESP8266 12E Wifi modul

Tlačna plošča brez spajkanja

Mostična žica

MPU6050 accelo+žiroskop

RF-moduli HC-12 (par)

Servo motor SG90

3. korak: Vezje in povezave

Vezje in povezave
Vezje in povezave
Vezje in povezave
Vezje in povezave

Povezave so naravnost naprej. Servo lahko napajate z 3.3V vašega Nodemcuja. Za napajanje servomotorja lahko uporabite tudi Vin, če ima vaš nodemcu toliko napetosti na tem zatiču. Toda večina plošč Lolin nima 5V pri Vin (odvisno od proizvajalca).

Ti vezni diagrami so narejeni z uporabo EasyADA.

4. korak: DELO

DELO
DELO

Takoj, ko se skica arduino začne, bo poslala kot naklona (ki se giblje od -45 do 45) na sprejemnik hc12 v Nodemcu, ki se preslika s položajem servo od 0 do 180 stopinj. Tu smo uporabili kot nagiba od -45 do +45 stopinj, tako da ga lahko enostavno preslikamo na položaj servo.

Zdaj razmišljate, zakaj lahko preprosto uporabimo metodo zemljevida, kot sledi:-

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

Ker je negativni kot, ki ga pošilja oddajnik hc12, sprejet kot:

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

2. polčas: (T) -45 do -1 => 255 do 210 (R)

Zato ga morate preslikati na 0 do 180 as

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

Izogibam se zemljevidu zaradi neke nepomembne napake. Lahko poskusite in komentirate, da deluje z vami

if (val> = 0 && val <= 45) pos = zemljevid (val, 0, 45, 90, 180); else pos = map (val, 255, 210, 0, 90); // 4. argument je lahko 2 (lahko preverite)

Izračun kota nagiba MPU6050

Uporabljam knjižnico MPU6050_tockn, ki temelji na podajanju surovih podatkov iz IMU.

int pitchAngle = mpu6050.getAngleX ()

Tako dobimo kot vrtenja okoli osi x. Kot vidite na sliki, je moj imu postavljen navpično na ploščo, zato ga ne zamenjujte s smolo. Pravzaprav bi morali osi natisniti na plošči za prekinitev.

Skozi to knjižnico vam ni treba skrbeti za notranjo elektroniko branja določenih registrov za določeno delovanje. samo določite delo in ste končali!

Btw, če želite sami izračunati kot. To lahko preprosto storite na naslednji način:

#vključi

const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; void setup () {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, res); AcX = Wire.read () << 8 | Wire.read (); AcY = Wire.read () << 8 | Wire.read (); AcZ = Wire.read () << 8 | Wire.read (); Temp = 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 = zemljevid (AcX, minVal, maxVal, -90, 90); int yAng = zemljevid (AcY, minVal, maxVal, -90, 90); int zAng = zemljevid (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 ="); // Nadzor Serial.println (x); Serial.print ("AngleY ="); // Roll Serial.println (y); Serial.print ("AngleZ ="); // Zavijanje serijsko.println (z); }

Ni pa nujno, da boste napisali toliko kode, da boste dobili kot. Morali bi vedeti dejstva za kuliso, vendar je uporaba knjižnice drugih ljudi zelo učinkovita pri številnih projektih. O tem imu in drugih pooblastilih lahko preberete za več filtriranih podatkov na naslednji povezavi: Explore-mpu6050.

Moja koda arduino na oddajnem koncu ima le 30 vrstic s pomočjo knjižnice MPU6050_tockn, zato je uporaba knjižnice dobra, razen če ne potrebujete osnovnih sprememb v funkcionalnosti IMU. Knjižnica Jeff Rowberg z imenom I2Cdev je v veliko pomoč, če želite nekaj filtriranih podatkov z uporabo DMP (digitalni procesor gibanja) IMU.

Integracija z obdelavo

Tukaj se Processing uporablja za vizualizacijo rotacijskih podatkov o osi x IMU, izračunanih po surovih podatkih, ki prihajajo iz MPU6050. Dohodne surove podatke v SerialEvent prejemamo na naslednji način:

void serialEvent (Serial myPort) {

inString = myPort.readString (); poskusite {// Razčlenite podatke // 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 (Izjema e) {println ("Ujeta izjema"); }}

Tukaj si lahko ogledate vizualizacijo na sliki, priloženi v tem koraku. Podatki o položaju, prejeti na koncu nodemcu, so prikazani tudi na serijskem monitorju, kot je prikazano na sliki.

5. korak: KODA

Priložil sem skladišče github. Lahko ga klonirate in razcepite, da ga uporabite pri svojih projektih.

moja_koda

Repo vsebuje 2 skici arduino za oddajnik (arduino+IMU) in sprejemnik (Nodemcu+servo).

In ena skica za obdelavo. Če to pomaga pri vašem projektu, označite repo z zvezdico.

V tem navodilu, R- sprejemnik in T-oddajnik

6. korak: VIDEO DEMONSTRACIJA

Video bom priložil jutri. Sledite mi, da boste obveščeni.

Hvala vsem!

Priporočena: