|
HMC5883L Magnet Sensor auf dem Breadboard Shield und PullUp-Widerständen. |
Was mit dem Arduino geht, geht auch mit Netduino. Auch hier konnte ich ein funktionales Beispiel für den 3 Achsen Magnet Sensor HMC5883L als Klasse schreiben.
public class HMC5883L { /// Klasse für die I²C Verbindung private I2CDevice _i2CDevice; /// Die Variabeln zum Speichern der Ergebnisse nach der Messung. private byte[] _Data = new byte[6]; /// Ruft die Achse X ab oder legt diese fest. public int AxisX { get; set; } /// Ruft die Achse Y ab oder legt diese fest. public int AxisY { get; set; } /// Ruft die Achse Z ab oder legt diese fest. public int AxisZ { get; set; } /// Der Konstruktor Initialisiert die Verbindung her und /// stellt den Sensor mit einer Standard Konfiguration ein. public HMC5883L() { // I²C Bus verbindung herstellen mit 100kHz _i2CDevice = new I2CDevice(new I2CDevice.Configuration(0x1E, 100)); // Operating Mode (0x02): // Continuous-Measurement Mode (0x00) StatusMessage(Write(new byte[] { 0x02, 0x00 })); // Die Konfiguration besteht in zwei Abschnitten. // Der erste Byte bestimmt, wie viel Proben pro Messung vorgenommen // werden (Default = 1) sollen. In welcher Bit Rate an die Ausgänge // geschrieben wird (Default = 15Hz) und den Messmodus bestimmt // die Vorspannung (Default = Normal) // Standard Einstellungen, siehe Datenblatt für weitere Einstellungen. StatusMessage(Write(new byte[] { 0x00, 0x10 })); // Standard Skalierung, siehe ggf. Datenblatt // +- 1.3 Ga, 1090 Gain(LSb/Gauss) StatusMessage(Write(new byte[] { 0x01, 0x20 })); } /// Liest die Sensor Messungen ein und schreibt diese in die Properties public void ReadMagnetic() { // Sendet das Byte für die erste Achse Write(new byte[] { 0x03 }); // Nur wenn das Einlesen erfolgreich war. _Data[0] = 0x03; if (Read(_Data) != 0) { AxisX = (_Data[0] << 8) | _Data[1]; AxisY = (_Data[2] << 8) | _Data[3]; AxisZ = (_Data[4] << 8) | _Data[5]; } else { Debug.Print("Fehler beim lesen!"); } } /// Sendet das Byte Array zum Modul private int Write(byte[] buffer) { I2CDevice.I2CTransaction[] transactions = new I2CDevice.I2CTransaction[] { I2CDevice.CreateWriteTransaction(buffer) }; return _i2CDevice.Execute(transactions, 1000); } /// Liest mit den Byte Array die Daten vom Modul private int Read(byte[] buffer) { I2CDevice.I2CTransaction[] transactions = new I2CDevice.I2CTransaction[] { I2CDevice.CreateWriteTransaction(new byte[] { 0x03 }), I2CDevice.CreateReadTransaction(buffer) }; return _i2CDevice.Execute(transactions, 1000); } /// Gibt mit dem Ergebnis den Status des Vorgangs /// über die Ausgabe(Output) in Visual Studio wieder. private void StatusMessage(int result) { if (result == 0) { Debug.Print("Status: Fehler beim Senden oder Empfangen"); } else { Debug.Print("Status: OK"); } } } |
Anschließend muss diese Klasse in der Program.cs instanziiert werden und eine Schleife, die fortlaufend die Messungen abfragt, eingetragen werden.
public static void Main() { // Sensor Initialisieren HMC5883L sensor = new HMC5883L(); while (true) { // Einlesen sensor.ReadMagnetic(); // Ergebnisse ausgeben Debug.Print("Raw Measurement: X " + sensor.AxisX + "\tY" + sensor.AxisY + "\tZ" + sensor.AxisZ); // Kurz warten Thread.Sleep(100); } } |
Was die Schaltung angeht, ist diese identisch mit der für den Arduino, allerdings mit einer Ausnahme.
|
Netduino –> HMC5883L 3,3V –> VCC GND –> GND A4 –> SDA A5 –> SCL |
HINWEIS: Wenn beim Ausgeben nur 0 heraus kommt oder generell der Status nicht in Ordnung ist, dann kann es an fehlenden PullUp Widerständen liegen. Es gibt einige Module ohne diese, so wie bei mir.
|
2 Fehlende SMD Widerstände, die eigentlich die offene Schaltung schließen sollten. |
Mit dem Ergänzen der zwei fehlenden 2,2kOhm Widerstände ist dies schnell angepasst.
|
Netduino <–> HMC5883L 3,3V <–> VCC GND <–> GND A4 <–> SDA A5 <–> SCL
Netduino <–> Widerstand 2,2kOhm <–> HMC5883L 3,3V <–> Widerstand <–> SDA 3,3V <–> Widerstand <–> SCL |
Am besten wenn man hier zwei SMD Widerstände verbaut oder gleich einen Sensor kauft, worauf man später nicht mehr achten muss.
Wie immer die Solution für .NET Micro Framework 4.2: Download
Kommentare