Home > Technologie > Verwenden einer RGB-LED zur Erkennung von Farben

Verwenden einer RGB-LED zur Erkennung von Farben

0
Advertisement

Verwenden einer RGB-LED zur Erkennung von Farben

Verwenden einer RGB-LED zur Erkennung von Farben

Ich werde Ihnen zeigen , wie Sie eine RGB - LED und eine Cds Fotozelle als Farbsensor für einen Mikrocontroller verwenden können. Ich werde die Methode zum Abrufen einer Farbe mit Arduino veranschaulichen, und ich werde Ihnen zeigen, wie Sie die Farbe überprüfen können, die mit einer kleinen Verarbeitungsskizze gescannt wird.

Wir werden diesen Farbsensor auf einem Steckbrett, aber es ist leicht auf ein Prototyping-Board übertragen werden, und für diejenigen, die fab ihre eigenen Boards, wäre dies ein ehrfürchtiges Kit, das super billig zu werfen ist. Ich bin sicher, es würde nur etwa zwei Minuten dauern, um eine Gerber-Datei für diese Schaltung zu schreiben und einen netten kleinen fertigen Sensor zu machen.

Schritt 1: Sammeln Sie einige Teile

Für diesen Sensor benötigen Sie

  • Ein Breadboard (nicht erforderlich, aber es ist, wie ich werde Sie durch sie gehen.)
  • Eine RGB-LED (alternativ können Sie 3 LEDs verwenden)
  • Ein 220 Ohm Widerstand
  • Eine CdS-Lichtschranke (diese können aus allen möglichen Dingen wie Nacht- oder Gartenlampen gerettet werden)
  • Ein Arduino oder ein Klon. Ich bin mit einem RBB in diesem Beispiel

Werkzeuge, die Sie benötigen

  • Ein Computer
  • Ein Kabel zum Hochladen auf Ihr Arduino

Schritt 2: Eine kleine Theorie

Verwenden einer RGB-LED zur Erkennung von Farben

Einige von euch fragen sich vielleicht, wie eine CdS Photozelle Farben erkennen kann. Nun, es ist überraschend einfach und bietet ziemlich genaue Ergebnisse.

Wir sehen Farbe als Häufigkeit von Licht, das von einem Objekt reflektiert wird. So unterschiedliche Farben reflektieren unterschiedliche Wellenlängen, die unsere Augen dann als Farben interpretieren. (Vielleicht Gehirn ... Ich bin kein Wissenschaftler)

Eine gemeinsame CdS-Photozelle hat eine sehr ähnliche Reaktion auf Farbe wie das menschliche Auge.

Da Farben bestimmte Wellenlängen absorbieren und bestimmte Wellenlängen reflektieren, können wir verschiedene Wellenlängen (Farben) von Licht verwenden und Messwerte (von einem Sensor, der nahezu menschliche Reaktionen hat) ablesen und dadurch eine ziemlich gute Vermutung machen, welche Farbe der Sensor ausgesetzt ist.

Schritt 3: Aufbau der Schaltung

Verwenden einer RGB-LED zur Erkennung von Farben

Verwenden einer RGB-LED zur Erkennung von Farben

Verwenden einer RGB-LED zur Erkennung von Farben

Verwenden einer RGB-LED zur Erkennung von Farben

Ich habe sowohl die Bilder der Brotschnecke Anordnung, und ein kleines Diagramm, um Ihnen zeigen, wie Sie Draht bis der Sensor an den Arduino.

Die Schaltung ist wirklich einfach. Zuerst schauen wir uns die RGB LED-Hälfte des Sensors an. Es ist einfach eine gemeinsame Kathode RGB-LED an den Pins 2, 3 und 4 des Arduino verbunden mit einem 220 Ohm Widerstand geht auf Masse. Dadurch können wir jede der LEDs innerhalb des Pakets einzeln ein- und ausschalten, wenn es nötig ist.

Auf der anderen Seite der Schaltung wird eine Cds-Lichtschranke mit 5 Volt aus dem Arduino gespeist. Kombiniert mit dem auf Masse liegenden Widerstand, erzeugt dies effektiv einen Spannungsteiler, der es ermöglicht, einen analogen Analogwert auf dem analogen Pin 0 zu lesen.

Dieser Sensor funktioniert gut auf einem Steckbrett, aber es funktioniert noch besser, wenn Sie es in eine permanente Gehäuse zu minimieren Umgebungslicht Störungen setzen. Das Foto des lichtdichten (ish) Gehäuses wurde in einem anderen meiner Projekte verwendet und ist hier nur enthalten, um zu illustrieren, was ich meinte. (Fühlen Sie sich frei, check it out aber, hier.)

Schritt 4: Code das Arduino

Öffnen Sie die Arduino-Umgebung und erstellen Sie eine neue Skizze, indem Sie auf Datei - Neu klicken. Für diejenigen, die nicht mitmachen wollen, habe ich den Code als Textdatei enthalten. Kopieren / Einfügen in eine neue Skizze in Arduino, und Sie sind gut zu gehen.

Erklärungen

Der Anfang einer Skizze ist, wo wir unsere Deklarationen machen, also geben Sie den folgenden Code in das Umgebungsfenster ein.

// Farbsensor-LED-Pins definieren
Int ledArray [] = {2,3,4};

// boolean, um zu wissen, ob die Waage eingestellt wurde
Boolean balanceSet = false;

// Platzhalter für Farbe erkannt
Int red = 0;
Int grün = 0;
Int blau = 0;

// schwimmt, um Farbfelder zu halten
Float colourArray [] = {0,0,0};
Float whiteArray [] = {0,0,0};
Float blackArray [] = {0,0,0};

// Platzhalter für durchschnittlich
Int avgRead;

'//' ist für angegebene Kommentare reserviert, daher brauchen Sie den Text nicht auf Zeilen, die mit '//' beginnen, damit die Skizze funktioniert.

Der Rest sind einige Namen, die wir einigen Platzhaltern geben und die Deklarationen für welche Art von Daten sie enthalten werden.

Wie Sie sehen können, beginnen wir mit dem Einrichten eines Arrays, um die Pin-Nummern zu halten. Diese entsprechen den Pins, denen die verschiedenen Farb-LEDs am Arduino zugeordnet sind.

Als nächstes deklarieren wir einen booleschen Wert, um zu prüfen, ob ein Balancing durchgeführt wurde oder nicht. Ein boolescher Wert ist etwas, das true oder false zurückgibt.

Wir erstellen einige Platzhalter für die Farbwerte und einige Arrays, die zum Halten der Scandaten und zum Auswuchten der erkannten Farbe verwendet werden.

Obwohl wir noch nicht fertig sind, gehen Sie vor und speichern Sie Ihre Skizze. Geben Sie ihm einen Namen, der zu Ihnen sinnvoll ist, etwas wie coloursensor.pde möglicherweise.

Konfiguration

Der nächste Schritt beim Erstellen einer Arduino-Skizze ist, die Setup-Funktion zu schreiben. Das Setup wird ausgeführt, wenn das Arduino erstmal hochfährt, deshalb sagen wir dem Arduino, wie die Pins verwendet werden sollen, und andere Funktionen, die wir brauchen, wie zB serielle Kommunikation.

Geben Sie unten den Code ein, den Sie gerade eingegeben haben.

Void setup () {

// die Ausgänge für den Farbsensor einstellen
PinMode (2, AUSGANG);
PinMode (3, AUSGANG);
PinMode (4, AUSGANG);

// beginnen serielle Kommunikation
Serial.begin (9600);

aufrechtzuerhalten.

Nicht viel zu diesem Abschnitt. Wir sagen hier nur dem Arduino, dass wir die Pins 2, 3 und 4 als Output verwenden wollen. Dies ist notwendig, wenn wir unsere LEDs anzünden wollen ... und das tun wir, wenn auch nur ganz kurz.

Der nächste Teil ist, dem Arduino zu sagen, dass wir die serielle Schnittstelle nutzen wollen, und dass es geöffnet und bereit sein sollte, mit der angegebenen Baudrate (in Klammern) zu kommunizieren.

Schleife

Die Schleifenfunktion ist typisch, wo die Magie in einem Arduino geschieht. Es ist der Code, der immer wieder ausgeführt wird, sobald der Arduino gebootet und das Setup durchlaufen wurde. Legen Sie das nächste Bit des Codes unter Ihrer Setup-Funktion.

Void Schleife () {

Kontostand prüfen();
CheckColour ();
PrintColour ();
aufrechtzuerhalten.

Okay auf den ersten Blick sieht es so aus, als ob es wirklich nicht viel gibt. Aber das sind private Gespräche. Für einige Projekte finde ich diese Art von Ansatz funktioniert gut. Es macht es leichter zu lesen (glaube ich), da jeder Codeblock mit einem aussagekräftigen Namen getrennt ist, und wir können sehen, was die Skizze auf einen Blick tun wird.

Zuerst überprüft es die Balance, dann überprüft es die Farbe und dann druckt sie die Farbe zum seriellen Hafen, also können wir die Werte sehen, die sie lesen.

Let `s erkunden die erste private Funktion, checkBalance, und fügen Sie es zu unserem Code. Geben Sie unten die Schleifenfunktion ein.

Void checkBalance () {
// überprüfen Sie, ob der Saldo eingestellt ist, andernfalls setzen Sie ihn
If (balanceSet == false) {
SetBalance ();
aufrechtzuerhalten.
aufrechtzuerhalten.

Wie Sie sehen können, wenn der balanceSet-Wert (ein boolescher Wert) auf false gesetzt ist, wird ein Aufruf einer Sekundärfunktion namens setBalance durchgeführt, wobei die Weiß- und Schwarzabgleichwerte eingestellt werden. Dies wird nur geschehen, wenn Sie booten die Arduino die eine Zeit.

Void setBalance () {
// Weißabgleich einstellen
Verzögerung (5000); // Verzögerung für fünf Sekunden, dies gibt uns Zeit, um eine weiße Probe vor unserem Sensor zu bekommen
// Die weiße Probe scannen.
// gehen Sie durch jedes Licht, erhalten Sie eine Lesung, setzen Sie den Basiswert für jede Farbe rot, grün und blau auf das weiße Array
(Int i = 0, i <= 2; i ++) {
DigitalWrite (ledArray [i], HIGH);
Verzögerung (100);
GetReading (5); // Zahl ist die Anzahl der zu übernehmenden Scans, diese ganze Funktion ist redundant, eine Lesung funktioniert genauso gut.
WeißArray [i] = avgRead;
DigitalWrite (ledArray [i], LOW);
Verzögerung (100);
aufrechtzuerhalten.
// getanes Scannen weiß, jetzt wird es blau pulsieren, um Ihnen zu sagen, dass es Zeit für die schwarze (oder graue) Probe ist.
// Schwarzbalance einstellen
Verzögerung (5000); // 5 Sekunden warten, damit wir unsere schwarze Probe positionieren können
// Go ahead and scan, setzt die Farbwerte für Rot, Grün und Blau bei Schwarz
(Int i = 0, i <= 2; i ++) {
DigitalWrite (ledArray [i], HIGH);
Verzögerung (100);
GetReading (5);
SchwarzArray [i] = avgRead;
// blackArray [i] = analogRead (2);
DigitalWrite (ledArray [i], LOW);
Verzögerung (100);
aufrechtzuerhalten.
// Booleschen Wert setzen, damit wir wissen, dass Balance gesetzt ist
BalanceSet = true;
Verzögerung (5000); // weitere 5 Sekunden, um uns aufzuholen
aufrechtzuerhalten.

Wenn Sie bemerkt haben, haben wir noch einen Aufruf zu einer Funktion getReading. Das fügen wir gleich nach der Übernahme der checkColour-Funktion hinzu.

Sobald unsere Ausgleichszahlen eingestellt sind, gehen wir weiter, um endlich die Farbe zu lesen. Die Funktion ist grundsätzlich die gleiche wie setBalance ,, mit der Addition der Mathematik, die den Messwert ausgleicht. Lassen Sie uns jetzt hinzufügen.

Void checkColour () {
(Int i = 0, i <= 2; i ++) {
DigitalWrite (ledArray [i], HIGH); // drehen oder die LED, rot, grün oder blau je nach Iteration
Verzögerung (100); / / Verzögerung, damit CdS zu stabalisieren, sind sie langsam
GetReading (5); // lese aber oft
ColourArray [i] = avgRead; // Setzt die aktuelle Farbe im Array auf den durchschnittlichen Wert
Float greyDiff = weißArray [i] - blackArray [i]; // die höchstmögliche Rückkehr minus die niedrigste gibt den Bereich für Werte dazwischen zurück
ColourArray [i] = (colourArray [i] - blackArray [i]) / (greyDiff) * 255; // das zurückgegebene Lesen minus den niedrigsten Wert geteilt durch den möglichen Bereich multipliziert mit 255 gibt uns einen Wert ungefähr 0-255, der den Wert für das aktuelle Reflexionsvermögen (für die Farbe, der es ausgesetzt ist) des gescannten Bildes darstellt
DigitalWrite (ledArray [i], LOW); // die aktuelle LED ausschalten
Verzögerung (100);
aufrechtzuerhalten.

aufrechtzuerhalten.

Wir müssen auch unsere Funktion getReading hinzufügen, sonst hat unsere Skizze keine echten Werte. Diese Funktion erlaubt es uns, ein paar Messwerte zu machen und sie auszumitteln. Dies ermöglicht eine leicht glattere Ablesung.

Void getReading (int times) {
Int Lesen;
Int tally = 0;
// Nehmen Sie die Lesung aber viele Male wurde angefordert und fügen sie hinzu
(Int i = 0, i <mal; i ++) {
Lesen = analogRead (0);
Tally = lesen + tally;
Verzögerung (10);
aufrechtzuerhalten.
// den Durchschnitt berechnen und einstellen
AvgRead = (tally) / times;
aufrechtzuerhalten.

Jetzt haben wir eine Farbe lesen in unserem Farb-Holding-Array, alles, was wir jetzt tun müssen, ist es auf dem Bildschirm ausgegeben. Denken Sie daran, dass wir die serielle Kommunikation wieder in der Setup-Funktion eingerichtet haben, müssen wir nur noch die serielle Schnittstelle verwenden, um unsere Daten zu senden. Die Arduino-Umgebung enthält einen seriellen Monitor, mit dem Sie die Daten sehen können, während sie vom Arduino übergeben werden. Lassen Sie uns also die letzte Funktion der Skizze hinzufügen.

// druckt die Farbe im Farbfeld, im nächsten Schritt werden wir diese an die Verarbeitung schicken, um zu sehen, wie gut der Sensor arbeitet.
Void printColour () {
Serial.print (R =);
Serial.println (int (colourArray [0]));
Serial.print ( "G =");
Serial.println (int (colourArray [1]));
Serial.print ( "B =");
Serial.println (int (colourArray [2]));
// delay (2000);
aufrechtzuerhalten.

Dadurch werden einige Daten ausgedruckt, die so aussehen

R = 231
G = 71
B = 0

Die das Gleichwertige zu einer rot-orange Farbe wäre.

Ich habe diese Skizze super einfach verlassen. Sie können es anziehen, wie Sie es für richtig halten. Die Idee ist, zu zeigen, wie die Herstellung und Verwendung des Sensors, ist die kreative Umsetzung bis zu Ihnen.

Jetzt können Sie Ihre Datei wieder speichern und zum Arduino hochladen. Ihr Arduino sollte anfangen, die Skizze zu laufen, die kleinen Lichter sollten flackern.

Die Skizze ist sehr einfach. Ich habe es als Baustein angeboten und Ihnen zeigen, wie man den Sensor benutzt.

Schritt 5: Sensor ausgleichen

Verwenden einer RGB-LED zur Erkennung von Farben

Verwenden einer RGB-LED zur Erkennung von Farben

Verwenden einer RGB-LED zur Erkennung von Farben

Verwenden einer RGB-LED zur Erkennung von Farben

Wenn Sie sich an den Code von früher erinnern, überprüft das erste, was unsere Skizze tut, um zu sehen, ob die Balance-Werte genommen wurden. Wenn Sie den Sensor einschalten, wird dies auf false gesetzt, und die Skizze ruft dann die Einstellung der Balance-Werte auf.

Die Art, wie wir das tun, ist einfach, wir zeigen nur den Sensor eine Probe von weiß (weiße Karte oder Papier) und eine Probe von schwarz (schwarze Markierung auf weißem Papier oder schwarzem Papier). Ich sage Papier, aber die Probe kann alles sein, solange die erste Probe weiß ist und die zweite schwarz ist.

Nehmen Sie zehn Sekunden und bereiten Sie eine schnelle Beispielkarte mit einer weißen Seite und einer schwarzen Seite vor.

Sie müssen die weiße Probe vor dem Sensor haben, wenn Sie das Arduino starten (Sie haben nur 5 Sekunden, um es dort zu bekommen). Sobald es einmal blinkt (das heißt, es scannt die weiße Farbe und die Aufnahme der Werte, die es empfängt), müssen Sie Ihre Probe durch eine schwarze Probe zu ersetzen, haben Sie fünf Sekunden zu tun. Es blinkt erneut, wartet weitere 5 Sekunden und beginnt mit dem Reporting.

Ihre Messwerte sind nur so gut wie Ihre Ausgleichswerte, so versuchen Sie und achten Sie darauf, die Messwerte in etwa dem gleichen Abstand vom Sensor zu nehmen. Abwechselnd die Höhe wird sicherlich das reflektierte Licht, das zurück auf die CdS Photozelle, aber dies ist eine ziemlich robuste kleine Setup und liefert sehr admiral Ergebnisse für die Kosten.

Wenn du es richtig ausgeglichen hast, liest du jetzt Farben. Stellen Sie die Sachen vor den Sensor und überprüfen Sie die Ausgabe über den seriellen Monitor in der Arduino-Umgebung. Sie sollten immer wieder ändern Daten in etwa das Format zeigte ich Ihnen oben. Wenn Sie ungeduldig sind, können Sie anfangen, diese Zahlen in einen Farbwähler zu stecken (es gibt viele freie on-line, gibt es sogar ein in der verarbeitenden Umwelt) und beginnen Sie, Ihre Lesennummern einzugeben und zu sehen, was der Selektor zeigt.

Oder Sie können für einen weiteren Schritt folgen, wo ich Ihnen eine kleine Skizze, die Ihnen helfen, überprüfen Sie, dass Ihr Sensor funktioniert gut, und machen es mehr Spaß zu experimentieren.

Schritt 6: Überprüfen Sie Farben mit der Verarbeitung

Verwenden einer RGB-LED zur Erkennung von Farben

Verwenden einer RGB-LED zur Erkennung von Farben

Verwenden einer RGB-LED zur Erkennung von Farben

Verwenden einer RGB-LED zur Erkennung von Farben

An dieser Stelle sollten Sie rote, grüne und blaue Werte auf Ihrem Bildschirm über den Arduino seriellen Monitor. Die Eingabe dieser Werte ist mühsam und langsam.

Sicher, es beweist den Punkt, aber wir brauchen wirklich eine bessere Weise, mit diesem don `t wir zu spielen.

Haben Sie keine Angst, ich habe eine kleine Verarbeitung Skizze, um Ihnen den Start.

Kopieren und fügen Sie den Code in der enthaltenen Textdatei in eine neue Skizze in Verarbeitung. Speichern Sie es als, was auch immer Sie mögen, starten Sie Ihr Arduino, sicher sein, dass der serielle Monitor in der Arduino-Umgebung nicht mehr ausgeführt wird, und genießen Sie die Farbe ändern Licht zeigen.

Die Skizze macht nicht viel, sie aktualisiert nur den Hintergrund mit der Farbe, die vom Sensor gesendet wird. Stellen Sie sicher, dass Sie den COM-Port richtig eingestellt haben.

In den Bildern sehen Sie, wie ich jede Seite eines vierfarbigen Jonglierballs und die Ausgabe auf dem Bildschirm scanne.

Ich hoffe, dass sich diese Instructable für Sie als interessant erwiesen hat. Wenn Sie einen Blick auf eine der Möglichkeiten habe ich diese Art von Sensor verwendet haben, schauen Sie sich meine Magical Chameleon Lamp Instructable.

Stützen Sie einen Mitmacher, stimmen Sie für mich häufig. Teilen und genießen.

Related Reading