-
        

Ergebnis 1 bis 5 von 5

Thema: HDMM01 Problem

  1. #1

    Frage HDMM01 Problem

    Anzeige

    Hallo zusammen, ich versuch derzeit mein neues HDMM01 von Pollin zum laufen zu bringen.
    Es hängt an einem ArduinoUnoSMD mit folgendem Sketch:
    Code:
    #include <Wire.h>
    
    #define I2ADDR 0×30
    #define TakeMeasure 0×01
    
    void setup()
    {
     Wire.begin();
     Serial.begin(9600);
     Serial.println("Start Programm");
     Wire.beginTransmission(0x30);
     Wire.write(0x00);
     Wire.write(0x02);
     delay(10);
     Wire.write(0x04);
     delay(10);
    }
    void loop(){
    byte MsbX,LsbX,MsbY,LsbY;
    int x,y;
    char line[80];
    Wire.beginTransmission(0x30); // Pollin HDMM01
    Wire.write(0x00);
    Wire.write(0x01);
    Wire.endTransmission();
    delay(20);
    Wire.beginTransmission(0x30);
    Wire.write(0x01);
    Wire.requestFrom(0x30, 4);
    
    while(Wire.available()<4);
    MsbX =Wire.read(); // obere 4 Bit X
    LsbX =Wire.read(); // untere 8 Bit X
    MsbY =Wire.read(); // obere 4 Bit Y
    LsbY =Wire.read(); // untere 8 Bit Y
    Wire.endTransmission(); // stop transmitting
    x=((MsbX&0x0f)*256)+(LsbX);
    y=((MsbY&0x0f)*256)+(LsbY);
    
    // Ausgabe von X, Y
    Serial.print("KOM:");
    Serial.print(x);
    Serial.print(";");
    Serial.println(y);
    delay(500);
    }
    Es werden auch Werte ausgegeben. Allerding kann ich den Kompass drehen und wenden wie ich will, die Werte verändern sich kaum (2080-2099;2050-2070).
    Kann mir da jemand weiterhelfen?
    vg malte

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Vielleicht kannst du aus dieser Library etwas gebrauchen.
    Auf jeden Fall müssen die Rohwerte erst skaliert werden (siehe Funktion normalizeHDMM01!), bevor man damit weiter rechnen kann.
    Gruß
    Dirk

  3. #3
    Skalieren hieße beim Arduino dann:
    Code:
    x = map(x,x_min,x_max,-180,180);
    y = map(y,y_min,y_max,-180,180);
    ???
    vg Malte

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Nein, die Werte sollen nicht auf +-180 begrenzt werden.

    Schau dir die oben genannte Funktion mal in der Source Datei an,- die kann man sicher auf den Arduino portieren.

    Davor im Absatz zum Configuration Header stehen die Kalibrierungswerte im Bereich "// MMC2120MG magnetometer calibration data:". Diese Werte brauchst du auch als Konstanten.

    Wie man diese Werte findet (d.h. den Sensor kalibriert), wird in dem Configuration Header Absatz ab dem Satz "Wenn der 2D-Compass (HDMM01) benutzt wird, muss man zunächst den Sensor kalibrieren." beschrieben. Die kalibrierten Werte werden dann für die Skalierung benutzt.
    Gruß
    Dirk

  5. #5
    Ja aber map begrenzt die Werte doch nicht nur, oder?
    Laut arduino.cc wird bei:
    Code:
    map(input,in_min,in_max,out_min,out_max);
    ein input, der zwischen in_min und in_max liegt so skaliert, dass er werte zwischen out_min und out_max annimmt.
    vg Malte

Ähnliche Themen

  1. HDMM01 und die orientierungslib von Dirk
    Von inka im Forum Robby RP6
    Antworten: 51
    Letzter Beitrag: 08.06.2013, 10:25
  2. Kompass-Modul Hdmm01 für den Rp6
    Von Morpheus1997 im Forum Robby RP6
    Antworten: 8
    Letzter Beitrag: 09.08.2012, 18:33
  3. 2 x HDMM01 auf Arduino Mega
    Von arnoa im Forum Sensoren / Sensorik
    Antworten: 2
    Letzter Beitrag: 08.02.2012, 17:19
  4. Pollin I2C Kompassmodul HDMM01
    Von malthy im Forum Sensoren / Sensorik
    Antworten: 11
    Letzter Beitrag: 15.09.2011, 13:53
  5. Problem mit Atmega644P Erkennung (Bascom-Versions-Problem)
    Von Rohbotiker im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 3
    Letzter Beitrag: 11.08.2008, 19:52

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •