Python Online
Home     .
colorsensor

8. UMWELTSENSOREN

 

 

DU LERNST HIER...

 

mit dem Temperatur-, Feuchtigkeit- und Luftdrucksensor die Umweltbedingungen erfassen und einfache Regelungssysteme programmieren. Interessant sind Umweltsensoren insbesondere im Zusammenhang mit den IoT-Anwendungen, wie du im Kapitel Internet of Things sehen kannst.

 

 

HOCHPRÄZISE UMWELTSENSOREN

  Da Lego EV3 das I2C-Protokoll für die Kommunikation mit den Sensoren unterstützt, können nicht nur die Lego-Sensoren, sondern auch andere hochpräzise Sensoren an die EV3-Sensorports angeschlossen werden. Die TigerJython-Robotik-Bibliothek unterstützt
  • Sensirion SHT31 Temperatur- und Feuchtigkeitssensor
  • BME280 Temperatur-, Feuchtigkeits- und Luftdrucksensor
  • ADXL345 Beschleunigungssensor
Diese Sensoren sind nicht so robust verpackt wie die LEGO-Sensoren, dafür viel günstiger.
Bezugsquellen: mouser.ch, reichelt.ch und andere.

 

 

Um die Sensoren am EV3 anzuschliessen, sind einige Lötarbeiten notwendig. Du schneidest einen EV3-Verbindungskabel auf, isolierst die darin enthaltene Kabel ab und lötest das rote Kabel bei GND, das grüne bei VCC, das gelbe bei SCL und das blaue bei SDA an. Die übrigen zwei Kabel (weiss und schwarz) kannst du abschneiden.


     

 

 

MUSTERBEISPIELE

 

Beispiel 1: Temperatur mit SHT31-Sensor

Ist der Sensirion SHT31 Sensor am EV3-Port 1 angeschlossen, liefert der Befehl temp, hume = sht1.getValues() ein Tupel mit Temperatur (Grad C) und Luftfeuchtigkeit (%). Mit print(temp) wird die aktuelle Temperatur, mit print(humi) die Feuchtigkeit und mit print(temp, humi) werden die beiden Werte im Terminalfenster angezeigt. delay(500) legt die Messperiode von 500 ms fest. Der Sensor reagiert schnell auf die Umgebungsänderungen. Sobald du z. B. den Sensor mit den Fingern berührst, werden höhere Temperatur und Feuchtigkeitswerde angezeigt. Die Programmausführung wird mit Schliessen des Terminalfensters beendet.

 

Programm:

from grobot import *

repeat:
    temp, humi = sht1.getValues()
    print(temp)
    delay(500)

Wenn sich der EV3 nicht in der Nähe deines Computers befindet, kannst du die Sensorwerte auf seinem LCD-Display anzeigen. Dazu verwendest du den Befehl
drawString("Temperature: " + str(temp), 2, 2)
Die Temperatur wird an der Position 2 in der zweiten Zeile des Displays angezeigt.

Beispiel 2: Temperatur und Feuchtigkeit mit formatierter Ausgabe
Die Sensorwerte sind Dezimalzahlen (float) mit mehreren nachkommastellen. Es ist deshalb vorteilhaft, eine formatierte Ausgabe zu verwenden.

 

Der Formatstring enthält Platzhalter, welche für die Ausgabewerte die gesamte Anzahl Zeichen und die Anzahl Dezimalstellen angeben. Werte mit mehreren Dezimalstellen werden automatisch gerundet. Willst du nur die Temperatur mit einer Dezimalstelle anzeigen, schreibst du:
print("Temperatur: %6.2f" % temp)
.


Im nächsten Programm werden die Sensorwerte formatiert angezeigt und zusätzlich kann das Programm auch mit Drücken der Escape-Taste auf dem EV3 beendet werden.

 

 


Programm:

from grobot import *

while not button_escape.was_pressed():
    temp, humi = sht1.getValues()    
    print("Temp: %6.2f, Humi: %6.2f" % (temp, humi))
    delay(500)
exit()

 

Beispiel 3: Wetterstation mit BME280 Sensor

Der BME280 von Bosch kannst du Temperatur, Luftfeuchtigkeit und Luftdruck messen. Er eignet sich daher perfekt für eine Wetterstation oder einen Raumsensor. Die Sensorwerte werden mit dem Befehl bme1.getValues() registriert und als Tupel v gespeichert. Bei der Ausgabe verwendest du die Komponenten v[0], v[1] und v[2].

 

 


Programm:

from grobot import *

while not button_escape.was_pressed():
    v = bme1.getValues()
    print("t: %6.2f, h: %6.2f, p: %6.2f"  % (v[0], v[1], v[2]))
    delay(500)
exit()

 

Gleich wie beim Sensirion-Sensor, kannst du auch hier nur die einzelnen Sensorwerte anzeigen.

Programm:

from grobot import *

repeat:
    temp,humi,p = bme1.getValues()
    print(temp)
    drawString("Temp: " + str(temp), 2, 2)
    delay(500)

 

Beispiel 4: Temperatur-Regelung
Wie funktioniert ein Regelungssysteme? Ein Temperatursensor misst die aktuelle Temperatur (Istwert) und liefert ihn an den Regler. Dieser vergleicht ihn mit dem gewünschten Wert (Sollwert). Ist der aktuelle Wert kleiner als Sollwert, wird die Wärmequelle eingeschaltet, ist er höher als der Sollwert, wird sie ausgeschaltet. In der Regel wird als Sollwert nicht ein einziger Wert, sondern ein Werte-Bereich festgelegt.

In deinem Beispiel programmierst du eine Temperatur-Regelung. Der EV3 ist mit einem Temperatursensor ausgerüstet. Ausserdem brauchst du eine Wärmequelle (Lampe, Föhn, Heizung...), oder kannst du den Sensor vorsichtig mit deinen Fingern berühren. So lange die aktuelle Temperatur tiefer als der Sollwert° ist, werden die roten LEDs eingeschaltet. Liegt der Temperaturwert beim Sollwert (zwischen 29 und 31°), sind die orangen LEDs eingeschaltet. Ist die Temperatur höher als der Sollwert, werden die LEDs ausgeschaltet.

Programm:

from grobot import *

ts = 30 #sollWert

repeat:
    temp, humi = sht1.getValues()
    print(temp)
    if temp < ts - 1: 
        setLED(1)
    elif temp > ts - 1 and temp < ts + 1:
        setLED(3)    
    elif temp > ts + 1:
        setLED(0)   
    delay(300)

Auf dem gleichen Prinzip werden viele Regelsysteme aufgebaut. Anstelle der LEDs kann z.B. eine Heizung ein- und ausgeschaltet werden.

 

 

MERKE DIR...

 

Ist der SHT31 Sensor am Port 1 angeschlossen, liefert der Befehl sht1.getValues() ein Tupel mit zwei Werten (Temperatur in ° C und Luftfeuchtigkeit in %). Der BME280 Sensor liefert mit bme1.getValues() Temperatur, Feuchtigkeit und Luftdruck. Die Sensorwerte können mit dem Befehl print() im Terminalfenster oder mit dem Befehl drawString() auf dem EV3 Display angezeigt werden. Für die Anzeige wird oft eine formatierte Ausgabe verwendet.

 

 

ZUM SELBST LÖSEN

 

 


1.


Schliesse an den EV3 einen SHT31 oder einen BME280 Sensor an. Schreibe ein Programm, welches alle 500 ms die aktuelle die Luftfeuchtigkeit im Terminalfenster anzeigt.

 
 
2.

Der Temperatursensor misst mit der Messperiode von 500 ms die Temperatur. Ein neuer Messwert soll nur dann angezeigt werden, wenn er sich um mehr als ein 0.5 Grad vom vorhergehenden unterscheidet.

3.

Der Temperatursensor misst zu Beginn die Umgebungstemperatur und setzt diesen Messwert als Default-Wert. Danach wird alle 1000 ms die Temperatur gemessen. Wenn die Messerte um 2 Grad höher sind als der Default-Wert, wird ein Alarm ausgelöst und die roten LEDs eingeschaltet. Wenn die Temperatur wieder auf den Default-Wert gesunken ist, wird der Alarm und die roten LEDs ausgeschaltet.

4.

Ein EV3 mit einem Temperatur-Sensor soll seine Distanz zu einer Wärmequelle regeln, so dass die Temperatur in einem vorgegebenen Bereich liegt. Ist die aktuelle Temperatur niedriger als der Sollwert, beweg sich der Roboter rückwärts zur Wärmequelle, ist die Temperatur im Sollbereich, bleibt er stehen, Ist die Temperatur höher als der Sollwert, bewegt sich der Roboter vorwärts, weg von der Wärmequelle.