3-osiowy magnetometr HMC5883L i Arduino
Poradnik przedstawia sposób, w jaki można obsłużyć cyfrowy magnetometr za pomocą Arduino.
W przykładzie wykorzystano następujące elementy:
- Arduino Uno
-
HMC5883L 3-osiowy magnetometr cyfrowy I2C 3,3V / 5V - moduł GY-271
- Przewody np. z haczykami
Podłączenie czujnika z Arduino:
Moduł komunikuje się za pośrednictwem popularnej magistrali I2C. Zatem połączenie z Arduino należy wykonać w następujący sposób:
| Moduł HMC5883L | Pin Arduino |
|---|---|
| VCC | 5 V |
| GND | GND |
| SCL | A5 |
| SDA | A4 |
Schemat podłączenia magnetometru z Arduino Uno.
Program do Arduino
W przykładzie został wykorzystany następujący kod:
#include <Wire.h> //biblioteka I2C
#define address 0x1E //adres modułu HMC5883L dla I2C
void setup(){
Serial.begin(9600); //inicjalizacja komunikacji szeregowej
Wire.begin(); //inicjalizacja modułu
//Ustawienie odpowiedniego trybu czujnika
Wire.beginTransmission(address); //otwarcie komunikacji
Wire.write(0x02); //wybór rejestru trybu
Wire.write(0x00); //tryb ciągłego pomiaru
Wire.endTransmission();
}
void loop(){
int x,y,z; //zmienne dla trzech osi
//Ustawienie adresu do odczytu danych
Wire.beginTransmission(address);
Wire.write(0x03); //wybór rejestru 3, rejestr MSB osi X
Wire.endTransmission();
//Odczyt danych dla każdej z osi, dwa rejestry na jedną oś
Wire.requestFrom(address, 6);
if(6<=Wire.available()){
x = Wire.read()<<8; //MSB osi X
x |= Wire.read(); //LSB osi X
z = Wire.read()<<8; //MSB osi Z
z |= Wire.read(); //LSB osi Z
y = Wire.read()<<8; //MSB osi Y
y |= Wire.read(); //LSB osi Y
}
//Wyświetlenie danych na monitorze szeregowym
Serial.print("x: ");
Serial.print(x);
Serial.print(" y: ");
Serial.print(y);
Serial.print(" z: ");
Serial.println(z);
delay(250); //opóźnienie między pomiarami 250 ms
}
Efekty działania programu możemy zobaczyć poniżej:
Zrzut ekranu szeregowego monitora.

