Das RGB-Farbmodell wird über die Grundfarben Rot, Grün und Blau definiert und ist additiv, was so viel bedeutet, dass sich überlagernde Farben das Bild heller machen. Dem gegenüber steht die subtraktive Farbmischung, die jeder von uns noch aus der Schulzeit mit dem Tuschkasten kennt. Mischt man alle Farben zusammen, entsteht ein schmutziges Grau, im Idealfall aber schwarz.
Auf Computern sind die RGB-Farbräume die am häufigsten benutzen, da die meisten Geräte das RGB-System unterstützen.
Die Farben in diesem Modell werden durch Zahlentripel (R, G, B) angegeben, wobei jede einzelne Farbe Werte zwischen 0 und 255 annehmen kann.
Fasst man das RGB-Modell als Farbraum auf, dann lassen sich die drei Grundfarben Rot (x), Grün(y) und Blau (z) auf den drei Raumachsen x, y und z auftragen und über einen Einheitswürfel darstellen.
Rot entspricht im Farbraum der Darstellung (1,0,0), Blau (0,0,1), Grün (0,1,0) und Schwarz(0,0,0). Die Koordinaten der Farbe Weiß sind (1,1,1) und alle Werte auf der Geraden zwischen (0,0,0) Schwarz und (1,1,1) Weiß entsprechen Grautönen.
Neben dem RGB-Farbmodell gibt es eine Reihe weiterer Farbmodelle, die hier nur genannt werden können: CMY (cyan, magenta, gelb), CMYK (cyan, magenta, gelb, schwarz), YUV (Luminanz und Chrominanz), HSV (hue, saturation, luminance) und HSL (hue, saturation, brightness).
Kommen wir noch einmal zurück zum RGB-Modell und dem Sensor TCS230, der im ersten Versuch eingesetzt wird. Bei diesem Sensor lassen sich die drei eingebauten Fotodioden mit den Farbfiltern Rot, Grün und Blau einzeln ein- bzw. ausschalten. So erfasst die eingeschaltete rote Fotodiode die Lichtintensität der roten Farbanteile eines Objektes; entsprechendes gilt für die Fotodioden mit blauem und grünem Filter. Aus diesen drei ermittelten Werten, nennen wir sie R, G und B, lässt sich dann die Farbe des angestrahlten Objektes über die Intensität des reflektierten Lichtes ermitteln.
Mit einer RGB-LED werden wir erst einmal versuchen die RGB-Farben "herzustellen".
RGB-LEDs gibt es in unterschiedlichen Ausführungsformen. Zwei mögliche Formen als 6- und 4-polige Ausführung zeigt das linke Bild, während rechts die im folgenden Versuch benutzte 4-polige Form mit Anschlussbelegung dargestellt ist.
Über die herausgeführten Elektroden lassen sich die drei Farbdioden Rot, Grün und Blau einzeln ansteuern.
RGB-LED Leuchte | |
Material |
|
Aufgaben |
|
Schaltungsaufbau
Das Programm RGB_LED_Leuchte.c
Wie arbeitet das Programm RGB_LED_Leuchte.c?
Die Anschlussbelegungen der RGB-LED werden über die Direktive #define (Zeilen 7-9) eingetragen. Einer Variablen k wird in Zeile 11 der Wert 2500 zugewiesen und anschließend die benutzten Funktionen mit Wertübergabe als forward-Deklarationen eingetragen (Zeilen 13 - 15).
Das Hauptprogramm ist in eine Endlosschleife (while(1)) eingebettet und besteht aus drei Funktionsaufrufen (Zeilen 17 - 25).
Zur Darstellung aller RGB-Farben benutzen wir das PWM-Verfahren und schalten jeweils zwei Dioden gleichzeitig an. Während die Helligkeit der einen Diode zunimmt, nimmt bei der anderen die Helligkeit entsprechend ab. Bei drei Farben r, g und b gibt es drei verschiedene Möglichkeiten Paare zu bilden, wenn es nicht auf die Reihenfolge ankommt: rb, rg und bg. Diese Farbkombinationen werden mit den drei Funktionsaufrufen abgearbeitet; der Übergabeparameter k an die Funktionen regelt die Impulslänge und damit die Helligkeit der LEDs.
mit den Parametern
Die Funktion pulse_out überträgt einen Impuls bestimmter Länge an einen I/O Pin.
In der FOR...-Schleife mit Laufparameter r und Übergabeparameter k werden an die rote LED Impulse mit einer Länge von 0 bis 2500µs und an die blaue LED gleichzeitig von 2500µs bis 0 gelegt. Das Farbenspiel startet von blau über violett zu rot. Die zweite Funktion greift den Endzustand der ersten Funktion auf und führt das Farbspiel weiter von rot über orange zu grün, um mit der letzten Funktion von grün über cyan wieder zu blau zu gelangen. Damit schließt sich der Kreis. Wer einen schnelleren Farbwechsel vorzieht, muss nur den Wert der Variablen k (Impulslänge) verkleinern.
Wir wissen jetzt wie man eine RGB-LED beschaltet und RGB-Farben mit ihr herstellen kann. Im folgenden Projekt werden wir RGB-Lichtmessungen an farbigen Objekten durchführen und auf diesem Weg versuchen die Zusammensetzung der Farbe aus den drei Farbanteilen Rot, Grün und Blau zu bestimmen. Dazu werden zwei verschiedene Sensoren eingesetzt: TCS230 und ColorPAL.
In diesem Projekt werden wir uns mit dem Thema Licht und RGB-Lichtmessung ein wenig auseinandersetzen. Die Ablauffolge umfasst:
Der programmierbare Licht-Frequenz-Wandler Baustein der Firma TAOS verbindet konfigurierbare Fotodioden mit einem Strom-Frequenz-Wandler auf einem einzigen CMOS Chip. Am Ausgang steht eine Rechteckspannung (Tastverhältnis: 50%), deren Frequenz direkt proportional zur einfallenden Strahlungsintensität (Bestrahlungsstärke) ist. Es gilt:
Die maximale Ausgangsfrequenz kann über zwei Eingabekanäle auf drei verschiedene Stufen abgesenkt werden. Die digitalen Ein- und Ausgänge lassen sich direkt mit einem Mikrocontroller verbinden. OE (Output Enable) macht den Ausgang hochohmig.
Die Peaks der spektralen Ansprechempfindlichkeiten der vier Fotodioden liegen bei
Rot: ca. 680nm Blau: ca. 480nm und 820nm Grün: ca. 540nm und 815nm Klar: ca. 690nm
Der Licht-Frequenz-Wandler liest ein 8 x 8 Array von Fotodioden aus. Jeweils 16 Fotodioden tragen die Filter blau, grün und rot, während 16 weitere Fotodioden ohne Filter sind. Die Farbdioden sind auf der Fläche gestreut verteilt, um die einfallende Strahlung möglichst gleichmäßig zu erfassen. Die 16 gleichfarbigen Dioden sind jeweils parallel geschaltet und lassen sich während einer Messung über die Pinauswahl steuern.
Die Anschlussdaten
Alle weiteren Daten können dem Datenblatt entnommen werden.
Mit den Informationen aus dem Datenblatt lässt sich eine erste Messung durchführen. Mit dem Oszilloskop machen wir die am Ausgang stehenden Signale sichtbar.
Eine erste Messung mit dem TSC230 | |
Material |
|
Aufgaben |
|
Schaltungsaufbau
Das Programm RGB_Farbsensor1.c
Wie arbeitet das Programm RGB_Farbmessung_tcs230.c?
Im Kopfteil des Programms werden die Textersetzungen vorgenommen, die sich über das Datenblatt ergeben. Alle Pinnamen erscheinen dort mit den entsprechenden I/O Portzuordnungen am Controller. Dadurch wird das Programm lesbarer und man muss nicht mehr ständig nachschlagen, welcher Pin mit welchem Port verbunden ist. Das Hauptprogramm besteht aus wenigen Zeilen.
Die Ausgabe der Impulsfolgen wird gestartet; P3 wird auf LOW gesetzt wg. /OE active low.
Aufruf der Funktion skalierung2. Sie skaliert die Ausgangsfrequenz in diesem Fall auf 2% oder 12kHz nach Vorgaben aus dem Datenblatt. Wer nachlesen möchte, wie man eine Funktion in C schreibt und aufruft, kann das hier tun -> Funktionen
In der Endlosschleife wird die Funktion farbe_gruen aufgerufen. In dieser Funktion sind die Parameterwerte so eingestellt, dass nur die grünen Fotodioden eingeschaltet sind. Fotodioden in den Farben rot und blau lassen sich durch entsprechende Funktionen aufrufen.
Das Programm RGB_Farbsensor1.ino
Wie arbeitet das Programm?
Auch in diesem C-Programm erscheint in den ersten Zeilen die Textersetzung und macht den Programmcode lesbarer. Die Methode setup() legt die Ein- und Ausgangspin fest und initialisiert den Sensor über die Einstellungswerte nach Vorgabe aus dem Datenblatt.
Die Methode loop() als Endlosschleife enthält keinen Befehl, da der Sensor bereits in der Methode setup() eingeschaltet und so modifiziert wurde, dass er eine bestimmte Arbeit ausführen kann.
Die Oszillogramme
Die beiden Oszillogramme zeigen die Impulsfolge am Ausgang des Sensors für zwei verschiedene Farbeinstellungen. In der Lineallegende sind die Messpunkte aufgeführt und unten rechts im Fenster kann man die sich daraus errechnete Frequenz ablesen. Kleinste Veränderungen in der Beleuchtung führen zu deutlichen Änderungen der Frequenz.
Die Reaktion auf Lichtschwankungen, unterschiedliche Farbtöne usw. ist über das Oszilloskop gut zu beobachten. Ebenso sieht man sehr gut, wie sich die Frequenz bei steigender oder fallender Lichtintensität erhöht bzw. erniedrigt.
Unbefriedigend bleibt, dass man mit dem Oszilloskop keine vernünftigen Messungen über alle vier Farben (rot, grün, blau und klar) vornehmen kann. Einfacher wäre es, wenn wir einen Frequenzzähler einschalteten, der über einen bestimmten Zeitraum die Frequenz mittelt und im Terminal ausgibt.
Für einen Frequenzzähler wird ein Befehl benötigt, der die Anzahl der Impulse zählt, die vom Ausgang des Sensor an den Eingang des Controllers gelangen. Der Zähler soll entweder auf die steigende oder fallende Flanke eines Impulses reagieren und die Anzahl der so gezählten Impulse in einem Speicher ablegen. Dazu stellt die Bibliothek simpletools eine Funktion count bereit:
long count(int pin, long duration)
mit den Parametern
pin I/O Pin duration Zeitraum, in dem die Impulse gezählt werden
Rückgabewert Anzahl der LOW - HIGH Übergänge (steigende Flanke)
Frequenzzählung | |
Aufgaben |
|
Das Programm rgb_farbmessung_tcs230_2.c
Die Terminalausgabe
Die Messung mit jedem Farbarray dauert 1s, der jeweilige Ausgabewert ist gemittelt. Das Prinzip der RGB-Farbmessung basiert auf der Messung der einfallenden Lichtintensität auf der mit einem Farbfilter versehenen Fotodiode. Bisher fiel nur das Umgebungslicht auf den Sensor; die Frequenzmessungen der drei Fotodioden mit Farbfiltern ergaben unterschiedliche Intensitäten der drei Farbanteile R, G und B.
Im folgenden Versuch, mit einem anderen Sensor, wird das Umgebungslicht so weit wie möglich ausgeschaltet. Das System arbeitet mit einer eigenen weißen Lichtquelle und die Fotodiode untersucht das vom Körper reflektierte Licht auf seine Farbanteile.
Mit diesem Modul der Fa. Parallax lassen sich Farben nach der RGB-Farbtabelle aufschlüsseln. Eine in den Modul eingebaute RGB LED beleuchtet das Objekt nacheinander mit den Lichtanteilen R, G und B und fängt das reflektierte Licht mit einem Licht-Spannungs-Wandler auf. Aus der Menge der vom Objekt reflektierten Lichtanteile rot, grün und blau lässt sich dann die Farbe des Objektes bestimmen.
Das Lichtmodul enthält einen Lichtsensor TSL13T der Firma TAOS, dessen spektrale Empfindlichkeit als Kurve dem Datenblatt zu entnehmen ist.
Die Ausgangsspannung des Sensors ist proportional zur Lichtintensität und gewichtet mit der spektralen Empfindlichkeit. Wird also ein Objekt nur mit einer roten LED beleuchtet, dann ist die Ausgangsspannung proportional zum roten Lichtanteil der Objektfarbe und entsprechend gilt das auch für blau und grün.
Das Modul verfügt über drei Anschlusspin: GND, VDD und Sig. Der Sensor wird mit
+5V versorgt. Der Sig-Anschluss ist ein sogenannter serieller Datenanschluss mit offenem Kollektor.
Für Messungen ist es günstiger, ein LCD-Erweiterungskabel zu verwenden; mit ihm lässt sich der Sensor an verschiedenen Orten sicher und standfest positionieren. Steht dies nicht zur Verfügung, müssen die Objekte später vor den Messzylinder gehalten werden.
Schaltungsaufbau
Das Testprogramm
Die Ausgabe im Terminalfenster
Gib die vom ColorPAL Gerät gemessenen Werte in ein Zeichenprogramm ein und überprüfe, wie genau die gemessenen RGB-Werte den tatsächlichen Farbwert treffen.
Als Farb-Messvorlage wurde ein violettfarbenes mattes, etwas rauhes Papier genommen. Die folgende Abbildung zeigt den Farbton, der sich nach Eingabe der RGB-Werte in das Zeichenprogramm ergibt. Er trifft ziemlich genau den Originalfarbton des Papiers.
Im zweiten Versuch wurde ein gelbfarbener Merkzettel vom Block genommen. Gibt man die RGB-Messwerte in das Zeichenprogramm ein, kommt ein eher rosafarbener Ton denn ein Gelbton heraus. Woran das liegt, müssen wir weiter untersuchen. Vorher aber noch ein paar Worte zum Test-Programm.
Wie arbeitet das Programm?
Aus der Bibliothek colorpal.h werden zwei Befehle aufgerufen
mit den Parametern
sioPin I/O Pin am Prop, der mit dem Sig-Pin vom ColorPAL-Sensor verbunden ist. Rückgabewert colorPal Geräte ID für die Funktionen in der colorpal-Bibliothek.
Die Funktion öffnet eine Verbindung zum Parallax ColorPAL Sensor.
mit den Parametern
*device Geräte-ID - Rückgabewert der colorPal_open Funktion
r Wert für Rot
g Wert für Grün
b Wert für Blau
Zeile 10
Die Signalleitung des ColorPAL wird mit P6 des Propeller-Controllers verbunden.
Zeile 15
Öffnet eine Verbindung zum ColorPAL und weist die Geräte ID cpal zu.
In der Endlosschleife WHILE(1) werden in
Zeile 19
die Messwerte für die rote, grüne und blaue LED werden ausgelesen und in Programmzeile 21 ausgedruckt.
Bei den ersten Farbbestimmungen mussten wir feststellen, dass nicht alle Messungen befriedigende Ergebnisse lieferten (Abb. 15). Während zum Beispiel der lila Farbton relativ gut erkannt wurde, rutschte der Farbwert bei einer gelben Papiervorlage in den rosa Bereich ab. Das Stichwort zu Anpassung bzw. Korrektur der Farbwerte lautet Weiß- und Schwarzabgleich. Darum kümmern wir uns jetzt.
Jetzt lässt sich die Farbe eines Objektes aus dem Prozentsatz der Differenz zwischen Weiß- und Schwarzabgleich bestimmen. Dieser Prozentwert wird in einen Wert zwischen 0(0%) und 255(100%) umgerechnet. Für die Farbe Rot gilt dann zum Beispiel:
Kr = 255 * (Ur - Sr) / (Wr - Sr)
wobei Ur der unkorrigierte und Kr der korrigierte Messwert ist.
Zur Messung des Weiß- und Schwarzabgleichs sollten die Vorlagen von gleicher Textur sein, wie das zu untersuchende Objekt. Da es hier aber nicht um hohe Genauigkeit geht, sondern um das Prinzip der Erfassung, genügt als Vorlage ein einfaches weißes Blatt Papier (100g - 120g) und ein schwarzer Pappdeckel.
Farberkennung mit Weiß- und Schwarzabgleich | |
Aufgaben |
|
Programm Test ColorPAL2_Korrektur.c
Terminalausgabe
In Abb. 17 sind die Messergebniss auf gelbem Papier dargestellt. Obwohl der Gelbton immer noch etwas zu rötlich ist im Vergleich zum Original, ist diesmal im Vergleich zu Abb. 15 eine deutliche Verbesserung eingetreten. Eine entsprechende Messung am violetten Papier mit Weiß- und Schwarzabgleich ergab einen etwas dunkleren, nicht ganz so leuchtenden, Violettton.