Kompass Modul gesucht

Ich habe den GY-273 QMC5883L Triple Axis Compass Magnetometer Sensor HMC5883L.

Die Bibliothek braucht nach dem Einschalten erst eine 380°Drehung zum Kalibrieren. Das ist für meine Zwecke ungünstig.
Kennt jemand ein Kompass-Modul wo die Kalibrierung nicht erforderlich ist?:pray:

Warum läßt du die Kalibrierung nicht weg?

Liest kalibrierte Richtungswerte vom Kompass. Diese Funktion gibt zunächst 0 zurück, was bedeutet, dass der Kompass nicht kalibriert ist. Rufen Sie die Funktion weiter auf, readHeading()während Sie den Kompass auf allen Achsen drehen. Sobald genügend Daten gesammelt wurden, readHeading()werden ganzzahlige Richtungswerte zwischen 1 und 360 Grad zurückgegeben.

Hab es aber noch nicht probiert...

Fällt as in die Kategorie "Hab' keine Ahnung, hab's nicht probiert, hab' die Doku nicht gelesen .. aber ich frag' mal weil mir so fad ist"?

Nein, fällt in die Kategorie: Hab den Sensor bestellt, noch nicht bekommen und wollte mich per Einsicht in die Lib & Example schon mal vorab informieren.

Dann lies' mal auf der Github Seite einen Absatz höher:

Read raw magnetometer and temperature values from the compass.
...
r = compass.readRaw(&x,&y,&z,&t)

und dann schau in den Sourcode der Library was die so macht.

2 Likes

Hmm, mir zeigt das Ding nur Müll an.

/***************************************************************************
  This is a library example for the HMC5883 magnentometer/compass

  Designed specifically to work with the Adafruit HMC5883 Breakout
  http://www.adafruit.com/products/1746
 
  *** You will also need to install the Adafruit_Sensor library! ***

  These displays use I2C to communicate, 2 pins are required to interface.

  Adafruit invests time and resources providing this open source code,
  please support Adafruit andopen-source hardware by purchasing products
  from Adafruit!

  Written by Kevin Townsend for Adafruit Industries with some heading example from
  Love Electronics (loveelectronics.co.uk)
 
 This program is free software: you can redistribute it and/or modify
 it under the terms of the version 3 GNU General Public License as
 published by the Free Software Foundation.
 
 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program.  If not, see <http://www.gnu.org/licenses/>.

 ***************************************************************************/

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_HMC5883_U.h>

/* Assign a unique ID to this sensor at the same time */
Adafruit_HMC5883_Unified mag = Adafruit_HMC5883_Unified(12345);

void displaySensorDetails(void)
{
  sensor_t sensor;
  mag.getSensor(&sensor);
  Serial.println("------------------------------------");
  Serial.print  ("Sensor:       "); Serial.println(sensor.name);
  Serial.print  ("Driver Ver:   "); Serial.println(sensor.version);
  Serial.print  ("Unique ID:    "); Serial.println(sensor.sensor_id);
  Serial.print  ("Max Value:    "); Serial.print(sensor.max_value); Serial.println(" uT");
  Serial.print  ("Min Value:    "); Serial.print(sensor.min_value); Serial.println(" uT");
  Serial.print  ("Resolution:   "); Serial.print(sensor.resolution); Serial.println(" uT");  
  Serial.println("------------------------------------");
  Serial.println("");
  delay(500);
}

void setup(void) 
{
  Serial.begin(9600);
  Serial.println("HMC5883 Magnetometer Test"); Serial.println("");
  
  /* Initialise the sensor */
  if(!mag.begin())
  {
    /* There was a problem detecting the HMC5883 ... check your connections */
    Serial.println("Ooops, no HMC5883 detected ... Check your wiring!");
    while(1);
  }
  
  /* Display some basic information on this sensor */
  displaySensorDetails();
}

void loop(void) 
{
  /* Get a new sensor event */ 
  sensors_event_t event; 
  mag.getEvent(&event);
 
  /* Display the results (magnetic vector values are in micro-Tesla (uT)) */
  Serial.print("X: "); Serial.print(event.magnetic.x); Serial.print("  ");
  Serial.print("Y: "); Serial.print(event.magnetic.y); Serial.print("  ");
  Serial.print("Z: "); Serial.print(event.magnetic.z); Serial.print("  ");Serial.println("uT");

  // Hold the module so that Z is pointing 'up' and you can measure the heading with x&y
  // Calculate heading when the magnetometer is level, then correct for signs of axis.
  float heading = atan2(event.magnetic.y, event.magnetic.x);
  
  // Once you have your heading, you must then add your 'Declination Angle', which is the 'Error' of the magnetic field in your location.
  // Find yours here: http://www.magnetic-declination.com/
  // Mine is: -13* 2' W, which is ~13 Degrees, or (which we need) 0.22 radians
  // If you cannot find your Declination, comment out these two lines, your compass will be slightly off.
  float declinationAngle = 0.0914;
  heading += declinationAngle;
  
  // Correct for when signs are reversed.
  if(heading < 0)
    heading += 2*PI;
    
  // Check for wrap due to addition of declination.
  if(heading > 2*PI)
    heading -= 2*PI;
   
  // Convert radians to degrees for readability.
  float headingDegrees = heading * 180/M_PI; 
  
  Serial.print("Heading (degrees): "); Serial.println(headingDegrees);
  
  delay(1500);
}

Es werden Werte angezeigt, diese entsprechen aber nicht der wirklichen Richtung.

Declination:

// Once you have your heading, you must then add your 'Declination Angle', which is the 'Error' of the magnetic field in your location.
  // Find yours here: http://www.magnetic-declination.com/
  // Mine is: -13* 2' W, which is ~13 Degrees, or (which we need) 0.22 radians
  // If you cannot find your Declination, comment out these two lines, your compass will be slightly off.
  float declinationAngle = 0.0914;
  heading += declinationAngle;

Mit meinen örtlichen 5 Grad 14' lt angegebener Webseite sollte ich bei 0.0914 richtig sein.

Was habe ich was übersehen?

Dan versuche damit

Und vor allem, wurde der Kalibriert?
Habe den nicht, nur oft gelesen das den muss man erst Kalibrieren.

Nein, nicht kalibriert.
So wie ich das gelesen habe soll es mit der örtlich angebenen Declination auch so gut funktionieren.
Ich suche nochmal bei Adafruit nach Kalibrieren...

Die Haltung ist doch richtig: Füsschen nach unten und Kompass dann beim waagerechten Drehen der Platine?!

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.