Indholdsfortegnelse:
- Trin 1: OM DETTE PROJEKT
- Trin 2: Hardware påkrævet
- Trin 3: Kredsløb og forbindelser
- Trin 4: ARBEJDE
- Trin 5: KODE
- Trin 6: VIDEO DEMONSTRATION
Video: Styring af servo ved hjælp af MPU6050 mellem Arduino og ESP8266 med HC-12: 6 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:28
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
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
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:
Styring af 2 servoer ved hjælp af analog joystick .: 5 trin (med billeder)
Kontrol af 2 servoer ved hjælp af analog joystick .: Hej fyre, dette er min første instruerbare og i dette indlæg deler jeg, hvordan du bruger Analog Joystick til at styre servoer ved hjælp af Arduino UNO. Jeg vil prøve at forklare det så enkelt som muligt håber du kan lide det
Trådløs fjernbetjening ved hjælp af 2,4 GHz NRF24L01 -modul med Arduino - Nrf24l01 4 -kanals / 6 -kanals sender modtager til Quadcopter - Rc Helikopter - Rc -fly ved hjælp af Arduino: 5 trin (med billeder)
Trådløs fjernbetjening ved hjælp af 2,4 GHz NRF24L01 -modul med Arduino | Nrf24l01 4 -kanals / 6 -kanals sender modtager til Quadcopter | Rc Helikopter | Rc -fly ved hjælp af Arduino: At betjene en Rc -bil | Quadcopter | Drone | RC -fly | RC -båd, vi har altid brug for en modtager og sender, antag at vi til RC QUADCOPTER har brug for en 6 -kanals sender og modtager, og den type TX og RX er for dyr, så vi laver en på vores
Styring af 7-segment LED-display ved hjælp af ESP8266 webserver: 8 trin (med billeder)
Styring af 7-segment LED-display ved hjælp af ESP8266 webserver: Mit projekt har en Nodemcu ESP8266, der styrer en 7-segment skærm via http-serveren ved hjælp af html-formular
Autonom styring af motorens omdrejningstal ved hjælp af feedback -system fra et IR -baseret omdrejningstæller: 5 trin (med billeder)
Autonom styring af motorens omdrejningstal ved hjælp af feedback -system fra en IR -baseret omdrejningstæller: Der er altid et behov for at automatisere en proces, det være sig en enkel/monstrøs. metoder til vanding/vanding af vores lille stykke jord. Problemet med ingen strømforsyningsledning
Android (remotexy) UI til styring af servomotor ved hjælp af Arduino og Bluetooth: 7 trin (med billeder)
Android (remotexy) UI til styring af servomotor ved hjælp af Arduino og Bluetooth: I denne instruktive vil jeg give dig et hurtigt trin til at lave Android brugergrænseflade ved hjælp af Remotexy Interface Maker til at styre servomotor forbundet til Arduino Mega via Bluetooth. Denne video viser, hvordan brugergrænsefladen styrer servomotorhastighed og position