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[] = {<span class="hljs-number" style="color: rgb(138, 123, 82);">0x26</span>, <span class="hljs-number" style="color: rgb(138, 123, 82);">0x36</span>, <span class="hljs-number" style="color: rgb(138, 123, 82);">0xA8</span>, <span class="hljs-number" style="color: rgb(138, 123, 82);">0x2D</span>, <span class="hljs-number" style="color: rgb(138, 123, 82);">0x02</span>, <span class="hljs-number" style="color: rgb(138, 123, 82);">0x00</span>, <span class="hljs-number" style="color: rgb(138, 123, 82);">0x00</span>, <span class="hljs-number" style="color: rgb(138, 123, 82);">0x91</span>};                 //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()
{
  <span class="hljs-built_in" style="color: rgb(211, 84, 0);">Serial</span>.<span class="hljs-built_in" style="color: rgb(211, 84, 0);">begin</span>(<span class="hljs-number" style="color: rgb(138, 123, 82);">9600</span>);                                                                        <span class="hljs-comment" style="color: rgba(149, 165, 166, 0.8);">//Beginn des Seriellen Monitors</span>
  tempSensor.<span class="hljs-built_in" style="color: rgb(211, 84, 0);">begin</span>();                                                                        <span class="hljs-comment" style="color: rgba(149, 165, 166, 0.8);">// Messungsstart des Temperatursensors</span>
  humSensor.<span class="hljs-built_in" style="color: rgb(211, 84, 0);">begin</span>();                                                                         <span class="hljs-comment" style="color: rgba(149, 165, 166, 0.8);">// Messungsstart des Feuchtesensors</span>
}

void loop()                                                                                  //Schleifenfunktion (immer nötig bei der Programmierung von Mikrocontrollern)
{
    tempSensor.requestTemperatures();                                                        <span class="hljs-comment" style="color: rgba(149, 165, 166, 0.8);">// Temperaturmessung wird gestartet</span>
    temperature = tempSensor.getTempCByIndex(<span class="hljs-number" style="color: rgb(138, 123, 82);">0</span>);                                             <span class="hljs-comment" style="color: rgba(149, 165, 166, 0.8);">// Rückgabewert speichern</span>
    humSensor.update();                                                                      <span class="hljs-comment" style="color: rgba(149, 165, 166, 0.8);">// Feuchtemessung wird gestartet</span>
    <span class="hljs-keyword" style="color: rgb(0, 151, 157);">double</span> VAD = humSensor.getVoltage(DS2438_CHA);                                           <span class="hljs-comment" style="color: rgba(149, 165, 166, 0.8);">// Auslesen der anliegenden Spannung</span>
    <span class="hljs-keyword" style="color: rgb(0, 151, 157);">double</span> VDD = humSensor.getVoltage(DS2438_CHB);                                           <span class="hljs-comment" style="color: rgba(149, 165, 166, 0.8);">// Auslesen der anliegenden Spannung</span>
    humidity = (((VAD/VDD)<span class="hljs-number" style="color: rgb(138, 123, 82);">-0.16</span>)/<span class="hljs-number" style="color: rgb(138, 123, 82);">0.0062</span>)*<span class="hljs-number" style="color: rgb(138, 123, 82);">1.5</span>/(<span class="hljs-number" style="color: rgb(138, 123, 82);">1.0546</span>-(<span class="hljs-number" style="color: rgb(138, 123, 82);">0.00216</span>*temperature));                 <span class="hljs-comment" style="color: rgba(149, 165, 166, 0.8);">// berechnung der Luftfeuchtigkeit                                                        </span>
    <span class="hljs-built_in" style="color: rgb(211, 84, 0);">Serial</span>.<span class="hljs-built_in" style="color: rgb(211, 84, 0);">print</span>(<span class="hljs-string" style="color: rgb(0, 92, 95);">"Luftfeuchtigkeit: "</span>);                                                    
    <span class="hljs-built_in" style="color: rgb(211, 84, 0);">Serial</span>.<span class="hljs-built_in" style="color: rgb(211, 84, 0);">print</span>(humidity, <span class="hljs-number" style="color: rgb(138, 123, 82);">1</span>);                                                               
    <span class="hljs-built_in" style="color: rgb(211, 84, 0);">Serial</span>.<span class="hljs-built_in" style="color: rgb(211, 84, 0);">println</span>(<span class="hljs-string" style="color: rgb(0, 92, 95);">"%."</span>);                                                                    
    <span class="hljs-built_in" style="color: rgb(211, 84, 0);">Serial</span>.<span class="hljs-built_in" style="color: rgb(211, 84, 0);">println</span>(<span class="hljs-string" style="color: rgb(0, 92, 95);">""</span>);                                                                      
}


So kann dann der Monitor aussehen:

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

Last modified: Monday, 28 February 2022, 12:50 PM