Python Online
Home     .
touchsensor

5. TOUCHSENSOR

 

 

DU LERNST HIER...

 

wie du ein einen Touchsensor dafür einsetzen kannst, Hindernisse zu erkennen und entsprechend zu reagieren.

 

 

MUSTERBEISPIEL

 

Der EV3-Touchsensor ist wie ein Schalter aufgebaut, der beim Hineindrücken des roten Knopfs Kontakt macht. Gewöhnlich baust du ihn vorne in der Mitte des Roboters an. Der Touchsensor kennt die zwei Zustände gedrückt (pressed) und nicht gedrückt.

 

Es ist deine Aufgabe, dass der Roboter sich in einer quadratischen oder rechteckigen Kiste so bewegt, dass er ungefähr rechtwinklig zueinander stehende Bahnen abfährt.

Wie beim Lichtsensor fasst du den Touchsensor als ein Objekt mit dem beliebig wählbaren Namen ts auf, das du mit ts = TouchSensor() unter Angabe des Sensorports erzeugst. Mit addPart(ts) schliesst du ihn bildlich gesprochen am Brick an.

Um den Zustand des Sensors zu erfassen, rufst du in einer while-Schleife die Funktion isPressed() auf. Diese liefert True, falls im Moment des Aufrufs der Knopf gedrückt ist, sonst liefert sie False. Achte darauf, dass der Sensor in diesem Programm am Port 3 angeschlossen wird.

 

Programm:

from ev3robot import *

robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
ts = TouchSensor(SensorPort.S3)
robot.addPart(ts)
gear.forward()

while not robot.isEscapeHit(): 
    if ts.isPressed():
        gear.backward(1500)
        gear.left(550)
        gear.forward()
robot.exit()
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Der Touchsensor kann nur zwei Werte abgeben, und zwar die die Wahrheitswerte (boolean) True oder False.

Dein Programm "bemerkt" das Drücken des Touchsensors nur, wenn sich der Roboter vorwärtsbewegt. Ist das Programm in den Funktionen backward(1500) oder left(550) blockiert, kannst du den Knopf so oft drücken wie du willst und es geschieht rein gar nichts.

 

 

ZUM SELBST LÖSEN

 

 


1.


Der Roboter bewegt sich in einer Kiste mit einem Ausgang. Du lässt ihn in der Mitte der Kiste starten und er soll möglichst rasch den Ausgang finden. Dabei darfst du aber nicht davon ausgehen, dass der Roboter von sich aus schon "weiss", wo sich der Ausgang befindet.

 

 
 



2.

Ein Kanalroboter   soll sich in einem rechtwinklig gebogenen Röhrensystem selbständig, also ohne Fernsteuerung, bewegen.

Verwende dazu zwei vorne angebrachte Touchsensoren, die an den Sensorports S1 und S2 angeschlossen sind.

 

 


 

 

   

   

 

5-1
Fachliche Hinweise:

Da der Tastenzustand nur genau dann vom Programm erfasst wird, wenn die Sensorfunktion isPressed() aufgerufen wird, verliert man oft "schnelle" Tastenbetätigungen, also Tastenklicks. Um dies zu vermeiden, muss die Taste sehr oft hintereinander abgefragt werden (dies nennt man "Pollen").

Um jedes Tastenereignis zu erfassen, müsste man eine Prozess starten, der ausschliesslich mit Pollen der Taste mit einer Wiederholzeit von ungefähr 10 ms beauftragt wird. Dies erreicht man mit einem "Tastenhandler", der in einem eigenen Thread läuft. Tastenereignisse werden dann wie folgt mit dem Eventmodell behandelt:

from ev3obot import *

# Callback returns immediately
def onPressed(port):
    global hit
    print "hit"
    hit = True

robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
ts = TouchSensor(SensorPort.S3, pressed = onPressed)
robot.addPart(ts)
gear.forward()
hit = False
while not robot.isEscapeHit():
    if hit:
        hit = False
        gear.backward(1500)
        gear.left(240)
        gear.forward()
robot.exit()

Man kann nun die Taste von Hand sehr schnell drücken und es wird immer "hit" ausgeschrieben.

5-2
Kanalroboter
 

Abwasserkanäle halten unsere Städte sauber und helfen, Überflutungen bei starken Regenfällen zu verhindern. Rund 80% der Abwasserkanäle sind nicht begehbar. Kanalroboter werden eingesetzt, um die Kanalnetze zu kontrolliert und Leckstellen aufzuspüren.

Der Roboter navigiert autonom mit Hilfe seiner Touchsensoren in Kanälen mit 30 - 60 cm Durchmesser und kann mit dem eingebauten Laser-Kamerasystem die beschädigten Stellen entdecken.