Sisällysluettelo:

Servon ohjaaminen MPU6050: n avulla Arduinon ja ESP8266: n välillä HC-12: 6 askelta
Servon ohjaaminen MPU6050: n avulla Arduinon ja ESP8266: n välillä HC-12: 6 askelta

Video: Servon ohjaaminen MPU6050: n avulla Arduinon ja ESP8266: n välillä HC-12: 6 askelta

Video: Servon ohjaaminen MPU6050: n avulla Arduinon ja ESP8266: n välillä HC-12: 6 askelta
Video: Как использовать акселерометр и гироскоп MPU-6050 с кодом Arduino 2024, Marraskuu
Anonim
Servon ohjaaminen MPU6050: n avulla Arduinon ja ESP8266: n välillä HC-12: n kanssa
Servon ohjaaminen MPU6050: n avulla Arduinon ja ESP8266: n välillä HC-12: n kanssa

Tässä projektissa ohjaamme servomoottorin asemaa mpu6050: n ja HC-12: n avulla Arduino UNO: n ja ESP8266 NodeMCU: n väliseen tiedonsiirtoon.

Vaihe 1: TIETOJA HANKKEESTA

Se on toinen IoT-projekti, joka perustuu HC-12 RF-moduuliin. Täällä arduinon imu (mpu6050) -tietoja käytetään servomoottorin ohjaamiseen (yhdistetty Nodemcuun). Tässä tietojen visualisointi suoritetaan myös arduino-puolella, jossa mpu6050-nousutiedot (pyöriminen x-akselin ympäri) visualisoidaan käsittelyluonnoksella (käsitellään myöhemmin). Pohjimmiltaan tämä projekti on vain pieni lämmittely muistamaan Imu & Servo -ohjauksen eri näkökohdat Arduinolla ja ESP8266 nodemculla.

TAVOITE

Tämän melko selkeän tavoitteen mukaan hallitsemme servomoottorin asemaa IMU: n piki -arvon avulla. Ja kaikki tämä piki ja synkronoitu moottorin asento visualisoidaan prosessoinnin avulla.

Vaihe 2: Laitteisto vaaditaan

NodeMCU ESP8266 12E Wifi -moduuli

Juoton leipälauta

Hyppyjohdin

MPU6050 accelo+gyro

HC-12 RF-moduulit (pari)

SG90 Servomoottori

Vaihe 3: Piiri ja liitännät

Piiri ja liitännät
Piiri ja liitännät
Piiri ja liitännät
Piiri ja liitännät

Liitännät ovat suoraan eteenpäin. Voit käyttää servoa 3,3 V: n Nodemcu -laitteella. Voit myös käyttää Viniä servon virransyöttöön, jos nodemcussasi on niin paljon jännitettä kyseisessä tapissa. Mutta useimmilla Lolin -levyillä ei ole 5 V: tä Vinillä (riippuu valmistajasta).

Nämä kytkentäkaaviot on tehty EasyADA: lla.

Vaihe 4: TYÖ

TYÖSKENTELY
TYÖSKENTELY

Heti kun arduino -luonnos alkoi, se lähettää nousukulman (joka vaihtelee -45: stä 45: een) Nodemcun hc12 -vastaanottimelle, joka kartoitetaan 0-180 asteen servoasennolla. Tässä käytimme nousukulmaa -45 -+45 astetta, jotta voimme helposti kartoittaa sen servoasentoon.

Nyt mietit, miksi voimme yksinkertaisesti käyttää karttamenetelmää seuraavasti:-

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

Koska HC12 -lähettimen lähettämä negatiivinen kulma vastaanotetaan seuraavasti:

1. puoliaika: (T) 0-45 => 0-45 (R)

2. puolisko: (T) -45 --1 => 255 -210 (R)

Joten sinun täytyy kartoittaa se 0-180 as

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

Vältän karttamenetelmää epäolennaisen virheen vuoksi. Voit kokeilla sitä ja kommentoida, että se toimii kanssasi

if (val> = 0 && val <= 45) pos = kartta (val, 0, 45, 90, 180); else pos = kartta (val, 255, 210, 0, 90); // 4. argumentti voi olla 2 (voit tarkistaa)

MPU6050 Pitch Angle Laskenta

Käytän MPU6050_tockn -kirjastoa, joka perustuu raakadatan antamiseen IMU: sta.

int pitchAngle = mpu6050.getAngleX ()

Tämä antaa meille pyörimiskulman x-akselin ympäri. Kuten kuvassa näet, imu on sijoitettu pystysuoraan leipälaudalle, joten älä sekoita piki ja rulla. Itse asiassa sinun pitäisi aina nähdä akseli painettuna katkaisulaudalle.

Tämän kirjaston kautta sinun ei tarvitse huolehtia tietyn rekisterin lukemisen sisäisestä elektroniikasta tiettyä toimintaa varten. määrität vain työn ja olet valmis!

Btw, jos haluat laskea kulman itse. Voit tehdä sen helposti seuraavasti:

#sisältää

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 (tosi); Sarja.alku (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 (); Lämpötila = 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 = kartta (AcX, minVal, maxVal, -90, 90); int yAng = kartta (AcY, minVal, maxVal, -90, 90); int zAng = kartta (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); }

Mutta ei ole välttämätöntä kirjoittaa niin paljon koodia kulman saamiseksi. Sinun pitäisi tietää kulissien takana olevat tosiasiat, mutta muiden ihmisten kirjaston käyttäminen on erittäin tehokasta monissa projekteissa. Voit lukea tästä imusta ja muista menetelmistä saadaksesi lisää suodatettua tietoa seuraavasta linkistä: Explore-mpu6050.

Lähetyspäässä olevassa arduino -koodissani on vain 30 riviä MPU6050_tockn -kirjaston avulla, joten kirjaston käyttö on hyvä, ellet tarvitse joitakin perusmuutoksia IMU: n toiminnallisuuteen. Jeff Rowbergin I2Cdev -kirjasto on erittäin hyödyllinen, jos haluat suodatettua tietoa IMU: n DMP (Digital Motion Processor) -prosessorin avulla.

Integrointi prosessoinnin kanssa

Tässä prosessointia käytetään visualisoimaan IMU: n x-akselin kiertotiedot MPU6050: sta tulevan raakatiedon perusteella. Saamme saapuvat raakatiedot SerialEventissä seuraavalla tavalla:

void serialEvent (Serial myPort) {

inString = myPort.readString (); try {// Parsaa tiedot // println (inString); Jono dataStrings = split (inString, ':'); jos (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); }}} saalis (poikkeus e) {println ("Caught Exception"); }}

Tässä näet visualisoinnin tässä vaiheessa liitteenä olevassa kuvassa. Nodemcun päässä vastaanotetut sijaintitiedot näkyvät myös sarjamonitorissa kuvan osoittamalla tavalla.

Vaihe 5: KOODI

Olen liittänyt github -arkiston. Voit kloonata ja haarukoida sen käytettäväksi projekteissasi.

my_code

Repo sisältää 2 arduino -luonnosta lähettimelle (arduino+IMU) ja vastaanottimelle (Nodemcu+Servo).

Ja yksi käsittelyluonnos. Merkitse repo tähdellä, jos tämä auttaa projektissasi.

Tässä opettavaisessa, R- vastaanotin ja T- lähetin

Vaihe 6: VIDEO -DEMONSTRATION

Liitän videon huomenna. Seuraa minua saadaksesi ilmoituksen.

Kiitos kaikille!

Suositeltava: