Turinys:

Servo valdymas naudojant MPU6050 tarp „Arduino“ir ESP8266 su HC-12: 6 žingsniai
Servo valdymas naudojant MPU6050 tarp „Arduino“ir ESP8266 su HC-12: 6 žingsniai

Video: Servo valdymas naudojant MPU6050 tarp „Arduino“ir ESP8266 su HC-12: 6 žingsniai

Video: Servo valdymas naudojant MPU6050 tarp „Arduino“ir ESP8266 su HC-12: 6 žingsniai
Video: Как управлять серводвигателем | Внешний ПЛК Arduino 2024, Lapkritis
Anonim
Servo valdymas naudojant MPU6050 tarp „Arduino“ir ESP8266 su HC-12
Servo valdymas naudojant MPU6050 tarp „Arduino“ir ESP8266 su HC-12

Š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

Grandinė ir jungtys
Grandinė ir jungtys
Grandinė ir jungtys
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

DARBAS
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: