Ghid complet pentru utilizarea HMC5883L cu Arduino

  • Conexiunea HMC5883L cu Arduino prin comunicare I2C.
  • Cod pentru a citi axele X, Y, Z ale câmpului magnetic.
  • CreaÈ›i o busolă digitală ajustând declinaÈ›ia magnetică.

cod hmc5883l arduino-3

Magnetometrul HMC5883L este un senzor utilizat pe scară largă în proiectele Arduino pentru capacitatea sa de a măsura câmpurile magnetice în trei axe. Acest lucru îl face o alegere excelentă pentru crearea de busole digitale, sisteme de navigație pentru drone și alte vehicule autonome. Pe lângă faptul că este accesibilă, integrarea sa este simplă datorită interfeței sale I2C, făcându-l ideal pentru începători.

În acest articol vom aprofunda în principalele caracteristici ale HMC5883L, conexiunea acestuia cu diverse plăci Arduino și exemple practice de utilizare. În cele din urmă, veți putea implementa propriul proiect de busolă digitală cu Arduino, profitând de întregul potențial al acestui senzor puternic.

Ce este HMC5883L și cum funcționează?

HMC5883L este un magnetometru cu trei axe care măsoară componentele câmpului magnetic al Pământului în axele X, Y și Z Aceasta nu numai că permite detectarea prezenței câmpurilor magnetice, dar permite și determinarea orientării prin calcule pe baza măsurătorilor obținute. Aceste caracteristici îl fac senzorul ideal pentru realizarea de sisteme de orientare, cum ar fi o busolă digitală.

Senzorul se găsește de obicei în module precum modelul GY-273, care include și electronica necesară pentru a facilita conectarea directă a acestuia cu plăcile Arduino sau alte microcontrolere. Sursa sa de alimentare este flexibilă și poate fi alimentată atât cu 3.3V, cât și cu 5V, ceea ce îl face foarte versatil în ceea ce privește compatibilitatea cu diferite sisteme.

Conexiuni Arduino

Conectarea HMC5883L cu Arduino este foarte simplă datorită interfeței I2C pe care o folosește. Această comunicare necesită doar doi pini: SDA și SCL, care trebuie conectat la pinii corespunzători de pe placa Arduino.

  • la Arduino Uno, Nano È™i Mini: SDA se conectează la pinul A4 È™i SCL la A5.
  • Dacă utilizaÈ›i un Arduino Mega sau Due: SDA trebuie să fie conectat la pinul 20 È™i SCL la pinul 21.
  • ÃŽn cazul Arduino Leonardo: SDA merge la pinul 2 È™i SCL la pinul 3.

Să nu uităm că magnetometrul funcționează cu o adresă I2C fixă ​​de 0x1E, deci nu este posibil să o schimbi. Această adresă este unică pentru acest tip de senzor, ceea ce înseamnă că nu putem conecta mai multe dispozitive HMC5883L pe aceeași magistrală I2C.

Citirea câmpului magnetic

Principala metodă de funcționare a HMC5883L este citirea valorilor câmpului magnetic în toate cele trei axe. Pentru a obține aceste valori pe un Arduino, folosim o bibliotecă dezvoltată de Jeff Rowberg. Puteți găsi această librărie la depozitul dvs. GitHub și descărcați-l pentru utilizare în IDE-ul Arduino.

Odată instalată biblioteca, senzorul poate fi inițializat și începe să citească valorile câmpului magnetic. Iată un exemplu simplu care face exact asta:

#include "Wire.h"
#include "I2Cdev.h"
#include "HMC5883L.h"
HMC5883L magnetometro;
int16_t mx, my, mz;

void setup() {
Serial.begin(9600);
Wire.begin();
magnetometro.initialize();
}

void loop(){
magnetometro.getHeading(&mx, &my, &mz);
Serial.print("mx: "); Serial.print(mx);
Serial.print(" my: "); Serial.print(my);
Serial.print(" mz: "); Serial.println(mz);
delay(100);
}

În acest cod, magnetometrul este inițializat și valorile pe toate cele trei axe sunt citite într-o buclă. De fiecare dată când executăm `bucla()`, valorile câmpului magnetic în X, Y și Z vor fi afișate pe monitorul serial.

Setări pentru interval și câștig

HMC5883L vă permite să reglați domeniul de măsurare a câmpului magnetic între ±0.88 Gauss și ±8.1 Gauss cu diferite niveluri de câștig. Intervalul implicit este de ±1.3 Gauss și îl puteți modifica pentru a se potrivi nevoilor proiectului dumneavoastră. Acest lucru se poate face folosind următoarea linie din cod:

magnetometro.setGain(value);

unde valoare este un număr întreg între 0 și 7, care va selecta nivelul câștigului. Mai jos vă prezentăm un tabel cu valorile corespunzătoare:

bravură Rango Câștig (LSB/Gauss)
0 ±0.88Ga 1370
1 ±1.3Ga 1090
2 ±1.9Ga 820
3 ±2.5Ga 660
4 ±4.0Ga 440
5 ±4.7Ga 390
6 ±5.6Ga 330
7 ±8.1Ga 230

Construirea unei busolă digitală

Una dintre cele mai comune utilizări ale HMC5883L este construirea a busolă digitală. Pentru a face acest lucru, trebuie să calculăm unghiul dintre senzor și nordul magnetic folosind citirile axelor X și Y. Acest lucru se realizează folosind formula:

float angulo = atan2(my, mx) * 180 / M_PI;

Această valoare vă va oferi unghiul de orientare în raport cu nordul magnetic. Pentru a regla acest unghi la nordul geografic, trebuie să ții cont de declinația magnetică a locației tale, pe care o poți consulta pe diferite site-uri web precum www.ign.es sau www.ngdc.noaa.gov.

Declinație magnetică corectă

Odată ce ai declinația magnetică a poziției tale, trebuie doar să o scazi din unghiul obținut. De exemplu:

angulo -= declinacion;

Când unghiul este negativ, puteți adăuga 360 de grade pentru a obține întotdeauna o valoare pozitivă ajustată între 0 și 360 de grade:

if (angulo < 0) angulo += 360;

Această setare vă va oferi o busolă care va indica întotdeauna cu precizie nordul geografic.

În practică, cu acest senzor și unele biblioteci poți avea o busolă în câteva minute. Cu toate acestea, rețineți că HMC5883L este un senzor sensibil la interferențe externe, cum ar fi metalele din apropiere sau câmpurile generate de curenți mari, care pot modifica citirile.


Adăugați ca sursă preferată