TigerJython | xx für Gymnasien |
Der Ultraschallsensor bestimmt die Distanz zu einem Objekt durch die Laufzeit, die ein kurzer Ultraschall-Puls benötigt, um vom Sensor zum Objekt und wieder zurück zu laufen. Der Ultraschallsensor des Pi2Go-Roboters kann die Distanz im Bereich 5 cm bis ca. 80 cm messen. Die Funktion getValue() gibt die Entfernung in cm zurück. Die Sensorwerte können mit Pollen oder mit Eventmodell erfasst werden. |
Beispiel 1: Hindernis registrieren und ausweichen
|
|
Erklärungen zum Programmcode:
us = UltrasonicSensor(): Erzeugt ein Ultraschallsensor-Objekt | |
us.getValue(): Gibt die Distanz zum Gegenstand zurück. Falls kein Gegenstand detektiert wird, wird -1. |
Beispiel 1a: Hindernis registrieren im Simulationsmodus
|
Erklärungen zum Programmcode:
mesh_hbar = [[200, 10], [-200, 10], [-200, -10], [200, -10]]: Koordinaten der Eckpunkte eines horizontalne Balkes, Mittelpunkt im Zentum | |
useTarget("sprites/bar0.gif", mesh_hbar, 250, 100): 250, 100 gibt die Position des Balken. | |
setBeamAreaColor(Color.green) : veranschaulicht den Sichtwinkel des Sensors | |
setProximityCircleColor(Color.lightGray): Die Entfernung wird mit einem Kreis dargestellt |
Beispiel 2: Ein Objekt finden und hinzufahren
|
Erklärungen zum Programmcode:
def searchTaret(): Ein Gegenstand wird gesucht | |
if dist != -1: Ein gegenstand gefunden | |
print dist: Im Remote-Modus wird der gemessene Wert im Ergebnisfenster angezeigt | |
mesh = [[50, 0], [25, 43], [-25, 43], [-50, 0], [-25, -43], [25, -43]] : Maschenkoordinaten für ein 6-Eck mit dem Durchmesser 100 | |
useTarget("sprites/redtarget.gif", mesh, 400, 400): Das Objekt wird auf die Position (400, 400) gesetzt |
Beispiel 3: Messwerte auf dem Pi2Go-Display anzeigen
|
Erklärungen zum Programmcode:
display = Display(): Erzeugt ein Display-Objekt | |
v = str(us.getValue()): Gibt die Entfernung zum Gegenstand als Text zurück | |
v = v.replace(".", ""): Ersetzt Dezimalpunkt durch ein Leerzeichen | |
display.showText(v, [0, 1, 0, 0]): Zeigt die gemessen Distanz im cm an der Position 0 mit einem Dezimalpunkt an |
Beispiel 4: Sensorwerte mit Eventmodell erfassen Im Beispiel wird ein Event ausgelöst, wenn die Distanz zu den Objekten kleiner als 30 cm ist. Der Raspi dreht er 90° nach links und fährt in der neuen Richtung weiter. Für den realen Modus können die Zeilen mit RobotContext und BeamerArea weglassen werden.
|
Erklärungen zum Programmcode:
us = UltrasonicSensor(near = onNear): Erzeugt ein Ultraschallsensor mit dem benannten Parameter near | |
onNear(d): Callbackfunktion, die aufgerufen wird, wenn die Distanz d zu den Objekten kleiner als 30 ist. | |
us.setTriggerLevel(30): Setzt den TriggerLevel auf 30 |
Aufgaben Serie 9: |
1) |
Der Roboter soll deinen Handbewegungen folgen, indem er ständig die Distanz 20 cm halten versucht. Wenn er eine Distanz grösser als 20 cm misst, fährt er vorwärts, bei einer Distanz kleiner als 20 cm fährt er zurück. Verwende die Digitalanzeige, um die Distanz Modus anzuzeigen.
|
|
|
||
2) |
Versuche es zuerst mit einem Gegenstand. mesh = [[-10, 10], [10, 10], [-10, -10], [10, -10]]
RobotContext.useTarget("sprites/square.gif", mesh, 400, 400)
Drei solche Gegenstände kannst du bei der Simulation wie folgt positionieren: mesh = [[-10, 10], [10, 10], [-10, -10], [10, -10]] RobotContext.useTarget("sprites/square.gif", mesh, 300, 100) RobotContext.useTarget("sprites/square.gif", mesh, 400, 300) RobotContext.useTarget("sprites/square.gif", mesh, 100, 400) |
|
|
||
|
|