Indholdsfortegnelse:

Styring af servo ved hjælp af MPU6050 mellem Arduino og ESP8266 med HC-12: 6 trin
Styring af servo ved hjælp af MPU6050 mellem Arduino og ESP8266 med HC-12: 6 trin

Video: Styring af servo ved hjælp af MPU6050 mellem Arduino og ESP8266 med HC-12: 6 trin

Video: Styring af servo ved hjælp af MPU6050 mellem Arduino og ESP8266 med HC-12: 6 trin
Video: MPU-6050 Gyroscope Teapot demo 3D simulation 2024, Juli
Anonim
Styring af servo ved hjælp af MPU6050 mellem Arduino og ESP8266 med HC-12
Styring af servo ved hjælp af MPU6050 mellem Arduino og ESP8266 med HC-12

I dette projekt kontrollerer vi placeringen af en servomotor ved hjælp af mpu6050 og HC-12 til kommunikation mellem Arduino UNO og ESP8266 NodeMCU.

Trin 1: OM DETTE PROJEKT

Det er et andet IoT-projekt baseret på HC-12 RF-modul. Her bruges imu (mpu6050) data fra arduino til at styre servomotoren (forbundet med Nodemcu). Her udføres datavisualiseringen også på arduino-side, hvor mpu6050-pitchdata (rotation om x-aksen) visualiseres med en behandlingsskitse (diskuteret senere). Grundlæggende er dette projekt bare en lille opvarmning til at huske forskellige aspekter af Imu & Servo -kontrol med Arduino og ESP8266 nodemcu.

OBJEKTIV

Formålet med denne temmelig klare, Vi styrer placeringen af Servomotor ved hjælp af pitch -værdien af IMU. Og alt sammen visualiseres denne tonehøjde og synkroniserede motorposition med Processing.

Trin 2: Hardware påkrævet

NodeMCU ESP8266 12E Wifi -modul

Loddefrit brødbræt

Jumper wire

MPU6050 accelo+gyro

HC-12 RF-moduler (par)

SG90 Servomotor

Trin 3: Kredsløb og forbindelser

Kredsløb og forbindelser
Kredsløb og forbindelser
Kredsløb og forbindelser
Kredsløb og forbindelser

Forbindelser er ligetil. Du kan drive servoen med 3,3V af din Nodemcu. Du kan også bruge Vin til at drive servoen, hvis din nodemcu har så meget spænding på den pin. Men de fleste Lolin -tavler har ikke 5V hos Vin (afhænger af producenten).

Disse kredsløbsdiagrammer er lavet ved hjælp af EasyADA.

Trin 4: ARBEJDE

ARBEJDER
ARBEJDER

Så snart arduino -skitsen startede, sender den pitchvinklen (som spænder fra -45 til 45) til hc12 -modtageren på Nodemcu, der bliver kortlagt med 0 til 180 graders servoposition. Her brugte vi pitchvinklen fra -45 til +45 grader, så vi let kan kortlægge det til Servopositionen.

Nu tænker du, hvorfor kan vi simpelthen bruge kortmetoden som følger:-

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

Fordi den negative vinkel, der sendes af hc12 -senderen, modtages som:

1. halvleg: (T) 0 til 45 => 0 til 45 (R)

2. halvleg: (T) -45 til -1 => 255 til 210 (R)

Så du skal kortlægge den til 0 til 180 som

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

Jeg undgår kortmetoden på grund af en irrelevant fejl. Du kan prøve det og kommentere det virker med dig

hvis (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); ellers pos = map (val, 255, 210, 0, 90); // 4. argument kan være 2 (du kan kontrollere)

MPU6050 Beregning af stigningsvinkel

Jeg bruger MPU6050_tockn bibliotek, der er baseret på at give rådata fra IMU.

int pitchAngle = mpu6050.getAngleX ()

Dette får os rotationsvinklen omkring x-aksen. Som du ser på figuren, er min imu lodret placeret på brødbrættet, så forveks ikke med pitch and roll. Faktisk bør du altid se aksen trykt på breakout -kortet.

Gennem dette bibliotek behøver du ikke bekymre dig om den interne elektronik til at læse bestemte registre til specifik drift. du angiver kun jobbet, og du er færdig!

Btw hvis du selv vil beregne vinklen. Du kan nemt gøre det som følger:

#omfatte

const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; ugyldig opsætning () {Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (sand); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (falsk); 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 = map (AcX, minVal, maxVal, -90, 90); int yAng = map (AcY, minVal, maxVal, -90, 90); int zAng = map (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); }

Men det er ikke nødvendigt, at du skriver så meget kode for at få vinklen. Du bør kende fakta bag scenen, men at bruge bibliotek af andre mennesker er meget effektivt i mange projekter. Du kan læse om denne imu og andre godkendelser for at få mere filtred data fra følgende link: Explore-mpu6050.

Min arduino -kode i transmitterenden har kun 30 linjer ved hjælp af MPU6050_tockn -biblioteket, så det er godt at bruge et bibliotek, medmindre du ikke har brug for nogle centrale ændringer af funktionaliteten i IMU. Et bibliotek ved navn I2Cdev af Jeff Rowberg er meget nyttigt, hvis du vil have nogle filtrerede data ved hjælp af DMP (Digital motion processor) på IMU.

Integration med forarbejdning

Her bruges Processing til at visualisere rotationsdata om x-aksen for IMU beregnet af rådataene fra MPU6050. Vi modtager de indgående rådata i SerialEvent på følgende måde:

void serialEvent (Serial myPort) {

inString = myPort.readString (); prøv {// Parse 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]); }} else {println (inString); }}} catch (Undtagelse e) {println ("Fanget Undtagelse"); }}

Her kan du se visualisering på billedet vedhæftet i dette trin. De positionsdata, der modtages i nodemcu -enden, ses også på den serielle skærm som vist på billedet.

Trin 5: KODE

Jeg har vedhæftet github -depotet. Du kan klone og gaffel det til brug i dine projekter.

min_kode

Repoen indeholder 2 arduino -skitser til sender (arduino+IMU) og modtager (Nodemcu+Servo).

Og en bearbejdningsskitse. Star stjernen, hvis dette hjælper i dit projekt.

I denne instruktive, R- modtager og T- sender

Trin 6: VIDEO DEMONSTRATION

Jeg vedhæfter videoen i morgen. Følg mig for at få besked.

Tak allesammen!

Anbefalede: