Sisällysluettelo:
- Vaihe 1: TIETOJA HANKKEESTA
- Vaihe 2: Laitteisto vaaditaan
- Vaihe 3: Piiri ja liitännät
- Vaihe 4: TYÖ
- Vaihe 5: KOODI
- Vaihe 6: VIDEO -DEMONSTRATION
Video: Servon ohjaaminen MPU6050: n avulla Arduinon ja ESP8266: n välillä HC-12: 6 askelta
2024 Kirjoittaja: John Day | [email protected]. Viimeksi muokattu: 2024-01-30 09:01
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
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Ö
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:
DC -moottorin ohjaaminen L298n: n ja Arduinon avulla: 5 vaihetta
DC -moottorin ohjaaminen L298n: n ja Arduinon avulla: Hei kaikille. Esitelläänpä itseni. Nimeni on Dimitris ja olen kotoisin Kreikasta. Rakastan kovasti Arduinoa, koska se on älykäs lauta. Yritän kuvata mahdollisimman hyvin tämän ohjeen, jotta kuka tahansa voi tehdä sen. Aloitetaan siis
RS485 Arduinon ja Raspberry Pi: n välillä: 7 vaihetta
RS485 Arduinon ja Raspberry Pi: Välillä minun on tehtävä projekti koululle. Päätän tehdä älykkään kasvihuoneohjaimen, jota ohjaa täysin vadelmapi. Anturit saavat virtaa arduino uno -laitteesta. Seuraavien kuukausien aikana julkaisen tämän projektin tekemisen vaiheittain
Modbus TCP -yhteys Arduinon ja teollisuuslaitteiden välillä: 3 vaihetta
Modbus TCP -viestintä Arduinon ja teollisuuslaitteiden välillä: Teollinen tapa hallita Arduino -korttia teollisella HMI: llä ja yhdistää se teollisuusverkkoon Modbus TCP -yhteydellä
NRF24L01 Langaton lähetys Arduinon välillä: 10 vaihetta
Langaton NRF24L01 -lähetys Arduinon välillä: NRF24L01 on Nordic Semiconductorsin pienitehoinen 2,4 GHz: n langaton RF -moduuli. Se toimii tiedonsiirtonopeudella 250 kbps - 2 Mbps. Jos sitä käytetään avoimessa tilassa, jossa on alhaisempi siirtonopeus, se voi nousta jopa 300 jalkaan. Sitä käytetään siis lyhyesti
LEDien ohjaaminen prosessoinnin ja Arduinon avulla: 5 vaihetta
Kuinka hallita LED -valoja käsittelyn ja Arduinon avulla: Toissapäivänä kohtasin mielenkiintoisen ongelman, ja minun piti hallita useita valoja tietokoneen näytön vuorovaikutuksesta, ja sen piti olla mahdollisimman halpa. Ajattelin heti Arduinoa. Siinä oli joka