Magnetometri HMC5883L është një sensor i përdorur gjerësisht në projektet Arduino për aftësinë e tij për të matur fushat magnetike në tre akse. Kjo e bën atë një zgjedhje të shkëlqyer për krijimin e busullave dixhitale, sistemeve të navigimit për dronët dhe automjeteve të tjera autonome. Përveçse është i përballueshëm, integrimi i tij është i thjeshtë falë ndërfaqes së tij I2C, duke e bërë atë ideal për fillestarët.
Në këtë artikull do të shqyrtojmë veçoritë kryesore të HMC5883L, lidhjen e tij me pllaka të ndryshme Arduino dhe shembuj praktikë për përdorimin e tij. Në fund, do të mund të zbatoni projektin tuaj të busullës dixhitale me Arduino, duke përfituar nga potenciali i plotë i këtij sensori të fuqishëm.
Çfarë është HMC5883L dhe si funksionon?
HMC5883L është një magnetometër me tre boshte i cili mat komponentët e fushës magnetike të Tokës në akset X, Y dhe Z Kjo lejon jo vetëm zbulimin e pranisë së fushave magnetike, por gjithashtu lejon përcaktimin e orientimit nëpërmjet llogaritjeve të marra. Këto karakteristika e bëjnë atë sensorin ideal për krijimin e sistemeve të orientimit, të tilla si një busull dixhitale.
Sensori zakonisht gjendet në module të tilla si modeli GY-273, i cili gjithashtu përfshin elektronikën e nevojshme për të lehtësuar lidhjen e tij të drejtpërdrejtë me bordet Arduino ose mikrokontrollues të tjerë. Furnizimi i tij me energji elektrike është fleksibël dhe mund të furnizohet me 3.3V dhe 5V, gjë që e bën atë shumë të gjithanshëm për sa i përket përputhshmërisë me sisteme të ndryshme.
Lidhjet Arduino
Lidhja e HMC5883L me Arduino është vërtet e thjeshtë falë ndërfaqes I2C që përdor. Ky komunikim kërkon vetëm dy kunja: SDA dhe SCL, i cili duhet të lidhet me kunjat përkatëse në tabelën Arduino.
- në Arduino Uno, Nano dhe Mini: SDA lidhet me pinin A4 dhe SCL me A5.
- Nëse përdorni një Arduino Mega ose Due: SDA duhet të lidhet me pinin 20 dhe SCL me pinin 21.
- Në rastin e Arduino Leonardo: SDA shkon në pin 2 dhe SCL në pin 3.
Të mos harrojmë se magnetometri funksionon me një adresë fikse I2C prej 0x1E, ndaj nuk është e mundur të ndryshohet. Kjo adresë është unike për këtë lloj sensori, që do të thotë se ne nuk mund të lidhim pajisje të shumta HMC5883L në të njëjtin autobus I2C.
Leximi i fushës magnetike
Metoda kryesore e funksionimit të HMC5883L është leximi i vlerave të fushës magnetike në të tre akset. Për të marrë këto vlera në një Arduino, ne përdorim një bibliotekë të zhvilluar nga Jeff Rowberg. Këtë librari mund ta gjeni në depoja juaj e GitHub dhe shkarkojeni për përdorim në Arduino IDE.
Pasi të instalohet biblioteka, sensori mund të inicializohet dhe të fillojë të lexojë vlerat e fushës magnetike. Këtu është një shembull i thjeshtë duke bërë vetëm këtë:
#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ë këtë kod, magnetometri inicializohet dhe vlerat në të tre akset lexohen në një lak. Sa herë që ekzekutojmë 'loop()', vlerat e fushës magnetike në X, Y dhe Z do të shfaqen në monitorin serik.
Cilësimet e diapazonit dhe fitimit
HMC5883L ju lejon të rregulloni diapazoni i matjes së fushës magnetike ndërmjet ±0.88 Gauss dhe ±8.1 Gauss me nivele të ndryshme fitimi. Gama e parazgjedhur është ±1.3 Gauss, dhe ju mund ta modifikoni atë për t'iu përshtatur nevojave të projektit tuaj. Kjo mund të bëhet duke përdorur rreshtin e mëposhtëm brenda kodit:
magnetometro.setGain(value);
ku vlerë është një numër i plotë midis 0 dhe 7, i cili do të zgjedhë nivelin e fitimit. Më poshtë ju tregojmë një tabelë me vlerat përkatëse:
trimëri | Rango | Fitimi (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 |
Ndërtimi i një busull dixhital
Një nga përdorimet më të zakonshme të HMC5883L është ndërtimi i a busull dixhital. Për ta bërë këtë, ne duhet të llogarisim këndin midis sensorit dhe veriut magnetik duke përdorur leximet e boshteve X dhe Y Kjo arrihet duke përdorur formulën:
float angulo = atan2(my, mx) * 180 / M_PI;
Kjo vlerë do t'ju japë këndin e orientimit në lidhje me veriun magnetik. Për të rregulluar këtë kënd në veriu gjeografik, duhet të keni parasysh deklinimin magnetik të vendndodhjes suaj, të cilën mund ta konsultoni në uebsajte të ndryshme si www.ign.es ose www.ngdc.noaa.gov.
Deklinimi i saktë magnetik
Pasi të keni deklinimin magnetik të pozicionit tuaj, ju vetëm duhet ta zbrisni atë nga këndi i marrë. Për shembull:
angulo -= declinacion;
Kur këndi është negativ, mund të shtoni 360 gradë për të marrë gjithmonë një vlerë pozitive të rregulluar midis 0 dhe 360 gradë:
if (angulo < 0) angulo += 360;
Ky cilësim do t'ju japë një busull që gjithmonë do të tregojë me saktësi veriun gjeografik.
Në praktikë, me këtë sensor dhe disa biblioteka mund të keni një busull në pak minuta. Megjithatë, ju lutemi vini re se HMC5883L është një sensor i ndjeshëm ndaj ndërhyrjeve të jashtme, si p.sh. metalet afër ose fushat e krijuara nga rrymat e larta, të cilat mund të ndryshojnë leximet.