Python Online
Home     .
ultrasonic

4. ULTRASCHALLSENSOR (DISTANZSENSOR)

 

 

DU LERNST HIER...

 

wie du mit einen Ultraschallsensor Distanzen messen und auswerten kannst.


 

WIE FUNKTIONIERT EIN ULTRASCHALLSENSOR?

 
Ein Ultraschallsensor hat einen Sender und einen Empfänger für Ultraschallwellen. Bei der Distanzmessung sendet er einen kurzen Ultraschallpuls und misst die Zeit, die dieser benötigt, um zum Objekt und wieder zurück zu laufen. Daraus kann er mit Hilfe der bekannten Schallgeschwindigkeit die Distanz ermitteln.  

Der EV3-Sensor kann die Distanzen im Bereich von ca. 5 bis 200 cm messen und liefert die Werte in cm zurück. Wenn kein Objekt im Messbereich ist, gibt er den Wert 255 zurück.


 

MUSTERBEISPIELE

 

Beispiel 1: Ein Objekt erkennen und anhalten
Der Roboter fährt vorwärts und misst alle 200 Millisekunden die Entfernung zum Objekt, der sich vor ihm befindet. Wenn die Entfernung kleiner als 20 cm ist, hält er an. Schliesse den Ultraschallsensor am Sensorport 1 an

 

Programm:

from grobot import *

forward()
repeat:
    d = us1.getDistance()
    print(d)    
    if d < 20:
        stop()    
    delay(200)
► In Zwischenablage kopieren

Ist der Sensor am Port 1 angeschlossen, gibt der Befehl us1.getDistance() die Distanz zum Objekt zurück. Der Sensorwert wird in einer Endlosschleife abgefragt und in der Variablen d gespeichert. delay(200) gibt die Messperiode an. Für die Überprüfung der Sensorwerte verwendest du die if-Struktur. Die eingerückte Anweisung stop() wird nur dann ausgeführt, wenn die Bedingung nach if erfüllt ist. Mit print(d) werden die Sensorwerte im Terminalfenster angezeigt.


Beispiel 2: Ein Regelungssystem für die Distanz
zum Objekt

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

Für die Auswertung der Sensorwerte verwendest du die if-else-Struktur. Falls die Bedingung nach if stimmt, wird die Anweisung nach if ausgeführt, sonst die Anweisung nach else.

 

 


Programm:

from grobot import *

forward()
setSpeed(10)
repeat:
    d = us1.getDistance()
    if d < 20:
        backward()
    else: 
        forward()    
    delay(100)
► In Zwischenablage kopieren

 

Beispiel 3: Objekt suchen
Ein Roboter mit einem Ultraschallsensor soll ein Objekt finden und danach zu ihm fahren und ihn umstossen. Der Roboter steht beim Start in einer beliebigen Richtung, d.h. er muss zuerst drehen, bis er den Gegenstand detektiert.

 

Programm:

from grobot import *

def searchTarget():
   repeat:  
      right()
      delay(50)    
      dist = us1.getDistance()
      if dist != 255:
         right()
         delay(500)
         break
 
setSpeed(10)
searchTarget()
forward()
► In Zwischenablage kopieren

Den Suchvorgang definierst du in der Funktion searchTarget(). Der Roboter dreht jeweils um einen kleinen Winkel nach rechts und misst die Distanz. Falls er ein Objekt detektiert (der Sensor gibt nicht mehr den Wert 255 zurück), dreht er noch ein wenig weiter, damit er gegen Mitte des Objekts gerichtet ist. Mit break kannst du die repeat-Schleife abbrechen und damit den Suchvorgang beenden. Im Hauptprogramm wird die Funktion searchTarget() aufgerufen und der Roboter fährt nach dem erfolgreichen Suchvorgang zum Objekt.

Eine moderne Industrieanlage ohne Sensoren ist heute kaum mehr denkbar. Auch in unserem Alltag umgeben uns Sensoren. Die modernen Autos verfügen über 50 - 100 verschiedene Sensoren: Abstandsensoren, Drehzahl- und Geschwindigkeitssensoren, Füllstandsensor des Benzintanks, Temperatursensor usw.

Beim Einparkieren werden Distanzsensoren verwendet, die ähnlich funktionieren, wie diejenigen unseres EV3 Roboters.

 

 

 

 

MERKE DIR...

 

Die Anweisung us1.getDistance() gibt den Wert des Ultraschalsensors, der am Sensorport 1 angeschlossen ist zurück. Die Sensorwerte werden in einer repeat-Schleife periodisch gemessen, delay(100) bestimmt die Messperiode. Dieser Befehl ist wichtig, das sonst die Werte zu häufig abgefragt werden, was zur Überlastung des Mikroprozessors führen kann.

Mit break kannst du eine Schleife (auch Endlosschleife) abbrechen. Das Programm wird danach mit der nachfolgenden Zeile fortgesetzt.

 

 

ZUM SELBST LÖSEN

 

 

1.

Das Regelungssystem im Beispiel 2 ist noch nicht optimal. Wenn du die Hand ganz wegnimmst, reagiert der Roboter oft verwirrt, da er entweder weit entfernte Gegenstände oder gar nichts detektiert. Optimiere das Programm so, dass der Roboter im Fall, dass die Distanz grösser als 50 cm ist, stehen bleibt.

 
if d < 20:
   ... 
elif d >= 20 and d < 50:
   ... 
else:
   ...    
  Dazu verwendest du die if-elif-else-Struktur, mit welcher du eine mehrfache Auswahl programmieren kannst.

2a.

Ein Roboter mit einem Ultraschallsensor soll einen höherer Gegenstand (Säule aus Pappkarton, Kerze, leichte Büchse...) finden, indem er am Ort langsam dreht und die Distanz misst. Falls er ein Objekt detektiert, löst er für 4 Sekunden einen Alarm aus.


 
2b.

Ein Roboter mit einem Ultraschallsensor soll ein Objekt finden, danach zu ihm fahren und wenige cm vor ihm anhalten

2c.

Der Roboter soll nach einander drei Säulen finden und alle umstossen.

3.
Ein Roboter mit einem Ultraschallsensor versucht den Ausgang aus einem begrenzten Raum zu finden. Er dreht zuerst langsam am Ort und wenn er keine Wand detektiert, fährt er los.