TigerJython | xx für Gymnasien |
|
In diesem Kapitel werden folgende hochpräzise Sensoren verwendet:
Um die Sensoren am EV3 anzuschliessen, sind einige Lötarbeiten notwendig. |
Man schneidet ein EV3-Verbindungskabel auf, isoliert die darin enthaltenen dünnen Kabel ab und lötet 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) kann man abschneiden.
Einsatzbereite Sensoren mit einem angelöteten EV3-kabel können bei der TigerJython Group (TJ Group) bestellt werden. Sensirion Sensirion SHT31 für Fr. 19.- , GY-SHT31 für Fr. 14.-, BME280 für Fr. 14.- (inkl Versandkosten). Die Lötarbeiten werden durch die Mitglieder der TJGroup vorgenommen. Die Bestellung erfolgt online mit folgendem Bestellformular: Bei Fragen senden Sie ein Email an admin@tjgroup.ch. |
Beispiel 1: SHT31 Temperatur und Feuchtigkeitssensor. Der Sensirion SHT31 ist ein vielseitig einsetzbarer digitaler Temperatur- und Feuchtigkeitssensor hoher Präzision mit einer I2C-Schnittstelle. Für die nachfolgenden Aufgaben kann auch der billigere GY-SHT31-Sensor verwendet werden. Der Sensor gibt mit dem Befehle sht.getValues() ein Tupel mit zwei Messwerten temp und humi zurück. Im ersten Beispiel werden nur die Temperaturwerte mit der Messperiode von 1000 ms auf dem EV3 Display und im Terminalfenster (im direkten Modus im Ausgabefenster des TigerJython-Editors) angezeigt. |
# Ro15a.py from ev3robot import * robot = LegoRobot() sht = SHTSensor(SensorPort.S1) robot.addPart(sht) while not robot.isEscapeHit(): temp, humi = sht.getValues() print(temp) robot.drawString("Temp: " + str(temp), 0, 2) Tools.delay(1000) robot.exit() |
Erklärungen zum Programmcode:
SHTSensor(SensorPort.S1): Erzeugt ein Sensorobjekt am Sensorport 1 | |
sht.getValues(): Gibt die Sensorwerte zurück als Tupel mit zwei Werten | |
print(temp): Gibt die Sensorwerte im Terminalfenster aus | |
robot.drawString(): Gibt die Sensorwerte auf dem EV3-Display aus |
Beispiel 2: Formatierte Ausgabe der Sensorwerte
|
# Ro15b.py from ev3robot import * robot = LegoRobot() sht = SHTSensor(SensorPort.S1) robot.addPart(sht) while not robot.isEscapeHit(): temp, humi = sht.getValues() print("Temp: %6.2f, Humi: %6.2f" % (temp, humi)) Tools.delay(1000) robot.exit() |
Erklärungen zum Programmcode:
print("Temp: %6.2f, Humi: %6.2f" % (temp, humi)): Gibt die Sensorwerte im Terminalfenster formatiert mit zwei Dezimalstellen aus. Im direkten Modus werden die Werte im TigerJython-Fenster angezeigt. |
Beispiel 3: BME280 Temperatur-, Feuchtigkeit- und Luftdrucksensor v = bme.getValues() liefert die Sensorwerte als ein Tupel mit den Elementen v[0], v[1], v[2], die der Reihe nach Temp, Humi und Luftdruck bedeuten und im Terminalfenster oder auf dem EV3-Display angezeigt werden können. Falls man nur die einzelnen Werte, z.B. die Temperatur anzeigen will, schreibt man |
# Ro15c.py, BME280 from ev3robot import * robot = LegoRobot() bme = BMESensor(SensorPort.S1) robot.addPart(bme) while not robot.isEscapeHit(): v = bme.getValues() print("t: %5.2f, h: %5.2f, p: %6.2f" % (v[0], v[1], v[2])) robot.clearDisplay() robot.drawString("t: %.2f degC" %v[0], 0, 1) robot.drawString("h: %.2f %%" %v[1], 0, 2) robot.drawString("p: %.2f hPa" %v[2], 0, 3) Tools.delay(1000) robot.exit() |
Erklärungen zum Programmcode:
BMESensor(Sensorport.S1): Erzeugt ein Sensorobjekt | |
v = bme.getValues(): Gibt die Sensorwerte als Tupel mit drei Werten zurück | |
v[0], v[1], v[2]: Sensorwerte Temperatur, Luftfeuchtigkeit, Luftdruck | |
drawString("t: %.2f %v[0], 0, 1): Zeigt den Temperaturwert mit 2 Dezimalstellen an der Position 1 in der zweiten Zeile auf dem EV3 Display an |
Beispiel 4: Sensorwerte im Koordinatensystem darstellen (nur direkter Modus)
Im direkten Modus wird das Programm auf dem Computer ausgeführt. Die Sensordaten können daher laufend in einem Grafikfenster dargestellt werden. In der Bibliothek GPanel stehen die notwendigen Funktionen zur Verfügung. Mit drawGrid(0, 50, 0, 50) wird ein Koordinatensystem gezeichnet, das den Bereich 0 bis 50 auf der x-Achse und 0 bis 50 auf der y-Achse darstellt. Das GPanel-Fenster wählt man in der Regel etwas grösser, damit die Beschriftung der Koordinaten-Achsen sichtbar ist. Für die Temperaturmessung verwendet man den SHT31- oder den BME280-Sensor. In einer while-Schleife werden die Sensorwerte mit der Funktion draw(x, y) alle 1000 ms in die Grafik eingetragen. Damit die Temperaturkurve im richtigen Punkt beginnt, wird für x = 0 der Grafikcursor mit pos(x, temp) an den aktuellen Wert gesetzt (sonst ist er bei (0, 0)). Nach 50 Messwerten beginnt die Aufzeichnung wieder am linken Rand. Da das Programm im Remote-Modus ausgeführt wird, muss er mit dem grünen Run-Pfeil gestartet werden. |
#Ro 15d.py from ev3robot import * from gpanel import * makeGPanel(-5, 53, -3, 52) drawGrid(0, 50, 0, 50, "gray") setColor("blue") lineWidth(2) robot = LegoRobot() sht = SHTSensor(SensorPort.S1) robot.addPart(sht) #bme = BMESensor(SensorPort.S1) #robot.addPart(bme) x = 0 while not robot.isEscapeHit(): v = sht.getValues() #v = bme.getValues() temp = v[0] if x == 0: pos(x, temp) else: draw(x, temp) print(temp) x = x + 1 if x == 50: x = 0 clear() drawGrid(0, 50, 0, 50, "gray") Tools.delay(1000) robot.exit() |
Erklärungen zum Programmcode:
from gpanel import *: Importiert die Grafikbibliothek GPanel | |
drawGrid(): Zeichnet das Koordinatensystem | |
pos(x, tem): Setzt den Grafikcursor an die Koordinate (x, temp) | |
draw(x, tem): Verbindet den aktuellen Punkt mit dem Punkt mit den Koordinaten (x, tem) | |
clear(): Löscht das Grafikfenster |
Mehr zur grafischen Darstellung von Daten finden Sie im Lernprogramm Koordinatengrafik.
Beispiel 5: ADXL345 Digitaler 3-Achsen-Beschleunigungssensor
|