colorsensor

7. COLORSENSOR

 

 

DU LERNST HIER...

 

der Roboter mit seinem Colorsensor die Farben der Unterlage erkennen kann

 

 

WIE FUNKTIONIERT EIN COLORSENSOR

 
Der Colorsensor dient als Lichtsensor, der die Helligkeit der Unterlage misst, wenn du die Befehle für den Lichtsensor verwendest. Der Sensor kann aber auch Farben erkennen. Er ist mit einer Leuchtdiode zur Beleuchtung der darunterliegenden Fläche und drei Fotodioden, welche die rote, grüne und blaue Komponente des reflektierenden Lichts messen, ausgestattet.  
 

Die RGB-Werte , die der Sensor misst, sind abhängig von der Umgebungsbeleuchtung und von der Entfernung zum Objekt. Die besten Ergebnisse erreicht man in einer Entfernung von 2-5 Millimeter.

 

 

MUSTERBEISPIELE

 

Beispiel 1: Farben erkennen

Der Roboter mit einem Farbsensor bewegt sich auf einen Farbstreifen und erkennt die darunterliegende Farbe. Ist der Colorsensor z.B. am Port 3 angeschlossen, gibt die Funktion cs3.getColor() die erkannte Farbe als String zurück. Die Funktion getColor() erkennt die Standardfarben BLACK, BLUE, GREEN, YELLOW, RED und WHITE. Wenn keine dieser Farben erkannt wird, wird UNDEFINED ausgeschrieben.

 

Für die Simulation verwendest du das Hintergrundbild "colors.png". Im Realmodus kannst du die Datei colorstrip.pdf herunterladen und den Farbstreifen ausdrucken.

 

from grobot import *

RobotContext.useBackground("sprites/colors.png") 
RobotContext.setStartPosition(250, 480)

setSpeed(10)
forward()
repeat:
    c = cs3.getColor()
    print(c)
    delay(100)
► In Zwischenablage kopieren

 

Beispiel 2: Farben und Sound

Der Roboter kann mit dem Befehl playTone(f, t) einen Ton mit der Frequenz f während der Zeit t abspielen.

 
c
d
e
f
g
 

In deinem Beispiel bewegt sich der Roboter hin und her auf einem Farbstreifen und spielt für jede Farbe einen anderen Ton ab. Da der Sensor alle 100 ms eine Messung vornimmt, muss du in deinem Programm dafür sorgen, dass der Ton nur dann abgespielt wird, wenn er eine neue Farbe sieht. Dazu verwendest du die Variable oldColor, in der du jeweils den aktuellen Farbwert speicherst. Ein Ton wird nur dann abgespielt, wenn eine neue Farbe erkannt wird (color != oldColor). Im realen Modus musst du die Geschwindigkeit reduzieren.

 

from grobot import *

RobotContext.useBackground("sprites/colors.png") 
RobotContext.setStartPosition(250, 480)

#setSpeed(5)
oldColor = "UNDEFINED"
while not button_escape.was_pressed():
    color = cs3.getColor()
    if (color != oldColor):
        oldColor = color
        if color == "BLACK":
            playTone(264, 500)
            forward()
        elif color == "BLUE":
            playTone(297, 500)
        elif color == "GREEN":
            playTone(330, 500)
        elif color == "YELLOW":
            playTone(352, 500)
        elif color == "RED":
            playTone(396, 500)
            backward() 
        print(color)
    delay(100)
exit()    
► In Zwischenablage kopieren

 


Beispiel 3: RGB-Farbwerte abfragen (nur Realmodus)

In vielen Situationen möchtest du mit dem Colorsensor nicht nur die Grundfarben, sondern auch beliebige "Mischfarben" erkennen. In diesem Fall verwendest du mit Vorteil den Befehl getColorRGB(), der die drei Farbkomponenten (rot, blau, grün) als Liste zurückgibt. Der Sensor gibt für jede Komponenten eine Zahl zwischen 0 und 255 zurück.

Als erstes schreibst du ein Testprogramm, der die drei Werte ausschreibt. Du nimmst deine Fahrbahn und stellst den Roboter jeweils an eine der Farbflächen stellen.

 

 

from grobot import *

while not button_escape.was_pressed():
    c = cs3.getColorRGB()
    print(c)
    delay(300)
exit()
► In Zwischenablage kopieren

Bei einer ähnlichen Vorlage wie auf dem oberen Bild, erhältst du im Realmodus etwa folgende Werte:

  Realmodus  
Auf dem schwarzen Streifen: [4, 4, 3]  
Auf der gelben Fläche: [76, 48, 7]  
Auf der blauen Fläche: [7, 19, 16]  

Mit Hilfe dieser Werte kannst du jetzt den Roboter steuern, so dass er sich auf dem schwarzen Weg bewegt. Auf der blauen Fläche korrigiert er die Richtung auf dem Linksbogen, auf der gelben Fläche auf dem Rechtsbogen, auf der schwarzen Fläche fährt er geradeaus. Da sich bei den Sensorwerten um Messwerte handelt, die einer Streuung unterliegen, darfst du die Werte nie mit "==" testen, sondern mit ">" bzw. "<" . Häufig genügt es nur eine oder zwei Komponenten zu überprüfen.

 

from grobot import *

setSpeed(5)
while not button_escape.was_pressed():
    c = cs3.getColorRGB()  
    if c[0] < 10 and c[1] < 10 and c[2] < 10:
        forward()
    if c[0] < 10 and c[1] > 15:
        leftArc(0.06)
    if c[0] > 50 and c[1] > 35:
        rightArc(0.06)
    delay(10)
exit()    
► In Zwischenablage kopieren

 

Beispiel 4: Color-Sensor kalibrieren (nur Realmodus)

Es kommt oft vor, dass der ColorSensor die Farben nicht richtig erkennt, Mit dem Befehl calibrateColor(colors, True) kannst du die Grundfarben "BLACK", "BLUE", GREEN", "YELLOW" , "RED" und "WHITE" kalibieren. Ist der zweite Parameter True, wird neu kalibriert, bei False werden die Ergebnisse der letzten kalibrierung verwendet.

Um zum Beispiel die Farben rot und blau richtig zu erkennen. führst du folgendes Programm aus:

from grobot import *

cs3.calibrateColor(["RED", "BLUE"], True)
  
while not button_escape.was_pressed():
    c = cs3.getColor()
    print(c)
    delay(500)
► In Zwischenablage kopieren

Die neuen RGB-Werte für die Farben rot und blau werden auf der SD-Karte gespeichert. Falls danach die gleichen Farben verwendet werden, kann man mit dem Parameter False bewirken, dass die auf der SD-Karte gespeicherten Farben für die aufgeführten Farben verwendet werden. Für die übrigen Farben werden die Standardwerte verwendet.

Im nächsten Beispiel wird die breits kalibrierte Farbe "RED" verwendet, für "BLACK" die Standardwerte. Der Roboter bewegt sich hier wieder auf dem Farbstreifen. Er stertet auf dem schwarzen Feld und bewegt sich vorwärts. Falls er rot "sieht", fährt er rückwärts.

from grobot import *

cs3.calibrateColor(["RED"], False)
setSpeed(20)  
while not button_escape.was_pressed():
    c = cs3.getColor()
    print(c)
    if c == "BLACK":
        forward()
    elif c == "RED":
        backward()     
    delay(500)
► In Zwischenablage kopieren

 

 

MERKE DIR...

 

Mit cs3.getColor() erkennt der am Port 3 angeschlossene Colorsensor die Grundfarben RED, BLUE, YELLOW, GREEN, BLACK und WHITE.

Mit cs3.getColorRBG() gibt der Colorsensor die drei Farbkomponenten als Liste zurück (nur Realmodus)

Der Colorsensor muss sich im Abstand 2 - 5 mm von der Farbfläche befinden.

Mit dem Befehl cs3.calibrateColor(["RED", "BLUE"], True) werden die RGB-Werte der aufgeführten Farben neu bestimmt und auf der SD-Karte gespeichert. Beim Parameter False werden für aufgeführten Farben die Werte der letzten Kalibrierung verwendet.

 

 

ZUM SELBST LÖSEN

 

 


1.


Speed Control
Ein Roboter mit einem Colorsensor soll aufgrund der Farbe, die er "sieht" seine Geschwindigkeit anpassen. Auf einem grünen Streifen muss er schnell, auf dem gelben Streifen langsam fahren und bei Rot muss er 2 Sekunden anhalten, bevor er wieder losfahren darf.

Für die Simulation verwendest du das Bild
"sprites/colortrack.png".

 
 
2.

Der Roboter soll mit Hilfe vom Colorsensor und den Farbigen Flächen möglichst effizient den Parcours abfahren.

Für die Simulation verwendest du das Hintergrundbild "sprites/colorparcours.png".

 

3.

Löse die Aufgabe aus dem Beispiel 3 mit einem Lichtsensor. Die Helligkeitswerte der drei Farben unterscheiden sich deutlich voneinander, so dass man den Roboter mit Hilfe dieser Werte längst des schwarzen Pfades steuern kann.

Für die Simulation verwendest du das Hintergrundbild "sprites/roboroad.gif".

 

 

 
 

 

7-1
Fachliche Hinweise:

Der Begriff RGB bezeichnet einen Farbraum, der die Farben durch das additive Mischen der drei Grundfarben Rot, Grün und Blau darstellt. Die Farbanteile der einzelnen Farben werden mit Zahlen zwischen 0 un 255 dargestellt.

Beispiele:
rot: (255, 0, 0)
grün: (0, 255, 0)
blau: (0, 0, 255)
gelb: (255, 255, 0)