Sisukord:
- 1. toiming: selle projekti kohta
- 2. samm: vajalik riistvara
- Samm: vooluring ja ühendused
- 4. samm: TÖÖ
- 5. samm: KOODI
- 6. samm: VIDEO DEMONSTRATSIOON
Video: Servo juhtimine MPU6050 abil Arduino ja ESP8266 vahel HC-12: 6 sammu
2024 Autor: John Day | [email protected]. Viimati modifitseeritud: 2024-01-30 08:48
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
Ü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ÖÖ
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:
Seadme juhtimine Androidi WiFi abil Esp8266 Juhtimine: 6 sammu
Seadme juhtimine Androidi WiFi abil Esp8266 Juhtimine: nüüd teame, kuidas juhtida seadmeid esp8266 WiFi -mooduli abil ja Arduino teie seadet Androidi WiFi -juhtimise abil lisateabe saamiseks. klõpsake linki mohamed ashraf
ESP8266 RGB LED -riba WIFI juhtimine - NODEMCU IR -kaugjuhtimispuldina LED -riba jaoks, mida juhitakse Wifi kaudu - RGB LED STRIP nutitelefoni juhtimine: 4 sammu
ESP8266 RGB LED -riba WIFI juhtimine | NODEMCU IR -kaugjuhtimispuldina LED -riba jaoks, mida juhitakse Wifi kaudu | RGB LED STRIP nutitelefoni juhtimine: Tere poisid, selles õpetuses õpime, kuidas kasutada nodemcu või esp8266 IR -kaugjuhtimispuldina, et juhtida RGB LED -riba ja Nodemcu saab juhtida nutitelefoniga WiFi kaudu. Nii et põhimõtteliselt saate oma nutitelefoniga juhtida RGB LED -riba
Robotkäe juhtimine Zio abil PS2 kontrolleri abil: 4 sammu
Robotkäe juhtimine Zio abil PS2 kontrolleri abil: see ajaveebi postitus on osa Zio Robotics seeriast. Sissejuhatus See on postituse „Juhtige robotkätt Zioga” viimane osa. Selles õpetuses lisame oma robotkäele veel ühe osa. Varasemad õpetused ei sisalda alust
Mootori pöörete arvu autonoomne juhtimine tagasiside süsteemi abil IR -põhise tahhomeetri abil: 5 sammu (piltidega)
Mootori pöörlemiskiiruste autonoomne juhtimine tagasisidesüsteemi abil IR -põhise tahhomeetri abil: alati on vaja automatiseerida protsess, olgu see siis lihtne/koletu. Mul tekkis idee seda projekti teha lihtsast väljakutsest, millega silmitsi seistes leidsin meetodid meie väikese maatüki kastmiseks/niisutamiseks. Praeguse toiteliini puudumise probleem
Superlihtne arvuti juhtimine 110 Vac abil Crydom Solid-State Relay abil: 3 sammu (koos piltidega)
Superlihtne arvuti juhtimine 110 Vac abil Crydom Solid-State Relay abil: valmistun proovima oma kätt kuumutusplaadi jootmisel. Seetõttu vajasin ma 110Vac juhtimist arvutist. See juhend näitab, kuidas 110Vac hõlpsalt arvuti jadaväljundpordist juhtida. Minu kasutatav jadaport oli USB -tüüpi