Robo-Coding-Camp - den LEGO® MINDSTORMS® EV3 mit Python programmieren

13th Mar 2020

Der Faschingsferienkurs "Robo-Coding-Camp - Roboter programmieren wie ein Profi" bei den FabLabKids im FabLab München e.V. war ein voller Erfolg. Die sieben Kinder im Alter von 12 bis 14 waren sehr interessiert und hatten sichtlich ihren Spaß.

Das Besondere an dem Kurs: Wir programmierten die Roboter mit MicroPython, eine Python-Variante speziell für Micro-Controller. Python selbst ist eine weitverbreitete Programmiersprache, die in der Praxis von 79% der Programmiererinnen und Programmierer täglich eingesetzt wird.

Die Grundlage dafür schafft LEGO® selbst: Auf ihrer EV3-Education-Seite "Jetzt mit der Programmiersprache Python programmierbar!" werden alle Informationen zur Verfügung gestellt.

Der EV3 wird mit einer SD-Karte bestückt, worauf sich eine Linux-Betriebssystem und die notwendige Softwarelibary für die Steuerung der Sensoren und Motoren befindet. Schaltet man den EV3-Brick an, wird das Linux-Betriebssytem (ev3dev - basierend auf Debian) gestartet und man kann los legen.

Programmiert wird in einer echten Programmierumgebung: Die IDE "Visual Code Studio" von Microsoft® ist eine weit verbreitete und kostenlose Programmierumgebung. Über das Installieren einer Erweiterung von LEGO® ist es möglich, den über USB angeschlossenen EV3 zu managen und den geschriebenen Code zu übertragen.

Man merkt schon, hier wurde gearbeitet wie bei den Profis... aber mit viel Spaß! Folgend kannst du dir ein Bild davon machen:

Die Kinder hatten spannende Aufgaben zu lösen. Nach einer kurzen Einführung in den verwendeten Tools und in Python wurde der Roboter zusammengebaut und erst kleine Abläufe programmiert. Die Kids hatten es echt schnell drauf, so das wir konkrete Aufgabenstellungen selbständig lösen konnten.

Konkrete Aufgabenstellungen waren zum Beispiel, dass der Roboter die verschiedenen Farben auf dem Untergrund erkennt und je nachdem unterschiedliche Aktionen durchführt, wie langsamer oder schneller fahren, sich umdrehen oder einen verrückten Tanz-Move hinlegen. Der Klassiker "Linien nachfahren" durfte natürlich auch nicht fehlen. Die Herrausvorderung dabei war, dass je Roboter nur ein Farbsensor zur Verfügung stand. ^^

Gegenstände erkenne, diese umfahren oder eine Parklücke finden und rückwärts einparken waren weitere Herausforderungen. Der krönende Abschluss stellte ein Somu-Wettkampf dar, worin die Teams mit ihren gepimpten Robotern gegeneinander antraten und versuchten, sich aus dem Ring zu schieben. Mega lustig! :))

Hier mal ein kleines Beispiel, wie der Code in Python für den Roboter aussehen kann:

#!/usr/bin/env pybricks-micropython

from pybricks import ev3brick as brick
from pybricks.ev3devices import (Motor, TouchSensor, ColorSensor,
                                 InfraredSensor, UltrasonicSensor, GyroSensor)
from pybricks.parameters import (Port, Stop, Direction, Button, Color,
                                 SoundFile, ImageFile, Align)
from pybricks.tools import print, wait, StopWatch
from pybricks.robotics import DriveBase

motor_links = Motor(Port.B)
motor_rechts = Motor(Port.C)
roboter = DriveBase(motor_links , motor_rechts , 56 , 114 )
schallsensor = UltrasonicSensor(Port.S1)
farbsensor = ColorSensor(Port.S4)
geschwindigkeit = 100
lenkgeschwindigkeit = 0
parkplatz_gefunden = 0

brick.sound.beep()

while not Button.CENTER in brick.buttons():
    wait(10)

brick.sound.file(SoundFile.MOTOR_START)

initial_farbe = farbsensor.color()

while parkplatz_gefunden < 50:

    roboter.drive(geschwindigkeit, lenkgeschwindigkeit)

    farbe = farbsensor.color()

    parkluecke = schallsensor.distance()

    if farbe == initial_farbe:
        geschwindigkeit = 100
        lenkgeschwindigkeit = 0
        lenkrichtung = 0
    elif farbe != initial_farbe and lenkrichtung <= 2:
        geschwindigkeit = 0
        lenkgeschwindigkeit = 50
        lenkrichtung += 1
    elif farbe != initial_farbe and lenkrichtung > 2:
        geschwindigkeit = 0
        lenkgeschwindigkeit = -50

    if parkluecke > 200:        
        parkplatz_gefunden += 1
    else:
        parkplatz_gefunden = 0        

roboter.drive_time(-60, -25 , 4000)
roboter.drive_time(0 , 40, 3000)

LEGO® ist eine Marke der LEGO Gruppe. Die vorliegende Website wird nicht von der LEGO Gruppe gesponsert, genehmigt oder unterstützt.