Orodha ya maudhui:

Kudhibiti Servo Kutumia MPU6050 Kati ya Arduino na ESP8266 Pamoja na HC-12: Hatua 6
Kudhibiti Servo Kutumia MPU6050 Kati ya Arduino na ESP8266 Pamoja na HC-12: Hatua 6

Video: Kudhibiti Servo Kutumia MPU6050 Kati ya Arduino na ESP8266 Pamoja na HC-12: Hatua 6

Video: Kudhibiti Servo Kutumia MPU6050 Kati ya Arduino na ESP8266 Pamoja na HC-12: Hatua 6
Video: Как использовать акселерометр и гироскоп MPU-6050 с кодом Arduino 2024, Novemba
Anonim
Kudhibiti Servo Kutumia MPU6050 Kati ya Arduino na ESP8266 Pamoja na HC-12
Kudhibiti Servo Kutumia MPU6050 Kati ya Arduino na ESP8266 Pamoja na HC-12

Katika mradi huu, tunadhibiti msimamo wa motor servo kutumia mpu6050 na HC-12 kwa mawasiliano kati ya Arduino UNO na ESP8266 NodeMCU.

Hatua ya 1: KUHUSU MRADI HUU

Ni mradi mwingine wa IoT kulingana na moduli ya HC-12 RF. Hapa, data ya imu (mpu6050) kutoka arduino hutumiwa kudhibiti injini ya servo (iliyounganishwa na Nodemcu). Hapa, taswira ya data pia inafanywa kwa upande wa arduino ambapo data ya lami ya mpu6050 (mzunguko juu ya mhimili wa x) inaonyeshwa na mchoro wa usindikaji (uliojadiliwa baadaye). Kimsingi mradi huu ni joto kidogo tu kwa kukumbuka hali tofauti za udhibiti wa Imu & Servo na Arduino na ESP8266 nodemcu.

LENGO

Lengo la hii wazi kabisa, Tunadhibiti msimamo wa motor Servo kutumia kiwango cha lami cha IMU. Na wote kwa pamoja nafasi hii ya gari na iliyolandanishwa inaonyeshwa na Usindikaji.

Hatua ya 2: Vifaa vya vifaa vinahitajika

NodeMCU ESP8266 12E moduli ya Wifi

Bodi ya mkate isiyo na waya

Waya wa jumper

MPU6050 accelo + gyro

Moduli za HC-12 RF (jozi)

SG90 Servo motor

Hatua ya 3: Mzunguko na Muunganisho

Mzunguko na Uunganisho
Mzunguko na Uunganisho
Mzunguko na Uunganisho
Mzunguko na Uunganisho

Uunganisho ni sawa mbele. Unaweza nguvu servo na 3.3V ya Nodemcu yako. Unaweza pia kutumia Vin kuwezesha servo ikiwa nodemcu yako ina voltage nyingi kwenye pini hiyo. Lakini bodi nyingi za Lolin hazina 5V kwenye Vin (inategemea mtengenezaji).

Michoro hii ya mzunguko imetengenezwa kwa kutumia EasyADA.

Hatua ya 4: KUFANYA KAZI

KUFANYA KAZI
KUFANYA KAZI

Mara tu mchoro wa arduino ulipoanza, itatuma pembe ya lami (ambayo ni kati ya -45 hadi 45) kwa mpokeaji wa hc12 wa Nodemcu ambaye amepangwa na 0 hadi 180 nafasi ya Servo. Hapa tulitumia pembe ya lami kutoka -45 hadi +45 digrii ili tuweze kuiweka ramani hiyo kwa nafasi ya Servo.

Sasa, unafikiria kwanini tunaweza kutumia tu njia ya ramani kama ifuatavyo: -

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

Kwa sababu pembe hasi iliyotumwa na transmitter ya hc12 inapokelewa kama:

Nusu ya 1: (T) 0 hadi 45 => 0 hadi 45 (R)

Nusu ya 2: (T) -45 hadi -1 => 255 hadi 210 (R)

Kwa hivyo lazima uipange kwa 0 hadi 180 kama

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

Ninaepuka njia ya ramani kwa sababu ya hitilafu isiyo na maana. Unaweza kujaribu hiyo na kutoa maoni inafanya kazi na wewe

ikiwa (val> = 0 && val <= 45) pos = ramani (val, 0, 45, 90, 180); mwingine pos = ramani (val, 255, 210, 0, 90); // hoja ya 4 inaweza kuwa 2 (unaweza kuangalia)

Hesabu ya Pembe ya Angle ya MPU6050

Ninatumia maktaba ya MPU6050_tockn ambayo inategemea kutoa data ghafi kutoka kwa IMU.

int pitchAngle = mpu6050.getAngleX ()

Hii itatupatia pembe ya mzunguko juu ya mhimili wa x. Kama unavyoona kwenye takwimu, imu yangu imewekwa wima kwenye ubao wa mkate kwa hivyo usichanganye na lami na roll. Kweli unapaswa kuona kila wakati mhimili umechapishwa kwenye bodi ya kuzuka.

Kupitia maktaba hii, sio lazima ujisumbue juu ya umeme wa ndani wa kusoma rejista maalum za operesheni maalum. wewe taja kazi tu na umemaliza!

Btw ikiwa unataka kuhesabu pembe na wewe mwenyewe. Unaweza kuifanya kwa urahisi kama ifuatavyo:

# pamoja

const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; kuanzisha batili () {Wire.begin (); Uwasilishaji wa waya (MPU6050_addr); Andika waya (0x6B); Andika waya (0); Uwasilishaji wa waya (kweli); Kuanzia Serial (9600); } kitanzi batili () {Wire.beginTransmission (MPU6050_addr); Andika waya (0x3B); Uwasilishaji wa waya (uwongo); Ombi la Wire. From (MPU6050_addr, 14, kweli); 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 = waya.soma () << 8 | Wire.read (); GyroZ = Wire.read () << 8 | Wire.read ();

int xAng = ramani (AcX, minVal, maxVal, -90, 90); int yAng = ramani (AcY, minVal, maxVal, -90, 90); int zAng = ramani (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); }

Lakini, sio lazima kwamba utaandika nambari hii nyingi kupata pembe. Unapaswa kujua ukweli nyuma ya eneo lakini kutumia maktaba ya watu wengine ni bora sana katika miradi mingi. Unaweza kusoma juu ya imu hii na viboreshaji vingine kupata data iliyochujwa zaidi kutoka kwa kiunga kifuatacho: Chunguza-mpu6050.

Nambari yangu ya arduino mwisho wa kupitisha ina laini 30 tu kwa msaada wa maktaba ya MPU6050_tockn kwa hivyo kutumia maktaba ni nzuri isipokuwa hauitaji mabadiliko ya msingi kwa utendaji wa IMU. Maktaba inayoitwa I2Cdev na Jeff Rowberg inasaidia sana ikiwa unataka data fulani iliyochujwa kwa kutumia DMP (processor ya mwendo wa dijiti) ya IMU.

Ujumuishaji na Usindikaji

Hapa Usindikaji hutumiwa kutazama data ya mzunguko kuhusu x-axis ya IMU kama ilivyohesabiwa na data ghafi inayotoka MPU6050. Tunapokea data mbichi inayoingia katika SerialEvent kwa njia ifuatayo:

tupu serialEvent (Serial myPort) {

inString = myPort.readString (); jaribu {// Changanua data // println (inString); Kamba dataStrings = split (inString, ':'); ikiwa (dataStrings.length == 2) {if (dataStrings [0].sawa ("RAW")) {for (int i = 0; i <dataStrings.length - 1; i ++) {raw = kuelea (dataStrings [i + 1]); }} mwingine {println (inString); }}}} kukamata (Isipokuwa e) {println ("Ukamataji wa Kushikwa"); }}

Hapa unaweza kuona taswira kwenye picha iliyoambatishwa katika hatua hii. Takwimu za msimamo zilizopokelewa mwishoni mwa nodemcu pia zinaonekana kwenye mfuatiliaji wa serial kama inavyoonyeshwa kwenye picha.

Hatua ya 5: CODE

Nimeambatanisha hifadhi ya github. Unaweza kuibamba na kuitumia katika miradi yako.

nambari_yangu

Repo ni pamoja na mchoro wa arduino 2 wa transmitter (arduino + IMU) & mpokeaji (Nodemcu + Servo).

Na mchoro mmoja wa usindikaji. Weka nyota repo ikiwa hii inasaidia katika mradi wako.

Katika hii kufundisha, R- Mpokeaji na T- Transmitter

Hatua ya 6: MAONYESHO YA VIDEO

Nitaambatanisha video hiyo kesho. Nifuate ili ujulishwe.

Asanteni nyote!

Ilipendekeza: