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//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.