Sisukord:

Servo juhtimine MPU6050 abil Arduino ja ESP8266 vahel HC-12: 6 sammu
Servo juhtimine MPU6050 abil Arduino ja ESP8266 vahel HC-12: 6 sammu

Video: Servo juhtimine MPU6050 abil Arduino ja ESP8266 vahel HC-12: 6 sammu

Video: Servo juhtimine MPU6050 abil Arduino ja ESP8266 vahel HC-12: 6 sammu
Video: Управление 16 серводвигателями с использованием модуля PCA9685 и Arduino V2 2024, November
Anonim
Servo juhtimine MPU6050 abil Arduino ja ESP8266 vahel HC-12 abil
Servo juhtimine MPU6050 abil Arduino ja ESP8266 vahel HC-12 abil

Selles projektis kontrollime servomootori asendit, kasutades mpu6050 ja HC-12, et suhelda Arduino UNO ja ESP8266 NodeMCU vahel.

1. toiming: selle projekti kohta

See on veel üks IoT projekt, mis põhineb HC-12 RF-moodulil. Siin kasutatakse arduino imu (mpu6050) andmeid servomootori (ühendatud Nodemcu abil) juhtimiseks. Siin teostatakse andmete visualiseerimine ka arduino poolel, kus mpu6050 pigi andmed (pöörlemine ümber x-telje) visualiseeritakse töötlemissketiga (arutatakse hiljem). Põhimõtteliselt on see projekt lihtsalt soojenduseks, et meenutada Imu & Servo juhtimise erinevaid aspekte Arduino ja ESP8266 nodemcu abil.

EESMÄRK

Selle üsna selge eesmärk on kontrollida servomootori positsiooni IMU pigi väärtuse abil. Ja kõik see samm ja sünkroniseeritud mootori asend visualiseeritakse töötlemisega.

2. samm: vajalik riistvara

NodeMCU ESP8266 12E WiFi -moodul

Jooteta leivalaud

Jumper traat

MPU6050 accelo+güroskoop

HC-12 RF-moodulid (paar)

Servomootor SG90

Samm: vooluring ja ühendused

Ahel ja ühendused
Ahel ja ühendused
Ahel ja ühendused
Ahel ja ühendused

Ühendused on otse edasi. Servot saate toita oma Nodemcu 3,3 V toitega. Saate kasutada ka Vini servo toiteks, kui teie nodemcul on sellel tihvtil nii palju pinget. Kuid enamikul Lolini plaatidel pole Vinil 5 V (sõltub tootjast).

Need lülitusskeemid on valmistatud EasyADA abil.

4. samm: TÖÖ

TÖÖ
TÖÖ

Niipea kui arduino eskiis algas, saadab see kaldenurga (vahemikus -45 kuni 45) Nodemcu vastuvõtjale hc12, mis kaardistatakse 0 kuni 180 -kraadise servoasendiga. Siin kasutasime kaldenurka -45 kuni +45 kraadi, et saaksime selle hõlpsalt servoasendisse kaardistada.

Nüüd mõtlete, miks saaksime lihtsalt kasutada kaardimeetodit järgmiselt:-

int pos = kaart (val, -45, 45, 0, 180);

Kuna saatja hc12 saadetud negatiivne nurk võetakse vastu järgmiselt:

1. poolaeg: (T) 0 kuni 45 => 0 kuni 45 (R)

2. poolaeg: (T) -45 kuni -1 => 255 kuni 210 (R)

Nii et peate selle kaardistama vahemikus 0 kuni 180

kui (val> = 0 && val <= 45) pos = (val*2) +90; muidu pos = (val-210)*2;

Väldin kaardimeetodit mõne ebaolulise vea tõttu. Võite seda proovida ja kommenteerida, et see töötab teiega

if (val> = 0 && val <= 45) pos = kaart (val, 0, 45, 90, 180); else pos = kaart (val, 255, 210, 0, 90); // 4. argument võib olla 2 (saate kontrollida)

MPU6050 kaldenurga arvutamine

Ma kasutan raamatukogu MPU6050_tockn, mis põhineb IMU -st algandmete väljastamisel.

int pitchAngle = mpu6050.getAngleX ()

See annab meile pöördenurga ümber x-telje. Nagu jooniselt nägite, on minu imu vertikaalselt leivaplaadile paigutatud, nii et ärge ajage seda segi pigi ja rulliga. Tegelikult peaksite alati nägema telge trükitud laual.

Selle raamatukogu kaudu ei pea te muretsema konkreetse toimingu jaoks konkreetsete registrite lugemise siseelektroonika pärast. määrate ainult töö ja oletegi valmis!

Btw, kui soovite nurka ise arvutada. Saate seda hõlpsalt teha järgmiselt.

#kaasake

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 (tõene); Seriaalne algus (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (vale); Wire.requestFrom (MPU6050_addr, 14, true); 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 = kaart (AcX, minVal, maxVal, -90, 90); int yAng = kaart (AcY, minVal, maxVal, -90, 90); int zAng = kaart (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); }

Kuid nurga saamiseks pole vaja nii palju koodi kirjutada. Te peaksite teadma stseeni taga olevaid fakte, kuid teiste inimeste raamatukogu kasutamine on paljudes projektides väga tõhus. Selle imu ja muude lähenemisviiside kohta saate rohkem filtreeritud andmeid hankida järgmiselt lingilt: Explore-mpu6050.

Minu arduino koodil edastusotsas on ainult 30 rida MPU6050_tockn raamatukogu abil, nii et teegi kasutamine on hea, kui te ei vaja IMU funktsionaalsuses põhilisi muudatusi. Jeff Rowbergi raamatukogu nimega I2Cdev on väga kasulik, kui soovite filtreeritud andmeid IMU DMP (Digital Motion Processor) abil.

Integreerimine töötlemisega

Siin kasutatakse töötlemist IMU x-telje ümber pöörlevate andmete visualiseerimiseks, mis on arvutatud MPU6050 lähteandmete põhjal. Sissetulevad algandmed saame SerialEventis järgmisel viisil:

void serialEvent (Serial myPort) {

inString = myPort.readString (); try {// Andmete sõelumine // 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); }}} saak (Erand e) {println ("Püütud erand"); }}

Siin näete selle sammu lisatud pildil visualiseerimist. Noodemcu otsas vastuvõetud asukohaandmeid näeb ka jadamonitoril, nagu pildil näidatud.

5. samm: KOODI

Lisasin githubi hoidla. Saate seda oma projektides kasutamiseks kloonida ja kahvliga kasutada.

minu_kood

Repo sisaldab 2 arduino eskiisi saatjale (arduino+IMU) ja vastuvõtjale (Nodemcu+Servo).

Ja üks töötlemise visand. Tähistage repot, kui see aitab teie projektis kaasa.

Selles juhendis, R- vastuvõtja ja T- saatja

6. samm: VIDEO DEMONSTRATSIOON

Lisan video homme. Jälgi mind teavituste saamiseks.

Tänan teid kõiki!

Soovitan: