Cuprins:
- Pasul 1: DESPRE ACEST PROIECT
- Pasul 2: hardware necesar
- Pasul 3: Circuit și conexiuni
- Pasul 4: LUCRU
- Pasul 5: COD
- Pasul 6: DEMOSTRARE VIDEO
Video: Controlul Servo-ului Utilizarea MPU6050 Între Arduino și ESP8266 Cu HC-12: 6 Pași
2024 Autor: John Day | [email protected]. Modificat ultima dată: 2024-01-30 11:44
În acest proiect, controlăm poziția unui servomotor utilizând mpu6050 și HC-12 pentru comunicarea între Arduino UNO și ESP8266 NodeMCU.
Pasul 1: DESPRE ACEST PROIECT
Este un alt proiect IoT bazat pe modulul RF HC-12. Aici, datele imu (mpu6050) de la arduino sunt utilizate pentru a controla servomotorul (conectat cu Nodemcu). Aici, vizualizarea datelor se efectuează și pe partea arduino, unde datele pitch pitch mpu6050 (rotație în jurul axei x) sunt vizualizate cu o schiță de procesare (discutată mai târziu). Practic, acest proiect este doar un pic de încălzire pentru amintirea diferitelor aspecte ale controlului Imu & Servo cu Arduino și ESP8266 nodemcu.
OBIECTIV
Obiectivul acestui lucru este destul de clar: controlăm poziția motorului servo folosind valoarea pitch a IMU. Și împreună, această poziție a motorului și a sincronizării este vizualizată cu Procesare.
Pasul 2: hardware necesar
NodeMCU ESP8266 12E Modul Wifi
Pană de sudură fără sudură
Sârmă jumper
MPU6050 accelo + giroscop
Module RF HC-12 (pereche)
Servomotor SG90
Pasul 3: Circuit și conexiuni
Conexiunile sunt directe. Puteți alimenta servo cu 3,3V din Nodemcu. Puteți utiliza, de asemenea, Vin pentru a alimenta servo-ul dacă nodemcu-ul dvs. are atât de multă tensiune pe acel pin. Dar majoritatea plăcilor Lolin nu au 5V la Vin (depinde de producător).
Aceste diagrame de circuit sunt realizate folosind EasyADA.
Pasul 4: LUCRU
De îndată ce schița arduino a început, va trimite unghiul de înălțime (care variază de la -45 la 45) către receptorul hc12 al Nodemcu care este mapat cu poziția Servo de la 0 la 180 de grade. Aici am folosit unghiul de înălțime de la -45 la +45 de grade, astfel încât să îl putem mapa cu ușurință în poziția Servo.
Acum vă gândiți de ce putem folosi pur și simplu metoda hărții după cum urmează: -
int pos = hartă (val, -45, 45, 0, 180);
Deoarece unghiul negativ trimis de emițătorul hc12 este primit ca:
Prima jumătate: (T) 0 la 45 => 0 la 45 (R)
A doua jumătate: (T) -45 până la -1 => 255 până la 210 (R)
Deci, trebuie să o mapezi de la 0 la 180 ca
if (val> = 0 && val <= 45) pos = (val * 2) +90; else pos = (val-210) * 2;
Evit metoda hărții din cauza unei erori irelevante. Puteți încerca și comenta că funcționează împreună cu dvs.
if (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); else pos = hartă (val, 255, 210, 0, 90); // al patrulea argument poate fi 2 (puteți verifica)
MPU6050 Pitch Angle Calcul
Folosesc biblioteca MPU6050_tockn care se bazează pe oferirea de date brute de la IMU.
int pitchAngle = mpu6050.getAngleX ()
Acest lucru ne va aduce unghiul de rotație în jurul axei x. După cum ați văzut în figură, imu-ul meu este așezat vertical pe panou, așa că nu vă confundați cu pitch and roll. De fapt, ar trebui să vedeți întotdeauna axa imprimată pe placa de separare.
Prin această bibliotecă, nu trebuie să vă deranjați despre electronica internă a citirii registrelor specifice pentru o funcționare specifică. specifici doar treaba și ai terminat!
Btw dacă doriți să calculați singur unghiul. Puteți face acest lucru cu ușurință după cum urmează:
#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 (adevărat); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (fals); Wire.requestFrom (MPU6050_addr, 14, adevărat); 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 = hartă (AcX, minVal, maxVal, -90, 90); int yAng = hartă (AcY, minVal, maxVal, -90, 90); int zAng = hartă (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 ="); // Yaw Serial.println (z); }
Dar, nu este necesar să scrieți atât de mult cod pentru a obține unghiul. Ar trebui să știți faptele din spatele scenei, dar utilizarea bibliotecii altor persoane este foarte eficientă în multe proiecte. Puteți citi despre acest imu și alte aplicații pentru a obține mai multe date filtrate de pe următorul link: Explore-mpu6050.
Codul meu arduino de la capătul de transmisie are doar 30 de linii cu ajutorul bibliotecii MPU6050_tockn, astfel încât utilizarea unei biblioteci este bună, cu excepția cazului în care nu aveți nevoie de unele modificări de bază ale funcționalității IMU. O bibliotecă numită I2Cdev de Jeff Rowberg este foarte utilă dacă doriți niște date filtrate folosind DMP (procesor digital de mișcare) al IMU.
Integrare cu procesare
Aici Procesarea este utilizată pentru vizualizarea datelor de rotație despre axa x a IMU așa cum sunt calculate de datele brute provenite de la MPU6050. Primim datele brute primite în SerialEvent în modul următor:
void serialEvent (Serial myPort) {
inString = myPort.readString (); încercați {// Analizați datele // 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 (Excepție e) {println ("Excepție prinsă"); }}
Aici puteți vedea vizualizarea în imaginea atașată în acest pas. Datele de poziție primite la capătul nodemcu sunt de asemenea văzute pe monitorul serial așa cum se arată în imagine.
Pasul 5: COD
Am atașat depozitul github. Puteți să-l clonați și să-l utilizați în proiectele dvs.
codul meu
Repo include 2 schițe arduino pentru emițător (arduino + IMU) și receptor (Nodemcu + Servo).
Și o schiță de procesare. Stabiliți repoarea dacă acest lucru vă ajută în proiect.
În acest instructabil, R- Receptor și T- Transmițător
Pasul 6: DEMOSTRARE VIDEO
Voi anexa videoclipul mâine. Urmăriți-mă pentru a primi o notificare.
Va multumesc tuturor!
Recomandat:
RS485 Între Arduino și Raspberry Pi: 7 pași
RS485 Între Arduino și Raspberry Pi: Pentru școală trebuie să fac un proiect. Aleg să fac un controler inteligent de seră controlat complet de un pi zmeură. Senzorii vor fi alimentați de un arduino uno. În lunile următoare, voi posta realizarea acestui proiect pas cu
Neopixel Ws2812 Rainbow LED Glow Cu M5stick-C - Rularea Rainbow pe Neopixel Ws2812 Utilizarea M5stack M5stick C Utilizarea Arduino IDE: 5 pași
Neopixel Ws2812 Rainbow LED Glow Cu M5stick-C | Rularea Rainbow pe Neopixel Ws2812 Utilizarea M5stack M5stick C Utilizarea Arduino IDE: Bună băieți, în acest instructables vom învăța cum să utilizați LED-uri neopixel ws2812 sau benzi LED sau matrice LED sau inel cu LED cu placa de dezvoltare m5stack m5stick-C cu Arduino IDE și vom face un model curcubeu cu el
DIRECȚIA ȘI CONTROLUL VITEZEI MOTORULUI CC CU UTILIZAREA LABVIEW (PWM) ȘI ARDUINO: 5 pași
DIRECȚIA ȘI CONTROLUL VITEZEI MOTORULUI CC CU UTILIZAREA LABVIEW (PWM) ȘI ARDUINO: Bună ziua, băieți, în primul rând îmi pare rău pentru engleza mea amuzantă
Punct de acces - Comunicare stație între două MCU-uri ESP8266: 3 pași
Punct de acces - Comunicare stație între două MCU-uri ESP8266: Hello Makers! În instructajul meu anterior am făcut o comunicație WiFi între două MCU-uri ESP8266 printr-un router WiFi de acasă. După cum am văzut din comentarii, există producători care ar dori să utilizeze MCU-uri ESP8266 departe de gama unui router. Iată un bar
Utilizarea diodelor pentru controlul ventilatorului .: 7 pași
Utilizarea diodelor pentru controlul ventilatorului: în alternativă la utilizarea reostatelor și a cipurilor pentru controlul vitezei ventilatorului. Ideea pentru acest lucru a venit de la http://www.cpemma.co.uk/sdiodes.html ACUM http: //www.pcsilencioso.com/cpemma/sdiodes.html și am vrut să-l explic puțin mai mult și să construiesc