Luftdrucksensor BMP085 mit dem Netduino - Luftdruck (Teil 1)

image

Für das Erfassen von Wetterdaten eignet sich der Sensor BMP085. In erster Linie misst dieser den Luftdruck, kann jedoch auch die Temperatur messen. Dennoch bleiben wir zunächst bei einem kurzen Testprogramm für den Netduino.

public class BMP085 : I2CDevice
{
   // Bestimmt wie lange gewartet wird in Millisekunden
    private int _Timeout = 1000;

   // Standard Mode
    private int _Mode = 1;

    // Empfangspuffer
    private byte[] _Receive = new byte[3];

    // Konstruktor mit vererbten Konstruktor von der I2CDevice Klasse
    public BMP085() : base(new Configuration(0x77, 40))
    {
    }
    // Sensor lesen
    public int ReadSensorData()
    {
        // Status Abfrage senden
        if (Write(new byte[] { 0xF4, (byte)(0x34 + (_Mode << 6)) }) == 0)
        {
            Debug.Print("Status abfrage konnte nicht ausgeführt werden.");
            return 0;
        }

        // Kurz abwarten
        Thread.Sleep(8);

        // Sensor Ergebnis abfragen
        if (Write(new byte[] { 0xF6 }) == 0)
        {
            Debug.Print("Ergebnis konnte nicht abgefragt werden.");
            return 0;
        }

        // Ergebnis einlesen
        if (Read(_Receive) == 0)
        {
            Debug.Print("Es konnte das Ergebnis vom Sensor nicht gelesen werden.");
            return 0;
        }

        // Ergebnis per Byteshifting
       return ((_Receive[0] << 16) | (_Receive[1] << 8) | (_Receive[2])) >> (8 - _Mode);
    }

    // Sendet den Inhalt des Byte Arrays
   private int Write(byte[] buffer)
    {
        I2CTransaction[] trans = new I2CTransaction[]
        {
            CreateWriteTransaction(buffer)
        };

        return Execute(trans, _Timeout);
    }

    // Liest den zu empfangene Byte Array
    private int Read(byte[] buffer)
    {
        I2CTransaction[] trans = new I2CTransaction[]
        {
            CreateReadTransaction(buffer)
        };

        return Execute(trans, _Timeout);
    }
}

Der Programmcode ermöglicht den Messwert im Sensor auszulesen. Nun muss im Program.cs die Klasse initialisiert werden und in der Schleife der Sensor immer wieder gelesen werden.

public class Program
{
    private static BMP085 _Airpressur;

    public static void Main()
    {
        _Airpressur = new BMP085();

       while (true)
        {
            Debug.Print("Pressure Value: " + _Airpressur.ReadSensorData().ToString());

            // halbe Sekunde warten
            Thread.Sleep(500);
        }

    }
}

Wie nun die Kalibrierung funktioniert, erkläre ich in einem späteren Post. Nun zu der Verkabelung. Leider war der Sensor in der Fritzing Software in einer anderen Version. Diesmal sollten diese Fotos ausreichen, um zu zeigen, wie dieser Sensor verkabelt wird.

Luftdrucksensor_BMP085_Netduino1_bearbeitet-1
Verkabelung bei einem Netduino Plus 1

Mit dem Netduino 2 und dem Netduino Plus 2 sind die Anschlüsse für den I²C auf die andere Seite gewandert.

Luftdrucksensor_BMP085_bearbeitet-1
Verkabelung bei einem Netduino Plus 2

Wenn alles soweit klappt, dürfte nun im Visual Studio – Ausgabe Fenster der Messwert angezeigt werden.

image

Wie sich zeigt, bildet das kleine Programm eine einfache Möglichkeit den Sensor in Betrieb zu nehmen. Im nächsten Blog Post wird auf den Temperatur Sensor eingegangen, der hier ebenfalls auf dem Sensor Modul enthalten ist.

Beispiel Programm zum herunterladen.

Datenblatt BMP085

Kommentare

Beliebte Posts aus diesem Blog

Arduino Control (Teil 5) - PWM Signal einlesen

Angular auf dem Raspberry Pi

RC Fahrtenregler für Lego Kettenfahrzeug