Ein sehr einfacher Ansatz zur Bestimmung der Farbe einer Oberfläche besteht darin, eine Fotodiode oder einen Fotowiderstand und eine Anzahl (3, wie beispielsweise in RGB) von LEDs unterschiedlicher Farben zu verwenden, um die Oberfläche zu beleuchten.
Dann wird in einer Zeitmultiplex-Weise jede der LEDs nacheinander für sich eingeschaltet, um die Oberfläche zu beleuchten, und die Intensität des reflektierten Lichts wird für jede von ihnen gemessen.
Beispiel: Wenn drei LEDs verwendet werden, eine rote, eine grüne und eine blaue, ergeben sich drei Reflexionsintensitätswerte, einer für jede Farbkomponente, die zusammen nach einer möglichen Normalisierung eine numerische Annäherung an die Farbe der Oberfläche ergeben des RGB-Raums (was natürlich von den spezifischen Wellenlängenverteilungen der LEDs abhängt).
(Der Einfachheit halber werde ich im Folgenden das RGB-Dreifarben-Beispielsetup verwenden, aber es kann eine beliebige Anzahl von 1 bis n verschiedenfarbiger Lichtquellen verwendet werden. Je mehr verschiedene Farben verwendet werden, desto genauer kann die Farbe der Oberfläche bestimmt werden.)
Das Prinzip ist das gleiche wie beim Chip einer Kamera: Die Intensitäten der roten, blauen und grünen Komponenten des einfallenden Lichts werden unabhängig voneinander gemessen und die Kombination der drei Intensitäten bestimmt die Farbe. In der Kamera befindet sich für jede dieser drei Grundfarben ein Fotodetektor, so dass alle drei Intensitäten gleichzeitig gemessen werden können. Was dies kompliziert macht, ist, dass drei verschiedene Sensoren oder drei verschiedene Filter benötigt werden.
Der Vorschlag funktioniert daher umgekehrt: Anstatt das Licht zu filtern, nachdem es von der Oberfläche reflektiert wurde, kann man das Licht auch "filtern", bevor es auf die Oberfläche trifft. Grundsätzlich spielt es für Ihre Wahrnehmung keine Rolle, ob Sie Ihre blau getönte Sonnenbrille aufsetzen oder stattdessen eine Blaulichtquelle und keine Sonnenbrille verwenden.
Die für jede Farbkomponente (oder LED) gemessene Intensität des reflektierten Lichts ergibt einen (normalisierten) Wert im Bereich von [0,0, ..., 1,0], wobei 0,0 bedeutet, dass kein Licht reflektiert wird, und 1,0 bedeutet, dass eine maximale Menge vorhanden ist Licht wird reflektiert. Abhängig von der Farbe der Oberfläche sind die Intensitäten für die verschiedenen Lichtfarben (Wellenlängen) unterschiedlich.
In jedem Fall erhalten Sie drei Intensitätswerte, von denen jeder die Intensität eines bestimmten Teils des Farbspektrums bestimmt. Jede vollständige Messung ergibt somit ein Triplett (r, g, b), das die gemessene Farbe bestimmt. Wie in der Computergrafik steht das Triplett (0,0,0) für völlige Dunkelheit, schwarz; (1,1,1) ist das hellste Weiß und jede Kombination (r, g, b), wobei r == g == b einen Grauton darstellt. Alle anderen möglichen Kombinationen identifizieren einen markanten Punkt im RGB-Raum und definieren die gemessene Farbe. (0,5,0,0) ist zum Beispiel etwas mittelrot und (0,9,0,9,0) ist etwas relativ hellgelb usw ..
Hinweis:
- Der Fotodetektor muss natürlich für alle (3) verwendeten Lichtfarben empfindlich sein.
- Es kann einige Zeit dauern, bis sich der Fotodetektor nach dem Umschalten der LEDs stabilisiert hat, bevor genaue Messwerte erhalten werden können. Beispielsweise sind Fotowiderstände normalerweise relativ langsam. Für eine akzeptable Genauigkeit können Minuten bis Hunderte von Millisekunden erforderlich sein, für die genauesten Werte Minuten.
- Sobald die Hardware eingerichtet ist, kann sie einfach auf die interessierenden Oberflächenfarben kalibriert werden, indem einfach jeweils eine Probe gemessen wird. Auf diese Weise müssen keine Anstrengungen unternommen werden, um die genauen Wellenlängenverteilungen oder die relative Helligkeit der LEDs oder die relative Empfindlichkeit des Sensors für diese Wellenlängen zu bestimmen.
- Vor dem tatsächlichen Gebrauch kann eine Normalisierung der Messwerte erforderlich sein. Um beispielsweise Streulicht von außen zu kompensieren, kann eine weitere Messung bei ausgeschalteten LEDs durchgeführt werden, und das Ergebnis wird dann von den Werten abgezogen, die gemessen werden, wenn die LED leuchtet. Im Allgemeinen ist der für jede Farbkomponente gemessene Absolutwert von geringerer Bedeutung als der relative Unterschied zwischen ihnen.
Einige zufällige Seiten mit praktischen Informationen zum Thema:
http://www.societyofrobots.com/sensors_color.shtml
http://www.instructables.com/id/Color-Detection-Using-RGB-LED/#step1
http://letsmakerobots.com/node/23768