Kompassensor HMC5883L am Arduino Uno

Der 3-Achsen Kompass Sensor Honeywell HMC5883L wird vom Arduino Uno ausgelesen, die Ausrichtung wird berechnet und ausgegeben.

Die Schaltung

Mein Board verträgt die 5V Spannung vom Arduino.
Der Chip selbst wird aber mit maximal 3,6V betrieben !
VCC 5V und GND werden angeschlossen.
Die SPI Daten werden mit Data – A4 und Clock – A5 des Arduino Uno verbunden.

HMC5883L-1000

Das Programm

// 3-Achsen Kompassensor HMC5883L mit dem Arduino Uno auslesen
//
// Anschlüsse
// HMC5883L > Arduino Uno
// SDA > A4
// SCL > A5
// VCC > 5V
// GND > GND
//
// Matthias Busse 28.6.2014 Version 1.1

#include < Wire.h>

const int hmc5883Adresse = 0x1E; //0011110b, I2C 7-Bit Addresse des HMC5883L
const byte hmc5883ModeRegister      = 0x02;
const byte hmcContinuousMode        = 0x00;
const byte hmcDataOutputXMSBAdresse = 0x03;

void setup(){
  Serial.begin(38400);
  Wire.begin();
  Wire.beginTransmission(hmc5883Adresse); // Verbindung öffnen mit dem HMC5883
  Wire.write(hmc5883ModeRegister); // Mode Register
  Wire.write(hmcContinuousMode);   // Kontinuierliche Messung
  Wire.endTransmission();
}

void loop(){
  int x,y,z; // 3 Achsen
  Wire.beginTransmission(hmc5883Adresse);
  Wire.write(hmcDataOutputXMSBAdresse); // Register 3, X MSB Register
  Wire.endTransmission();
  Wire.requestFrom(hmc5883Adresse, 6);
  if(6<=Wire.available()){
    x = Wire.read()<<8; //X msb
    x |= Wire.read(); //X lsb
    z = Wire.read()<<8; //Z msb
    z |= Wire.read(); //Z lsb
    y = Wire.read()<<8; //Y msb
    y |= Wire.read(); //Y lsb
  }
  Serial.print("x: "); // Ausgabe der 3 Achsen
  Serial.print(x);
  Serial.print("  y: ");
  Serial.print(y);
  Serial.print("  z: ");
  Serial.print(z);
  float w = atan2(-y , x) / M_PI * 180.0; // Winkel berechnen
  if(w < 0)
     w = w + 360.0; // 0 bis 359 Grad, statt +-180 Grad
  Serial.print(" Richtung = ");
  Serial.println(w,1);
  delay(100);
}

Der X-Pfeil auf der Platine gibt die Vorausrichtung an. In der Konsole wird die Richting in Grad ausgegeben, von 0-360 Grad.

Der Kompassensor reagiert sehr stark auf ein kippen (Tilt) und die Ausgabe wird verfälscht, sodass er mit diesem Programm nur horizontal betrieben werden kann.

Horizontal betrieben wird der Kompasswert mit einer Variation von ca. +- 1 Grad ausgegeben. Ein Mitteln über ein paar Werte beruhigt die Ausgabe.

von Matthias Busse

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.