Satura rādītājs:

Servo vadīšana, izmantojot MPU6050 starp Arduino un ESP8266 ar HC-12: 6 soļi
Servo vadīšana, izmantojot MPU6050 starp Arduino un ESP8266 ar HC-12: 6 soļi

Video: Servo vadīšana, izmantojot MPU6050 starp Arduino un ESP8266 ar HC-12: 6 soļi

Video: Servo vadīšana, izmantojot MPU6050 starp Arduino un ESP8266 ar HC-12: 6 soļi
Video: Servo motora vadība, izmantojot WEB un Raspberry Pi 4 2024, Novembris
Anonim
Servo vadīšana, izmantojot MPU6050 starp Arduino un ESP8266 ar HC-12
Servo vadīšana, izmantojot MPU6050 starp Arduino un ESP8266 ar HC-12

Šajā projektā mēs kontrolējam servomotora stāvokli, izmantojot mpu6050 un HC-12, lai sazinātos starp Arduino UNO un ESP8266 NodeMCU.

1. darbība: PAR ŠO PROJEKTU

Tas ir vēl viens IoT projekts, kura pamatā ir RF-12 RF modulis. Šeit servu motora (savienots ar Nodemcu) vadīšanai tiek izmantoti imu (mpu6050) dati no arduino. Šeit datu vizualizācija tiek veikta arī arduino pusē, kur mpu6050 piķa dati (rotācija ap x asi) tiek vizualizēti ar apstrādes skici (aplūkota vēlāk). Būtībā šis projekts ir tikai nedaudz iesildīšanās, lai atcerētos dažādus Imu & Servo vadības aspektus ar Arduino un ESP8266 nodemcu.

MĒRĶIS

Šī diezgan skaidrā mērķis ir kontrolēt Servo motora stāvokli, izmantojot IMU piķa vērtību. Un kopā šis piķis un sinhronizētā motora pozīcija tiek vizualizēta, izmantojot apstrādi.

2. darbība. Nepieciešama aparatūra

NodeMCU ESP8266 12E Wifi modulis

Maizes dēlis bez lodēšanas

Džempera vads

MPU6050 accelo+žiroskops

HC-12 RF moduļi (pāri)

Servomotors SG90

3. darbība: ķēde un savienojumi

Ķēde un savienojumi
Ķēde un savienojumi
Ķēde un savienojumi
Ķēde un savienojumi

Savienojumi ir taisni uz priekšu. Jūs varat darbināt servo ar 3,3 V Nodemcu. Jūs varat arī izmantot Vin, lai darbinātu servo, ja jūsu nodemcu ir tik daudz sprieguma šajā tapā. Bet lielākajai daļai Lolin dēļu nav 5V pie Vin (atkarīgs no ražotāja).

Šīs shēmas ir izgatavotas, izmantojot EasyADA.

4. solis: DARBĪBA

DARBA
DARBA

Tiklīdz arduino skice ir sākusies, tā nosūta slīpuma leņķi (diapazonā no -45 līdz 45) uz Nodemcu hc12 uztvērēju, kas tiek kartēts ar 0 līdz 180 grādu servo pozīciju. Šeit mēs izmantojām slīpuma leņķi no -45 līdz +45 grādiem, lai to varētu viegli kartēt servo pozīcijā.

Tagad jūs domājat, kāpēc mēs varam vienkārši izmantot kartes metodi šādi:-

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

Tā kā raidītāja hc12 sūtītais negatīvais leņķis tiek uztverts kā:

1. puse: (T) 0 līdz 45 => 0 līdz 45 (R)

2. puse: (T) -45 līdz -1 => 255 līdz 210 (R)

Tātad jums tas ir jākartē līdz 0 līdz 180

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

Es izvairos no kartes metodes kādas neatbilstošas kļūdas dēļ. Jūs varat to izmēģināt un komentēt, ka tas jums palīdz

ja (val> = 0 && val <= 45) pos = karte (val, 0, 45, 90, 180); else pos = karte (val, 255, 210, 0, 90); // 4. arguments var būt 2 (varat pārbaudīt)

MPU6050 soļa leņķa aprēķins

Es izmantoju MPU6050_tockn bibliotēku, kuras pamatā ir izejas datu sniegšana no IMU.

int pitchAngle = mpu6050.getAngleX ()

Tādējādi mēs iegūsim rotācijas leņķi ap x asi. Kā redzat attēlā, mans imu ir vertikāli novietots uz maizes dēļa, tāpēc nejaucieties ar piķi un rullīti. Patiesībā ass vienmēr ir jāredz uz sadalīšanas paneļa.

Izmantojot šo bibliotēku, jums nav jāuztraucas par iekšējo elektroniku, lasot īpašus reģistrus konkrētai darbībai. jūs norādāt tikai darbu un esat pabeidzis!

Btw, ja vēlaties pats aprēķināt leņķi. To var viegli izdarīt šādi:

#iekļaut

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 (true); Sērijas sākums (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (nepatiesa); 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 = karte (AcX, minVal, maxVal, -90, 90); int yAng = karte (AcY, minVal, maxVal, -90, 90); int zAng = karte (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); }

Bet, lai iegūtu leņķi, nav nepieciešams rakstīt tik daudz koda. Jums jāzina fakti aiz ainas, taču citu cilvēku bibliotēkas izmantošana ir ļoti efektīva daudzos projektos. Par šo imu un citām metodēm varat lasīt, lai iegūtu vairāk filtrētu datu, izmantojot šo saiti: Explore-mpu6050.

Manam arduino kodam pārraides galā ir tikai 30 rindas, izmantojot MPU6050_tockn bibliotēku, tāpēc bibliotēkas izmantošana ir laba, ja vien jums nav nepieciešamas dažas galvenās izmaiņas IMU funkcionalitātē. Bibliotēka ar nosaukumu Jeff Rowberg ar nosaukumu I2Cdev ir ļoti noderīga, ja vēlaties filtrēt datus, izmantojot IMU DMP (Digital Motion Processor).

Integrācija ar apstrādi

Šeit apstrādi izmanto, lai vizualizētu rotācijas datus par IMU x asi, kas aprēķināta pēc neapstrādātiem datiem, kas iegūti no MPU6050. Ienākošos neapstrādātos datus SerialEvent saņemam šādā veidā:

void serialEvent (Serial myPort) {

inString = myPort.readString (); try {// Parsēt datus // println (inString); String dataStrings = split (inString, ':'); ja (dataStrings.length == 2) {ja (dataStrings [0].equals ("RAW")) {par (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i+1]); }} else {println (inString); }}} catch (Izņēmums e) {println ("Noķertais izņēmums"); }}

Šeit jūs varat redzēt vizualizāciju šajā solī pievienotajā attēlā. Nodemcu galā saņemtie pozīcijas dati ir redzami arī sērijas monitorā, kā parādīts attēlā.

5. darbība: KODĒT

Esmu pievienojis github krātuvi. Varat to klonēt un izmantot, lai to izmantotu savos projektos.

my_code

Repo ietver 2 arduino skices raidītājam (arduino+IMU) un uztvērējam (Nodemcu+Servo).

Un viena apstrādes skice. Atzīmējiet repo ar zvaigznīti, ja tas palīdz jūsu projektā.

Šajā pamācībā, R- uztvērējs un T-raidītājs

6. darbība: VIDEO DEMONSTRĀCIJA

Rīt pievienošu video. Sekojiet man, lai saņemtu paziņojumu.

Paldies jums visiem!

Ieteicams: