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