11. EV3 Infrarot Remote Sensor (Infrarot-Fernbedienung)


Eine Fernbedienung mit Infrarot-Steuerung wird im täglichen Leben häufig verwendet. Der EV3-Infrarotsensor kann IR-Befehle des Infrarotsenders (Fernbedienung) empfangen. Damit lässt sich der Roboter mit der Fernbedienung steuern. Der IRSensor ist  im Lego Heim-Bausatz (inklusive der Fernsteuerbox) bereits enthalten, muss aber mit dem Lego Education-Bausatz zusätzlich beschafft werden. Der IRSensor kann auf drei Arten verwendet werden:

  • IRRemoteSensor: zur Fernsteuerung durch Drücken der Buttons
  • IRSeekSensor: zur Messung der Distanz und Richtung zur IR-Quelle der Fernsteuerung
  • IRDistanceSensor: zur Messung der Distanz zu einem Ziel (Target)

Die Fernsteuerung-Buttons können mit verschiedenen Aktionen belegt werden und sind über folgende 11 Command-Nummern. ansprechbar:

 
  1: links oben
2: links unten
3: rechts oben
4: rechts unten
5: links oben + rechts oben
6: links oben + rechts unten
7: links unten + rechts oben
8: links unten + rechts unten
9: Zentrum
10: links unten + links oben
11: rechts ober + rechts unten

Beispiel 1: Der Roboter wird unter Verwendung der Fernbedienung gesteuert.

Die Aktionen,  die beim Drücken der Fernsteuerung ablaufen, können Sie selbst festlegen. In unserem Beispiel sind die Fernbedienungstasten wie folgt belegt:

  • links oben (1): geradeaus vorwärts fahren
  • rechts oben (3): anhalten
  • links unten (2): links fahren
  • rechts unten (4) rechts fahren
  • gleichzeitig links oben + rechts oben (5): Programm beenden
   

Realmodus    
# Ro11a.py

from ev3robot import *

robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
irs = IRRemoteSensor(SensorPort.S1)
robot.addPart(irs)
isRunning = True
robot.drawString("1: Forward" , 0, 1)
robot.drawString("3: Stop" , 0, 2)
robot.drawString("2: Left" , 0, 3)
robot.drawString("4: Right" , 0, 4)
robot.drawString("5: End Program" , 0, 4)

while not robot.isEscapeHit() and isRunning: 
    command = irs.getCommand()    
    if command == 1:
        gear.forward()        
    if command == 3:
        gear.stop()        
    if command == 2:
        gear.leftArc(0.2) 
    if command == 4:
        gear.rightArc(0.2)
    if command == 5:
        isRunning = False       
robot.exit()
   
Programmcode markieren (Ctrl+C kopieren)
   

Erklärungen zum Programmcode:

irs = IRRemoteSensor(SensorPort.S1): erzeugt einen Infrarot Sensor am Port 1
command = irs.getCommand() : gibt die Nummer des gedrückten Buttons der Fernsteuerung zurück. (Channel Nr. = Port Nr.)
while not robot.isEscapeHit() and isRunning : das Programm kann entweder mit Drücken des Escape-Buttons auf dem EV3 oder mit der Fernsteuerung (5: links oben + rechts oben) beendet werden

 

Beispiel 2: Der Roboter soll mit Hilfe der Fernbedienung durch eine Hindernisbahn geführt werden.

Die Aktionen,  die beim Drücken der Fernsteuerung ablaufen, werden wie folgt festgelegt:

  • links oben (1): geradeaus vorwärts fahren
  • rechts oben (3): anhalten
  • links unten (2): rechtwinklich abbiegen nach links
  • rechts unten (4) rechtwinklig abbiegen nach rechts
  • gleichzeitig links oben + rechts oben (5): Programm beenden

 

 
Realmodus    
# Ro11b.py

from ev3robot import *

robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
irs = IRRemoteSensor(SensorPort.S1)
robot.addPart(irs)
isRunning = True
robot.drawString("1: Forward" , 0, 1)
robot.drawString("3: Stop" , 0, 2)
robot.drawString("2: Left" , 0, 3)
robot.drawString("4: Right" , 0, 4)
robot.drawString("5: End Program" , 0, 4)

while not robot.isEscapeHit() and isRunning:
    command = irs.getCommand(channel)    
    if command == 1:
        gear.forward()
    if command == 3:
        gear.stop()
    if command == 2: 
        gear.left(600)
    if command == 4:        
        gear.right(600)
    if command == 5:
        isRunning = False       
robot.exit()
 
Programmcode markieren (Ctrl+C kopieren)
 

Erklärungen zum Programmcode:

gear.left(600): Biegt rechtwinklig nach links ab. Die Hindernisbahn muss so gebaut werden, dass der Roboter jeweils rechtwinklich abbiegen kann.

 

Beispiel 3: Distanz messen mit Infrarot Sensor
Der Infrarotsensor kann ähnlich wie ein Ultraschallsensor für die Entfernung-Messung verwendet werden. Die Methode getDistance() gibt die Entfernung zum Target in cm zurück. Falls kein Objekt in der "Sichtweite" ist, wird 255 zurückgegeben. In unserem Beispiel wird die Distanzmessung akustisch begleitet. Je näher sich ein Gegenstand befindet, umso tieferer Ton wird abgespielt.

 

Realmodus    
# Ro11c.py

from ev3robot import *

robot = LegoRobot()
irs = IRDistanceSensor(SensorPort.S1)
robot.addPart(irs)

while not robot.isEscapeHit():  
    dist = irs.getDistance()
    robot.drawString("d=" + str(dist), 0, 3)
    robot.playTone(10 * dist + 100, 50)
    if dist == 255:
        robot.playTone(10 * dist + 100, 50)    
    Tools.delay(500)
robot.exit()
 
Programmcode markieren (Ctrl+C kopieren)
 

Erklärungen zum Programmcode:

irs = IRDistanceSensor(SensorPort.S1): erzeugt einen Infrarot-Distanz-Sensor am Port 1
irs.getDistance(): gibt den Abstand zum Objekt zurück
robot.playTone(10 * dist + 100, 50): spielt ein Ton mit der Frequent 10 * dist + 100 während 50 Millisekunden ab