touchsensor

6. TOUCHSENSOR (BERÜHRUNGSSENSOR)

 

 

DU LERNST HIER...

 

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

 

 

WIE FUNKTIONIERT EIN TOUCHSENSOR

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

 

 

MUSTERBEISPIELE

 

Beispiel 1: Ein Hindernis registrieren und ausweichen

Der Roboter soll sich in einem mit vier Wänden beschränken Raum bewegen. Wenn er mit dem Touchsensor eine Wand berührt, fährt er eine kurze Strecke zurück, dreht 90° nach links und fährt in der neuen Richtung weiter.

Ist der Touchsensor am Port 3 angeschlossen, gibt der Befehl ts3.isPressed()True zurück, falls der Sensorknopf Knopf gedrückt ist, sonst liefert er False.

 

from grobot import *

RobotContext.useObstacle("sprites/field1.gif", 250, 250)  

forward()
repeat: 
    if ts3.isPressed():
        backward()
        delay(1500)
        left()
        delay(550)
        forward()
    delay(100)    
► In Zwischenablage kopieren

Für die Simulation verwendest du ein Bild mit einem transparenten Hintergrund, als Gegenstand, welchen du im Grafikfenster mit dem RobotContext useObstacle() und der Angabe der Koordinaten positionieren musst.

Beispiel 2: Kanalroboter
Ein Roboter mit zwei Touchsensoren soll den Weg im Kanal finden. Mit zwei Touchsensoren kannst du den Roboter effizienter steuern. Je nachdem, ob er ein Hindernis mit dem linken oder mit dem rechten Sensor berührt, fährt er zuerst kurz zurück und dreht um einen kleinen Winkel in die Gegenrichtung. Die Sensoren sind an den Ports 1 und 2 angeschlossen.

Führe das Programm zuerst im Simulationsmodus aus und baue danach mit verschiedenen Gegenständen eine ähnliche Bahn für den realen Roboter.

 

 




from grobot import *

RobotContext.useObstacle("sprites/racetrack.gif", 250, 250)
RobotContext.setStartPosition(420, 460)

forward()
repeat:
    if ts1.isPressed():
        backward()
        delay(250)
        left()
        delay(200)
        forward() 
    elif ts2.isPressed():        
        backward()
        delay(250)
        right()
        delay(200)
        forward()
    delay(100)             
► In Zwischenablage kopieren


 

MERKE DIR...

 

Der Touchsensor kann nur zwei Werte zurückgeben und zwar den Wahrheitswert True , wenn der Sensorbutton gedrückt ist, oder False, wenn er nicht gedrückt ist.

Für die Simulation muss du Hintergrundbilder mit einem transparenten Hintergrund verwenden und diese mit RobotContext.useObstackle() hinzufügen.

 

 

ZUM SELBST LÖSEN

 

 


1.


Ein Roboter mit einem oder zwei Tousensoren bewegt sich im Käfig mit einem Ausgang. Er startet in der Mitte und soll möglichst rasch den Ausgang finden.

Für die Simulation benötigst du den folgenden Context:

 
 
RobotContext.useObstacle("sprites/trap.gif", 250, 250)


2.

Der Roboter soll eine rechteckige Fläche, die auf allen Seiten begrenzt ist, so abfahren, als ob er sie wie ein Rasenmäher mähen würde. Falls er auf eine Begrenzung trifft, so fährt er zuerst ein wenig zurück, dreht um 90 Grad, fährt eine kurze Strecke parallel zur Wand, dreht nochmals um 90 Grad und fährt wieder vorwärts.

Beachte, dass der Rasenmäher immer einmal links und einmal rechts drehen muss. Um es so zu programmieren, gibt es ein einfacher Trick:

 

Du wählst Variable n, die zu Beginn 0 ist, nach einer Linksdrehung auf 1 und bei einer Rechtsdrehung wieder auf 0 gesetzt wird. Du überprüfst bei jeder Wende, ob n 0 oder 1 ist und machst die entsprechende Drehung. Um das Programm besser zu strukturieren, kannst du die Links-Wende als Funktion turnLeft() und die Rechts-Wende als Funktion turnRight() definieren. Falls du nicht weiter kommst, kannst du hier spicken:

RobotContext.useObstacle("sprites/field1.gif", 250, 250)
RobotContext.setStartPosition(350, 350)

3.

Kanalroboter.
Ein Roboter mit zwei Touchsensoren soll das ganze Rohr durchfahren und wieder zum Ausgangsort zurückkehren. Für die Simulation kannst du das Hintergrundbild channel.gif verwenden.

 

 

 

 

 
RobotContext.useObstacle("sprites/channel.gif",250, 250)
RobotContext.setStartPosition(250, 250)


 

ZUSATZSTOFF: BUTTON ESCAPE

 


Beispiel 3: Programme mit Button escape abbrechen

Ähnlich wie du die Buttons des Touchsensorens programmieren kannst, können auch die Buttons auf dem EV3-Brick programmiert werden, um z. B. mit dem Button escape ein laufendes Programm abzubrechen.

 


Anstelle einer Endlosschleife repeat verwendest du eine while-Schleife mit einer Abbruchbedingung. So lange der Button escape nicht gedrückt wurde, läuft das Programm. Der Roboter bewegt sich gegen eine Wand. Wenn er sie mit seinem Touchsensor berührt, fährt er kurz zurück und dann wieder vorwärts. Endlos. Bis jetzt hast du solche Programme mit Schliessen des Terminalfensters abgebrochen. Diese while-Schleife ermöglicht dir, das Programm mit Drücken des Button escape abzubrechen. Dies ist insbesondere dann praktisch, wenn du ein Programm autonom, weit weg vom deinem Computer ausführst.

from grobot import *

forward()
while not button_escape.was_pressed():
    if ts3.isPressed():
        backward()
        delay(1500)
        forward()
    delay(100)    
exit()
► In Zwischenablage kopieren
 


 

MERKE DIR...

 

Anstelle einer Endlosschleife repeat kannst du die Schleife
while not button_escape.was_pressed():
verwenden. Das Programm wird dann nur so lange ausgeführt, bis du den Button escape auf dem EV3 Brick drückst.

Die Buttons enter, left, right, up und down kannst du zur Steuerung des Roboters verwenden.



 

ZUM SELBST LÖSEN

 
4.

Dein Roboter soll das nebenstehende Labyrinth mit Hilfe seines Touchsensors und mit Hilfe der Buttons button_left und button_right durchfahren. Er startet unten rechts und fährt vorwärts. Wenn er mit dem Touchsensor eine Wand berührt, fährt er eine kurze Strecke rückwärts, bleibt stehen und wartet, bis du den Button left oder right gedrückt hast. Dann dreht er rechtwinklig in dieser Richtung und fährt vorwärts.

 

 

Löse die Aufgabe zuerst im Simulationsmodus. Anstelle der Brick-Buttons kannst du die Cursortasten left, right und die Esc-Taste verwenden. Vorlage:

from grobot import *

RobotContext.useObstacle("sprites/bg2.gif", 250, 250)  
RobotContext.setStartPosition(400, 490)

forward()
while not button_escape.was_pressed():
    if ts3.isPressed():
        ....
    if button_left.was_pressed():
       ...
    if button_right.was_pressed():
       ...
    delay(100)       
exit()       
► In Zwischenablage kopieren

 

   

 

6-1
Fachliche Hinweise:

 

from grobot import *

RobotContext.useObstacle("sprites/field1.gif", 250, 250)
RobotContext.setStartPosition(350, 350)

def turnLeft(): 
    ...

def turnRight(): 
    ...
    
n = 0
forward()
repeat: 
    if ts3.isPressed(): 
        backward()
        ...
        if n == 0:
            turnLeft()
            n = 1
        else:
            turnRight()
            n = 0   
        forward()
6-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.