TigerJython4Kids | HomeTurtlegrafikRobotikDatenbanken |
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 |
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() |
MERKE DIR... |
dass der Farbsensor die Farben nicht immer richtig erkennt. Du kannst aber mit 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 |
|
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)
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.