Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
| lehrkraefte:blc:informatik:glf20:robotik:pruegeli-challenge [2021/05/26 18:33] – [Heber-Motor] Ivo Blöchliger | lehrkraefte:blc:informatik:glf20:robotik:pruegeli-challenge [2021/05/31 06:26] (current) – [Aufgaben] Ivo Blöchliger | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| + | ====== Prügeli-Challenge ====== | ||
| + | Der Roboter soll einen kleinen Parcours absolvieren, | ||
| + | |||
| + | ===== Neue Elemente ===== | ||
| + | Es gibt noch zwei neue Elemente am Roboter: Der Ultraschall-Distanzsensor und der dritte Motor, um den Heber zu bewegen. | ||
| + | ==== Ultraschall-Distanzsensor ==== | ||
| + | Der Ultraschallsensor wird wie folgt initialisiert: | ||
| + | <code python> | ||
| + | # Ultraschall Distanzsensor hinzufuegen | ||
| + | us = UltrasonicSensor(SensorPort.S2) | ||
| + | robot.addPart(us) | ||
| + | |||
| + | </ | ||
| + | |||
| + | Die Distanz kann dann wie folgt gemessen werden: | ||
| + | <code python> | ||
| + | dist = us.getDistance() # Aktuelle Distanz | ||
| + | </ | ||
| + | Kann keine Distanz ermittelt werden, wird 0 (Null) als Wert geliefert. D.h. die Werte sind nur dann sinnvoll wenn '' | ||
| + | |||
| + | ==== Heber-Motor ==== | ||
| + | Initialisierung: | ||
| + | <code python> | ||
| + | # Hebearm hinzufuegen | ||
| + | heber = Motor(MotorPort.C) | ||
| + | robot.addPart(heber) | ||
| + | heber.setSpeed(10) | ||
| + | </ | ||
| + | Stellen Sie sicher, dass der Heber ganz oben ist, bevor Sie das Programm starten. | ||
| + | |||
| + | Verwendung: | ||
| + | <code python> | ||
| + | ########################################################################## | ||
| + | ### Sicherstellen, | ||
| + | ########################################################################## | ||
| + | |||
| + | # Heber in eine gegebene Position fahren. | ||
| + | def heberPosition(position): | ||
| + | heber.continueTo(position) | ||
| + | Tools.delay(500) | ||
| + | |||
| + | |||
| + | # Funktionen aufrufen: | ||
| + | heberPosition(-140) | ||
| + | heberPosition(0) | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Aufgaben ===== | ||
| + | Sie programmieren und testen Programmteile, | ||
| + | |||
| + | Das Programm soll wie folgt organisiert werden: | ||
| + | <code python> | ||
| + | # imports | ||
| + | |||
| + | # Initialiserung des Roboters, Motoren, Sensoren | ||
| + | |||
| + | # Definition der Funktionen wie z.B. | ||
| + | |||
| + | def heberPosition(position): | ||
| + | # ... | ||
| + | | ||
| + | def folgenBisWand(distanz): | ||
| + | # ... | ||
| + | | ||
| + | def wenden(): | ||
| + | # ... | ||
| + | | ||
| + | # Ganz unten, Start vom eigentlichen Programm: | ||
| + | |||
| + | folgenBisWand(20) | ||
| + | heberPosition(-100) | ||
| + | folgenBisWand(10) | ||
| + | heberPosition(-60) | ||
| + | rueckwartsFahren() | ||
| + | wenden() | ||
| + | heberPosition(-160) | ||
| + | </ | ||
| + | |||
| + | ==== Challenge ==== | ||
| + | Der Roboter soll ein Schoggi-Prügeli holen und bringen, wie in [[https:// | ||
| + | |||
| + | **Wichtig: | ||
| + | |||
| + | 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. | ||
| + | {{lehrkraefte: | ||
| + | |||
| + | ==== Bis auf eine Distanz geradeaus fahren ==== | ||
| + | <WRAP todo> | ||
| + | Messen Sie die geeignete Distanz von Sensor zur Wand, damit das Prügeli gut aufgeladen werden kann. Tragen Sie dann diese Distanz im Code unten ein und testen Sie | ||
| + | <code python> | ||
| + | def fahrenBisWand(): | ||
| + | gear.setSpeed(20) | ||
| + | gear.forward() | ||
| + | while True: | ||
| + | dist = us.getDistance() | ||
| + | if dist>0 and dist< | ||
| + | break | ||
| + | gear.stop() | ||
| + | | ||
| + | # Funktionen aufrufen | ||
| + | fahrenBisWand() | ||
| + | </ | ||
| + | Erweitern Sie das Programm so, dass der Heber erst runter geht, dann der Roboter fährt und am Schluss der Heber das Prügeli hoch hebt. | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | ==== Dem Rand folgen, bis zu einer Distanz ==== | ||
| + | <WRAP todo> | ||
| + | Schreiben Sie eine Funktion, damit der Roboter dem Rand folgt, bis zu einen bestimmten Distanz. | ||
| + | <code python> | ||
| + | def folgenBisWand(): | ||
| + | while True: | ||
| + | # Folgen | ||
| + | # Distanz überprüfen | ||
| + | </ | ||
| + | Zusätzlich können Sie die Geschwindigkeit in Abhängigkeit der Distanz anpassen: | ||
| + | * zuerst maximale Geschwindigkeit, | ||
| + | * Dann die Geschwindigkeit bis etwa 5 reduzieren, je näher man der gewünschten Distanz kommt (verwenden Sie dazu unsere Funktion linear für die Umrechnung) | ||
| + | |||
| + | <code python> | ||
| + | def linear(a, | ||
| + | return (x-a)/ | ||
| + | </ | ||
| + | </ | ||
| + | |||
| + | |||
| + | ===== Challenges ===== | ||
| + | Jetzt sollten Sie die Challenge 1 lösen können. | ||
| + | |||
| + | ==== Challenge 2 ==== | ||
| + | {{lehrkraefte: | ||
| + | |||
| + | Der Roboter startet beim grünen Pfeil, folgt der Linie bis vor die Mauer, fährt dann schräg daran vorbei bis zum Rand, dann wie Challange 1 | ||
| + | |||
| + | ==== Challenge 3 ==== | ||
| + | Wie Challenge 2, das Prügeli soll aber im rechten unteren Ecken (beim Startpunkt) abgelegt werden. | ||
| + | |||
| + | |||