TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
temperatur

4. TEMPERATUR-/FEUCHTIGKEITSSENSOREN

 

 

DU LERNST HIER...

 

wie du Wetterdaten, nämlich die Umgebungstemperatur und die Luftfeuchtigkeit mit Sensoren bestimmst und sie für einen Webbrowser, z.B. auf einem Smartphone, abrufbar machst.

 

 

DIGITALER TEMPERATUR- UND FEUCHTIGKEITSSENSOR

 

Digitale Sensoren wandeln eine physikalische Messgrösse nicht nur in eine Spannung um, sondern digitalisieren diese gleichzeitig  und können den Messwert noch aufbereiten, beispielsweise kalibrieren, bevor sie ihn über eine digitale Schnittstelle, meist mit dem I2C-Protokoll, zur Verfügung stellen.

Der Sensor SHT31D der Schweizer Firma Sensirion ist ein solcher digitaler Temperatur- und Luftfeuchtigkeitssensor hoher Präzision. Seine Genauigkeit beträgt typisch +-0.3 °C für die Temperatur und +-2 % für die Feuchtigkeit. Der Chip wird nur im SMT-Gehäuse hergestellt. Es gibt aber Breakout-Boards, an denen man ein 4-adriges Kabel mit einem Grove-Secker anlötet (Bezugsquellen: Adafruit, eBay). Die I2C-Adresse ist standardmässig 0x44.

Im folgenden Programm verwendest du als Treiber das Modul sht31 mit der Klasse SHT31 und schreibst periodisch Temperatur und Feuchtigkeit  auf der Konsole aus und zeigst sie gleichzeitig auf dem LED-Display an.

 


Programm:

from oxocard import *
from sht31 import SHT31
from time import sleep

sht = SHT31()

while True:
    temp, humi = sht.get_temp_humi()
    print("Temperature: %5.2f degC - Humidity: %5.2f%%" %(temp, humi)) 
    display(int(temp + 0.5))
    sleep(3)
    display(int(humi + 0.5))
    sleep(3)
    display("::")
    sleep(2)
► In Zwischenablage kopieren

 

 

MUSTERBEISPIELE

 

Mit deinen Vorkenntnissen aus dem Kapitel Webserver genügen einige zusätzliche  Codezeilen, um die gemessenen Daten über das WLAN zu publizieren. Dazu konfigurierst du die Oxocard als Access Point mit der SSID sensirion (ohne Passwort) und startest einen Webserver.

Ein Handy oder Notebook, das sich am Access Point anmeldet und die Webseite mit der URL 192.168.4.1 aufruft, erhält damit alle 10 Sekunden die aktuellen Messdaten.

 

Programm:

from oxocard import *
from tcpcom import *
from sht31 import SHT31
from time import sleep

html = """<!DOCTYPE html>
<html>
  <head> <title>OxoBoard Sensirion</title> 
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta http-equiv="refresh" content="10" >
  </head>
  <body> 
     <h1>Sensirion Sensor</h1>
     %s<br>
     %s<br>
  </body>
</html>
"""

def onRequest(clientIP, filename, params):
    return html % (t, h)

def show():
    display(int(temp + 0.5))
    sleep(3)
    display(int(humi + 0.5))
    sleep(3)
    display("::")
    sleep(2)

sht = SHT31()
Wlan.activateAP(ssid = "sensirion", password = "")
HTTPServer(requestHandler = onRequest)
while True:
    temp, humi = sht.get_temp_humi()
    t = "Temperature: %5.2f C" % temp
    h = "Humidity: %5.2f %%" % humi
    show()
► In Zwischenablage kopieren

Im Hobbybereich weit verbreitet ist der digitale Temperatur- und Feuchtigkeitssensor DHT22 bzw. der baugleiche Typ AM2302 mit einer typischen Genauigkeit von 0.5 °C für die Temperatur und 3 % für die Feuchtigkeit. Er verwendet ein 1-Wire-Interface, benötigt also neben der Spannungsversorgung von 3.3V nur einen einzigen GPIO-Port. Du lötest den Sensor am besten auf ein kleines Stück einer Hartpapier-Leiterplatte mit einem 6 poligen Winkelstecker, den du in den GPIO-Sockel der Oxocard steckst.

Als Treiber verwendest du das Modul dht mit der Klasse DHT22.


Programm:

from oxocard import *
from dht import DHT22
from machine import Pin

P_ONE_WIRE = 5

def show():
    display(int(temp + 0.5))
    sleep(3)
    display(int(humi + 0.5))
    sleep(3)
    display("::")
    sleep(2)

dht = DHT22(Pin(P_ONE_WIRE))
while True:
    dht.measure()
    temp = dht.temperature()
    humi = dht.humidity() 
    print("Temperature: %5.2f degC - Humidity: %5.2f%%" %(temp, humi))
    show()
► In Zwischenablage kopieren

Auch dieses Programm kannst du leicht so ausbauen, dass die Werte über das WLAN mit einem Browser abrufbar sind.

 

 

MERKE DIR...

 

Digitales Sensoren lassen sich sehr einfach mit einem Mikrocontroller verbinden. Meist wird dabei das I2C, das SPI oder das 1-Wire-Protokoll verwendet. Für die Funkverbindung zu einem Handy oder Notebook startet man einen Access Point und einen Webserver, der die Daten im HTML-Format an einen Browser sendet. 

 

 

ZUM SELBST LÖSEN

 

 

1.

Statt einen Access Point zu starten, kann sich die Oxocard auf einem vorhandenen WLAN-Router anmelden und erhält von diesem eine IP-Adresse. Orientiere dich über dieses Verfahren im Kapitel Webserver und erstelle eine System, bei dem du die Messdaten mit einem Handy oder Notebook holen kannst, das sich am gleichen Router anmeldet.

2.

Erstelle ein Alarmsystem für die Temperatur so, dass bei zu hoher Temperatur der ganze LED-Display rot und bei zu tiefer Temperatur blau blinkt. Im Normalbereich soll eine einzelne grüne LED langsam blinken, um die Betriebsbereitschaft anzuzeigen.

 

 

 

 

MESSDATEN ÜBER DAS INTERNET ZUR VERFÜGUNG STELLEN

 

Du kannst die Messdaten auch über das Internet verfügbar machen, wenn sich die Oxocard, wie in Aufgabe 1 gezeigt, auf einem WLAN-Router anmeldet, der über das Internet zugänglich ist. Dazu musst du den Router so konfigurieren, dass er eine Hostanfrage transparent an die Oxocard weiterleitet. Meist handelt es sich dabei um eine Option unter "Virtual Servers", z.B. falls die Oxocard die IP 192.168.0.101 erhalten hat:

Damit die Oxocard immer dieselbe Adresse erhält, kannst du die Mac-Adresse der Oxocard in der Router-Configuration auf eine fixe Adresse reservieren:

Der Router erhält seine nach aussen sichtbare IP-Adresse von Internet-Provider. Im Router-Setup ist diese ersichtlich:

Wenn nun jemand irgendwo auf der Welt im Browser diese URL 80.219.253.111 eingibt, erhält er deine Wetterdaten.

Es ist sogar möglich, dass man mit einem eigenen Domain-Namen,  hier bernweather.dynns.com auf die Oxocard zugreifen kann. Dazu muss man die Dienste von www.noip.com in Anspruch nehmen und in der Router-Configuration das Konto angeben:

Eine andere Möglichkeit besteht darin, dass die Oxocard die Daten auf einen  Cloudserver kopiert und sie so im Internet zugänglich macht. Das Vorgehen lernst du im Kapitel Cloudcomputing kennen.