INHOUDSOPGAWE:

Servo beheer met behulp van MPU6050 tussen Arduino en ESP8266 met HC-12: 6 stappe
Servo beheer met behulp van MPU6050 tussen Arduino en ESP8266 met HC-12: 6 stappe

Video: Servo beheer met behulp van MPU6050 tussen Arduino en ESP8266 met HC-12: 6 stappe

Video: Servo beheer met behulp van MPU6050 tussen Arduino en ESP8266 met HC-12: 6 stappe
Video: Урок 96: Датчик атмосферного давления, температуры, приблизительной высоты BMP390 с ЖК-дисплеем 2024, Julie
Anonim
Beheer van servo met behulp van MPU6050 tussen Arduino en ESP8266 met HC-12
Beheer van servo met behulp van MPU6050 tussen Arduino en ESP8266 met HC-12

In hierdie projek beheer ons die posisie van 'n servomotor met behulp van die mpu6050 en HC-12 vir kommunikasie tussen Arduino UNO en ESP8266 NodeMCU.

Stap 1: OOR HIERDIE PROJEK

Dit is nog 'n IoT-projek gebaseer op HC-12 RF-module. Hier word die imu (mpu6050) data van arduino gebruik om die servomotor (verbind met Nodemcu) te beheer. Hier word die data-visualisering ook aan die arduino-kant uitgevoer, waar die mpu6050 toonhoogte-data (rotasie om x-as) met 'n verwerkingskets (later bespreek) visualiseer word. Hierdie projek is eintlik net 'n bietjie opwarming om die verskillende aspekte van Imu & Servo -beheer met Arduino en ESP8266 nodemcu te onthou.

DOEL

Die doel hiervan is duidelik: ons beheer die posisie van servomotor met behulp van die toonhoogte van IMU. En saam word hierdie toonhoogte en gesinkroniseerde motorposisie gevisualiseer met verwerking.

Stap 2: hardeware benodig

NodeMCU ESP8266 12E Wifi -module

Soldeerlose broodbord

Springdraad

MPU6050 accelo+gyro

HC-12 RF-modules (paar)

SG90 servomotor

Stap 3: Kring en verbindings

Kring en verbindings
Kring en verbindings
Kring en verbindings
Kring en verbindings

Verbindings is reguit vorentoe. U kan die servo met 3.3V van u Nodemcu voed. U kan Vin ook gebruik om die servo aan te dryf as u nodemcu soveel spanning op die pen het. Maar die meeste Lolin -borde het nie 5V by Vin nie (hang af van die vervaardiger).

Hierdie stroombaandiagramme word gemaak met EasyADA.

Stap 4: WERK

WERKEND
WERKEND

Sodra die arduino -skets begin het, stuur dit die toonhoogte (wat wissel van -45 tot 45) na die hc12 -ontvanger van Nodemcu wat gekarteer word met 0 tot 180 grade Servo -posisie. Hier het ons die toonhoogte van -45 tot +45 grade gebruik, sodat ons dit maklik na die Servo -posisie kan toewys.

U dink nou waarom ons die kaartmetode eenvoudig soos volg kan gebruik:-

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

Omdat die negatiewe hoek wat deur die hc12 -sender gestuur word, ontvang word as:

1ste helfte: (T) 0 tot 45 => 0 tot 45 (R)

2de helfte: (T) -45 tot -1 => 255 tot 210 (R)

U moet dit dus toewys van 0 tot 180 as

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

Ek vermy die kaartmetode as gevolg van 'n irrelevante fout. U kan dit probeer en kommentaar lewer dat dit met u werk

as (val> = 0 && val <= 45) pos = map (val, 0, 45, 90, 180); anders pos = kaart (val, 255, 210, 0, 90); // 4de argument kan 2 wees (u kan kyk)

MPU6050 Pitch Hoekberekening

Ek gebruik die MPU6050_tockn -biblioteek wat gebaseer is op die gee van rou data van die IMU.

int pitchAngle = mpu6050.getAngleX ()

Dit sal ons die draaihoek om die x-as kry. Soos u in die figuur gesien het, is my imu vertikaal op die broodbord geplaas, so moenie verwar met pik en rol nie. Eintlik moet u altyd die as op die uitbreekbord sien.

Deur hierdie biblioteek hoef u nie te pla oor die interne elektronika van die lees van spesifieke registers vir spesifieke operasies nie. jy spesifiseer slegs die werk en jy is klaar!

Btw as u die hoek self wil bereken. U kan dit maklik soos volg doen:

#insluit

const int MPU6050_addr = 0x68; int16_t AcX, AcY, AcZ, Temp, GyroX, GyroY, GyroZ; ongeldige opstelling () {Wire.begin (); Wire.begin Transmissie (MPU6050_addr); Wire.write (0x6B); Wire.write (0); Wire.endTransmission (waar); Serial.begin (9600); } leemte -lus () {Wire.beginTransmission (MPU6050_addr); Wire.write (0x3B); Wire.endTransmission (vals); Wire.requestFrom (MPU6050_addr, 14, waar); 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 = kaart (AcX, minVal, maxVal, -90, 90); int yAng = kaart (AcY, minVal, maxVal, -90, 90); int zAng = kaart (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 ="); // Rol Serial.println (y); Serial.print ("AngleZ ="); // Yaw Serial.println (z); }

Maar dit is nie nodig dat u soveel kode skryf om die hoek te kry nie. U behoort die feite agter die skerm te ken, maar die gebruik van biblioteke van ander mense is baie effektief in baie projekte. U kan meer lees oor hierdie imu en ander benaderings om meer gefilterde data van die volgende skakel af te kry: Explore-mpu6050.

My arduino -kode aan die einde van die sender het slegs 30 reëls met behulp van die MPU6050_tockn -biblioteek, dus dit is goed om 'n biblioteek te gebruik, tensy u nie 'n paar kernveranderings aan die funksie van IMU nodig het nie. 'N Biblioteek met die naam I2Cdev deur Jeff Rowberg is baie nuttig as u gefiltreerde data wil hê met behulp van die DMP (Digital motion processor) van die IMU.

Integrasie met verwerking

Hier word verwerking gebruik om die rotasie data oor die x-as van IMU te visualiseer, bereken deur die rou data van MPU6050. Ons ontvang die inkomende rou data in SerialEvent op die volgende manier:

ongeldig serialEvent (Serial myPort) {

inString = myPort.readString (); probeer {// Ontleed die 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]); }} anders {println (inString); }}} catch (Uitsondering e) {println ("Gevang uitsondering"); }}

Hier kan u visualisering sien in die prentjie wat in hierdie stap aangeheg is. Die posisiesdata wat aan die einde van die nodemcu ontvang is, word ook op die seriële monitor gesien, soos in die prentjie getoon.

Stap 5: KODE

Ek het die github -bewaarplek aangeheg. U kan dit kloon en vurk om dit in u projekte te gebruik.

my_kode

Die repo bevat 2 arduino -sketse vir sender (arduino+IMU) en ontvanger (Nodemcu+Servo).

En een verwerkingsskets. Ster die repo as dit u projek help.

In hierdie opdragbare, R- Ontvanger & T- Sender

Stap 6: VIDEODEMONSTRASIE

Ek sal môre die video aanheg. Volg my om in kennis gestel te word.

Dankie almal!

Aanbeveel: