
Magnetometr HMC5883L je senzor široce používaný v projektech Arduino pro jeho schopnost měřit magnetická pole ve třech osách. Díky tomu je vynikající volbou pro vytváření digitálních kompasů, navigačních systémů pro drony a další autonomní vozidla. Kromě toho, že je cenově dostupný, jeho integrace je jednoduchá díky rozhraní I2C, takže je ideální pro začátečníky.
V tomto článku se podíváme na hlavní vlastnosti HMC5883L, jeho propojení s různými deskami Arduino a praktické příklady jeho použití. Nakonec budete moci realizovat svůj vlastní projekt digitálního kompasu s Arduinem a využít tak plný potenciál tohoto výkonného senzoru.
Co je HMC5883L a jak funguje?
HMC5883L je tříosý magnetometr , který měří složky zemského magnetického pole podél os X, Y a Z. To umožňuje nejen detekci magnetických polí, ale také určení orientace pomocí výpočtů založených na získaných měřeních. Díky těmto vlastnostem je ideálním senzorem pro vytváření orientačních systémů, jako je například digitální kompas.
Senzor se obvykle nachází v modulech, jako je model GY-273, který také obsahuje potřebnou elektroniku pro usnadnění jeho přímého propojení s deskami Arduino nebo jinými mikrokontroléry. Jeho napájecí zdroj je flexibilní a lze jej napájet jak 3.3V, tak 5V, díky čemuž je velmi univerzální z hlediska kompatibility s různými systémy.
Připojení Arduino
Připojení HMC5883L k Arduinu je díky rozhraní I2C velmi jednoduché. Tato komunikace vyžaduje pouze dva piny: SDA a SCL , které musí být připojeny k odpovídajícím pinům na desce Arduina.
- na Arduino Uno, Nano a Mini: SDA se připojuje ke kolíku A4 a SCL k A5.
- Pokud používáte Arduino Mega nebo Due: SDA musí být připojeno ke kolíku 20 a SCL ke kolíku 21.
- V případě Arduino Leonardo: SDA jde na pin 2 a SCL na pin 3.
Nezapomeňme, že magnetometr pracuje s pevnou I2C adresou 0x1E, není tedy možné ji měnit. Tato adresa je pro tento typ senzoru jedinečná, což znamená, že nemůžeme připojit více zařízení HMC5883L na stejnou sběrnici I2C.
Čtení magnetického pole
Primární funkcí HMC5883L je čtení hodnot magnetického pole na třech osách. Pro získání těchto hodnot na Arduinu používáme knihovnu vyvinutou Jeffem Rowbergem. Tuto knihovnu najdete v jeho repozitáři GitHub a můžete si ji stáhnout pro použití s Arduino IDE.
Jakmile je knihovna nainstalována, lze senzor inicializovat a začít číst hodnoty magnetického pole. Zde je jednoduchý příklad, jak to udělat:
#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ódu je magnetometr inicializován a hodnoty na všech třech osách jsou čteny ve smyčce. Pokaždé, když spustíme `loop()`, hodnoty magnetického pole v X, Y a Z se zobrazí na sériovém monitoru.
Nastavení rozsahu a zisku
HMC5883L umožňuje nastavit rozsah měření magnetického pole mezi ±0.88 Gauss a ±8.1 Gauss s různými úrovněmi zesílení. Výchozí rozsah je ±1.3 Gauss a můžete jej upravit podle potřeb vašeho projektu. To lze provést pomocí následujícího řádku kódu:
magnetometro.setGain(value);
Kde `value` je celé číslo mezi 0 a 7, které vybere úroveň zisku. Níže je tabulka s odpovídajícími hodnotami:
| chrabrost | 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 |
Stavba digitálního kompasu
Jedním z nejběžnějších použití HMC5883L je konstrukce digitálního kompasu . K tomu potřebujeme vypočítat úhel mezi senzorem a magnetickým severem pomocí údajů z os X a Y. Toho se dosáhne pomocí následujícího vzorce:
float angulo = atan2(my, mx) * 180 / M_PI;
Tato hodnota vám udává úhel orientace vzhledem k magnetickému severu. Pro nastavení tohoto úhlu na skutečný sever budete muset vzít v úvahu magnetickou deklinaci vaší polohy, kterou najdete na webových stránkách, jako jsou www.ign.es nebo www.ngdc.noaa.gov.
Správná magnetická deklinace
Jakmile budete mít magnetickou deklinaci vaší polohy, stačí ji odečíst od získaného úhlu. Například:
angulo -= declinacion;
Když je úhel záporný, můžete přidat 360 stupňů, abyste vždy získali kladnou hodnotu upravenou mezi 0 a 360 stupni:
if (angulo < 0) angulo += 360;
Toto nastavení vám poskytne kompas, který bude vždy přesně ukazovat na zeměpisný sever.
V praxi s tímto senzorem a některými knihovnami můžete mít kompas za pár minut. Mějte však prosím na paměti, že HMC5883L je senzor citlivý na vnější rušení, jako jsou blízké kovy nebo pole generovaná vysokými proudy, které mohou měnit hodnoty.