Open form

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:

 

  1. #include //biblioteka I2C
  2. #define address 0x1E //adres modułu HMC5883L dla I2C
  3. void setup(){
  4. Serial.begin(9600); //inicjalizacja komunikacji szeregowej
  5. Wire.begin(); //inicjalizacja modułu
  6. //Ustawienie odpowiedniego trybu czujnika
  7. Wire.beginTransmission(address); //otwarcie komunikacji
  8. Wire.write(0x02); //wybór rejestru trybu
  9. Wire.write(0x00); //tryb ciągłego pomiaru
  10. Wire.endTransmission();
  11. }
  12. void loop(){
  13. int x,y,z; //zmienne dla trzech osi
  14. //Ustawienie adresu do odczytu danych
  15. Wire.beginTransmission(address);
  16. Wire.write(0x03); //wybór rejestru 3, rejestr MSB osi X
  17. Wire.endTransmission();
  18. //Odczyt danych dla każdej z osi, dwa rejestry na jedną oś
  19. Wire.requestFrom(address, 6);
  20. if(6<=Wire.available()){
  21. x = Wire.read()<<8; //MSB osi X
  22. x |= Wire.read(); //LSB osi X
  23. z = Wire.read()<<8; //MSB osi Z
  24. z |= Wire.read(); //LSB osi Z
  25. y = Wire.read()<<8; //MSB osi Y
  26. y |= Wire.read(); //LSB osi Y
  27. }
  28. //Wyświetlenie danych na monitorze szeregowym
  29. Serial.print("x: ");
  30. Serial.print(x);
  31. Serial.print(" y: ");
  32. Serial.print(y);
  33. Serial.print(" z: ");
  34. Serial.println(z);
  35. delay(250); //opóźnienie między pomiarami 250 ms
  36. }

 

Efekty działania programu możemy zobaczyć poniżej:

 

Zrzut ekranu szeregowego monitora.

zapraszamy do współpracy!