Posts

Posts mit dem Label "BMP085" werden angezeigt.

Unterdruck und Höllentemperatur bei falschen Valuetype (Wemos)

Bild
Wenn die Ergebnisse nicht den Erwartungen entsprechen, dann ist mit Sicherheit etwas falsch. Das geschah diesmal mit dem Wemos D1 Mini. Einen bereits fertiges Code Beispiel für das Auslesen eines BMP085 Sensors mit einem Arduino, verwendete ich diesmal auf dem Wemos. Nach dem hochladen zeigten sich die nicht erwartenden Ergebnisse. Zumindest war offensichtlich, dass in meiner Wohnung keine 119 Grad Celsius herrschten und bei einem Luftdruck von 4000 Pascal wäre ich sicherlich an Sauerstoffmangel oder kochendem Blut auseinander gegangen. Also musste was an der Berechnung nicht stimmen. Behoben Der Fehler ließ sich relativ schnell beheben. Die Verwendeten ValueTypes int und unsigned int wurden ersetzt durch int16_t und unt16_t. Aber warum Ein ValueType INT ist immer das gleiche, solange die Variable als INT definiert wird auf einem System. Das eine System ist die Arduino Plattform mit dem 8Bit Mikrocontroller. Der Wemos verwendet wiederum einen 32Bit Mikrocont

Luftdrucksensor BMP085 mit dem Netduino - Höhenangabe (Teil 4)

Bild
Mit dem Luftdruck lässt sich in etwa auch die Höhe ermitteln. Allerdings ist dieser Wert bedingt verwendbar. Zum einen muss der Sensor beim einschalten mit der aktuellen Höhe kalibriert werden und zum anderen gibt es verschiedene Formeln für die Berechnung, die spezielle Anforderungen erfüllen. Wie immer kommt es darauf an, was man möchte. Im Dokument selbst, wird nur der Luftdruck verwendet. Die Formel hierfür ist nicht sonderlich komplex und lässt sich daher in wenigen Codezeilen umsetzen. altitude = 44330 * (1 – (p/p0) 1/5.255) Nach dem Dokument auf Seite 14, ist diese Formel zu verwenden. Auffällig dürften die festen Zahlenwerten sein, die auf den ersten Blick keinen Bezug darstellen. Die Beschreibung für diese Sache ist leider ohne Begründung, was mir selbst etwas Kopfzerbrechen bildet und mich auf den Weg brachte im weiten Internet nach einer plausiblen Antwort zu suchen. Leider mit geringen Erfolg und steht daher noch auf der TODO Liste. Wer bereits für den Arduino

Luftdrucksensor BMP085 mit dem Netduino - Kalibrieren (Teil 3)

Bild
Um überhaupt mit den gelesenen Daten etwas anfangen zu können, müssen diese umgerechnet werden. Bevor dies geht, müssen am Anfang Kalibrierungsdaten ermittelt werden. Im Handbuch ist in kurzer Form beschrieben, in welchen Schritten gelesen und umgerechnet wird. Fummelig ist die Umrechnung für den Luftdruck. Es sind eine Menge Variablen, welche die Kalibrierungswerte aufnehmen und andere, um die Ergebnisse zwischen zu speichern. Zu der Klasse “BMP085” aus den zwei vorigen Posts kommen nun weitere Methoden hinzu. Damit der Post  nicht zu sehr in die Länge geht, habe ich nur die neuen und geänderten Inhalte zu der Klasse abgebildet. Als erstes müssen die Kalibrierungskoeffizienten ermittelt werden, die in den Member abgelegt werden. Die Namen für die Variablen wurden direkt aus dem Datenblatt übernommen, was zugegeben etwas unschön aussieht. // Kalibrierungswerte private short _AC1; private short _AC2; private short _AC3; private uint _AC4; private uint _AC5; private uint

Luftdrucksensor BMP085 mit dem Netduino - Temperatur (Teil 2)

Bild
Wie bereits in meinem vorigen Post beschrieben, soll nun der Temperatur Wert ausgelesen werden. Der Teil für das Auslesen des Luftdrucks wird in eine Methode ausgelagert. Die Methode “ReadSensorData” gibt die zwei Werte in einem Daten Objekt zurück, das zunächst angelegt wird. Die “ToString” Methode im Daten Objekt wird überschrieben, um die Wiedergabe beider Werte simpel zu gestalten. public class SensorData {     public int TemperaturRawValue = 0;     public int PressureRawValue = 0;     public override string ToString()     {         return "Temperatur Raw Value: " + TemperaturRawValue.ToString() +             " - Pressure Value: " + PressureRawValue.ToString();     } } Nach dem das Daten Objekt vorliegt, kann die Methode “ReadSensorData”  für die Rückgabe umgeschrieben werden. Die Methode nimmt nun das Daten Objekt als Referenz an. Für das Einlesen der Temperatur wird ein zweites Byte Array benötigt zum zwischenspeichern. Die Methode “GetTemper

Luftdrucksensor BMP085 mit dem Netduino - Luftdruck (Teil 1)

Bild
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 Erg