MAG3110 - 3-osiowy magnetometr cyfrowy I2C

MAG3110

Opis MAG3110

MAG3110 - jest trzyosiowym czujnikiem pola magnetycznego, który można wykorzystać m.in. jako sensor ziemskiego pola magnetycznego (kompas).

Sensor ten charakteryzuje się niewielkimi rozmiarami, niskim poborem energii oraz prostą obsługą.

Specyfikacja:

  • Napięcie zasilania: od 1.95V do 3.6V
  • Osie detekcji: X, Y, Z
  • Interfejs komunikacyjny: I2C (TWI) - adres 0x0E
  • Zakres pomiarowy: ± 1000 µT
  • Dokładność pomiaru: 0,10 µT
  • Wymiary płytki: 37 x 16  mm

Wyprowadzenia

Czujnik posiada cztery wyprowadzenia typu goldpin - raster 2,54 mm, co umożliwia bezpośrednie wpięcie w płytkę stykową.

Nazwa Opis
VCC Napięcie zasilania modułu w zakresie 1.95 V do 3.6 V.
GND Masa układu.
SCL Linia zegarowa magistrali I2C (TWI).
SDA Linia danych magistrali I2C (TWI).

 

Szczegóły dostępne w dokumentacji.

MAG3110 + Arduino

MAG3110 - kompas cyfrowy

Znajomość wartości ziemskiego pola magnetycznego (wektor X i wektor Y) pozwala na określenie bieżącego kierunku południka magnetycznego, a tym samym uzyskanie cyfrowego kompasu. Kierunek południka magnetycznego można obliczyć z prostej zależności:

kierunek_pomiaru (rad) = atan( wektor_y, wektor_x );

Aby  poprawnie wyznaczyć kierunek, konieczne jest również uwzględnienie czynnika błędu - deklinacji magnetycznej. Deklinacja magnetyczna spowodowana jest zarówno położeniem bieguna magnetycznego Ziemi w innym miejscu niż biegun geograficzny oraz zróżnicowanymi warunkami magnetycznymi w miejscu pomiaru.
Deklinacja magnetyczna dla Bielska-Białej wynosi plus 4 stopnie i 59 minut (wschód). Wartość tą należy przeliczyć na radiany:

kąt_deklinacji = (stopnie + (minuty / 60.0)) / (180 / Pi);
kąt_deklinacji = (4.0 + (59.0 / 60.0)) / (180 / Pi);

 

#include<Wire.h>

#define Addr 0x0E	// MAG3110 I2C address is 0x0E(14)


void setup() 
{
  // Initialise I2C communication as MASTER 
  Wire.begin();
  // Initialise serial communication, set baud rate = 9600
  Serial.begin(9600);
  
  // Start I2C Transmission
  Wire.beginTransmission(Addr);
  // Select control register-1
  Wire.write(0x10);
  // Set active mode enabled
  Wire.write(0x01);
  // Stop I2C Transmission
  Wire.endTransmission();
  delay(300);
}

if (d<545) {

} else {

}