Cuprins:

Cum se folosește modulul GY511 cu Arduino [Faceți o busolă digitală]: 11 pași
Cum se folosește modulul GY511 cu Arduino [Faceți o busolă digitală]: 11 pași

Video: Cum se folosește modulul GY511 cu Arduino [Faceți o busolă digitală]: 11 pași

Video: Cum se folosește modulul GY511 cu Arduino [Faceți o busolă digitală]: 11 pași
Video: Cum folosim modulul de programari 2024, Noiembrie
Anonim
Cum se folosește modulul GY511 cu Arduino [Faceți o busolă digitală]
Cum se folosește modulul GY511 cu Arduino [Faceți o busolă digitală]

Prezentare generală

În unele proiecte electronice, trebuie să cunoaștem locația geografică în orice moment și să facem o operație specifică în consecință. În acest tutorial, veți afla cum să utilizați modulul de busolă LSM303DLHC GY-511 cu Arduino pentru a crea o busolă digitală. Mai întâi, veți afla despre acest modul și cum funcționează, apoi veți vedea cum să interfațați modulul LSM303DLHC GY-511 cu Arduino.

Ce vei învăța

  • Ce este modulul busolă?
  • Modul busolă și interfață Arduino.
  • Faceți o busolă digitală cu modulul GY-511 și Arduino.

Pasul 1: Informații generale despre modulul Compass

Informații generale despre modulul Compass
Informații generale despre modulul Compass

Modulul GY-511 include un accelerometru pe 3 axe și un magnetometru pe 3 axe. Acest senzor poate măsura accelerația liniară la scări complete de ± 2 g / ± 4 g / ± 8 g / ± 16 g și câmpuri magnetice la scări complete de ± 1,3 / ± 1,9 / ± 2,5 / ± 4,0 / ± 4,7 / ± 5,6 / ± 8,1 Gauss.

Când acest modul este plasat într-un câmp magnetic, conform legii Lorentz, un curent de excitație induce în bobina sa microscopică. Modulul busolei convertește acest curent în tensiunea diferențială pentru fiecare direcție de coordonate. Folosind aceste tensiuni, puteți calcula câmpul magnetic în fiecare direcție și puteți obține poziția geografică.

Bacsis

QMC5883L este un alt modul de busolă utilizat în mod obișnuit. Acest modul, care are o structură și o aplicație similare cu modulul LMS303, este ușor diferit ca performanță. Deci, dacă faceți proiectele, fiți atenți la tipul de modul. Dacă modulul dvs. este QMC5882L, utilizați biblioteca și codurile corespunzătoare care sunt, de asemenea, incluse în tutorial.

Pasul 2: Componente necesare

Componente necesare
Componente necesare

Componente hardware

Arduino UNO R3 * 1

Accelerometru cu 3 axe GY-511 + magnetometru * 1

Servomotor TowerPro SG-90 * 1

Modul LCD 1602 * 1

Jumpers * 1

Aplicații software

IDE Arduino

Pasul 3: interfațarea modulului de busolă GY-511 cu Arduino

Interfațarea modulului de busolă GY-511 cu Arduino
Interfațarea modulului de busolă GY-511 cu Arduino
Interfațarea modulului de busolă GY-511 cu Arduino
Interfațarea modulului de busolă GY-511 cu Arduino

Modulul de busolă GY-511 are 8 pini, dar aveți nevoie doar de 4 dintre ei pentru a interfața cu Arduino. Acest modul comunică cu Arduino utilizând protocolul I2C, deci conectați pinii SDA (I2C output) și SCK (I2C clock input) ai modulului la pinii I2C de pe placa Arduino.

Notă După cum puteți vedea, am utilizat modulul GY-511 în acest proiect. Dar puteți utiliza această instrucțiune pentru configurarea altor module de busolă LMS303.

Pasul 4: Calibrarea modulului busolei GY-511

Pentru a naviga, trebuie mai întâi să calibrați modulul, ceea ce înseamnă că setați domeniul de măsurare de la 0 la 360 de grade. Pentru a face acest lucru, conectați modulul la Arduino așa cum se arată mai jos și încărcați următorul cod pe placa dvs. După executarea codului, puteți vedea valorile minime și maxime ale domeniului de măsurare pentru axele X, Y și Z în fereastra monitorului serial. Veți avea nevoie de aceste numere în partea următoare, așa că notați-le.

Pasul 5: Circuit

Circuit
Circuit

Pasul 6: Cod

În acest cod, aveți nevoie de biblioteca Wire.h pentru comunicarea I2C și de biblioteca LMS303.h pentru modulul busolă. Puteți descărca aceste biblioteci din următoarele linkuri.

Biblioteca LMS303.h

Wire.h Library

Notă Dacă utilizați QMC5883, veți avea nevoie de următoarea bibliotecă:

MechaQMC5883L.h

Aici, vă explicăm codul pentru LMS303, dar puteți descărca și codurile pentru modulul QMC.

Să vedem câteva dintre noile funcții:

compass.enableDefault ();

Inițializarea modulului

busola.citește ();

Citirea valorilor de ieșire ale modulului busolă

running_min.z = min (running_min.z, busola.m.z); running_max.x = max (running_max.x, busola.m.x);

Determinarea valorilor minime și maxime ale intervalului de măsurare prin compararea valorilor măsurate.

Pasul 7: Realizarea unei busole digitale

După calibrarea modulului, vom construi o busolă conectând un servomotor la modul. Astfel, indicatorul servo ne arată întotdeauna direcția nord, ca săgeata roșie de pe busolă. Pentru a face acest lucru, mai întâi modulul busolei calculează mai întâi direcția geografică și îl trimite la Arduino și apoi, aplicând un coeficient adecvat, veți calcula unghiul pe care servomotorul ar trebui să îl rotească astfel încât indicatorul său să indice spre nordul magnetic. În cele din urmă, aplicăm acel unghi la servomotor.

Pasul 8: Circuit

Circuit
Circuit

Pasul 9: Cod

Cod
Cod

Pentru această parte aveți nevoie și de biblioteca Servo.h, care este instalată în mod implicit pe software-ul dvs. Arduino.

Să vedem câteva dintre noile funcții:

Servo Servo1;

Inițializarea modulului

busola.citește ();

Prezentarea obiectului servomotor

Servo1.attach (servoPin); busolă.init (); compass.enableDefault ();

Inițializarea modulului busolei și servomotorului

Argumentul Servo1.attach () este numărul pinului conectat la servomotor.

busola.m_min = (LSM303:: vector) {- 32767, -32767, -32767}; busola.m_max = (LSM303:: vector) {+ 32767, +32767, +32767};

Folosind aceste linii definiți valorile minime și maxime pentru măsurarea intervalului obținut în partea anterioară.

float heading = compass.heading ((LSM303:: vector) {0, 0, 1});

Funcția heading () returnează unghiul dintre axa de coordonate și o axă fixă. Puteți defini axa fixă cu un vector în argumentul funcției. De exemplu, aici, prin definirea (LSM303:: vector) {0, 0, 1}, axa Z este considerată axa constantă.

Servo1.write (antet);

Funcția Servo1.write () aplică valoarea citită de modulul busolei servomotorului.

Notă Rețineți că servomotorul poate avea un câmp magnetic, deci este mai bine să plasați servomotorul la o distanță adecvată față de modulul busolei, pentru a nu se abate de la modulul busolei.

Recomandat: