Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision | |||
| lehrkraefte:blc:informatik:glf19:pruegli [2020/06/29 08:02] – Ivo Blöchliger | lehrkraefte:blc:informatik:glf19:pruegli [2020/06/29 08:03] (current) – [Challenge 2] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== fginfo.ksbg.ch ====== | ||
| + | ====== Prügeli-Challenge ====== | ||
| + | {{ : | ||
| + | |||
| + | Der Roboter soll ein Schoggi-Prügeli holen und bringen. | ||
| + | |||
| + | **Wichtig: | ||
| + | |||
| + | Nützliche Hinweise aus der [[lehrkraefte: | ||
| + | |||
| + | ===== Challenge 1 ===== | ||
| + | Der Roboter folgt der Linie, bis er nah genug an der Wand ist, lädt das Prügeli auf, fährt rückwärts, | ||
| + | |||
| + | Positionieren Sie die rechte Auflage fast am Rand des Papiers und das Prügeli so weit vorne wie möglich. | ||
| + | |||
| + | Laden Sie folgenden Code herunter und öffnen Sie diesen mit TigerJython. | ||
| + | <code python pruegli.py> | ||
| + | from ev3robot import * | ||
| + | |||
| + | # Roboter initialisieren | ||
| + | robot = LegoRobot() | ||
| + | |||
| + | # Linker und rechter Motor hinzufuegen | ||
| + | right = Motor(MotorPort.A) | ||
| + | robot.addPart(right) | ||
| + | |||
| + | left = Motor(MotorPort.B) | ||
| + | robot.addPart(left) | ||
| + | |||
| + | # Hebearm hinzufuegen | ||
| + | heber = Motor(MotorPort.C) | ||
| + | robot.addPart(heber) | ||
| + | heber.setSpeed(10) | ||
| + | |||
| + | # Ultraschall Distanzsensor hinzufuegen | ||
| + | us = UltrasonicSensor(SensorPort.S4) | ||
| + | robot.addPart(us) | ||
| + | |||
| + | if us.getDistance()==-2: | ||
| + | print(" | ||
| + | robot.exit() | ||
| + | exit() | ||
| + | | ||
| + | # Lichtsensor hinzufuegen und starten | ||
| + | ls = LightSensor(SensorPort.S3) | ||
| + | robot.addPart(ls) | ||
| + | ls.activate(True) | ||
| + | |||
| + | # | ||
| + | ################################## | ||
| + | ## Platz fuer eigene Funktionen ## | ||
| + | ################################## | ||
| + | # Beispiele: | ||
| + | # steuern(0, | ||
| + | # steuern(20, | ||
| + | # steuern(40, | ||
| + | # steuern(10, | ||
| + | def steuern(links, | ||
| + | left.setSpeed(int(abs(links))) | ||
| + | if (links> | ||
| + | left.forward() | ||
| + | elif (links< | ||
| + | left.backward() | ||
| + | right.setSpeed(int(abs(rechts))) | ||
| + | if (rechts> | ||
| + | right.forward() | ||
| + | elif (rechts< | ||
| + | right.backward() | ||
| + | | ||
| + | |||
| + | # heberAction(-140) z.B. faehrt den Heber runter zum Aufladen | ||
| + | def heberAction(grad): | ||
| + | heber.continueTo(grad) | ||
| + | Tools.delay(500) | ||
| + | | ||
| + | # Diese Funktion soll einer Kante folgen, links schwarz, rechts weiss | ||
| + | # bis der Distanzsensor eine gegebene Distanz unterschreitet. | ||
| + | # Z.B. followToDist(20) bewirkt ein Folgen bis zur Distanz 20. | ||
| + | # Bevor die Funktion beendet wird, sollen die Motoren gestoppt werden. | ||
| + | |||
| + | def followToDist(limit): | ||
| + | while True: | ||
| + | dist = us.getDistance() # Aktuelle Distanz | ||
| + | hell = ls.getValue() | ||
| + | # Daten auswerten, Motoren steuern, mit break Schleife und damit Funktion verlassen. | ||
| + | |||
| + | # TODO: Hier fehlt Ihr Code | ||
| + | |||
| + | |||
| + | |||
| + | # Platz fuer weitere praktische Funktionen | ||
| + | | ||
| + | | ||
| + | ########################################### | ||
| + | ## B E G I N D E S P R O G R A M M S ## | ||
| + | ########################################### | ||
| + | |||
| + | # Startposition vom Hebel: Ganz oben (liegt am Gehaeuse an) | ||
| + | |||
| + | |||
| + | |||
| + | # Challenge 1: Folgen, aufladen, rueckwaerts, | ||
| + | def challenge1(): | ||
| + | # Messen und ausgeben (damit man eine Ahnung der Werte hat) | ||
| + | hell = ls.getValue() | ||
| + | dist = us.getDistance() | ||
| + | print(" | ||
| + | heberAction(-140) | ||
| + | heberAction(0) | ||
| + | # TODO: Hier fehlt Ihr code | ||
| + | |||
| + | |||
| + | # Funktion aufrufen | ||
| + | challenge1() | ||
| + | |||
| + | |||
| + | robot.exit() | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Challenge 2 ===== | ||
| + | {{ : | ||
| + | |||
| + | Zusätzliche Wand und Hindernis. Folgen, schräg rüber, dann wie Challenge 1. | ||
| + | |||
| + | ===== Challenge 3 ===== | ||
| + | Wie Challenge 2, das Prügeli muss aber auf der diagonal gegenüberliegenden Ecke abgeladen werden (der Umkreis ums Prügeli muss die Ecke enthalten). | ||
| + | |||