Sadržaj:
- Korak 1: O OVOM PROJEKTU
- Korak 2: Potreban hardver
- Korak 3: Krug i veze
- Korak 4: RADITE
- Korak 5: KOD
- Korak 6: VIDEO DEMONSTRACIJA
Video: Upravljanje servo uređajem pomoću MPU6050 između Arduina i ESP8266 s HC-12: 6 koraka
2024 Autor: John Day | [email protected]. Zadnja izmjena: 2024-01-30 08:07
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
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
Č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:
RS485 između Arduina i Raspberry Pi: 7 koraka
RS485 između Arduina i Raspberry Pi: Za školu moram napraviti projekt. Odlučio sam napraviti pametan kontroler staklenika u potpunosti kontroliran malinom pi. Senzore će napajati arduino uno. U mjesecima koji slijede objavit ću izradu ovog projekta korak do
Upravljajte servo uređajem pomoću 555 tajmera IC: 3 koraka
Kontrola servo upravljača pomoću 555 tajmera: Moja prva instrukcija je bila " Upravljanje servo -ima pomoću analognog džojstika ". Od tada sam podijelio nekoliko projekata kojima su bili potrebni servo upravljači, na primjer: Robotska traka za ruke i lice. Uvijek smo koristili mikrokontroler za upravljanje servo pogonima. Ali da
Modbus TCP komunikacija između Arduina i industrijskih uređaja: 3 koraka
Modbus TCP komunikacija između Arduina i industrijskih uređaja: Industrijski način upravljanja Arduino pločom s industrijskim HMI -jem i povezivanje s industrijskom mrežom s Modbus TCP komunikacijom
Gimbal osovine s nagibom i nagibom za GoPro pomoću Arduina - servo i žiroskop MPU6050: 4 koraka
Roll and Pitch Axis Gimbal za GoPro koristeći Arduino - Servo i žiroskop MPU6050: Ova instrukcija je stvorena u skladu sa zahtjevima projekta Makecourse na Univerzitetu Južne Floride (www.makecourse.com) Cilj ovog projekta bio je izgraditi 3-osni kardan za GoPro pomoću Arduino nano + 3 servo motora +
Automobil za upravljanje pokretima pomoću Mpu6050 i Arduina: 7 koraka (sa slikama)
Automobil za upravljanje pokretima pomoću Mpu6050 i Arduina: ovdje je automobil za upravljanje pokretima ručnim kontrolerom, napravljen pomoću mpu6050 i arduina. Za bežično povezivanje koristim RF modul