Der EV3 ColorSensor kann wie ein LichtSensor die Lichtintensität messen (siehe Lichtsensor) und darüber hinaus Farben erkennen. Der Sensor ist mit Leuchtdioden (LEDs) zur Beleuchtung einer Fläche und Fotodioden ausgestattet, welche die rote, grüne und blaue Komponente des reflektierenden Lichts misst. |
Die RGB-Werte, die der Sensor zurückmeldet, sind abhängig von der Umgebungsbeleuchtung und von der Entfernung zum Objekt. Die besten Ergebnisse erreicht man in einer Entfernung von 0.5 - 1 cm. Die Bibliotheken ev3robot und simrobot stellen für die Erfassung der Farben mehrere Methoden zur Verfügung:
|
Standardfarben:
|
Die Methode getColorID() gibt eine Farbnummer 1 - 6 zurück. Die Methode getColorStr() liefert einen Farbnamen (BLACK, BLUE, GREEN, YELLOW, RED, WHITE) |
Beispiel 1: 6 Farben erkennen Der Roboter mit einem Farbsensor wird auf einen Farbstreifen gestellt. Der Farbsensor registriert die darunterliegende Farbe und zeigt den Farbnamen auf dem LCD-Display an Wenn er eine Farbe nicht erkennt, wird UNDEFINED ausgeschrieben. Anstelle von Farbstreifen können die roten, blauen, gelben und grünen Bausteine aus dem Lego-Bausatz benutzt werden. |
Realmodus | Simulationsmodus | |||
|
|
|||
|
|
Erklärungen zum Programmcode:
cs = ColorSensor(SensorPort.S3): erzeugt ein Colorsensorobjekt | |
get.ColorStr(): liefert den Farbwert der Standardfarben als Enum mit den Werten BLACK, BLUE, GREEN, YELLOW, RED und WHITE | |
print(c): zeigt der Farbwert im Ausgabefenster des TigerJython-Editors an (nur im direkten und Simulationsmodus) | |
robot.drawString(c, 0, 1) zeigt den Farbwert als String auf dem LCD-Display der Roboters an (in der Zeile 0 und Spalte 1). Im Simulationsmodus erschent diese Anzeige in der Staturbar | |
RobotContext.useBackground("sprites/colors.png"): das Hintergrundbild colors.png wird im Simulationsmodus benutzt | |
RobotContext.showStatusBar(30) : für zum Simulationsfenster eine Statusbar hinzu, in der mit robot.drawString() Werte ausgeschriben werden können (ersetzt die Anzeige auf dem LCD-Display). |
Beispiel 2: Den Farbraum anpassen blackCube = [0, 10, 0, 10, 0, 10]
|
Falls die Farberkennung zum Beispiel für die blaue Farbe nicht korrekt ist, können die Werte für blueCube angepasst werden.
Zuerst lässt man die drei Farbkomponenten anzeigen
(für die blaue Farbe beispielweise r = 10, g = 12, b = 52). Liegen diese Werte nicht in den vordefinierten Bereichen, müssen die blueCube-Werte angepasst werden:
cs.colorCubes[1] = [5, 15, 10, 25, 15, 60] |
Realmodus | Simulationsmodus | |||
|
|
|||
|
|
Erklärungen zum Programmcode:
cs.colorCube[1] = [5, 15, 10, 25, 15, 60]: modifiziert die blueCube | |
cs.getColor(): liefer den Farbwert | |
c. getColorStr(): liefert die Farbe als String (BLACK, BLUE, GREEN, YELLOW, RED und WHITE | |
c. getRed(): liefert die rote Komponente der Farbe c (nur Realmodus) |
Beispiel 3: Eigenen Farbraum definieren - Zuerst lässt man mit der Methode getColor() die drei Farbkomponenten der neuen Farbe auf dem LCD anzeigen: Die Zahlen in der Klammer bedeuten: |
Realmodus | Simulationsmodus | |||
|
|
|||
|
|
Erklärungen zum Programmcode:
cyanCube = [0,10, 30,60, 30,60]: definiert cyanCube | |
if (cs.inColorCube(c, cyanCube)): Gibt true zurück, wenn sich die Farbe c in der cyanCube befindet |
Beispiel 4: Farben und Sound Mehr zum Befehl playTone() findet man unter Menüpunkt Sound abspielen oder unter Turtlegrafik/Sound. |
Realmodus | Simulationsmodus | |||
|
|
|||
|
|
Erklärungen zum Programmcode:
oldColor = "Undefined": oldColor wird zu Beginn auf Udefined gesetzt | |
if (color != oldColor): Die Farbe wird kontinuierlich ermittelt, der Ton wird aber nur gespielt, wenn die Farbe ändert | |
robot.playTone(264, 300): Spielt einen Ton mit der Frequenz 264 Hz, während 300 Millisekunden |
Beispiel 5: Speed Control |
Realmodus | Simulationsmodus | |||
|
|
|||
|
|
Erklärungen zum Programmcode:
isRed = False: Die Variable isRed wird beim Eintritt in die rote Fläche auf True gesetzt. So kann man vermeiden, dass der Roboterbeim Losfahren im roten Streifen sofort wieder anhält. isRed wird auf false gesetzt, sobald sich der Roboter auf einer gelben oder grünen Unterlage befindet |
Aufgaben: Serie 7 |
1) |
Erstelle eine Unterlage mit mehrern Farben und versuchen den Farbraum so anzupassen, dass der Roboter die Farben yellow, blue, green und black richtig erkennt. Für die Simulation kannst du das Bild lighttest.gif verwenden, welches in der TigerJython -Distribution enthalten ist. RobotContext.setStartPosition(250, 490)
|
|
|
2) |
Der Roboter soll mit Hilfe vom Farbsensor und den Farbigen Flächen möglichst effizient den Parcours abfahren. |
|
|
|