Python Online
Home     .
colorsensor

9. 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 darunterliegende 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.

 

Programm:

from grobot import *

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

setSpeed(20)
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.


Programm:

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

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. Beim realen Roboter liegen diese Zahlen in der Regel viel tiefer und sind insbesondere von der Distanz zur Farbfläche abhängig.

 

Als erstes schreibst du ein Testprogramm, der die drei Werte ausschreibt. Beim realen Roboter kannst du den Befehl forward() deaktivieren und den Roboter jeweils an eine der Farbflächen stellen.

Programm:

from grobot import *

RobotContext.setStartPosition(350, 490)
RobotContext.useBackground("sprites/roboroad.gif")

setSpeed(20)
forward()
repeat:
    c = cs3.getColorRGB()
    print c
    delay(300)
► In Zwischenablage kopieren

Bei einer ähnlichen Vorlage wie auf dem oberen Bild, erhältst du 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.

 

Programm:

from grobot import *

RobotContext.setStartPosition(50, 490)
RobotContext.useBackground("sprites/roboroad.gif")

setSpeed(10)
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

 

 

 

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.

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

 

 

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.

Erstelle eine ähnliche Bahn..


 
 
2.

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

Erstelle eine ähnliche Colorparcours.

 

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.