TigerJython4Kids
HomeTurtlegrafikRobotikDatenbanken
colorsensor

7. COLORSENSOR

 

 

DU LERNST HIER...

 

wie du einen Sensor einsetzen kannst, der mit einer begrenzten Genauigkeit die Farbe eines Objekts bestimment. Der Colorsensor ist mit drei Fotodetektoren ausgerüstet, welche die Lichtintensität im roten, grünen und blauen Spektralbereich messen und als RGB-Werte oder Farbnamen abgeben. Die Messwerte sind aber stark abhängig von der Umgebungsbeleuchtung und von der Entfernung zum Objekt. Die besten Ergebnisse erreicht man in einer Entfernung von 0.5 - 1 cm.

 

 

MUSTERBEISPIEL

 

Der Roboter soll über einen Farbstreifen fahren und versuchen, die Farben richtig zu erkennen. Du verwendest dazu ein Objekt cs = ColorSensor(), das du am SensorPort S3 anschliesst. Du ruft in einer while-Schleife periodisch getColorStr() auf und erhältst einen der folgenden Strings "BLACK", "BLUE", "GREEN", "YELLOW", "RED", "WHITE" und "UNDEFINED", falls der Sensor die Farbe nicht bestimmen kann.

Den erhaltenen Wert schreibst du mit drawString(text, x, y) auf dem Display des EV3 aus (x ist die Spalten- und y die Zeilennummer des ersten Textzeichens). Im Simulationsmodus  erfolgt das Ausschreibung automatisch in der Statusbar (die Positionsangabe wird dabei nicht verwendet).

Du kannst einen Farbstreifen selbst herstellen oder von hier herunterladen.

 


from simrobot import *
#from ev3robot import *

RobotContext.useBackground("sprites/colors.png") 
RobotContext.setStartPosition(250, 480)
RobotContext.showStatusBar(30)                                 
                                 
robot = LegoRobot()
gear = Gear()
robot.addPart(gear)
cs = ColorSensor(SensorPort.S3)
robot.addPart(cs)
gear.setSpeed(20)
gear.forward()

while not robot.isEscapeHit():
   color = cs.getColorStr()
   robot.drawString(color, 0, 1)
   Tools.delay(300)
robot.exit()
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

 

MERKE DIR...

 

dass der Farbsensor die Farben nicht immer richtig erkennt. Du kannst aber mit
c = cs.getColor() den RGB-Farbwert holen und die rote Komponente mit red = c.getRed(), die grüne mit green = c.getGreen() und die blaue mit blue = c.getBlue()  als ganzen Zahlen zwischen 0 und 255 herausholen und damit das Programm so schreiben, dass es sich auch für deine eigenen Farben richtig verhält.

Du darfst aber - ausser im Simulationsmodus - diese Zahlen nie auf einen exakten Wert testen, da dieser im Realmodus immer Schwankungen unterworfen ist.

 

 

ZUM SELBST LÖSEN

 

 


1.


Fahre über den Farbstreifen und schreibe die 3 Zahlen red, green und blue des RGB-Wertes aus. Verwende dazu:

 
text = str(red) + "," + str(green) + "," + str(blue)

2.

Der Roboter mit einem Farbsensor bewegt sich auf einem Farbstreifen hin und zurück und  spielt beim Erkennen einer neuen Farbe einen kurzen unterschiedlichen Ton ab.

Verwende die Funktion playTone(freq, duration), die einen Sinuston mit der Frequenz freq (in Hertz) und der Dauer duration (in ms) spielt.

 

   

 

7-1
Fachliche Hinweise:

Der Colorsensor liefert eigentlich Farbwerte (r, g, b) für die Intensitäten im roten, grünen und blauen Farbspektrum. Aus diese werden dann softwaremässig die 6 Farben gemäss vordefinierten Quadern im Farbraum extrahiert. Diese haben folgende Bereiche:

n
 Farbe
red_min
red_max
green_min
green_max
blue_min
blue_max
0
 BLACK
0
10
0
10
1
10
1
 BLUE
5
15
10
25
15
45
2
 GREEN
8
24
25
65
3
15
3
 YELLOW
50
90
35
90
3
20
4
 RED
40
90
5
15
3
12
5
 WHITE
40
120
40
120
40
120

Diese Standardwerte können wie folgt neu definiert werden:
ColorSensor.colorCubes[n] = [red_min, red_max, green_min,
   green_max, blue_min, blue_max]
wobei der Index n die Farbe angibt, also beispielsweise für blau:
ColorSensor.colorCubes[1] = [5, 15, 10, 25, 15, 60]


Lage der Quader im Farbraum (Standardwerte)

 

7-2
Fachliche Hinweise:

Statt der Funktion getColorStr() kann man auch getColorID() verwenden, welche die Farbe als Integer zurückgibt, und zwar: 0: undefiniert,  1: schwarz, 2: blau, 3:grün, 4: gelb, 5: rot, 6: weiss.