Innholdsfortegnelse:
- Trinn 1: OM DETTE PROJEKTET
- Trinn 2: Maskinvare nødvendig
- Trinn 3: Krets og tilkoblinger
- Trinn 4: ARBEID
- Trinn 5: KODE
- Trinn 6: VIDEO -DEMONSTRASJON
Video: Kontrollere servo ved bruk av MPU6050 mellom Arduino og ESP8266 med HC-12: 6 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:23
I dette prosjektet kontrollerer vi posisjonen til en servomotor ved hjelp av mpu6050 og HC-12 for kommunikasjon mellom Arduino UNO og ESP8266 NodeMCU.
Trinn 1: OM DETTE PROJEKTET
Det er et annet IoT-prosjekt basert på HC-12 RF-modul. Her brukes imu (mpu6050) dataene fra arduino for å kontrollere servomotoren (koblet til Nodemcu). Her blir datavisualiseringen også utført på arduino-siden der mpu6050 pitchdata (rotasjon om x-aksen) visualiseres med en behandlingsskisse (diskutert senere). I utgangspunktet er dette prosjektet bare en liten oppvarming for å huske forskjellige aspekter ved Imu & Servo -kontroll med Arduino og ESP8266 nodemcu.
OBJEKTIV
Målet med denne ganske klare, Vi kontrollerer posisjonen til servomotoren ved å bruke pitch -verdien til IMU. Og alt sammen blir denne tonehøyden og den synkroniserte motorposisjonen visualisert med Processing.
Trinn 2: Maskinvare nødvendig
NodeMCU ESP8266 12E Wifi -modul
Loddefritt brødbrett
Jumper wire
MPU6050 accelo+gyro
HC-12 RF-moduler (par)
SG90 Servomotor
Trinn 3: Krets og tilkoblinger
Tilkoblinger er rett frem. Du kan drive servoen med 3,3V av din Nodemcu. Du kan også bruke Vin til å drive servoen hvis din nodemcu har så mye spenning på den pinnen. Men de fleste Lolin -plater har ikke 5V på Vin (avhenger av produsenten).
Disse kretsdiagrammene er laget med EasyADA.
Trinn 4: ARBEID
Så snart arduino -skissen startet, sender den pitchvinkelen (som varierer fra -45 til 45) til hc12 -mottakeren til Nodemcu som blir kartlagt med 0 til 180 graders servoposisjon. Her brukte vi stigningsvinkelen fra -45 til +45 grader slik at vi enkelt kan kartlegge det til Servoposisjonen.
Nå tenker du på hvorfor vi bare kan bruke kartmetoden som følger:-
int pos = kart (val, -45, 45, 0, 180);
Fordi den negative vinkelen som sendes av hc12 -senderen mottas som:
1. omgang: (T) 0 til 45 => 0 til 45 (R)
2. omgang: (T) -45 til -1 => 255 til 210 (R)
Så du må kartlegge den til 0 til 180 som
hvis (val> = 0 && val <= 45) pos = (val*2) +90; annet pos = (val-210)*2;
Jeg unngår kartmetoden på grunn av en irrelevant feil. Du kan prøve det og kommentere det fungerer med deg
hvis (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); ellers pos = kart (val, 255, 210, 0, 90); // 4. argument kan være 2 (du kan sjekke)
MPU6050 Beregning av stigningsvinkel
Jeg bruker MPU6050_tockn bibliotek som er basert på å gi ut rådata fra IMU.
int pitchAngle = mpu6050.getAngleX ()
Dette vil gi oss rotasjonsvinkelen rundt x-aksen. Som du ser på figuren, er imuen min vertikalt plassert på brødbrettet, så ikke forveksle med pitch and roll. Egentlig bør du alltid se aksen trykt på utbruddstavlen.
Gjennom dette biblioteket trenger du ikke å bry deg om den interne elektronikken til å lese spesifikke registre for spesifikk drift. du angir bare jobben og du er ferdig!
Btw hvis du vil beregne vinkelen selv. Du kan enkelt gjøre det som følger:
#inkludere
const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; ugyldig oppsett () {Wire.begin (); Wire.beginTransmission (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (true); Serial.begin (9600); } void loop () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (false); 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ødvendig at du skriver så mye kode for å få vinkelen. Du bør kjenne fakta bak scenen, men å bruke bibliotek av andre mennesker er veldig effektivt i mange prosjekter. Du kan lese om denne imu og andre godkjenninger for å få mer filtred data fra følgende lenke: Explore-mpu6050.
Min arduino -kode i senderenden har bare 30 linjer ved hjelp av MPU6050_tockn -biblioteket, så det er bra å bruke et bibliotek med mindre du ikke trenger noen kjerneendringer i funksjonaliteten til IMU. Et bibliotek ved navn I2Cdev av Jeff Rowberg er veldig nyttig hvis du vil ha noen filtrerte data ved hjelp av DMP (Digital motion processor) til IMU.
Integrasjon med prosessering
Her brukes prosessering for å visualisere rotasjonsdataene om x-aksen til IMU beregnet av rådataene som kommer fra MPU6050. Vi mottar innkommende rådata i SerialEvent på følgende måte:
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 (Unntak e) {println ("Fanget Unntak"); }}
Her kan du se visualisering i bildet vedlagt i dette trinnet. Posisjonsdataene som mottas i nodemcu -enden, sees også på den serielle skjermen som vist på bildet.
Trinn 5: KODE
Jeg har vedlagt github -depotet. Du kan klone og gaffle den til bruk i prosjektene dine.
min_kode
Repoen inneholder 2 arduino -skisser for sender (arduino+IMU) og mottaker (Nodemcu+Servo).
Og en bearbeidingsskisse. Starre repoen hvis dette hjelper i prosjektet ditt.
I dette instruerbare, R- mottaker og T- sender
Trinn 6: VIDEO -DEMONSTRASJON
Jeg legger ved videoen i morgen. Følg meg for å bli varslet.
Takk alle sammen!
Anbefalt:
Bruk bevegelser for å kontrollere YouTube -avspilling med Arduino: 5 trinn
Bruk bevegelser for å kontrollere YouTube -avspilling med Arduino: StoryYouTube lar deg bare spole fremover 5 sekunder hver gang du klikker på høyre knapp. Så jeg bestemte meg for å bruke Arduino og python til å lage en kontroller for å hjelpe meg å spole 20 sekunder hver gang jeg vifter med hånden
Bruk Cortana og en Arduino for å kontrollere RGB -lysdioder eller Ledstrips med stemmen din !: 4 trinn (med bilder)
Bruk Cortana og en Arduino for å kontrollere RGB -lysdioder eller ledstrips med stemmen din !: I denne instruksjonsfilen vil jeg vise deg hvordan du kan kontrollere din RGB -ledede eller ledede stripe med stemmen din. Dette gjøres av CoRGB -appen som er tilgjengelig gratis i Windows App Store. Denne appen er en del av mitt CortanaRoom -prosjekt. Når du er ferdig med
Kontrollere likestrømsmotorer med L298N ved bruk av CloudX mikrokontroller: 3 trinn
Kontrollere likestrømsmotorer med L298N ved bruk av CloudX mikrokontroller: I dette prosjektet forklarer vi hvordan vi bruker vår L298N H-bro for å øke og redusere hastigheten på likestrømsmotoren. L298N H-bromodulen kan brukes med motorer som har en spenning på mellom 5 og 35V DC. Det er også en innebygd 5V regulator, så hvis din
Hvordan lage en IoT -enhet for å kontrollere apparater og overvåke været ved bruk av Esp8266: 5 trinn
Hvordan lage en IoT-enhet for å kontrollere apparater og overvåke været ved bruk av Esp8266: Tingenes internett (IoT) er et nettverk mellom fysiske enheter (også referert til som "tilkoblede enheter" og "smarte enheter"), bygninger, og andre ting innebygd med elektronikk, programvare, sensorer, aktuatorer og
Bevegelseskontrollbil ved bruk av Mpu6050 og Arduino: 7 trinn (med bilder)
Bevegelseskontrollbil ved bruk av Mpu6050 og Arduino: her er en håndkontrollbevegelseskontrollbil, laget ved bruk av mpu6050 og arduino. Jeg bruker rf -modul for trådløs tilkobling