Jython

15. Hochpräzise Sensoren

Da Lego EV3 das I2C-Protokoll für die Kommunikation mit den Sensoren unterstützt, können auch einige weitere Sensoren an den EV3-Sensorports angeschlossen werden.

In diesem Kapitel werden drei preisgünstige Präzisionssensoren beschrieben:

  • ADXL Beschlunigunssensor
  • Sensirion SHT31 Temperatur- und Feuchtigkeitssensor
  • BME280 Temperatur-, Feuchtigkeit- und Luftdrucksensor

Bezugsquelle: www.mouser.ch

Für den Anschluss am EV3 sind kleine Lötarbeiten erforderlicht.

 

Beispiel 1: ADXL345 Digitaler 3-Achsen-Beschleunigungssensor

Der kleine und energieeffizienter Beschleunigungssensor eignet sich gut für die Anwendungen in den mobilen Geräten. Der Sensor misst die Beschleunigung (inkl. Erdbeschleunigung) in x-, y, und z-Richtung. Seine hohe Genauigkeit ermöglicht eine Messung von Neigungsänderungen von weniger als 1,0°.

 

Um den Sensor am EV3-Sensorport anzuschliessen, schneidet den EV3-Verbindungskabel auf, abisoliert die 4 Kabel, und lötet das rote Kabel bei GND, das grüne bei VCC, das blaue bei SDA und das gelbe bei SCL an.

Im Programm gibt die Funktion getValues() die x-, y, und z-Komponenten der Bescheunigung zurück. Diese werden formatiert mit 2 Dezimalstellen auf dem EV3-Display angezeigt.

 
# Ro15a.py (for EV3)

from ev3robot import *
                                
robot = LegoRobot()
arduino = ArduinoLink(SensorPort.S1)
robot.addPart(arduino)
robot.drawString("Arduino Link Test", 0, 0)
print "Arduino Link Test. Press up/down/left/right/enter/escape"
while not robot.isEscapeHit():
    if robot.isDownHit():
        msg = "Blinking stopped"
        print msg
        robot.drawString(msg, 0, 2)
        v = arduino.getReplyInt(0)  # stop blinking
    elif robot.isUpHit():
        msg = "Blinker started"
        print msg
        robot.drawString(msg, 0, 2)
        v = arduino.getReplyInt(1)  # start blinking
    elif robot.isEnterHit():
        msg = arduino.getReplyString(2)  # get version
        print "Version:", msg
        robot.drawString(msg, 0, 1)
    elif robot.isLeftHit():
        msg = arduino.getReplyString(3)  # get switch state
        print "Switch:", msg
        robot.drawString("State: " + msg, 0, 3)
    elif robot.isRightHit():
        msg = arduino.getReplyString(4)  # get temperature
        print "Temperature: ", msg
        robot.drawString("Temp: " + msg, 0, 4)
robot.exit()
Programmcode markieren (Ctrl+C kopieren)

Erklärungen zum Programmcode:

ADXLSensor(SensorPort.S1): erzeugt ein Sensorobjekt am Sensorport 1
clearDisplay(): löscht die Anzeige auf dem EV3-Display

 

Beispiel 2: Sensirion SHT31 Temperatur und Feuchtigkeitssensor.

Der Sensirion SHT31 ist ein billiger und vielseitig einsetzbarer digitaler Temperatur- und Feuchtigkeitssensor hoher Präzision mit einer I2C-Schnittstelle. Interessant sind solche Messungen insbesondere zusammen mit Datenübertragung, wenn der EV3 die Temperatur und Luftfeuchtigkeit misst und diese Daten über das Internet an einen Computer oder Smartphone liefert. Die abisolierten Kabel Kabel müssen ähnlih wie im Beispiel 1 angelötet werden.

Programmcode markieren (Ctrl+C kopieren)
 

Erklärungen zum Programmcode:

SHTSensor(SensorPort.S1): Erzeugt ein Sensirionsensorobjekt am Sensorport 1
sht.getValues(): Gibt die Sensorwerte zurück als Liste mit zwei Werten

 

Beispiel 3: BME280 Temperatur-, Feuchtigkeit- und Luftdrucksensor
Mit einem Logger kann die Temperatur über eine längere Zeit gemessen werden. Der Temperaturverlauf wird im Koordinatensystem dargestellt.

Programmcode markieren (Ctrl+C kopieren)
 

Erklärungen zum Programmcode:

BMESensor(Sensorport.S1): Erzeugt ein Sensorobjekt
bme.getValues(): Gibt die Sensorwerte als Liste mit drei Werten zurück