Turinys:
- 1 žingsnis: APIE ŠĮ PROJEKTĄ
- 2 veiksmas: reikalinga aparatinė įranga
- 3 žingsnis: grandinė ir jungtys
- 4 žingsnis: DARBAS
- 5 veiksmas: KODAS
- 6 veiksmas: vaizdo įrašo demonstravimas
Video: Servo valdymas naudojant MPU6050 tarp „Arduino“ir ESP8266 su HC-12: 6 žingsniai
2024 Autorius: John Day | [email protected]. Paskutinį kartą keistas: 2024-01-30 10:47
Šiame projekte mes kontroliuojame servo variklio padėtį, naudojant „mpu6050“ir „HC-12“ryšiui tarp „Arduino UNO“ir „ESP8266 NodeMCU“.
1 žingsnis: APIE ŠĮ PROJEKTĄ
Tai dar vienas IoT projektas, pagrįstas HC-12 RF moduliu. Čia imu (mpu6050) duomenys iš arduino naudojami servo varikliui valdyti (prijungtas prie „Nodemcu“). Čia duomenų vizualizacija taip pat atliekama arduino pusėje, kur mpu6050 žingsnio duomenys (sukimasis apie x ašį) vizualizuojami naudojant apdorojimo eskizą (aptartas vėliau). Iš esmės šis projektas yra tik šiek tiek apšilimas, norint prisiminti įvairius „Imu & Servo“valdymo aspektus naudojant „Arduino“ir „ESP8266 nodemcu“.
TIKSLAS
Šio gana aiškaus tikslo mes kontroliuojame servo variklio padėtį naudodami IMU pikio vertę. Ir kartu šis žingsnis ir sinchronizuota variklio padėtis vizualizuojama naudojant „Processing“.
2 veiksmas: reikalinga aparatinė įranga
„NodeMCU ESP8266 12E Wifi“modulis
Duonos lenta be litavimo
Jumperio viela
MPU6050 accelo+giroskopas
HC-12 RF moduliai (pora)
Servo variklis SG90
3 žingsnis: grandinė ir jungtys
Ryšiai yra tiesiai į priekį. Galite įjungti servo maitinimą naudodami 3,3 V „Nodemcu“. Taip pat galite naudoti „Vin“, kad įjungtumėte servo variklį, jei jūsų „nodemcu“tame kaištyje yra tiek įtampos. Tačiau dauguma „Lolin“plokščių neturi „Vin“įtampos (priklauso nuo gamintojo).
Šios schemos sudarytos naudojant „EasyADA“.
4 žingsnis: DARBAS
Kai tik prasidės arduino eskizas, jis nusiųs žingsnio kampą (nuo -45 iki 45) į „Nodemcu“imtuvą hc12, kuris bus susietas su 0–180 laipsnių servo padėtimi. Čia mes naudojome žingsnio kampą nuo -45 iki +45 laipsnių, kad galėtume lengvai susieti jį su servo padėtimi.
Dabar jūs galvojate, kodėl galime tiesiog naudoti žemėlapio metodą taip:-
int pos = žemėlapis (val, -45, 45, 0, 180);
Kadangi neigiamas kampas, kurį siunčia siųstuvas hc12, gaunamas kaip:
1 pusė: (T) nuo 0 iki 45 => nuo 0 iki 45 (R)
2 pusė: (T) -45 iki -1 => 255 iki 210 (R)
Taigi jūs turite susieti jį nuo 0 iki 180
jei (val> = 0 && val <= 45) pos = (val*2) +90; else pos = (val-210)*2;
Aš vengiu žemėlapio metodo dėl tam tikros nesvarbios klaidos. Galite tai išbandyti ir komentuoti, kad tai jums tinka
if (val> = 0 && val <= 45) pos = žemėlapis (val, 0, 45, 90, 180); else pos = žemėlapis (val, 255, 210, 0, 90); // Ketvirtasis argumentas gali būti 2 (galite patikrinti)
MPU6050 žingsnio kampo apskaičiavimas
Aš naudoju MPU6050_tockn biblioteką, kuri pagrįsta neapdorotų IMU duomenų pateikimu.
int pitchAngle = mpu6050.getAngleX ()
Taip gausime sukimosi apie x ašį kampą. Kaip matote paveikslėlyje, mano imu yra vertikaliai padėtas ant duonos lentos, todėl nepainiokite su pikiu ir ritiniu. Tiesą sakant, ašis visada turėtumėte matyti atspaudų lentoje.
Naudodamiesi šia biblioteka neturite sukti galvos dėl vidinės elektronikos, skirtos skaityti konkrečius registrus konkrečiai operacijai. jūs nurodote tik darbą ir baigsite!
Btw, jei norite patys apskaičiuoti kampą. Tai galite lengvai padaryti taip:
#įtraukti
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 (tiesa); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (klaidinga); Wire.requestFrom (MPU6050_addr, 14, tiesa); 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 = žemėlapis (AcX, minVal, maxVal, -90, 90); int yAng = žemėlapis (AcY, minVal, maxVal, -90, 90); int zAng = žemėlapis (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); }
Tačiau norint gauti kampą nebūtina parašyti tiek daug kodo. Turėtumėte žinoti faktus užkulisiuose, tačiau kitų žmonių bibliotekos naudojimas yra labai efektyvus daugelyje projektų. Galite perskaityti apie šį imu ir kitus metodus, kad gautumėte daugiau filtruotų duomenų iš šios nuorodos: „Explore-mpu6050“.
Mano „arduino“kodas perdavimo gale turi tik 30 eilučių, naudojant MPU6050_tockn biblioteką, todėl naudotis biblioteka yra gerai, nebent jums nereikia atlikti esminių IMU funkcijų pakeitimų. Jeffo Rowbergo biblioteka, pavadinta „I2Cdev“, labai naudinga, jei norite filtruoti duomenis naudodami IMU DMP (skaitmeninio judesio procesorių).
Integracija su apdorojimu
Čia apdorojimas naudojamas vizualizuoti sukimosi duomenis apie IMU x ašį, apskaičiuotą pagal neapdorotus duomenis, gautus iš MPU6050. Mes gauname neapdorotus duomenis „SerialEvent“tokiu būdu:
void serialEvent (Serial myPort) {
inString = myPort.readString (); pabandyti {// Analizuoti duomenis // println (inString); Eilutė 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 (išimtis e) {println ("Sugauta išimtis"); }}
Čia galite pamatyti šio veiksmo pridėto vaizdo vizualizaciją. Padėties duomenys, gauti „nodemcu“gale, taip pat matomi nuosekliajame monitoriuje, kaip parodyta paveikslėlyje.
5 veiksmas: KODAS
Pridėjau „github“saugyklą. Galite klonuoti ir šakoti, kad galėtumėte naudoti savo projektuose.
my_code
Repo apima 2 arduino eskizą siųstuvui (arduino+IMU) ir imtuvui (Nodemcu+Servo).
Ir vienas apdorojimo eskizas. Pažymėkite atpirkimo žvaigždutę, jei tai padeda jūsų projektui.
Šioje pamokoje, R- imtuvas ir T- siųstuvas
6 veiksmas: vaizdo įrašo demonstravimas
Rytoj pridedu vaizdo įrašą. Sekite mane, kad gautumėte pranešimą.
Ačiū jums visiems!
Rekomenduojamas:
Valdymas visame pasaulyje naudojant internetą naudojant „Arduino“: 4 žingsniai
Valdymas visame pasaulyje naudojant internetą naudojant „Arduino“: Sveiki, aš esu Rithik. Mes ketiname sukurti valdomą internetą, naudojant jūsų telefoną. Ketiname naudoti tokią programinę įrangą kaip „Arduino IDE“ir „Blynk“. Tai paprasta ir, jei pavyko, galite valdyti tiek daug elektroninių komponentų, kokių norite
Ryškumo valdymas PWM pagrįstas LED valdymas naudojant mygtukus, „Raspberry Pi“ir „Scratch“: 8 žingsniai (su nuotraukomis)
Ryškumo valdymas PWM pagrįstas LED valdymas naudojant mygtukus, „Raspberry Pi“ir „Scratch“: bandžiau rasti būdą, kaip paaiškinti, kaip PWM veikė mano mokiniams, todėl iškėliau sau užduotį pabandyti valdyti šviesos diodo ryškumą naudojant du mygtukus - vienas mygtukas padidina šviesos diodo ryškumą, o kitas - jį pritemdo. Programa
Belaidis nuotolinis valdymas naudojant 2,4 GHz NRF24L01 modulį su „Arduino“- Nrf24l01 4 kanalų / 6 kanalų siųstuvo imtuvas keturkopteriui - Rc sraigtasparnis - Rc lėktuvas naudojant „Arduino“: 5 žingsniai (su nuotraukomis)
Belaidis nuotolinis valdymas naudojant 2,4 GHz NRF24L01 modulį su „Arduino“| Nrf24l01 4 kanalų / 6 kanalų siųstuvo imtuvas keturkopteriui | Rc sraigtasparnis | Rc lėktuvas naudojant „Arduino“: valdyti Rc automobilį | Kvadopteris | Dronas | RC plokštuma | RC valtis, mums visada reikia imtuvo ir siųstuvo, tarkime, kad RC QUADCOPTER mums reikia 6 kanalų siųstuvo ir imtuvo, o tokio tipo TX ir RX yra per brangus, todėl mes jį pagaminsime savo
Vartų valdymas naudojant „Google“padėjėją naudojant ESP8266 „NodeMCU“: 6 žingsniai
Vartų valdymas naudojant „Google“padėjėją naudojant ESP8266 „NodeMCU“: tai yra mano pirmasis projektas, skirtas instrukcijoms, todėl, jei yra galimų patobulinimų, pakomentuokite toliau. Idėja yra naudoti „Google“asistentą, norint nusiųsti signalą į vartų valdymo plokštę. Taigi, siunčiant komandą, bus relė, kuri uždarys
Automobilio gestais valdymas naudojant „Mpu6050“ir „Arduino“: 7 žingsniai (su nuotraukomis)
Gesto valdymo automobilis naudojant „Mpu6050“ir „Arduino“: čia yra rankinio valdiklio gestų valdymo automobilis, pagamintas naudojant „mpu6050“ir „arduino“. Belaidžiam ryšiui naudoju RF modulį