KY-015 Kombi-Sensor Temperatur+Feuchtigkeit: Unterschied zwischen den Versionen

Aus Linkerkit.de

Wechseln zu: Navigation, Suche
(Die Seite wurde neu angelegt: „==Bild== none ==Technische Daten / Kurzbeschreibung== Chipsatz: DHT11 | Kommunikationsprotokoll: 1-Wire Messbereich Luftfeuchti…“)
 
(Software-Beispiel Raspberry Pi)
 
(4 dazwischenliegende Versionen des gleichen Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
==Bild==
 
==Bild==
[[Datei:ky-015.jpg|358x358px|none]]
+
[[Datei:ky-015.jpg|none|358x358px]]
  
 
==Technische Daten / Kurzbeschreibung==
 
==Technische Daten / Kurzbeschreibung==
 
Chipsatz: DHT11 | Kommunikationsprotokoll: 1-Wire Messbereich Luftfeuchtigkeit: 20-90%RH Messbereich Temperatur: 0-50°C
 
Chipsatz: DHT11 | Kommunikationsprotokoll: 1-Wire Messbereich Luftfeuchtigkeit: 20-90%RH Messbereich Temperatur: 0-50°C
 +
 +
Vorteile dieses Sensors ist die Kombination von Temperaturmessung und Luftfeuchtigkeitsmessung in einer kompakten Bauform - der Nachteil ist jedoch die geringe Abtastrate der Messung, so dass nur jede 2 Sekunden ein neues Messergebnis zur Verfügung steht - dieser Sensor ist somit sehr gut für Langzeit-Messungen geeignet.
  
 
==Pin-Belegung==
 
==Pin-Belegung==
 
[[Datei:3_G_V_S.png|none]]
 
[[Datei:3_G_V_S.png|none]]
  
==Codebeispiel Arduino==
+
==Software-Beispiel Arduino==
<pre class="brush:cpp">//KY015 DHT11 Temperature and humidity sensor
+
Dieser Sensor gibt sein Messergebnis nicht als analoges Signal auf einen Ausgangspin aus, sondern kommuniziert diesen digital kodiert.
int DHpin = 8;
+
byte dat [5];
+
byte read_data () {
+
  byte data;
+
  for (int i = 0; i <8; i ++) {
+
    if (digitalRead (DHpin) == LOW) {
+
      while (digitalRead (DHpin) == LOW); // wait for 50us
+
      delayMicroseconds (30); // determine the duration of the high level to determine the data is '0 'or '1'
+
      if (digitalRead (DHpin) == HIGH)
+
        data |= (1 <<(7-i)); // high front and low in the post
+
      while (digitalRead (DHpin) == HIGH); // data '1 ', wait for the next one receiver
+
    }
+
  }
+
return data;
+
}
+
  
void start_test () {
+
Zur Ansteuerung dieses Sensormoduls gibt es mehrere Möglichkeiten - als besonders zugänglich hat sich die Adafruit_DHT Library erwiesen, die die Firma Adafruit unter dem folgenden [https://github.com/adafruit/DHT-sensor-library Link] unter der OpenSource [https://github.com/adafruit/Adafruit_Python_ADS1x15/blob/master/LICENSE MIT-Lizenz] veröffentlicht hat.
  digitalWrite (DHpin, LOW); // bus down, send start signal
+
  delay (30); // delay greater than 18ms, so DHT11 start signal can be detected
+
  
  digitalWrite (DHpin, HIGH);
+
Das unten stehende Beispiel verwendet diese besagte Library - hierzu empfehlen wir diese von Github herunterzuladen, zu entpacken und im Arduino-Library-Ordner, welcher sich standardmäßig unter (C:\Benutzer\[Benutzername]\Dokumente\Arduino\libraries) befindet, zu kopieren, damit diese für dieses Codebeispiel und folgende Projekte zur Verfügung steht. Alternativ ist diese auch im unten stehenden Download Paket ebenfalls enthalten.
  delayMicroseconds (40); // Wait for DHT11 response
+
  
  pinMode (DHpin, INPUT);
+
<pre class="brush:cpp">// Adafruit_DHT Library wird eingefügt
  while (digitalRead (DHpin) == HIGH);
+
#include "DHT.h"
  delayMicroseconds (80); // DHT11 response, pulled the bus 80us
+
  if (digitalRead (DHpin) == LOW);
+
  delayMicroseconds (80); // DHT11 80us after the bus pulled to start sending data
+
  
  for (int i = 0; i <4; i ++) // receive temperature and humidity data, the parity bit is not considered
+
// Hier kann der jeweilige EingangsPin deklariert werden
     dat[i] = read_data ();
+
#define DHTPIN 2      
  
   pinMode (DHpin, OUTPUT);
+
// Der Sensor wird initialisiert
  digitalWrite (DHpin, HIGH); // send data once after releasing the bus, wait for the host to open the next Start signal
+
#define DHTTYPE DHT11   // DHT 11
}
+
DHT dht(DHTPIN, DHTTYPE);
  
void setup () {
+
void setup()  
   Serial.begin (9600);
+
{
   pinMode (DHpin, OUTPUT);
+
   Serial.begin(9600);
 +
   Serial.println("KY-015 Test - Temperatur und Luftfeuchtigkeits-Test:");
 +
 
 +
  // Messung wird gestartet
 +
  dht.begin();
 
}
 
}
  
void loop () {
+
// Hauptprogrammschleife
   start_test ();
+
// Das Programm startet die Messung und liest die gemessenen Werte aus
   Serial.print ("Current humdity =");
+
// Zwischen den Messungen wird eine Pause von 2 Sekunden eingelegt,
   Serial.print (dat [0], DEC); // display the humidity-bit integer;
+
// damit beim nächsten Druchlauf eine neue Messung erfasst werden kann.
   Serial.print ('.');
+
void loop() {
   Serial.print (dat [1], DEC); // display the humidity decimal places;
+
 
   Serial.println ('%');
+
   // Zwei Sekunden Pause zwischen den Messungen
   Serial.print ("Current temperature =");
+
  delay(2000);
   Serial.print (dat [2], DEC); // display the temperature of integer bits;
+
 
   Serial.print ('.');
+
   // Luftfeuchtigkeit wird gemessen
   Serial.print (dat [3], DEC); // display the temperature of decimal places;
+
  float h = dht.readHumidity();
   Serial.println ('C');
+
  // Temperatur wird gemessen
   delay (700);
+
  float t = dht.readTemperature();
 +
    
 +
  // Hier wird überprüft, ob die Messungen fehlerfrei druchgelaufen sind
 +
  // Bei Detektion eines Fehlers, wird hier eine Fehelrmeldung ausgegeben
 +
  if (isnan(h) || isnan(t)) {
 +
    Serial.println("Fehler beim Auslesen des Sensors");
 +
    return;
 +
  }
 +
 
 +
  // Ausgabe in die serrielle Konsole
 +
   Serial.println("-----------------------------------------------------------");
 +
   Serial.print("Luftfeuchtigkeit: ");
 +
   Serial.print(h);
 +
   Serial.print(" %\t");
 +
   Serial.print("Temperatur: ");
 +
   Serial.print(t);
 +
   Serial.print(char(186)); //Ausgabe <°> Symbol
 +
   Serial.println("C ");
 +
   Serial.println("-----------------------------------------------------------");
 +
  Serial.println(" ");
 
}
 
}
 +
 +
</pre>
 +
'''<span style="color: #ffcc00;">Bitte beachten Sie, dass der Sensor nur etwa alle 2 Sekunden ein neues Messergebnis zur Verfügung stellt; also eher für Langzeit-Aufnahmen ausgelegt ist</span><br /><br />Beispielprogramm Download:'''
 +
 +
[[Medium:KY-015-Kombi-Sensor_Temperatur_Feuchtigkeit.zip|KY-015-Kombi-Sensor_Temperatur_Feuchtigkeit.zip]]
 +
 +
'''Anschlussbelegung Arduino:'''
 +
 +
{| style="height: 58px; padding-left: 30px;" width="228"
 +
|-
 +
||GND
 +
||=
 +
||[Pin GND]
 +
|-
 +
||+V
 +
||=
 +
||[Pin 5V]
 +
|-
 +
||Signal
 +
||=
 +
||[Pin D2]
 +
|}
 +
 +
==Software-Beispiel Raspberry Pi==
 +
Das Programm nutzt zur Ansteuerung des DHT11-Sensors, der auf diesem Sensor-Modul verbaut ist, die entsprechende Adafruit_Python_DHT Library der Firma Adafruit. Diese wurden unter dem folgenden [https://github.com/adafruit/Adafruit_Python_DHT Link] unter der [https://github.com/adafruit/Adafruit_Python_ADS1x15/blob/master/LICENSE MIT OpenSource-Lizenz] veröffentlicht. 
 +
 +
Diese muss vorab erst installiert werden. Hierzu muss folgendermaßen vorgegangen werden:
 +
 +
Zuerst muss, falls dies nicht auf dem Raspberry Pi geschehen ist, die GitHub-Software installiert werden:
 +
 +
<pre class="brush:bash">sudo apt-get install git
 +
</pre>
 +
Hierzu muss der Raspberry Pi mit dem Internet verbunden sein. Mit dem Befehl...
 +
 +
<pre class="brush:bash">git clone https://github.com/adafruit/Adafruit_Python_DHT.git
 +
</pre>
 +
... kann die aktuelle Version der Adafruit_BM085 Library heruntergeladen und entpackt werden
 +
 +
Danach wechseln wir mit...
 +
 +
<pre class="brush:bash">cd Adafruit_Python_BMP/
 +
</pre>
 +
... in den heruntergeladenen Ordner und intallieren mit...
 +
 +
<pre class="brush:bash">sudo python setup.py install
 +
</pre>
 +
... die Library. Hiernach kann die Library genutzt werden.
 +
 +
Damit der Raspberry Pi mit dem Sensor auf dem I2C-Bus kommunizieren kann, muss auch vorab die I2C-Funktion beim Raspberry Pi aktiviert werden. Hierzu müssen folgende Zeilen am Ende der Datei "/boot/config.txt" hinzugefügt werden:
 +
 +
    ''dtparam=i2c_arm=on''
 +
Die Datei kann mit folgenden Befehl editiert werden:
 +
 +
<pre class="brush:bash">sudo nano /boot/config.txt
 +
</pre>
 +
Mit der Tastenfolge [Strg+X -> Y -> Enter] kann die Datei, nach dem hinzufügen der Zeile am unteren Ende, gespeichert und geschlossen werden.
 +
 +
Außerdem werden zusätzliche Bibliotheken benötigt, um I2C innerhalb Python nutzen zu können. Um diese zu installieren muss folgender Befehl in die Konsole eingegeben werden:
 +
 +
<pre class="brush:bash">sudo apt-get install python-smbus i2c-tools -y</pre>
 +
Hiernach kann das folgende Python-Code Beispiel verwendet werden. Das Programm startet die Messung am Sensor und gibt die gemessenen Werte für den Luftdruck, der Temperatur und der Höhe überm Meeresspiegel aus.
 +
 +
<pre class="brush:py">#!/usr/bin/python
 +
# coding=utf-8
 +
 +
# Benoetigte Module werden importiert und eingerichtet
 +
import RPi.GPIO as GPIO
 +
import Adafruit_DHT
 +
import time
 +
 +
# Die Pause von zwei Sekunden zwischen den Messungen wird hier eingestellt
 +
sleeptime = 2
 +
 +
# Sensor should be set to Adafruit_DHT.DHT11,
 +
# Adafruit_DHT.DHT22, or Adafruit_DHT.AM2302.
 +
DHTSensor = Adafruit_DHT.DHT11
 +
 +
# Hier kann der Pin deklariert werden, an dem das Sensormodul angeschlossen ist
 +
GPIO_Pin = 23
 +
 +
print('KY-015 Sensortest - Temperatur und Luftfeuchtigkeit')
 +
 +
try:
 +
    while(1):
 +
        # Messung wird gestartet und das Ergebnis in die entsprechenden Variablen geschrieben
 +
        Luftfeuchte, Temperatur = Adafruit_DHT.read_retry(DHTSensor, GPIO_Pin)
 +
 +
        print("-----------------------------------------------------------------")
 +
        if Luftfeuchte is not None and Temperatur is not None:
 +
 +
            # Das gemessene Ergebnis wird in der Konsole ausgegeben
 +
            print('Temperatur = {0:0.1f}°C  | rel. Luftfeuchtigkeit = {1:0.1f}%'.format(Temperatur, Luftfeuchte))
 +
 +
        # Da der Raspberry Pi aufgrund des Linux-Betriebsystems für Echtzeitanwendungen benachteiligt ist,
 +
        # kann es sein, dass aufgrund von Timing Problemen die Kommunikation scheitern kann.
 +
        # In dem Falle wird eine Fehlermeldung ausgegeben - ein Ergebnis sollte beim nächsten Versuch vorliegen
 +
        else:
 +
            print('Fehler beim Auslesen - Bitte warten auf nächsten Versuch!')
 +
        print("-----------------------------------------------------------------")
 +
        print("")
 +
        time.sleep(sleeptime)
 +
 +
# Aufraeumarbeiten nachdem das Programm beendet wurde
 +
except KeyboardInterrupt:
 +
    GPIO.cleanup()
 +
</pre>
 +
'''<span style="color: #ffcc00;">Bitte beachten Sie, dass der Sensor nur etwa alle 2 Sekunden ein neues Messergebnis zur Verfügung stellt; also eher für Langzeit-Aufnahmen ausgelegt ist</span>'''
 +
 +
'''Anschlussbelegung Raspberry Pi:'''
 +
 +
{| style="height: 98px; padding-left: 30px;" width="253"
 +
|-
 +
||GND
 +
||=
 +
||GND
 +
||[Pin 06]
 +
|-
 +
||+V
 +
||=
 +
||3,3V
 +
||[Pin 01]
 +
|-
 +
||Signal
 +
||=
 +
||GPIO23
 +
||[Pin 16]
 +
|}
 +
'''Beispielprogramm Download'''
 +
 +
[[Medium:KY-015-RPi_Kombi-Sensor_Temperatur_Feuchtigkeit.zip|KY-015-RPi_Kombi-Sensor_Temperatur_Feuchtigkeit.zip]]
 +
 +
Zu starten mit dem Befehl:
 +
 +
<pre class="brush:bash">sudo python KY-015-RPi_Kombi-Sensor_Temperatur_Feuchtigkeit.py
 
</pre>
 
</pre>

Aktuelle Version vom 29. April 2016, 15:38 Uhr

Bild

ky-015.jpg

Technische Daten / Kurzbeschreibung

Chipsatz: DHT11 | Kommunikationsprotokoll: 1-Wire Messbereich Luftfeuchtigkeit: 20-90%RH Messbereich Temperatur: 0-50°C

Vorteile dieses Sensors ist die Kombination von Temperaturmessung und Luftfeuchtigkeitsmessung in einer kompakten Bauform - der Nachteil ist jedoch die geringe Abtastrate der Messung, so dass nur jede 2 Sekunden ein neues Messergebnis zur Verfügung steht - dieser Sensor ist somit sehr gut für Langzeit-Messungen geeignet.

Pin-Belegung

3 G V S.png

Software-Beispiel Arduino

Dieser Sensor gibt sein Messergebnis nicht als analoges Signal auf einen Ausgangspin aus, sondern kommuniziert diesen digital kodiert.

Zur Ansteuerung dieses Sensormoduls gibt es mehrere Möglichkeiten - als besonders zugänglich hat sich die Adafruit_DHT Library erwiesen, die die Firma Adafruit unter dem folgenden Link unter der OpenSource MIT-Lizenz veröffentlicht hat.

Das unten stehende Beispiel verwendet diese besagte Library - hierzu empfehlen wir diese von Github herunterzuladen, zu entpacken und im Arduino-Library-Ordner, welcher sich standardmäßig unter (C:\Benutzer\[Benutzername]\Dokumente\Arduino\libraries) befindet, zu kopieren, damit diese für dieses Codebeispiel und folgende Projekte zur Verfügung steht. Alternativ ist diese auch im unten stehenden Download Paket ebenfalls enthalten.

// Adafruit_DHT Library wird eingefügt
#include "DHT.h"

// Hier kann der jeweilige EingangsPin deklariert werden
#define DHTPIN 2     

// Der Sensor wird initialisiert
#define DHTTYPE DHT11   // DHT 11
DHT dht(DHTPIN, DHTTYPE);

void setup() 
{
  Serial.begin(9600);
  Serial.println("KY-015 Test - Temperatur und Luftfeuchtigkeits-Test:");

  // Messung wird gestartet
  dht.begin();
}

// Hauptprogrammschleife
// Das Programm startet die Messung und liest die gemessenen Werte aus
// Zwischen den Messungen wird eine Pause von 2 Sekunden eingelegt,
// damit beim nächsten Druchlauf eine neue Messung erfasst werden kann.
void loop() {

  // Zwei Sekunden Pause zwischen den Messungen
  delay(2000);

  // Luftfeuchtigkeit wird gemessen
  float h = dht.readHumidity();
  // Temperatur wird gemessen
  float t = dht.readTemperature();
  
  // Hier wird überprüft, ob die Messungen fehlerfrei druchgelaufen sind
  // Bei Detektion eines Fehlers, wird hier eine Fehelrmeldung ausgegeben
  if (isnan(h) || isnan(t)) {
    Serial.println("Fehler beim Auslesen des Sensors");
    return;
  }

  // Ausgabe in die serrielle Konsole
  Serial.println("-----------------------------------------------------------");
  Serial.print("Luftfeuchtigkeit: ");
  Serial.print(h);
  Serial.print(" %\t");
  Serial.print("Temperatur: ");
  Serial.print(t);
  Serial.print(char(186)); //Ausgabe <°> Symbol
  Serial.println("C ");
  Serial.println("-----------------------------------------------------------");
  Serial.println(" ");
}

Bitte beachten Sie, dass der Sensor nur etwa alle 2 Sekunden ein neues Messergebnis zur Verfügung stellt; also eher für Langzeit-Aufnahmen ausgelegt ist

Beispielprogramm Download:

KY-015-Kombi-Sensor_Temperatur_Feuchtigkeit.zip

Anschlussbelegung Arduino:

GND = [Pin GND]
+V = [Pin 5V]
Signal = [Pin D2]

Software-Beispiel Raspberry Pi

Das Programm nutzt zur Ansteuerung des DHT11-Sensors, der auf diesem Sensor-Modul verbaut ist, die entsprechende Adafruit_Python_DHT Library der Firma Adafruit. Diese wurden unter dem folgenden Link unter der MIT OpenSource-Lizenz veröffentlicht. 

Diese muss vorab erst installiert werden. Hierzu muss folgendermaßen vorgegangen werden:

Zuerst muss, falls dies nicht auf dem Raspberry Pi geschehen ist, die GitHub-Software installiert werden:

sudo apt-get install git

Hierzu muss der Raspberry Pi mit dem Internet verbunden sein. Mit dem Befehl...

git clone https://github.com/adafruit/Adafruit_Python_DHT.git

... kann die aktuelle Version der Adafruit_BM085 Library heruntergeladen und entpackt werden

Danach wechseln wir mit...

cd Adafruit_Python_BMP/

... in den heruntergeladenen Ordner und intallieren mit...

sudo python setup.py install

... die Library. Hiernach kann die Library genutzt werden.

Damit der Raspberry Pi mit dem Sensor auf dem I2C-Bus kommunizieren kann, muss auch vorab die I2C-Funktion beim Raspberry Pi aktiviert werden. Hierzu müssen folgende Zeilen am Ende der Datei "/boot/config.txt" hinzugefügt werden:

    dtparam=i2c_arm=on

Die Datei kann mit folgenden Befehl editiert werden:

sudo nano /boot/config.txt

Mit der Tastenfolge [Strg+X -> Y -> Enter] kann die Datei, nach dem hinzufügen der Zeile am unteren Ende, gespeichert und geschlossen werden.

Außerdem werden zusätzliche Bibliotheken benötigt, um I2C innerhalb Python nutzen zu können. Um diese zu installieren muss folgender Befehl in die Konsole eingegeben werden:

sudo apt-get install python-smbus i2c-tools -y

Hiernach kann das folgende Python-Code Beispiel verwendet werden. Das Programm startet die Messung am Sensor und gibt die gemessenen Werte für den Luftdruck, der Temperatur und der Höhe überm Meeresspiegel aus.

#!/usr/bin/python
# coding=utf-8

# Benoetigte Module werden importiert und eingerichtet
import RPi.GPIO as GPIO
import Adafruit_DHT
import time

# Die Pause von zwei Sekunden zwischen den Messungen wird hier eingestellt
sleeptime = 2

# Sensor should be set to Adafruit_DHT.DHT11,
# Adafruit_DHT.DHT22, or Adafruit_DHT.AM2302.
DHTSensor = Adafruit_DHT.DHT11

# Hier kann der Pin deklariert werden, an dem das Sensormodul angeschlossen ist
GPIO_Pin = 23

print('KY-015 Sensortest - Temperatur und Luftfeuchtigkeit')

try:
    while(1):
        # Messung wird gestartet und das Ergebnis in die entsprechenden Variablen geschrieben
        Luftfeuchte, Temperatur = Adafruit_DHT.read_retry(DHTSensor, GPIO_Pin)

        print("-----------------------------------------------------------------")
        if Luftfeuchte is not None and Temperatur is not None:

            # Das gemessene Ergebnis wird in der Konsole ausgegeben
            print('Temperatur = {0:0.1f}°C  | rel. Luftfeuchtigkeit = {1:0.1f}%'.format(Temperatur, Luftfeuchte))

        # Da der Raspberry Pi aufgrund des Linux-Betriebsystems für Echtzeitanwendungen benachteiligt ist,
        # kann es sein, dass aufgrund von Timing Problemen die Kommunikation scheitern kann.
        # In dem Falle wird eine Fehlermeldung ausgegeben - ein Ergebnis sollte beim nächsten Versuch vorliegen
        else:
            print('Fehler beim Auslesen - Bitte warten auf nächsten Versuch!')
        print("-----------------------------------------------------------------")
        print("")
        time.sleep(sleeptime)

# Aufraeumarbeiten nachdem das Programm beendet wurde
except KeyboardInterrupt:
    GPIO.cleanup()

Bitte beachten Sie, dass der Sensor nur etwa alle 2 Sekunden ein neues Messergebnis zur Verfügung stellt; also eher für Langzeit-Aufnahmen ausgelegt ist

Anschlussbelegung Raspberry Pi:

GND = GND [Pin 06]
+V = 3,3V [Pin 01]
Signal = GPIO23 [Pin 16]

Beispielprogramm Download

KY-015-RPi_Kombi-Sensor_Temperatur_Feuchtigkeit.zip

Zu starten mit dem Befehl:

sudo python KY-015-RPi_Kombi-Sensor_Temperatur_Feuchtigkeit.py