Kompletný sprievodca používaním HMC5883L s Arduino

  • Prepojenie HMC5883L s Arduinom cez I2C komunikáciu.
  • Kód na čítanie osí X, Y, Z magnetického poľa.
  • Vytvorte digitálny kompas úpravou magnetickej deklinácie.

kód hmc5883l arduino-3

Magnetometer HMC5883L je senzor široko používaný v projektoch Arduino pre jeho schopnosť merať magnetické polia v troch osiach. Vďaka tomu je vynikajúcou voľbou pre vytváranie digitálnych kompasov, navigačných systémov pre drony a iné autonómne vozidlá. Okrem toho, že je cenovo dostupný, jeho integrácia je jednoduchá vďaka rozhraniu I2C, vďaka čomu je ideálny pre začiatočníkov.

V tomto článku sa pozrieme na hlavné vlastnosti HMC5883L, jeho prepojenie s rôznymi doskami Arduino a praktické príklady jeho použitia. Nakoniec budete môcť realizovať svoj vlastný projekt digitálneho kompasu s Arduinom, pričom využijete plný potenciál tohto výkonného snímača.

Čo je HMC5883L a ako funguje?

HMC5883L je a trojosový magnetometer ktorý meria zložky magnetického poľa Zeme v osiach X, Y a Z To umožňuje nielen detekciu prítomnosti magnetických polí, ale umožňuje aj určenie orientácie pomocou výpočtov na základe získaných meraní. Tieto vlastnosti z neho robia ideálny snímač na vytváranie orientačných systémov, ako je napríklad digitálny kompas.

Senzor sa zvyčajne nachádza v moduloch, ako je model GY-273, ktorý obsahuje aj potrebnú elektroniku na uľahčenie jeho priameho prepojenia s doskami Arduino alebo inými mikrokontrolérmi. Jeho napájanie je flexibilné a môže byť napájané 3.3 V aj 5 V, vďaka čomu je veľmi univerzálne z hľadiska kompatibility s rôznymi systémami.

Arduino pripojenia

Prepojenie HMC5883L s Arduinom je naozaj jednoduché vďaka rozhraniu I2C, ktoré používa. Táto komunikácia vyžaduje iba dva piny: SDA a SCL, ktorý musí byť pripojený k príslušným pinom na doske Arduino.

  • na Arduino Uno, Nano a Mini: SDA sa pripája na kolík A4 a SCL na A5.
  • Ak používate Arduino Mega alebo Due: SDA musí byť pripojené na kolík 20 a SCL na kolík 21.
  • V prípade Arduino Leonardo: SDA ide na kolík 2 a SCL na kolík 3.

Nezabúdajme, že magnetometer pracuje s pevnou I2C adresou 0x1E, takže nie je možné ju meniť. Táto adresa je jedinečná pre tento typ snímača, čo znamená, že nemôžeme pripojiť viacero zariadení HMC5883L na rovnakú zbernicu I2C.

Čítanie magnetického poľa

Hlavnou metódou prevádzky HMC5883L je čítanie hodnôt magnetického poľa vo všetkých troch osiach. Na získanie týchto hodnôt na Arduine používame knižnicu vyvinutú Jeffom Rowbergom. Toto kníhkupectvo nájdete na vaše úložisko GitHub a stiahnite si ho na použitie v Arduino IDE.

Po nainštalovaní knižnice je možné senzor inicializovať a začať čítať hodnoty magnetického poľa. Tu je jednoduchý príklad, ako to urobiť:

#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);
}

V tomto kóde je magnetometer inicializovaný a hodnoty na všetkých troch osiach sa čítajú v slučke. Zakaždým, keď vykonáme `loop()`, hodnoty magnetického poľa v X, Y a Z sa zobrazia na sériovom monitore.

Nastavenia rozsahu a zisku

HMC5883L vám umožňuje nastaviť rozsah merania magnetického poľa medzi ±0.88 Gauss a ±8.1 Gauss s rôznymi úrovňami zisku. Predvolený rozsah je ±1.3 Gauss a môžete ho upraviť tak, aby vyhovoval potrebám vášho projektu. Môžete to urobiť pomocou nasledujúceho riadku v kóde:

magnetometro.setGain(value);

kde hodnotu je celé číslo medzi 0 a 7, ktoré vyberie úroveň zisku. Nižšie vám ukážeme tabuľku s príslušnými hodnotami:

chrabrosť Rango Zisk (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

Zostavenie digitálneho kompasu

Jedným z najbežnejších použití HMC5883L je budovanie a digitálny kompas. Aby sme to dosiahli, musíme vypočítať uhol medzi snímačom a magnetickým severom pomocou údajov osí X a Y. To sa dosiahne pomocou vzorca:

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

Táto hodnota vám poskytne orientačný uhol vzhľadom na magnetický sever. Na nastavenie tohto uhla geografický sever, musíte vziať do úvahy magnetickú deklináciu vašej polohy, ktorú si môžete pozrieť na rôznych webových stránkach, ako sú www.ign.es alebo www.ngdc.noaa.gov.

Správna magnetická deklinácia

Akonáhle budete mať magnetickú deklináciu vašej polohy, stačí ju odčítať od získaného uhla. Napríklad:

angulo -= declinacion;

Keď je uhol záporný, môžete pridať 360 stupňov, aby ste vždy získali kladnú hodnotu upravenú medzi 0 a 360 stupňami:

if (angulo < 0) angulo += 360;

Toto nastavenie vám poskytne kompas, ktorý bude vždy ukazovať presne na geografický sever.

V praxi s týmto snímačom a niektorými knižnicami môžete mať kompas za pár minút. Upozorňujeme však, že HMC5883L je snímač citlivý na vonkajšie rušenie, ako sú blízke kovy alebo polia generované vysokými prúdmi, ktoré môžu zmeniť hodnoty.


Buďte prvý komentár

Zanechajte svoj komentár

Vaša e-mailová adresa nebude zverejnená. Povinné položky sú označené *

*

*

  1. Zodpovedný za údaje: Miguel Ángel Gatón
  2. Účel údajov: Kontrolný SPAM, správa komentárov.
  3. Legitimácia: Váš súhlas
  4. Oznamovanie údajov: Údaje nebudú poskytnuté tretím stranám, iba ak to vyplýva zo zákona.
  5. Ukladanie dát: Databáza hostená spoločnosťou Occentus Networks (EU)
  6. Práva: Svoje údaje môžete kedykoľvek obmedziť, obnoviť a vymazať.