MPU6050 Sensor auslesen mit dem Netduino (Repost)
Fest verlötet auf meinem Shield. |
Anfang des Jahres habe ich bereits darüber geschrieben und dazu auch ein Beispiel Projekt gepostet. Nun möchte ich diesen Artikel neu aufsetzen und etwas mehr auf einzelne Punkte eingehen. Zunächst nochmal der Hinweis, es handelt sich wieder um einen reinen Funktionalen Programm Code und hat daher keine Fehlerbehandlung.
Ein paar Informationen zu dem Sensor
Hersteller | InvenSens |
Bezeichnung | MPU-6000 und MPU-6050 |
Sensor Achsen | 6 |
Gyroskope Einstellungen | +-250°/s, +-500°/s, +-1000°/s, +-2000°/s |
Beschleunigungseinstellungen | +-2g, +-4g, +-8g, +-16g |
Verbindung | I²C (der 6000er hat zusätzlich SPI) |
Kommen wir nun zum eigentlichen Thema. Ursprünglich gab es von Jeff Rowberg bereits eine fertige Library in C++. Leider ließ sich dieser Code nicht für den Netduino verwenden und daher strebte ich an, eine C# und .NET Micro Framework Variante zu schreiben. Zugegeben, alleine mit dem PDF Dokument hätte ich das nicht verstanden und war froh, die Funktionsweise aus der C++ Variante heraus zu lesen.
Fangen wir mit der Hauptklasse an. Der wichtigste Teil hierbei ist, mit welchen Einstellungen der Sensor Initialisiert wird.
public class MPU6050Sensor // Initialisiert den Sensor // Sensor Initialisieren // Sleep beenden und Clock einstelllen // Konfiguration festlegen // Sendet das Byte Array zum Modul // Liest mit den Byte Array die Daten vom Modul // Status Nachrichten wiedergeben // Ruft den Sensor Daten ab. // Der Hex Wert stellt das erste Byte da // Ergebnis an das Sensor Objekt, |
Nun das war vielleicht etwas viel Green Code, dennoch hoffe ich, das die Beschreibungen etwas Aufschluss geben, was diese Byte Werte alle sollen. Weniger aufwendig und kürzer ist das SensorData Objekt, das die Byte Daten in brauchbare Werte umwandelt.
public class SensorData public uint Temperatur = 0; public uint Gyroscope_X = 0; public SensorData(byte[] buffer) // Ergebnis für Temperatur // Ergebnis für den Gyroskopsensors zusammenlegen durch Bitshifting |
Nun fehlt noch der Einsatz in der ‘Main’ Methode, dass hier die Klasse für den Sensor initialisiert, den Abruf in das SensorData Objekt kopiert und schließlich über Debug.Print die Daten anzeigt..
public static void Main() SensorData data = mpu.GetSensorData(); while (true) Debug.Print( |
Ist dieser Teil eingeben, so kann es dann auf dem Netduino weiter gehen. Hierbei kann ich den Tipp geben, auf die Verkabelung zu achten. Zwar passiert nichts, wenn ihr etwas nicht richtig angeschlossen habt, jedoch wenn ein Wackelkontakt vorliegt oder das Kabel zu lang ist für die I²C Verbindung, kann es zu erheblichen Störungen kommen.
Die Verbindung von Netduino zum Sensor:
- 3,3V >> VCC
- GND >> GND
- AnalogIn 4 >> SDA
- AnalogIn 5 >> SCL
Ist der Anschluss erfolgt, kann das Programm auf den Netduino geschrieben werden. Sobald der Sensor Initialisiert wurde und der Programmcode in die Schleife geht, wird das Ergebnis über Debug.Print() ausgegeben.
In Visual Studio 2012 wird über die ‘Ausgabe’ oder im Englischen ‘Output’ ausgegeben. |
Falls Fragen bestehen kann gerne ein Kommentar abgegeben werden oder einen Eintrag im Netduino Forum schreiben. Dort bin ich unter dem Namen Heroduino zu finden.
Natürlich wie immer die Solution für das .NET Micro Framework Version 4.2
Kommentare
gyro values gives ~65000
and i am unable to download the file that you provided after fixing the issue.
Could you just please help me out?
gyro values gives ~65000
and i am unable to download the file that you provided after fixing the issue.
Could you just please help me out?
sorry for the late answer. My messaging about new comments was missing a setup to report me.
Can you tell me about the exact kind of difficult?