-

Brügeli-Challenge

Programmierung

# Helligkeitssensor
licht = ColorSensor(Port.S3)             # Bitte Anschluss-Nummer überprüfen.
 
# Distanzsensor
ultraschall = UltrasonicSensor(Port.S2)  # Bitte Anschluss überprüfen
 
# Motoren
links = Motor(Port.A)
rechts = Motor(Port.B)
fahrwerk = DriveBase(links, rechts, 55, 135)  # Motor links, Motor rechts, Raddurchmesser (in mm), Radabstand (in mm)
 
heber = Motor(Port.C)
 
# Parameter fürs das Folgen von Linien:
hellMin = 10    # Helligkeit auf dunkler Seite
hellMax = 80    # Helligkeit auf heller Seite
omegaMax = 30   # Maximal Drehgeschwindigkeit beim Linienfolgen
speed = 100     # Vorwärtsgeschwindigkeit beim Linienfolgen.
 
########
# TODO #
########
def heberAb():
    heber.run_target(20, -42)  # Hier den Winkel anpassen. Auf jeden Fall negativ.
 
def heberAuf():
    heber.run_target(20, 0)   # Zurück auf Startposition
 
 
heberAb()
wait(2000)   # 2s warten
heberAuf()

Der Roboter soll mit dem Heber oben starten. Finden Sie dann eine geeignete Winkelposition für den Heber, um das Brügeli aufladen zu können.

Wenn das funktioniert, löschen Sie die letzten drei Zeilen (die nur zum Testen da sind) und fügen Sie folgenden Code hinzu:

# Folgt der Linie auf der einen (seite=1) oder anderen Seite (seite=-1)
# testBis ist eine Funktion, die True (weiter folgen) oder False (anhalten und nicht mehr folgen) zurückgibt
def folgen(seite, testBis):
    while testBis():
        hell = licht.reflection()
        omega = ((hellMax-hell)/(hellMax-hellMin)*2-1)*omegaMax*seite
        fahrwerk.drive(speed, omega)
    fahrwerk.stop()
 
def fahren(testBis):
    while testBis():
        pass
    fahrwerk.stop()
 
def ultraschallGroesser(limit):
    def testBis():
       d = ultraschall.distance()
       return d==0 or d>limit
    return testBis
 
def tachometerKleiner(limit):
    fahrwerk.reset()  # Tachometer auf Null setzen
    def testBis():
       d = fahrwerk.distance()
       return abs(d)<abs(limit)
    return testBis
 
def helligkeitGroesser(limit):
    def testBis():
       hell = licht.reflection()
       return hell>limit
    return testBis
 
 
# Während 10cm einer Linie folgen, dann stoppen
# folgen(1, ultraschallGroesser(100))
 
# Der Linie folgen, bis der Roboter 20 cm vor einer Wand steht.
# folgen(1, tachometerKleiner(200))
 
# Weiterfahren, bis Helligkeit kleiner als 20
# fahrwerk.drive(150,0)
# fahren(helligkeitGroesser(20))

Lösen Sie die Challenge mit folgenden Elementen: