Sadržaj:

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

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

Video: Upravljanje servo uređajem pomoću MPU6050 između Arduina i ESP8266 s HC-12: 6 koraka
Video: Upravljanje koračnim motorom pomoću džojstika / Stepper motor control with joystick (forward/revers) 2024, Novembar
Anonim
Upravljanje servo uređajem pomoću MPU6050 između Arduina i ESP8266 s HC-12
Upravljanje servo uređajem 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 zasnovan na HC-12 RF modulu. Ovdje se imu (mpu6050) podaci iz arduina koriste za upravljanje servo motorom (povezan s Nodemcu -om). Ovdje se vizualizacija podataka izvodi i 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 Imu & Servo kontrole s Arduinom i ESP8266 nodemcuom.

CILJ

Cilj ovoga prilično jasnog je da kontroliramo položaj servo motora koristeći vrijednost koraka IMU -a. I zajedno se ta visina i sinhronizirani položaj motora vizualizira s Obrada.

Korak 2: Potreban hardver

NodeMCU ESP8266 12E Wifi modul

Mašina za lemljenje

Žica za kratkospojnike

MPU6050 accelo+giro

HC-12 RF moduli (par)

SG90 Servo motor

Korak 3: Krug i veze

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

Veze su direktne. Servo možete napajati sa 3.3V 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 kola izrađeni su pomoću EasyADA -e.

Korak 4: RADITE

WORKING
WORKING

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

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. poluvreme: (T) 0 do 45 => 0 do 45 (P)

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 greške. Možete to isprobati i komentirati da radi s vama

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

MPU6050 Proračun kuta nagiba

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 visinom. Zapravo, uvijek biste trebali vidjeti osu otisnutu na ploči za razbijanje.

Putem ove biblioteke ne morate se truditi oko interne elektronike čitanja specifičnih 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:

#include

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, tačno); 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 = 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 ="); // Pitch Serial.println (x); Serial.print ("AngleY ="); // Roll Serial.println (y); Serial.print ("AngleZ ="); // Zakretanje Serial.println (z); }

No, nije potrebno da ćete napisati ovoliki broj koda da biste dobili ugao. Trebali biste znati činjenice iza scene, ali korištenje biblioteke drugih ljudi vrlo je učinkovito u mnogim projektima. O ovoj imu i drugim odobrenjima možete pročitati da 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 biblioteke dobro osim ako vam ne trebaju neke osnovne promjene u funkcionalnosti IMU -a. Biblioteka 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 neobrađene podatke primamo u SerialEvent 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ćen izuzetak"); }}

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 predajnik (arduino+IMU) i prijemnik (Nodemcu+servo).

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

U ovom uputstvu, R- prijemnik i T-predajnik

Korak 6: VIDEO DEMONSTRACIJA

Sutra ću priložiti video. Pratite me da biste bili obaviješteni.

Hvala vam svima!

Preporučuje se: