Innehållsförteckning:

Styr servo med MPU6050 mellan Arduino och ESP8266 med HC-12: 6 steg
Styr servo med MPU6050 mellan Arduino och ESP8266 med HC-12: 6 steg

Video: Styr servo med MPU6050 mellan Arduino och ESP8266 med HC-12: 6 steg

Video: Styr servo med MPU6050 mellan Arduino och ESP8266 med HC-12: 6 steg
Video: Урок 96: Датчик атмосферного давления, температуры, приблизительной высоты BMP390 с ЖК-дисплеем 2024, Juli
Anonim
Styr servo med MPU6050 mellan Arduino och ESP8266 med HC-12
Styr servo med MPU6050 mellan Arduino och ESP8266 med HC-12

I detta projekt styr vi positionen för en servomotor med mpu6050 och HC-12 för kommunikation mellan Arduino UNO och ESP8266 NodeMCU.

Steg 1: OM DETTA PROJEKT

Det är ett annat IoT-projekt baserat på HC-12 RF-modul. Här används imu (mpu6050) data från arduino för att styra servomotorn (ansluten till Nodemcu). Här utförs datavisualiseringen också på arduinosidan där mpu6050 tonhöjdsdata (rotation om x-axeln) visualiseras med en bearbetningsskiss (diskuteras senare). I grund och botten är detta projekt bara en liten uppvärmning för att komma ihåg olika aspekter av Imu & Servo -kontroll med Arduino och ESP8266 nodemcu.

MÅL

Målet med detta ganska klart, Vi kontrollerar positionen för Servomotor med hjälp av tonvärdet för IMU. Och tillsammans visualiseras denna tonhöjd och synkroniserade motorposition med Processing.

Steg 2: Hårdvara krävs

NodeMCU ESP8266 12E Wifi -modul

Lödlös brödbräda

Bygeltråd

MPU6050 accelo+gyro

HC-12 RF-moduler (par)

SG90 servomotor

Steg 3: Krets och anslutningar

Krets och anslutningar
Krets och anslutningar
Krets och anslutningar
Krets och anslutningar

Anslutningarna är raka fram. Du kan driva servon med 3,3V av din Nodemcu. Du kan också använda Vin för att driva servon om din nodemcu har så mycket spänning på den stiftet. Men de flesta Lolin -brädor har inte 5V på Vin (beror på tillverkaren).

Dessa kretsscheman är gjorda med EasyADA.

Steg 4: ARBETE

ARBETSSÄTT
ARBETSSÄTT

Så snart arduino -skissen startade kommer den att skicka tonvinkeln (som sträcker sig från -45 till 45) till hc12 -mottagaren på Nodemcu som kartläggs med 0 till 180 graders servoposition. Här använde vi pitchvinkeln från -45 till +45 grader så att vi enkelt kan kartlägga det till Servopositionen.

Nu tänker du varför kan vi helt enkelt använda kartmetoden enligt följande:-

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

Eftersom den negativa vinkel som skickas av hc12 -sändaren tas emot som:

1: a halvlek: (T) 0 till 45 => 0 till 45 (R)

2: a halvan: (T) -45 till -1 => 255 till 210 (R)

Så du måste kartlägga den till 0 till 180 som

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

Jag undviker kartmetoden på grund av något irrelevant fel. Du kan prova det och kommentera att det fungerar med dig

if (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); annars pos = map (val, 255, 210, 0, 90); // 4: e argumentet kan vara 2 (du kan kontrollera)

MPU6050 Beräkning av stigningsvinkel

Jag använder MPU6050_tockn bibliotek som är baserat på att ge ut rådata från IMU.

int pitchAngle = mpu6050.getAngleX ()

Detta kommer att ge oss rotationsvinkeln kring x-axeln. Som du ser i figuren är min imu vertikalt placerad på brödbrädan så blanda inte ihop med pitch and roll. Egentligen bör du alltid se axeln tryckt på utbrottskortet.

Genom detta bibliotek behöver du inte bry dig om den interna elektroniken för att läsa specifika register för specifik drift. du anger bara jobbet och du är klar!

Btw om du vill beräkna vinkeln själv. Du kan enkelt göra det enligt följande:

#omfatta

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); 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 är inte nödvändigt att du skriver så mycket kod för att få vinkeln. Du bör veta fakta bakom scenen, men att använda bibliotek av andra människor är mycket effektivt i många projekt. Du kan läsa om denna imu och andra godkännanden för att få mer filtrerad data från följande länk: Explore-mpu6050.

Min arduino -kod i överföringsänden har bara 30 rader med hjälp av MPU6050_tockn -biblioteket, så att använda ett bibliotek är bra om du inte behöver några kärnändringar i IMU: s funktionalitet. Ett bibliotek som heter I2Cdev av Jeff Rowberg är till stor hjälp om du vill ha lite filtrerad data med hjälp av DMP (Digital motion processor) på IMU.

Integration med bearbetning

Här används Processing för att visualisera rotationsdata om x-axeln för IMU, beräknat med rådata från MPU6050. Vi tar emot inkommande rådata i SerialEvent på följande sätt:

void serialEvent (Serial myPort) {

inString = myPort.readString (); prova {// Analysera data // println (inString); String dataStrings = split (inString, ':'); if (dataStrings.length == 2) {if (dataStrings [0].equals ("RAW")) {för (int i = 0; i <dataStrings.length - 1; i ++) {raw = float (dataStrings [i+1]); }} else {println (inString); }}} catch (Undantag e) {println ("Fångat undantag"); }}

Här kan du se visualisering i bilden som bifogas i detta steg. Positionsdata som tas emot vid nodemcu -änden ses också på den seriella monitorn som visas på bilden.

Steg 5: KOD

Jag har bifogat github -förvaret. Du kan klona och gaffla den för att använda i dina projekt.

min_kod

Repo innehåller 2 arduinoskisser för sändare (arduino+IMU) och mottagare (Nodemcu+Servo).

Och en bearbetningsskiss. Stjärna repo om detta hjälper i ditt projekt.

I denna instruerbara, R- mottagare och T- sändare

Steg 6: VIDEODEMONSTRATION

Jag bifogar videon imorgon. Följ mig för att få ett meddelande.

Tack allihopa!

Rekommenderad: