TigerJython xx
für Gymnasien

5. Soundsensor

Ein Soundsensor kann auf akustische Signale reagieren. Im EV3-Education-Set ist kein Soundsensor vorhanden. Man kann aber problemlos den Soundsensor für den NXT verwenden. Diese können auch einzeln nachbestellt werden. Im Programm für den EV3 muss der Soundsensor als NxtSoundSensor bezeichnet werden. Die Methode getValue() gibt die Geräuschwerte in Dezibel zurück. In einer leisen Umgebung betragen diese zwischen 0 und 20 Dezibel. Für den Simulationsmodus benötigt man Computer mit einem Mikrofon.

Die Sensorwerte können wie folgt erfasst werden:

  • Mit Pollen (Beispiel 1):
    Die Sensorwerte werden In einer endlosen while-Schleife ständig abgefragt.
  • Mit Events (Beispiel 2):
    Wenn der registrierte Sensorwert einen bestimmten Wert erreicht, wird ein Event ausgelöst. Dabei wird eine Callbackmethode aufgerufen, in welcher definiert wird, wie der Roboter reagieren soll.

Beispiel 1: Starten mit Klatsch
Der Roboter startet bei einem akustischen Signal (z.Bsp. laut Klatschen oder Pfeifen). Der Computer muss mit einem Mikrofon ausgerüstet sein.

 
# Ro5a.py
# Simulation requires PC with a microphone

from simrobot import *
# from ev3robot import *
# from nxtrobot import *

robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
ss = NxtSoundSensor(SensorPort.S1)
robot.addPart(ss)

while not robot.isEscapeHit():
    if ss.getValue() > 30:
        gear.forward()    
robot.exit()
Programmcode markieren (Ctrl+C kopieren)

Erklärungen zum Programmcode:

ss = NxtSoundSensor(SensorPort.S1): erzeugt ein Soundsensorobjekt am Sensorport S1 eines EV3Roboters.
ss = SoundSensor(SensorPort.S1) erzeugt ein SoundSensorobjekt bei einem NXT-Roboter.
Bei der Simulation kann man beide Bezeichnungen verwenden.

robot.addPart(ss): schliesst denSoundsensor am Roboter an

 

Beispiel 2: Mit einem akustischen Signal Richtung ändern

Der Roboter bewegt sich vorwärts. Wird ein Event (lautes Klatschen) registriert, so wird die Callbackmethode onLoud() aufgerufen. Der Roboter macht er eine Linkskurve und fährt in der neuen Richtung weiter.

 

# Ro5b.py

from simrobot import *
# from ev3robot import *
# from nxtrobot import *

def onLoud(port, level):
    gear.left(580)
    gear.forward() 
    
robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
ss = NxtSoundSensor(SensorPort.S1, loud = onLoud)
robot.addPart(ss)
gear.forward()
Programmcode markieren (Ctrl+C kopieren)

Erklärungen zum Programmcode:

def onLoud(port, level): Callbackfunktion. Defniniert, war geschehen soll, wenn der Sensor laute Geräusche "hört"
ss = NxtSoundSensor(SensorPort.S1, loud = onLoud): die Callbackfunktion wird beim erzeugen des Sensors registriert




Aufgaben: Serie 5

1)

Roboter mit einem Soundsensor soll die Parcous aus durchfahren. Er bewegt sich zuerst vorwärt und bei jedem Klatsch, dreht er 90° nach links. Das Ziel ist es, den ganzen Parcous durchfahren.

Für die Simulation kannst du Sie als Hintergundbild bg.gif oder parcours.gif verwenden.



2)

Mit einem Klatsch wird der Roboter in die Bewegung auf einem Kreibogen versetzt. Beim nächsten Klatsch stopt er. Beim nächsten Klatsch setzt er die Bewegung wieder fort usw.

Um den Wechsel zwischen bewegen und stoppen zu programmieren, verwendet man in der Regel eine boolean Variable z.B. isMoved. Diese ist zu Beginn = False und wird beim ersten Klatschen auf True gesetzt. Beim nächsten Klatsch darf der Roboter nur dann stoppen, wenn isMoved = True ist.