Sadržaj:
- Korak 1: O OVOM PROJEKTU
- Korak 2: Potreban hardver
- Korak 3: Krug i veze
- Korak 4: RAD
- Korak 5: KOD
- Korak 6: VIDEO DEMONSTRACIJA
Video: Upravljanje servo upravljanjem pomoću MPU6050 između Arduina i ESP8266 s HC-12: 6 koraka
2024 Autor: John Day | [email protected]. Zadnja promjena: 2024-01-30 09:35
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
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
Č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:
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. Tijekom sljedećih mjeseci objavit ću korak po korak do izrade ovog projekta
Rotacijski i pomak osovine 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 nastala je u skladu sa zahtjevima projekta Makecoursea na Sveučilištu Južne Floride (www.makecourse.com) Cilj ovog projekta bio je izgraditi 3-osi Gimbal 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, izrađen pomoću mpu6050 i arduina. Za bežično povezivanje koristim RF modul
UPRAVLJANJE I UPRAVLJANJE BRZINOM DC MOTORA KORIŠĆENJEM LABVIEW (PWM) I ARDUINA: 5 koraka
UPUTSTVO I UPRAVLJANJE BRZINOM DC MOTORA KORIŠĆENJEM LABVIEW (PWM) I ARDUINO: Pozdrav momci, prije svega žao mi je zbog mog smiješnog engleskog jezika. U ovom uputstvu pokazat ću vam kako kontrolirati brzinu istosmjernog motora pomoću laboratorijskog pregleda Počnimo
Android (remotexy) korisnički interfejs za upravljanje servo motorom pomoću Arduina i Bluetootha: 7 koraka (sa slikama)
Android (remotexy) korisnički interfejs za upravljanje servo motorom pomoću Arduina i Bluetootha: U ovom Instructableu ću vam dati brzi korak da napravite Android korisničko sučelje pomoću Remotexy Interface Makera za upravljanje Servo motorom povezanim na Arduino Mega putem Bluetootha. Ovaj video prikazuje kako će korisničko sučelje kontrolirati brzinu i položaj servo motora