Sadržaj:

Upravljanje servo upravljanjem pomoću MPU6050 između Arduina i ESP8266 s HC-12: 6 koraka
Upravljanje servo upravljanjem pomoću MPU6050 između Arduina i ESP8266 s HC-12: 6 koraka

Video: Upravljanje servo upravljanjem pomoću MPU6050 između Arduina i ESP8266 s HC-12: 6 koraka

Video: Upravljanje servo upravljanjem pomoću MPU6050 između Arduina i ESP8266 s HC-12: 6 koraka
Video: DIY DRONE testiranje autopilot moda - Bixler2, Arduino Mega, 10DOF, Ublox, XBee 2024, Srpanj
Anonim
Upravljanje servo upravljanjem pomoću MPU6050 između Arduina i ESP8266 s HC-12
Upravljanje servo upravljanjem pomoću MPU6050 između Arduina i ESP8266 s HC-12

U ovom projektu kontroliramo položaj servo motora pomoću mpu6050 i HC-12 za komunikaciju između Arduino UNO i ESP8266 NodeMCU.

Korak 1: O OVOM PROJEKTU

To je još jedan IoT projekt temeljen na HC-12 RF-modulu. Ovdje se imu (mpu6050) podaci iz arduina koriste za upravljanje servo motorom (spojenim s Nodemcuom). Ovdje se vizualizacija podataka također izvodi na arduino strani gdje se podaci o visini mpu6050 (rotacija oko osi x) vizualiziraju sa skicom za obradu (o kojoj će biti riječi kasnije). U osnovi ovaj projekt je samo malo zagrijavanje za pamćenje različitih aspekata upravljanja Imu & Servo s Arduinom i ESP8266 nodemcuom.

CILJ

Cilj ovog prilično jasnog, kontroliramo položaj servo motora koristeći vrijednost koraka IMU -a. I svi zajedno ovaj visinski i sinkronizirani položaj motora vizualizira se s Obrada.

Korak 2: Potreban hardver

NodeMCU ESP8266 12E Wifi modul

Mašina za lemljenje

Žica kratkospojnika

MPU6050 accelo+žiroskop

RF-moduli HC-12 (par)

Servo motor SG90

Korak 3: Krug i veze

Krug i veze
Krug i veze
Krug i veze
Krug i veze

Veze su naprijed. Servo možete napajati s 3,3 V vašeg Nodemcu -a. Također možete koristiti Vin za napajanje servo -a ako vaš čvor ima toliko napona na tom pinu. Ali većina Lolin ploča nema 5V na Vin -u (ovisi o proizvođaču).

Ovi dijagrami sklopova izrađeni su pomoću EasyADA -e.

Korak 4: RAD

RADNI
RADNI

Čim arduino skica počne, poslat će kut nagiba (koji se kreće od -45 do 45) na hc12 prijamnik Nodemcua koji se mapira s 0 do 180 stupnjeva servo položaja. Ovdje smo koristili kut nagiba od -45 do +45 stupnjeva tako da to možemo lako preslikati na položaj serva.

Sada razmišljate zašto možemo jednostavno koristiti metodu karte na sljedeći način:-

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

Budući da se negativni kut koji šalje odašiljač hc12 prima kao:

1. poluvrijeme: (T) 0 do 45 => 0 do 45 (R)

2. poluvrijeme: (T) -45 do -1 => 255 do 210 (R)

Dakle, morate ga mapirati na 0 do 180 as

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

Izbjegavam metodu karte zbog neke nebitne pogreške. Možete to isprobati i komentirati da radi s vama

if (val> = 0 && val <= 45) pos = karta (val, 0, 45, 90, 180); else pos = karta (val, 255, 210, 0, 90); // četvrti argument može biti 2 (možete provjeriti)

Proračun kuta nagiba MPU6050

Koristim biblioteku MPU6050_tockn koja se temelji na davanju sirovih podataka iz IMU -a.

int pitchAngle = mpu6050.getAngleX ()

Tako ćemo dobiti kut rotacije oko osi x. Kao što ste vidjeli na slici, moj imu je postavljen okomito na ploču pa nemojte brkati s pitch and roll. Zapravo, uvijek biste trebali vidjeti os otisnutu na ploči za razbijanje.

Putem ove knjižnice ne morate se opterećivati unutarnjom elektronikom čitanja određenih registara za određene operacije. samo određujete posao i gotovi ste!

Btw ako želite sami izračunati kut. To možete lako učiniti na sljedeći način:

#uključ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 (istina); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (lažno); Wire.requestFrom (MPU6050_addr, 14, istina); 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 = karta (AcX, minVal, maxVal, -90, 90); int yAng = karta (AcY, minVal, maxVal, -90, 90); int zAng = karta (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 ="); // Pitch Serial.println (x); Serial.print ("AngleY ="); // Roll Serial.println (y); Serial.print ("AngleZ ="); // Jau Serijski.println (z); }

No, nije potrebno da ćete napisati ovoliki broj koda da biste dobili kut. Trebali biste znati činjenice iza scene, ali korištenje knjižnice drugih ljudi vrlo je učinkovito u mnogim projektima. O ovoj imu i drugim odobrenjima možete pročitati kako biste dobili više filtriranih podataka sa sljedeće veze: Explore-mpu6050.

Moj arduino kôd na odašiljačkom kraju ima samo 30 redaka uz pomoć biblioteke MPU6050_tockn pa je korištenje knjižnice dobro osim ako vam ne trebaju neke temeljne promjene u funkcionalnosti IMU -a. Knjižnica pod imenom I2Cdev Jeffa Rowberga vrlo je korisna ako želite neke filtrirane podatke pomoću DMP -a (Digital Motion Processor) IMU -a.

Integracija s obradom

Ovdje se Obrada koristi za vizualizaciju rotacijskih podataka o osi x IMU-a izračunatih prema sirovim podacima koji dolaze iz MPU6050. Dolazne sirove podatke u SerialEvent primamo na sljedeći način:

void serialEvent (Serial myPort) {

inString = myPort.readString (); try {// Raščlanite 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 (Izuzetak e) {println ("Uhvaćena iznimka"); }}

Ovdje možete vidjeti vizualizaciju na slici priloženoj u ovom koraku. Podaci o položaju primljeni na kraju nodemcu -a također se vide na serijskom monitoru kao što je prikazano na slici.

Korak 5: KOD

Priložio sam github spremište. Možete ga klonirati i forkirati za upotrebu u svojim projektima.

moj_kod

Repo uključuje 2 arduino skice za odašiljač (arduino+IMU) i prijemnik (Nodemcu+servo).

I jedna skica za obradu. Označite repo zvjezdicom ako vam to pomaže u projektu.

U ovom uputstvu, R- prijemnik i T-odašiljač

Korak 6: VIDEO DEMONSTRACIJA

Sutra ću priložiti video. Pratite me da biste dobili obavijesti.

Hvala svima!

Preporučeni: