Kazalo:
- 1. korak: O TEM PROJEKTU
- 2. korak: Potrebna je strojna oprema
- 3. korak: Vezje in povezave
- 4. korak: DELO
- 5. korak: KODA
- 6. korak: VIDEO DEMONSTRACIJA
Video: Nadzor servomotorja z uporabo MPU6050 med Arduinom in ESP8266 s HC-12: 6 korakov
2024 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2024-01-30 12:05
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
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
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:
Kaj je znotraj servomotorja in kako ga uporabljati s celotnim vodičem Arduino: 6 korakov
Kaj je znotraj servomotorja in kako ga uporabljati s celotno vadnico Arduino: v tej vadnici raziščimo, kaj je servowatch ta video vadnica
2 potenciometra in 2 servomotorja: nadzorovano gibanje z Arduinom: 4 koraki
2 potenciometra in 2 servomotorja: nadzorovano gibanje z Arduinom: Najprej morate zbrati ustrezne materiale, da sestavite to vezje
Nadzor vodite po vsem svetu z uporabo interneta z uporabo Arduina: 4 koraki
Nadzorujte po vsem svetu z uporabo interneta z uporabo Arduina: Živjo, jaz sem Rithik. Z vašim telefonom bomo naredili LED pod vodstvom interneta. Uporabljali bomo programsko opremo, kot sta Arduino IDE in Blynk. Preprosto je, in če vam je uspelo, lahko nadzirate toliko elektronskih komponent, kot jih želite. Stvari, ki jih potrebujemo: Strojna oprema:
RF 433MHZ radijski nadzor z uporabo HT12D HT12E - Izdelava daljinskega upravljalnika Rf z uporabo HT12E in HT12D s 433 MHz: 5 korakov
RF 433MHZ radijski nadzor z uporabo HT12D HT12E | Izdelava daljinskega upravljalnika Rf z uporabo HT12E in HT12D s 433 MHz: V tem navodilu vam bom pokazal, kako narediti daljinski upravljalnik RADIO z uporabo sprejemniškega modula oddajnika 433 MHz s kodiranjem HT12E & IC dekodirnik HT12D. V tem navodilu lahko pošiljate in prejemate podatke z zelo zelo poceni KOMPONENTE, KI SO: HT
Brezžični daljinski upravljalnik z uporabo 2.4Ghz modula NRF24L01 z Arduinom - Nrf24l01 4 -kanalni / 6 -kanalni sprejemnik oddajnika za Quadcopter - Rc helikopter - Rc ravnina z uporabo Arduina: 5 korakov (s slikami)
Brezžični daljinski upravljalnik z uporabo 2.4Ghz modula NRF24L01 z Arduinom | Nrf24l01 4 -kanalni / 6 -kanalni sprejemnik oddajnika za Quadcopter | Rc helikopter | Rc letalo z uporabo Arduina: za upravljanje avtomobila Rc | Quadcopter | Dron | RC ravnina | RC čoln, vedno potrebujemo sprejemnik in oddajnik, recimo za RC QUADCOPTER potrebujemo 6 -kanalni oddajnik in sprejemnik in ta vrsta TX in RX je predraga, zato jo bomo naredili na svojem