Der im CrowPi verwendete DHT11 Temperatur- und Luftfeuchtigkeitssensor arbeitet für die Messung der Temperatur mit einem NTC-Temperatursensor. Dies ist ein temperaturabhängiger elektrischer Widerstand. Je nach Umgebungstemperatur leitet dieser den Strom besser oder schlechter. Diese Differenzen lassen sich messen und anhand von Referenzwerten kann die Temperatur ausgewertet werden. Das ist ein sehr einfaches Prinzip, welches häufig bei der Messung von Temperaturen zum Einsatz kommt. Für die Feuchtigkeit liegt zwischen zwei Elektroden ein spezielles Granulat. Je mehr Feuchtigkeit in diesem Granulat festgehalten wird, desto einfacher kann der Strom fliessen. Es ändert sich also auch hier der elektrische Widerstand. Die Übertragung der Messdaten erfolgt dann etwas speziell über einen einzelnen digitalen Ausgang am Sensor. Dieser wird in kurzen Pulsen im Mikrosekundenbereich angesteuert.
Java mit Pi4J ist leider nicht in der Lage diese Pulse genügend schnell zu verarbeiten. Die Verzögerungen durch die vielen Schichten einer Applikation bis zur Hardware benötigen einfach zu viel Zeit. Deshalb wurde in diesem Beispiel ein Linux Treiber verwendet, welcher die Messwerte des Sensors in eine Datei schreibt. Diese wird von Java ausgelesen und so kann dennoch mit dem Sensor gearbeitet werden. Das ist keine optimale Lösung, aber sie ermöglicht immerhin die Arbeit mit dem Sensor innerhalb des CrowPi. Besser wäre eine separate Ansteuerung mittels eines Mikrocontrollers. Diese können aufgrund der Einfachheit ihres Aufbaus viel schneller auf die eingehenden Impulse reagieren und sind so in der Lage zuverlässigere Resultate als der Raspberry Pi zu liefern.
Für diese Komponente werden keine spezifischen DIP-Switches benötigt, sodass diese in der Standardkonfiguration belassen werden können:
Nachfolgend wird die Verwendung der Klasse
com.pi4j.crowpi.components.HumiTempComponent
Javadoc
beschrieben.
Konstruktor | Bemerkung |
---|---|
HumiTempComponent() | Initialisiert einen Temperatur- und Luftfeuchtigkeitssensor mit den Standardeinstellungen für den CrowPi. |
HumiTempComponent(int pollingDelayMs) | Initialisiert einen Temperatur- und Luftfeuchtigkeitssensor mit den Standard Dateipfaden für den CrowPi. Die Polling-Zeit in welcher neue Sensordaten gelesen werden wird jedoch manuell überschrieben. |
HumiTempComponent(String humiPath, String tempPath, int pollingDelayMs) | Initialisiert einen Temperatur- und Luftfeuchtigkeitssensor mit benutzerdefinierten Pfaden zu den Messwert Dateien. Die Polling-Zeit wird ebenfalls manuell überschrieben. |
Methode | Bemerkung |
---|---|
double getTemperature() | Gibt den letzten Temperaturmesswert in °C zurück. |
double getHumidity() | Gibt den letzten Luftfeuchtigkeitsmesswert in % zurück. |
Die sehr simple Beispielapplikation misst mithilfe eines for-loops
einige Male die Temperatur und Luftfeuchtigkeit und gibt diese auf der
Konsole aus. Verwendet werden dazu die Methoden getHumidity()
und getTemperature()
welche jeweils den aktuellen Messwert als double
retournieren. Dieser Messwert könnte nun in weiteren Schritten wie gewünscht verarbeitet werden.
src/main/java/com/pi4j/crowpi/applications/HumiTempApp.java
package com.pi4j.crowpi.applications;
import com.pi4j.context.Context;
import com.pi4j.crowpi.Application;
import com.pi4j.crowpi.components.HumiTempComponent;
import com.pi4j.crowpi.components.SoundSensorComponent;
/**
* A simple demo application reading current temperature and humidity from the DHT11 sensor on the CrowPi
*/
public class HumiTempApp implements Application {
@Override
public void execute(Context pi4j) {
// Initialize a HumiTempComponent with default values
final var dht11 = new HumiTempComponent();
System.out.println("Welcome to the HumiTempApp");
System.out.println("Measurement starts now.. ");
// Start some measurements in a loop
for (int i = 0; i < 5; i++) {
System.out.println("It is currently " + dht11.getTemperature() + "°C and the Humidity is " + dht11.getHumidity() + "%.");
sleep(2000);
}
}
}