Talaan ng mga Nilalaman:

Pagkontrol sa Servo Paggamit ng MPU6050 Sa Pagitan ng Arduino at ESP8266 Sa HC-12: 6 Mga Hakbang
Pagkontrol sa Servo Paggamit ng MPU6050 Sa Pagitan ng Arduino at ESP8266 Sa HC-12: 6 Mga Hakbang

Video: Pagkontrol sa Servo Paggamit ng MPU6050 Sa Pagitan ng Arduino at ESP8266 Sa HC-12: 6 Mga Hakbang

Video: Pagkontrol sa Servo Paggamit ng MPU6050 Sa Pagitan ng Arduino at ESP8266 Sa HC-12: 6 Mga Hakbang
Video: Arduino MASTERCLASS | Full Programming Workshop in 90 Minutes! 2024, Hulyo
Anonim
Pagkontrol sa Servo Gamit ang MPU6050 Sa Pagitan ng Arduino at ESP8266 Sa HC-12
Pagkontrol sa Servo Gamit ang MPU6050 Sa Pagitan ng Arduino at ESP8266 Sa HC-12

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

Circuit at Mga Koneksyon
Circuit at Mga Koneksyon
Circuit at Mga Koneksyon
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

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