Innholdsfortegnelse:

Kontrollere servo ved bruk av MPU6050 mellom Arduino og ESP8266 med HC-12: 6 trinn
Kontrollere servo ved bruk av MPU6050 mellom Arduino og ESP8266 med HC-12: 6 trinn

Video: Kontrollere servo ved bruk av MPU6050 mellom Arduino og ESP8266 med HC-12: 6 trinn

Video: Kontrollere servo ved bruk av MPU6050 mellom Arduino og ESP8266 med HC-12: 6 trinn
Video: Lesson 24: Smart Car Part 2: Moving Forwared, Reverse, left and right and Controling Speed of Car 2024, November
Anonim
Kontrollere servo ved bruk av MPU6050 mellom Arduino og ESP8266 med HC-12
Kontrollere servo ved bruk av MPU6050 mellom Arduino og ESP8266 med HC-12

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

Krets og tilkoblinger
Krets og tilkoblinger
Krets og tilkoblinger
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

JOBBER
JOBBER

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: