Բովանդակություն:

Servo- ի վերահսկում MPU6050- ի միջոցով Arduino- ի և ESP8266- ի միջև HC-12: 6 քայլով
Servo- ի վերահսկում MPU6050- ի միջոցով Arduino- ի և ESP8266- ի միջև HC-12: 6 քայլով

Video: Servo- ի վերահսկում MPU6050- ի միջոցով Arduino- ի և ESP8266- ի միջև HC-12: 6 քայլով

Video: Servo- ի վերահսկում MPU6050- ի միջոցով Arduino- ի և ESP8266- ի միջև HC-12: 6 քայլով
Video: ESP8266 Wireless Nextion HMI || Outseal Arduino PLC 2024, Հուլիսի
Anonim
Servo- ի վերահսկում MPU6050- ի միջոցով Arduino- ի և ESP8266- ի միջև HC-12- ով
Servo- ի վերահսկում MPU6050- ի միջոցով Arduino- ի և ESP8266- ի միջև HC-12- ով

Այս նախագծում մենք վերահսկում ենք servo շարժիչի դիրքը ՝ օգտագործելով mpu6050 և HC-12 Arduino UNO- ի և ESP8266 NodeMCU- ի միջև հաղորդակցության համար:

Քայլ 1: Այս նախագծի մասին

Դա ևս մեկ IoT նախագիծ է, որը հիմնված է HC-12 ՌԴ մոդուլի վրա: Այստեղ arduino- ի imu (mpu6050) տվյալները օգտագործվում են servo շարժիչը կառավարելու համար (կապված է Nodemcu- ի հետ): Այստեղ տվյալների արտացոլումը կատարվում է նաև arduino- ի այն կողմում, որտեղ mpu6050 սկիպիդարի տվյալները (պտտումը x առանցքի շուրջ) տեսանելի են դառնում մշակման ուրվագծով (որը կքննարկվի ավելի ուշ): Հիմնականում այս նախագիծը մի փոքր տաքանում է `հիշելու Imu & Servo- ի կառավարման տարբեր ասպեկտները Arduino- ի և ESP8266 nodemcu- ի միջոցով:

ՆՊԱՏԱԿ

Այս բավականին պարզ նպատակը. Մենք վերահսկում ենք Servo շարժիչի դիրքը `օգտագործելով IMU- ի սկիպիդար արժեքը: Եվ բոլորը միասին այս սկիպիդարը և համաժամանակացված շարժիչի դիրքը պատկերավոր է մշակման միջոցով:

Քայլ 2: Պահանջվում է սարքավորում

NodeMCU ESP8266 12E Wifi մոդուլ

Առանց զոդման տախտակ

Jumper մետաղալար

MPU6050 accelo+գիրո

HC-12 ՌԴ մոդուլներ (զույգ)

SG90 սերվո շարժիչ

Քայլ 3: Շղթա և միացումներ

Շղթա և միացումներ
Շղթա և միացումներ
Շղթա և միացումներ
Շղթա և միացումներ

Կապերը ուղիղ են: Դուք կարող եք servo- ն սնուցել ձեր Nodemcu- ի 3.3 Վ -ով: Դուք կարող եք նաև օգտագործել Vin- ը ՝ սերվոն միացնելու համար, եթե ձեր nodemcu- ն այդքան լարվածություն ունի այդ կապում: Բայց Lolin- ի տախտակների մեծ մասը Vin- ում 5V չունի (կախված արտադրողից):

Այս սխեմաները կազմված են EasyADA- ի միջոցով:

Քայլ 4: ԱՇԽԱՏԱՆՔ

ԱՇԽԱՏԱՆՔ
ԱՇԽԱՏԱՆՔ

Արդուինոյի ուրվագիծը սկսելուն պես այն կուղարկի թեքության անկյունը (որը տատանվում է -45 -ից 45 -ի սահմաններում) Nodemcu- ի hc12 ընդունիչին, որը քարտեզագրվում է 0 -ից 180 աստիճանի Servo դիրքով: Այստեղ մենք օգտագործեցինք թեքության անկյունը -45 -ից +45 աստիճանի սահմաններում, որպեսզի կարողանանք հեշտությամբ քարտեզագրել այն Սերվոյի դիրքին:

Այժմ դուք մտածում եք, թե ինչու մենք կարող ենք պարզապես օգտագործել քարտեզի մեթոդը հետևյալ կերպ.

int pos = քարտեզ (val, -45, 45, 0, 180);

Քանի որ hc12 հաղորդիչի ուղարկած բացասական անկյունը ստացվում է հետևյալ կերպ.

1 -ին կես. (Տ) 0 -ից 45 => 0 -ից 45 (Շ)

2 -րդ կես. (T) -45 -ից -1 => 255 -ից 210 (R)

Այսպիսով, դուք պետք է այն քարտեզագրեք 0 -ից 180 -ի վրա

եթե (val> = 0 && val <= 45) pos = (val*2) +90; այլապես pos = (val-210)*2;

Ես խուսափում եմ քարտեզի մեթոդից որոշ անկապ սխալի պատճառով: Դուք կարող եք փորձել դա և մեկնաբանել, որ այն աշխատում է ձեզ հետ

եթե (val> = 0 && val <= 45) pos = քարտեզ (val, 0, 45, 90, 180); else pos = քարտեզ (val, 255, 210, 0, 90); // 4 -րդ փաստարկը կարող է լինել 2 (կարող եք ստուգել)

MPU6050 սկիպիդար անկյունի հաշվարկ

Ես օգտագործում եմ MPU6050_tockn գրադարանը, որը հիմնված է IMU- ից հում տվյալներ տրամադրելու վրա:

int pitchAngle = mpu6050.getAngleX ()

Սա մեզ կստանա x- առանցքի շուրջ պտտման անկյունը: Ինչպես տեսաք նկարում, իմ իմուն ուղղահայաց տեղադրված է տախտակի վրա, այնպես որ մի շփոթեք սկիպիդարով և գլորումով: Իրականում դուք միշտ պետք է տեսնեք առանցքը տպված բեկման տախտակի վրա:

Այս գրադարանի միջոցով դուք չպետք է անհանգստանաք հատուկ գործողությունների համար հատուկ գրանցամատյաններ կարդալու ներքին էլեկտրոնիկայի վերաբերյալ: Դուք միայն նշում եք աշխատանքը և ավարտված եք:

Btw, եթե ցանկանում եք ինքնուրույն հաշվարկել անկյունը: Դուք հեշտությամբ կարող եք դա անել հետևյալ կերպ.

#ներառում

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 (ճշմարիտ); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (կեղծ); Մետաղալար. Խնդրում ենք (MPU6050_addr, 14, ճշմարիտ); 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 = քարտեզ (AcX, minVal, maxVal, -90, 90); int yAng = քարտեզ (AcY, minVal, maxVal, -90, 90); int zAng = քարտեզ (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); }

Բայց, պարտադիր չէ, որ դուք այսքան կոդ գրեք ՝ անկյունը ստանալու համար: Դուք պետք է իմանաք կուլիսային փաստերը, բայց այլ մարդկանց գրադարան օգտագործելը շատ արդյունավետ է շատ նախագծերում: Այս imu- ի և այլ մոտավորությունների մասին կարող եք կարդալ ՝ հետևյալ հղումից ավելի շատ ֆիլտրացված տվյալներ ստանալու համար: Explore-mpu6050:

Փոխանցման վերջում գտնվող իմ arduino ծածկագիրը MPU6050_tockn գրադարանի օգնությամբ ունի ընդամենը 30 տող, այնպես որ գրադարանից օգտվելը լավ է, եթե IMU- ի ֆունկցիոնալության մեջ անհրաժեշտ չեն որոշ փոփոխություններ: Jeff Rowberg- ի I2Cdev անունով գրադարանը շատ օգտակար է, եթե ցանկանում եք որոշ ֆիլտրացված տվյալներ օգտագործել IMU- ի DMP (Թվային շարժման պրոցեսոր) միջոցով:

Մշակման հետ ինտեգրում

Այստեղ Մշակումն օգտագործվում է IMU- ի x առանցքի շուրջ պտտվող տվյալների պատկերացման համար `հաշվարկված MPU6050- ից ստացվող հումքի տվյալներով: Մենք ստանում ենք մուտքային հումքային տվյալները SerialEvent- ում հետևյալ եղանակով.

void serialEvent (Սերիական myPort) {

inString = myPort.readString (); փորձեք {// վերլուծել տվյալները // println (inString); Լար dataStrings = պառակտում (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); }}} բռնել (բացառություն ե) {println («Բռնված բացառություն»); }}

Այստեղ դուք կարող եք տեսնել արտացոլումը այս քայլին կցված պատկերում: Նոդեմկուի վերջում ստացված դիրքորոշման տվյալները տեսանելի են նաև սերիական մոնիտորի վրա, ինչպես ցույց է տրված նկարում:

Քայլ 5: ԿՈԴ

Ես կցել եմ github պահոցը: Դուք կարող եք այն կլոնավորել և պատառաքաղ օգտագործել ՝ ձեր նախագծերում օգտագործելու համար:

my_code

Ռեպոն ներառում է 2 arduino էսքիզ հաղորդիչի (arduino+IMU) և ընդունիչի (Nodemcu+Servo) համար:

Եվ մեկ մշակման ուրվագիծ: Աստղանշեք ռեպոն, եթե դա օգնում է ձեր նախագծին:

Այս ուսանելի, R- ընդունիչ & T- հաղորդիչ

Քայլ 6. ՏԵՍԱՆՅՈԹ ՈEMԱԴՐՈԹՅՈՆ

Տեսանյութը կցեմ վաղը: Հետևեք ինձ ծանուցվելու համար:

Շնորհակալություն բոլորին!

Խորհուրդ ենք տալիս: