Hallo Zusammen,
ich hab da mal ein kleines Problem mit dem Kompassmodul HMC8553L
ich hab den vor ein paar Tagen bekommen und dann etwas später mal getestet.
hier mal das Script zum testen
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <HMC5883L.h>
LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE);
HMC5883L compass;
int error = 0;
void Output(MagnetometerRaw raw, MagnetometerScaled scaled, float heading, float headingDegrees)
{
Serial.print("Raw:t");
Serial.print(raw.XAxis);
Serial.print(" ");
Serial.print(raw.YAxis);
Serial.print(" ");
Serial.print(raw.ZAxis);
Serial.print(" Scaled:");
Serial.print(scaled.XAxis);
Serial.print(" ");
Serial.print(scaled.YAxis);
Serial.print(" ");
Serial.print(scaled.ZAxis);
Serial.print(" Heading:");
Serial.print(heading);
Serial.print(" Radians ");
Serial.print(headingDegrees);
Serial.println(" Degrees ");
lcd.clear();
lcd.setCursor(0,0);
lcd.print("Kompass Messung!");
lcd.setCursor(0,1);
if ((headingDegrees >= 348.75 && headingDegrees <= 360) || headingDegrees <= 11.24) {
lcd.print("Norden -> ");
} else if (headingDegrees >= 11.25 && headingDegrees <= 33.74) {
lcd.print("NNO -> ");
} else if (headingDegrees >= 33.75 && headingDegrees <= 56.24) {
lcd.print("NO -> ");
} else if (headingDegrees >= 56.25 && headingDegrees <= 78.74) {
lcd.print("ONO -> ");
} else if (headingDegrees >= 78.75 && headingDegrees <= 101.24) {
lcd.print("Osten -> ");
} else if (headingDegrees >= 101.25 && headingDegrees <= 123.74) {
lcd.print("OSO -> ");
} else if (headingDegrees >= 123.75 && headingDegrees <= 146.24) {
lcd.print("SO -> ");
} else if (headingDegrees >= 146.25 && headingDegrees <= 168.74) {
lcd.print("SSO -> ");
} else if (headingDegrees >= 168.75 && headingDegrees <= 191.24) {
lcd.print("S");
lcd.print((char)245);
lcd.print("den -> ");
} else if (headingDegrees >= 191.25 && headingDegrees <= 213.74) {
lcd.print("SSW -> ");
} else if (headingDegrees >= 213.75 && headingDegrees <= 236.24) {
lcd.print("SW -> ");
} else if (headingDegrees >= 236.25 && headingDegrees <= 258.74) {
lcd.print("WSW -> ");
} else if (headingDegrees >= 258.75 && headingDegrees <= 281.24) {
lcd.print("Westen -> ");
} else if (headingDegrees >= 281.25 && headingDegrees <= 303.74) {
lcd.print("WNW -> ");
} else if (headingDegrees >= 303.75 && headingDegrees <= 326.24) {
lcd.print("NW -> ");
} else if (headingDegrees >= 326.25 && headingDegrees <= 348.74) {
lcd.print("NNW -> ");
} else {
lcd.print("andere -> ");
}
lcd.print(headingDegrees);
}
void setup()
{
Serial.begin(9600);
lcd.begin(20,4);
Serial.println("Starting the I2C interface.");
Wire.begin(); // Start the I2C interface.
Serial.println("Constructing new HMC5883L");
compass = HMC5883L();
Serial.println("Setting scale to +/- 1.3 Ga");
error = compass.SetScale(1.3); // Set the scale of the compass.
if(error != 0) // If there is an error, print it out.
Serial.println(compass.GetErrorText(error));
Serial.println("Setting measurement mode to continous.");
error = compass.SetMeasurementMode(Measurement_Continuous); // Set the measurement mode to Continuous
if(error != 0) // If there is an error, print it out.
Serial.println(compass.GetErrorText(error));
lcd.begin(20,4);
lcd.setCursor(0,0);
lcd.print("Kompass Messung!");
}
void loop()
{
MagnetometerRaw raw = compass.ReadRawAxis();
MagnetometerScaled scaled = compass.ReadScaledAxis();
int MilliGauss_OnThe_XAxis = scaled.XAxis;
float heading = atan2(scaled.YAxis, scaled.XAxis);
float declinationAngle = 0.0457;
heading += declinationAngle;
if(heading < 0)
heading += 2*PI;
if(heading > 2*PI)
heading -= 2*PI;
float headingDegrees = heading * 180/M_PI;
Output(raw, scaled, heading, headingDegrees);
}
Alles anzeigen
So Anfangs bin ich mit den Ergebnissen zufrieden gewesen, hat genau das gezeigt was ich erwartet hatte. Doch mittlereweile ist dem leider nicht mehr so.
Wenn ich den also Wagerecht gedreht habe hat der ziemlich genau die Werte angezeigt.
Nur mitlerweile zeigt der mir die Werte nicht mehr sauber an oder nur dann einigermaßen wenn ich das Modul um 90° kippe und dann das Modul in dieser Lage drehe. Und leider auch nicht sehr zuverlässig.
Jetzt meine Frage kann man das Modul irgendwie resetten oder was kann da schief gehen das er nicht mehr richtig misst.
2. Frage kann ein stärkerer Magnet z.B. Lautsprecherbos das Modul beschädigen, ist da irgendwas analoges eingebaut?
Denn am Script kann es eigentlich nicht liegen, denn dies hat bis dato sauber funktioniert und ich habe daran seither auch nichts geändert.
Das einzige was passiert ist was ich eventuell nachvollziehen könnte, ist das ein Magnet dem Kompass zu nahe gekommen ist.
Oder kann man den irgendwie neu eichen ?
warte auf Eure Antworten bitte kein schittstrom oder ähnliches möchte hier nur brauchbare Infos lesen. Wenn Fragen offen sein sollten dann bitte stellen.
MFG
Zappelmann