Nach vielen Fehlversuchen mein Kompassmodul HDMM01 vernünftige und vor allem stabile Werte zu entlocken habe ich mir eine neues Kompassmodul zugelegt. Das CMPS10 kann sowohl per I2C, Seriell als auch PWM angesprochen werden.
Ich greife auf die Daten per I2C zu – ausgelesen wird alles was zur Verfügung steht. Nachfolgend die Tabelle der Register:
| Register | Function |
| 0 | Software version |
| 1 | Compass Bearing as a byte, i.e. 0-255 for a full circle |
| 2,3 | Compass Bearing as a word, i.e. 0-3599 for a full circle, representing 0-359.9 degrees. |
| 4 | Pitch angle – signed byte giving angle in degrees from the horizontal plane |
| 5 | Roll angle – signed byte giving angle in degrees from the horizontal plane |
| 6 | Unused |
| 7 | Unused |
| 8 | Unused |
| 9 | Unused |
| 10,11 | Magnetometer X axis raw output, 16 bit signed integer with register 10 being the upper 8 bits |
| 12,13 | Magnetometer Y axis raw output, 16 bit signed integer with register 12 being the upper 8 bits |
| 14,15 | Magnetometer Z axis raw output, 16 bit signed integer with register 14 being the upper 8 bits |
| 16,17 | Accelerometer X axis raw output, 16 bit signed integer with register 16 being the upper 8 bits |
| 18,19 | Accelerometer Y axis raw output, 16 bit signed integer with register 18 being the upper 8 bits |
| 20,21 | Accelerometer Z axis raw output, 16 bit signed integer with register 20 being the upper 8 bits |
| 22 | Command register |
HDMM01
Das Kompass Modul HDMM01 von Pollin – viel gibt es zu dem Modul nicht zu sagen. Angeschlossen wird VCC, GND, SCL (Clock) und SLD (Data). Das Kompassmodul gibt zwei Werte zurück – jede Achse misst eine Komponente des Magnetfeldvektors (sagen wir mal x und y dazu).

Mit dem unten gelisteten Programm lese ich die Daten aus dem Modul aus.
In Excel dargestellt sieht eine (sehr ungenaue) Drehung nach link und daraufvolgende Drehung nach rechts wie folgt aus.
Rechnet man die Ergebnisse entsprechend um, bekommt man x/y Punkte (siehe Bild Nr.2) welche man dann ganz einfach in einen Winkel umrechnen kann – das ist alles.
Die hieraus resultierenden Daten verwende ich für die Darstellung meiner Kompassnadel.
Noch eine kleine Anmerkung – je nachdem ob
x = positiv oder neagtiv
y = positiv oder negativ
-> abhängig davon ist dann klar in welchen Quadranten ich mich bewege.


delay(200);