lehrkraefte:blc:informatik:glf20:robotik:helligkeitsensor

Helligkeitssensor als Navigationshilfe

Initialisierung

Der Sensor wird wie folgt initialisiert (z.B. gleich nach Initialisierung den Motoren)

# Lichtsensor hinzufuegen und starten
ls = LightSensor(SensorPort.S3)      # Ueberpruefen, ob der Sensor auch wirklich an Port 3 angeschlossen ist!
robot.addPart(ls)
ls.activate(True)

Verwendung

hell = ls.getValue()  # Liefert Werte zwischen 0 (schwarz) und 1245(?) (komplett weiss)

Die gelieferten Werte können fluktuieren (je nach Distanz vom Sensor zum Boden, Umgebungslicht etc.). Sinnvolle Werte müssen erst gemessen werden, indem der Roboter auf verschiedenem Untergrund getestet wird.

Kalibrierung

Mit folgendem Programm können die Sensorwerte in Echtzeit angezeigt und getestet werden. Schliessen Sie auf dem Laptop das kleine Verbindungsfenster, um das Programm zu beenden.

kalibrierung.py
from ev3robot import *
 
######################
##  Initialisierung ##
######################
 
# Roboter initialisieren
robot = LegoRobot()
 
# Raeder hinzufuegen
gear = Gear()
robot.addPart(gear)
 
# Lichtsensor hinzufuegen und starten
ls = LightSensor(SensorPort.S3)      # Ueberpruefen, ob der Sensor auch wirklich an Port 3 angeschlossen ist!
robot.addPart(ls)
ls.activate(True)
 
###########################################
## B E G I N   D E S   P R O G R A M M S ##
###########################################
 
while True:
  l = ls.getValue()  # Helligkeit messen
  print(l)           # Ausgeben auf dem Laptop
  robot.drawString(str(l), 0, 3)  # Ausgeben auf dem Roboter-Display
  Tools.delay(100)   # 0.1 Sekunden warten
 
# robot.exit()  # Programm ordnungsgemäss beenden.

Programmieren Sie den Roboter so, dass er losfährt, bis der Sensor einen Klebestreifen auf dem Boden feststellt. Dort soll der Roboter stoppen und das Programm beenden mit robot.exit().

Benutzen Sie folgendes Programm-Skelett:

# Initialisierung fehlt hier!
 
gear.forward()
while True:  # Unendlich wiederholen
  # Lichtsensor auslesen, Wert in eine Variable speichern 
  # Darauf reagieren (Eine Bedingung mit der Helligkeits-Variablen formulieren)
  if roboter_sieht_klebestreifen:
     break      # While-Schlaufe sofort beenden
 
gear.stop()
robot.exit()

Viele Rasenmähroboter funktionieren nach dem folgenden Prinzip:

  • Fahren bis die Grenze oder ein Hindernis erreicht wird.
  • Ein bisschen zurücksetzen (rückwärts fahren).
  • Um einen zufälligen Winkel drehen (wobei hier wohl Werte zwischen 40° und 160° sinnvoll sind).
  • Wiederholen

Unser Rasen soll hier eine weisse Blache (oder Papier) sein, die nicht verlassen werden soll. Der Roboter startet vollständig auf der Blache.

Programmieren Sie einen «Rasenmäher», der das Programm beendet, nachdem er 3 mal in den Rand gefahren ist.

Eine Zufallszahl kann wie folgt bestimmt werden:

# Am Anfang vom Code:
from random import randrange
 
# Im Code
winkel = randrange(40,171)  # Zufälliger, ganzzahliger Winkel zwischen 40 und 170 (obere Grenze exklusive)
# Winkel in Zeit oder Strecke umrechnen, um effektiv um diesen Winkel zu drehen.

Die Idee ist, dem Rand einer Linie zu folgen und den Sensor zu platzieren, dass dieser grau sieht. Das passiert, wenn der Sensor genau auf der Grenze zwischen Weiss und Schwarz misst. Zu hell heisst, zu viel rechts, zu dunkel heisst zu viel links (oder umgekehrt).

Arbeiten Sie mit gear.leftArc(radius_in_cm) und gear.rightArc(radius_in_cm) in einer while Schlaufe.

  • lehrkraefte/blc/informatik/glf20/robotik/helligkeitsensor.txt
  • Last modified: 2021/05/10 09:13
  • by Ivo Blöchliger