TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
ultrasonic

6. ULTRASCHALLSENSOR

 

 

DU LERNST HIER...

 

wie du einen Ultraschallsensor dafür verwenden kannst, um die Distanz zu einem Objekt (Target) zu bestimmen. Dazu sendet der Sensor ähnlich wie ein Radar einen kurzen Ultraschall-Puls aus und bestimmt die Zeit, die dieser benötigt, um zum Objekt und wieder zurück zu laufen. Daraus kann er aus der bekannten Schallgeschwindigkeit die Distanz ermitteln. Der Sensor liefert für Distanzen im Bereich von ca. 10 cm und 200 cm Werte zwischen 0 und 255, wobei 255 dann abgegeben wird, wenn kein Objekt im Messbereich ist.

 

 

MUSTERBEISPIEL

 

Dein Programm soll dafür sorgen, dass der Roboter möglichst gut in einer bestimmten Distanz zu deiner Hand bleibt. Ist er zu nahe, soll er rückwärts fahren, sonst soll er vorwärts fahren.

Wiederum wird der Sensor durch ein Objekt UltrasonicSensor in das Programm eingebunden. Mit addPart() schliesst du ihn sozusagen am Brick an. (Verwende SensorPort S1.) Dein Programm fragt in einer Wiederholschleife jede halbe Sekunde mit getDistance() die aktuelle Distanz (in cm) ab. Je nach dem erhaltenen Wert, sagst du dem Roboter, dass er vorwärts oder rückwärts fahren muss.

 

from ev3robot import *

robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
us = UltrasonicSensor(SensorPort.S3)
robot.addPart(us)
gear.setSpeed(15)
gear.forward()

while not robot.isEscapeHit():
    d = us.getDistance()
    if d > 20:
        gear.forward()    
    else:
        gear.backward()
robot.exit()
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

dass der Ultraschallsensor nicht häufiger als ungefähr alle 100 Millisekunde einen Messwert im Bereich von etwa 10 - 200 cm in Vorwärtsrichtung liefern kann.

 

 

ZUM SELBST LÖSEN

 

 


1.


Der Roboter soll in senkrechter Richtung zu einer Wand fahren und bei rund 10 cm zur Wand den Rückwärtsgang einschalten und 3 s. rückwärts fahren. Nachher soll er wieder vorwärts fahren.

Für die Simulation verwendest du an Stelle der Wand einen horizontalen Balken, den du mit folgendem Context erzeugt

 
 
target = [[200, 10], [-200, 10], [-200, -10], [200, -10]]
RobotContext.useTarget("sprites/bar0.gif", target, 250, 100)

2a.

Ein Roboter mit einem Ultraschallsensor soll einen höherer Gegenstand (Säule aus Pappkarton, Kerze, leichte Büchse...) finden, gegen ihn fahren und ihn umstossen. Der Roboter steht beim Start in einer beliebigen Richtung, d.h. er muss zuerst drehen, bis er den Gegenstand registriert.

 

 
2b.

Dasselbe, aber der Roboter soll wenige cm vor der Säule anhalten

2c.

Dasselbe, aber der Roboter soll mehrere Säulen umstossen.
Organisiere einen Wettbewerb. Wem gelingt es in kürzester Zeit?

 

   

 

6-1
Fachliche Hinweise:

Die Liste target definiert das reflektierende Objekt. Sie enthält die Koordinaten der 4 Eckpunkte relativ zum Mittelpunkt des Rechtecks. useTarget() verwendet ein Spritebild bar0.gif zur Darstellung des Objekts.

6-2
Fachliche Hinweise:

Das Problem kann auch im Simulationsmodus gelöst werden. Für die sechseckige Säule in der unteren rechte Ecke wird folgender Context verwendet:

target = [[50,0], [25,43], [-25,43], [-50,0], [-25,-43], [25,-43]] 
RobotContext.useTarget("sprites/redtarget.gif", mesh, 400, 400)

Die beiden folgenden Zeilen bewirken, dass in der Simulation der Strahlbereich und ein Messkreis dargestellt werden.

us.setBeamAreaColor(makeColor("green"))  
us.setProximityCircleColor(makeColor("lightgray")

Beachte, dass getDistance() in der Simulation -1 zurückgibt, wenn kein Target gefunden wird.