Talaan ng mga Nilalaman:
- Hakbang 1: TUNGKOL SA PROYEKTO NA ITO
- Hakbang 2: Kinakailangan ang Hardware
- Hakbang 3: Circuit at Mga Koneksyon
- Hakbang 4: TRABAHO
- Hakbang 5: CODE
- Hakbang 6: DEMONSTRATION NG VIDEO
Video: Pagkontrol sa Servo Paggamit ng MPU6050 Sa Pagitan ng Arduino at ESP8266 Sa HC-12: 6 Mga Hakbang
2024 May -akda: John Day | [email protected]. Huling binago: 2024-01-30 13:13
Sa proyektong ito, kinokontrol namin ang posisyon ng isang servo motor gamit ang mpu6050 at HC-12 para sa komunikasyon sa pagitan ng Arduino UNO at ESP8266 NodeMCU.
Hakbang 1: TUNGKOL SA PROYEKTO NA ITO
Ito ay isa pang proyekto ng IoT batay sa HC-12 RF-module. Dito, ang imu (mpu6050) data mula sa arduino ay ginagamit upang makontrol ang servo motor (konektado sa Nodemcu). Dito, ang visualization ng data ay ginaganap din sa gilid ng arduino kung saan ang mpu6050 pitch data (pag-ikot tungkol sa x-axis) ay mailarawan sa isang pagproseso ng sketch (tatalakayin sa paglaon). Talaga ang proyektong ito ay medyo nagpapainit lamang para sa pag-alala sa iba't ibang mga aspeto ng kontrol ng Imu & Servo kasama ang Arduino at ESP8266 nodemcu.
LAYUNIN
Ang layunin ng medyo malinaw na ito, Kinokontrol namin ang posisyon ng Servo motor gamit ang pitch na halaga ng IMU. At lahat ng sama-sama ang pitch at naka-synchronize na posisyon ng motor na ito ay isinalarawan sa Pagproseso.
Hakbang 2: Kinakailangan ang Hardware
Module ng NodeMCU ESP8266 12E Wifi
Solderless breadboard
Jumper wire
MPU6050 accelo + gyro
HC-12 RF modules (pares)
SG90 Servo motor
Hakbang 3: Circuit at Mga Koneksyon
Ang mga koneksyon ay tuwid na pasulong. Maaari mong mapagana ang servo gamit ang 3.3V ng iyong Nodemcu. Maaari mo ring gamitin ang Vin upang mapagana ang servo kung ang iyong nodemcu ay mayroong gaanong boltahe sa pin na iyon. Ngunit ang karamihan sa mga board ng Lolin ay walang 5V sa Vin (nakasalalay sa gumagawa).
Ang mga circuit diagram na ito ay ginawa gamit ang EasyADA.
Hakbang 4: TRABAHO
Sa sandaling magsimula ang sketch ng arduino, ipapadala nito ang anggulo ng pitch (na mula sa -45 hanggang 45) sa hc12 na tatanggap ng Nodemcu na nai-map sa 0 hanggang 180 degree na posisyon ng Servo. Dito ginamit namin ang anggulo ng pitch mula -45 hanggang +45 degree upang madali naming mapa iyon sa posisyon ng Servo.
Ngayon, iniisip mo kung bakit maaari naming gamitin ang pamamaraan ng mapa tulad ng sumusunod: -
int pos = mapa (val, -45, 45, 0, 180);
Dahil ang negatibong anggulo na ipinadala ng transmiter ng hc12 ay natanggap bilang:
Ika-1 kalahati: (T) 0 hanggang 45 => 0 hanggang 45 (R)
Ika-2 kalahati: (T) -45 hanggang -1 => 255 hanggang 210 (R)
Kaya kailangan mong i-map ito sa 0 hanggang 180 bilang
kung (val> = 0 && val <= 45) pos = (val * 2) +90; iba pa pos = (val-210) * 2;
Iniiwasan ko ang paraan ng mapa dahil sa ilang hindi kaugnay na error. Maaari mong subukan iyon at magkomento na gumagana ito sa iyo
kung (val> = 0 && val <= 45) pos = mapa (val, 0, 45, 90, 180); iba pa pos = mapa (val, 255, 210, 0, 90); // 4th argument ay maaaring 2 (maaari mong suriin)
Pagkalkula ng MPU6050 Pitch Angle
Gumagamit ako ng MPU6050_tockn library na batay sa pagbibigay ng hilaw na data mula sa IMU.
int pitchAngle = mpu6050.getAngleX ()
Makukuha sa amin ang anggulo ng pag-ikot tungkol sa x-axis. Tulad ng nakikita mo sa figure, ang aking imu ay patayo na nakalagay sa breadboard kaya huwag malito sa pitch at roll. Sa totoo lang dapat mong palaging makita ang naka-print na axis sa breakout board.
Sa pamamagitan ng library na ito, hindi mo kailangang mag-abala tungkol sa panloob na electronics ng pagbabasa ng mga partikular na rehistro para sa tukoy na operasyon. tinukoy mo lang ang trabaho at tapos ka na!
Btw kung nais mong kalkulahin ang anggulo nang mag-isa. Madali mong magagawa ito tulad ng sumusunod:
# isama
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 (totoo); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (false); Wire.requestFrom (MPU6050_addr, 14, totoo); 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 = mapa (AcX, minVal, maxVal, -90, 90); int yAng = mapa (AcY, minVal, maxVal, -90, 90); int zAng = mapa (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); }
Ngunit, hindi kinakailangan na isusulat mo ang magkano ang code upang makuha ang anggulo. Dapat mong malaman ang mga katotohanan sa likod ng eksena ngunit ang paggamit ng silid-aklatan ng ibang mga tao ay napaka epektibo sa maraming mga proyekto. Maaari mong basahin ang tungkol sa imu na ito at iba pang mga pag-apruba upang makakuha ng higit pang nai-filter na data mula sa sumusunod na link: Galugarin-mpu6050.
Ang aking arduino code sa dulo ng paglilipat ay may 30 linya lamang sa tulong ng MPU6050_tockn library kaya't ang paggamit ng isang library ay mabuti maliban kung hindi mo kailangan ng ilang pangunahing mga pagbabago sa pagpapaandar ng IMU. Ang isang silid-aklatan na nagngangalang I2Cdev ni Jeff Rowberg ay kapaki-pakinabang kung nais mo ang ilang na-filter na data gamit ang DMP (Digital motion processor) ng IMU.
Pagsasama sa Pagproseso
Dito ginagamit ang Pagproseso para mailarawan ang paikot na data tungkol sa x-axis ng IMU na kinakalkula ng hilaw na data na nagmumula sa MPU6050. Natatanggap namin ang papasok na hilaw na data sa SerialEvent sa sumusunod na pamamaraan:
walang bisa ang serialEvent (Serial myPort) {
inString = myPort.readString (); subukan ang {// Parse the data // 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]); }} iba pa {println (inString); }}} mahuli (Exception e) {println ("Nahuli ang Exception"); }}
Makikita mo rito ang visualization sa imaheng nakakabit sa hakbang na ito. Ang data ng posisyon na natanggap sa nodemcu end ay nakikita rin sa serial monitor tulad ng ipinakita sa imahe.
Hakbang 5: CODE
Inilakip ko ang repository ng github. Maaari mong i-clone at tinidor ito upang magamit sa iyong mga proyekto.
my_code
Kasama sa repo ang 2 arduino sketch para sa transmitter (arduino + IMU) at receiver (Nodemcu + Servo).
At isang pagproseso ng sketch. Lagyan ng star ang repo kung makakatulong ito sa iyong proyekto.
Sa itinuturo na ito, R- Receiver & T- Transmitter
Hakbang 6: DEMONSTRATION NG VIDEO
Ikakabit ko na ang video bukas. Sundin mo ako para maabisuhan.
Salamat sa lahat!
Inirerekumendang:
DC MOTOR MOSFET Bilis ng Pagkontrol Paggamit ng Arduino: 6 Mga Hakbang
Ang Bilis ng Control ng DC MOTOR MOSFET Gamit ang Arduino: Sa tutorial na ito matututunan natin kung paano makontrol ang isang bilis ng DC Motor gamit ang isang MOSFET Module. Panoorin ang video
Pagkontrol sa ESP8266 Paggamit ng Telegram App: 7 Mga Hakbang
Pagkontrol sa ESP8266 Paggamit ng Telegram App: Hoy, ano na, Guys! Akarsh dito mula sa CETech. Naisip mo ba tungkol sa pakikipag-chat sa iyong mga gamit sa isang app ng pagmemensahe? Kakaiba ang tunog, tama. Ngunit ngayon ay gagawa tayo ng isang bagay na katulad nito. Huwag mag-alala hindi mo kailangang bumili ng mga mobile phone
ESP8266 NODEMCU BLYNK IOT Tutorial - Esp8266 IOT Paggamit ng Blunk at Arduino IDE - Pagkontrol ng mga LED Sa Internet: 6 na Hakbang
ESP8266 NODEMCU BLYNK IOT Tutorial | Esp8266 IOT Paggamit ng Blunk at Arduino IDE | Pagkontrol ng mga LED Sa Internet: Kumusta mga Guys sa mga itinuturo na ito malalaman natin kung paano gamitin ang IOT sa aming ESP8266 o Nodemcu. Gagamitin namin ang blynk app para doon. Kaya gagamitin namin ang aming esp8266 / nodemcu upang makontrol ang mga LED sa internet. Kaya ang Blynk app ay makakonekta sa aming esp8266 o Nodemcu
Pagkontrol sa 3 Mga Servo Motors Na May 3 Potentiometers at isang Arduino: 11 Mga Hakbang (na may Mga Larawan)
Pagkontrol sa 3 Mga Servo Motors Na May 3 Potentiometers at isang Arduino: Kumusta. Ito ang aking kauna-unahang itinuro, kaya inaasahan kong maging matiyaga ka sa akin kung magkamali ako sa pag-set up nito. Ito ay nakasulat para sa mga nagsisimula, kaya ang mas advanced sa iyo ay maaaring laktawan ang marami sa mga ito at makarating lamang ito sa kable. Ang layunin na itinakda ko sa aking
Accesspoint - Istasyon ng Komunikasyon sa Pagitan ng Dalawang mga ESP8266 MCU: 3 Mga Hakbang
Accesspoint - Istasyon ng Komunikasyon sa Pagitan ng Dalawang Mga MC8 ng ESP8266: Kamusta Mga Gumagawa! Sa aking nakaraang itinuro gumawa ako ng isang komunikasyon sa WiFi sa pagitan ng dalawang mga ESP8266 MCU sa pamamagitan ng isang router ng WiFi sa bahay. Tulad ng nakita ko mula sa mga komento may mga Gumagawa na nais na gumamit ng ESP8266 MCUs na malayo sa saklaw ng isang router. Kaya narito ang isang bar