Jython HomeDruckenJava-Online

Arduino Sensoren verwenden


Im Unterschied zum EV3 besitzt das  bekannte Arduino-Microcontroller-System ein klassisches I/O-System mit digitalen Ein- und Ausgngsports und analogen Eingängen (Analog-Digital-Wandler). Damit lässt sich eine Vielzahl von billigen Sensoren und Aktoren betreiben und es ist leicht, selbstgebaute elektronische Schaltungen anzuschliessen.  Diese Vorteile gegenüber dem EV3 kann man so nutzen, dass man beide Geräte zusammenschliesst und die Sensoren und Aktoren des Arduino mit dem EV3 anspricht.

Die Verbindung der beiden Geräte erfolgt am einfachsten über einen I2C-Link, da beide Geräte über eine I2C-Schnittstelle verfügen. Dabei ist der EV3 ein I2C-Masters und der Arduino ein I2C-Slave.

 

Für die physische Verbindung werden zwei Pull-up-Widerstände benötigt. Wenn Sie eine Standard-Lego Mindstorm Sensorkabel aufschneiden sehen Sie 6 Kabe, diel weiss, schwarz, rot, grün, gelb und blau (in dieser Reihenfolge) gefärbt sind. Um die folgenden Schaltpläne zu realisieren, können Sie jeder Art von Verbindungsmaterial (Klemmleiste, Lüsterklemme) oder Löten verwenden.

 

Die zusätzlich benötigten Python-Module sind bereits in der Distribution von TigerJython enthalten. Der EV3 kann dabei  im autonomen oder direkten Modus betrieben werden. Genauere Informationen finden Sie hier.

 

Beispiel 1: I2C link zum Arduino
Arduino läuft als I2C Slave unter der Benutzung der Wire-Bibliothek. Er erhält einen Ein-Byte-Request vom EV3 und sendet eine Antwort von maximal 16 Bytes zurück zum EV3.

Mit den Tasten UP bzw. DOWN wird ein Led ein und ausgeschaltet. Mit der Taste RIGHT wird derTemperaturwert, der mit einem Arduino-Temperatursensor gemessen wurde, zurückgehollt.

   

# 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:

arduino = ArduinoLink(SensorPort.S1): erzeugt ein Arduino-Objekt am Port 1
robot.addPart(arduino): arduino wird softwaremässig am EV3 angeschlossen
if robot.isDownHit(): wenn die Taste Down gedrückt wurde
v = arduino.getReplyInt(0): sendet 0 zum zum Arduino
msg = arduino.getReplyString(4): sendet 4 zum Arduino und erhält die Temperatrur zurück