====== Helligkeitssensor ====== Ziele: * Einen Klebestreifen feststellen * Einer Kante eines Klebestreifen folgen ====== Helligkeitssensor ====== Der Lichtsensor kann Helligkeit und/oder Farbe messen. Dazu wird die zu messende Fläche normalerweise schnell abwechselnd angestrahlt und wieder nicht, und das jeweils reflektierte Licht gemessen. Die Differenz entspricht dann der Helligkeit der gemessenen Fläche. Dokumentation dazu: https://pybricks.com/ev3-micropython/ev3devices.html#color-sensor Um einen Eindruck der gelieferten Werte zu bekommen, kann direkt der Roboter benutzt werden (ohne Programmierung). Gehen Sie wie folgt vor: * Auf dem Roboter gehen ins Menu ''Device browser'' -> ''Sensors'' und wählen dort den ''color'' Sensor aus. * Scrollen Sie nach unten und versichern Sie sich, dass der Modus ''COL-REFLECT'' eingstellt ist. Falls nicht, ändern Sie das weiter unten. * Wählen Sie dann ''Watch values'' aus und stellen Sie den Roboter auf verschiedene Flächen (vor allem der Teppich und die Klebestreifen sind interessant). * Notieren Sie sich zu jeder der verschiedenen Flächen die typischen kleinsten und grössten Werte, die gemessen werden. Bewegen Sie dabei den Roboter auch. * Mit den gemessenen Wertebereich können später diese Bereich erkannt, bzw. sauber voneinander unterschieden werden. Kennt man nun die Werte, kann damit z.B. bis zu einer Linie gefahren werden: * Legen Sie ein neues EV3-Projekt mit Namen ''helligkeitssensor'' an * In der neuen Datei ''main.py'' fügen Sie folgenden Code hinzu: licht = ColorSensor(Port.S3) # Bitte Anschluss-Nummer überprüfen. links = Motor(Port.A) rechts = Motor(Port.B) fahrwerk = DriveBase(links, rechts, 55, 135) # Motor links, Motor rechts, Raddurchmesser (in mm), Radabstand (in mm) stopuhr = StopWatch() # Stopuhr unmittelbar vor der ersten Bewegung starten fahrwerk.drive(150,0) # Vorwärts ohne Kurve hell = licht.reflection() while hell<50: # Wiederholen, solange die Helligkeit weniger als 50% beträgt hell = licht.reflection() # Helligkeit messen print(hell) # und ausgeben fahrwerk.stop() # Danach anhalten print("Zeit in ms") print(stopuhr.time()) # Gemessene Zeit auf dem Computer ausgeben. * Passen Sie nötigenfalls die Parameter fürs ''DriveBase'' an. * Passen Sie den Wert für die Bedingung der ''while'' Schlaufe an, damit sauber zwischen Teppich und Klebeband unterschieden werden kann. * Testen Sie das Programm. ===== Einer Linie folgen ===== Grundidee: Der Roboter soll dem linken (oder rechten) Rand einer Linie folgen, d.h. die Helligkeit sollte immer **genau zwischen** den Werten der beiden Flächen liegen. Je nachdem, ob zu hell oder zu dunkel gemessen wird, soll nach links oder rechts gesteuert werden. Das kann erreicht werden, indem die Drehgeschwindigkeit beim ''drive'' Befehl angepasst wird (am besten gleich als Funktion der Helligkeit). Schreiben Sie ein Programm, so dass der Roboter einer Linie folgen kann. Testen Sie mit einem Klebestreifen am Boden. ===== Challenge ===== Es gibt Klebestreifen von ca. 50cm Länge, deren Richtung jeweils auf den nächsten solchen Klebestreifen zeigt. Wird ein Klebestreifen gefunden, soll der Roboter sich nach links drehen und in der Richtung dieses Klebestreifens zum nächsten gefahren werden, der sich in mindestens 80cm Distanz befindet. Gemessen wird die Zeit für zwei Runden, gleiches Programm auf unterschiedlichen Parcours.