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:

 

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.

zapraszamy do współpracy!