Zusätzlich zur Temperatur soll nun auch die Luftfeuchtigkeit gemessen werden.

Um dies über 1Wire zu realisieren muss ein 1Wire-fähiger Luftfeuchtigkeitssensor gebaut werden.
Die Anleitung hierfür ist auf der Seite http://www.loxwiki.eu/pages/viewpage.action?pageId=917723 zu finden.

Auch für diesen Sensor empfiehlt es sich wegen der Übersicht eine Bibliothek zu verwenden.

Die hier verwendete Bibliothek ist unter https://github.com/jbechter/arduino-onewire-DS2438 zu finden. 

Zwar kann der DS2438 auch selbst die Temperatur erfassen, allerdings ist der DS18B20 genauer.
Aus diesem Grund verwenden wir weiterhin den DS18B20 für die Temperaturmessung.

Das Verfahren mit dem DS2438 ähnelt dem dem des DS18B20 sinngemäß.

Ein Unterschied besteht darin, dass nur das biblotheksbedingt die Sensoradresse bereits bekannt sein muss, damit er konfiguriert werden kann.

Die Adresse kann mit dem Programm "Adressen auslesen" der Seite "OneWire" ermittelt werden.

Das Auslesen der Luftfeuchtigkeit gestalltet sich ebenfalls etwas schwieriger als das Auslesen der Temperatur.

Hier muss die Spannung an Channel A (VAD) und an Channel B (VDD) abgefragt werden. Über diese kann mit einer Formel

\( Luftfechtigkeit = \frac {\frac {\frac {VAD} {VDD} - 0,16} {0,0062} \cdot 1,5} {1,0546 - (0,00216 \cdot Temperatur)} \)


 dann die Luftfeuchtigkeit berechnet werden.

Hier ist ein Möglicher Programmcode, der diese Funktion realisiert:

//Einbinden von Bibliotheken
#include "OneWire.h"                                                                         //OneWire-Bibliothek
#include "DallasTemperature.h"                                                               //Temperatursensot-Bibliothek
#include "DS2438.h"                                                                          //Smart Battery Monitor-Bibliothek (zur Übermitlung der Luftfeuchtigkeit)

//Definition der Pins
#define ONE_WIRE_BUS 4                                                                       //Datenleitung für OneWire ist fest an Pin 4 angeschlossen

uint8_t DS2438_address[] = {0x26, 0x36, 0xA8, 0x2D, 0x02, 0x00, 0x00, 0x91};                 //Adresse des Smart Battery Monitor
                                                                                             //(Wurde mit Hilfe eines anderen Programms ermittelt)
OneWire oneWire(ONE_WIRE_BUS);                                                               // Initialisiert den OneWireBus
DS2438 humSensor(&oneWire, DS2438_address);                                                  //Fügt die Adresse des Smart Battery Monitor zum Bus hinzu
DallasTemperature tempSensor(&oneWire);                                                      //Fügt die Adresse des Temperatursensor zum Bus hinzu

//Variablen für Datenauslesen
double temperature;                                                                          //Speicher der übermittelten Temperatur
double humidity;                                                                             //Speicher der übermittelten Luftfeuchtigkeit

void setup()
{
  Serial.begin(9600);                                                                        //Beginn des Seriellen Monitors
  tempSensor.begin();                                                                        // Messungsstart des Temperatursensors
  humSensor.begin();                                                                         // Messungsstart des Feuchtesensors
}

void loop()                                                                                  //Schleifenfunktion (immer nötig bei der Programmierung von Mikrocontrollern)
{
    tempSensor.requestTemperatures();                                                        // Temperaturmessung wird gestartet
    temperature = tempSensor.getTempCByIndex(0);                                             // Rückgabewert speichern
    humSensor.update();                                                                      // Feuchtemessung wird gestartet
    double VAD = humSensor.getVoltage(DS2438_CHA);                                           // Auslesen der anliegenden Spannung
    double VDD = humSensor.getVoltage(DS2438_CHB);                                           // Auslesen der anliegenden Spannung
    humidity = (((VAD/VDD)-0.16)/0.0062)*1.5/(1.0546-(0.00216*temperature));                 // berechnung der Luftfeuchtigkeit                                                        
    Serial.print("Luftfeuchtigkeit: ");                                                    
    Serial.print(humidity, 1);                                                               
    Serial.println("%.");                                                                    
    Serial.println("");                                                                      
}


So kann dann der Monitor aussehen:

Abb.: Serieller Monitor Ausgabe Feuchtigkeitssensor; Quelle: BBS2 Wolfsburg

Zuletzt geändert: Montag, 28. Februar 2022, 12:50