Spezifische Farberkennung, ist dies auf wirtschaftliche Weise möglich, ohne Kamera-/Bilderkennung zu verwenden?

Ich verstehe zwar, dass die Farberfassung mit Kamera und Prozessor mit ausreichender Leistung, die Bildhistogrammlogik (oder andere solche Algorithmen) ausführen, das Vorhandensein bestimmter Farben ziemlich zuverlässig bestimmen kann.

Gibt es jedoch andere, wesentlich kostengünstigere Mechanismen, um das Vorhandensein / Fehlen einer bestimmten Farbe (oder ihrer nahen Schattierungen) aus nächster Nähe unter Verwendung einfacherer / billigerer Sensoren und geringerer Rechenanforderungen zu bestimmen?

Ich vermute, dass Dinge wie pH-Sensoren oder andere chemische Sensoren solche Methoden verwenden könnten. In meinem Fall ist die Anwendung so, dass ich das Vorhandensein / Fehlen einer bestimmten Farbe (ein hellblauer Farbton) in einem kleinen Bereich aus nächster Nähe erkennen muss.

Bearbeitet: Mit "Nahbereich" meine ich etwas zwischen 1-5 cm, obwohl dies keine sehr strenge Anforderung ist. Ich dachte an "nah" relativ, dh es gibt keine direkte Bestrahlung von der Lichtquelle zum Sensor, eine Art Doppelfass, so dass nur reflektiertes Licht auf den Sensor trifft. Nähe ist also eine Funktion der physischen Sensorplatzierung, und ich bin offen für Vorschläge (einschließlich vollständig alternativer / orthogonaler Ansätze).

würden Sie Infrarot in Betracht ziehen? Es ist billig und nicht so leicht anfällig für Rauschen wie sichtbares Licht.
@JeeShenLee - Sie möchten Blau mit IR erkennen? Und es gibt auch IR-Rauschen. Schon mal den Ausgang eines IR-Empfangsmoduls ohne Eingangssignal angeschaut?
@stevenvh, ich habe eher eine andere Option als blaues Licht vorgeschlagen. Nach meinem Verständnis ist die Dynamik des sichtbaren Lichts zu groß, um zuverlässig erkannt zu werden (aufgrund von Intensität, Farbton und nicht zu vergessen, dass das Licht aus der Umgebung auch blaue Strahlen enthält).
@JeeShenLee - Soweit ich weiß, ist die Substanz blau, dann reichen andere Farben nicht aus. Ich kann mich irren.
@stevenvh, tatsächlich ist das Objekt blau. In Zukunft muss ich vielleicht andere Farben erkennen, aber das ist für später und würde es vorerst vorziehen, die Dinge einfach zu halten.
Jede der Antworten war sehr hilfreich und lieferte nützliche Einblicke, aber ich wähle Olis Antwort als "die Antwort", weil sie vom Standpunkt der Implementierung aus gesehen die einfachste und billigste zu sein scheint, angesichts meiner Hauptanforderung, Objekte eines einzelnen (vor -definierte) Farbe.

Antworten (4)

Da LEDs, die als Fotodioden verwendet werden, am empfindlichsten auf die Farbe reagieren, die sie während des normalen Betriebs emittieren, kann ein grundlegender Farbsensor mit der umgekehrten LED und einem Operationsverstärker hergestellt werden:

Farbsensor

Die obige Schaltung stammt von dieser Seite . Es kann auch umgekehrt gemacht werden - ein viel detaillierterer Blick auf die Farberkennung mit LEDs und Lichtsensoren ist hier verfügbar - diese Seite beschreibt die Verwendung eines normalen Lichtsensors und LEDs mit verschiedenen Farben.

Ich konnte den in den Kommentaren erwähnten App-Hinweis nicht finden, aber diese Seite scheint eine ziemlich gründliche Behandlung des Themas Transimpedanzverstärker zu sein. Sie können die Vorspannung über die LED ändern, um die Reaktionszeit/Empfindlichkeit zu ändern.

Wenn Sie nur 1 G haben Ω Widerstände können Sie drei davon parallel verwenden :-)
Ich glaube nicht, dass die Schaltung funktioniert. Wenn der Ausgang > 0 V ist, macht der Strom der LED den invertierenden Eingang > nicht invertierend, und der Ausgang geht einfach auf Null. Ich erinnere mich auch vage an Dinge wie "Offsetspannung" und "Eingangsvorspannungsstrom" :-(
@Steven - Es ist ein einfacher Transimpedanzverstärker (Dual Rail), der das Konzept zeigen soll. Benötigt eventuell noch etwas Feintuning. Ich werde ein paar App-Notizen hinzufügen, ich erinnere mich, dass TI eine gute gemacht hat, aber ich kann sie nicht finden.
Tatsächlich kann es sich um eine einzelne Schiene handeln, da die oben orientierte LED einen Rückstrom liefert. Ich bin mit diesen Dingen eingerostet, aber ich habe gerade eine LED an meinem Multimeter getestet (im 2-V-Bereich, also effektiv ein ~ 1-Meg-Widerstand parallel) und bei zunehmendem Licht lese ich von ~ 0 V bis -1,5 V (rote Leitung zu Kathode, schwarz an Anode)
Ich habe meiner Antwort die IMO-richtige Schaltung hinzugefügt und auch erklärt, warum die negative Spannung erforderlich ist. Lassen Sie mich wissen, wenn Sie nicht einverstanden sind. In Ihrem Test legt das Multimeter eine Spannung an die Sonden, die LED kann keinen Strom aus dem Nichts erzeugen.
Die LED erzeugt (Rück-)Strom, wenn das Licht darauf scheint - sie fungiert als Fotodiode. Nur als Plausibilitätsprüfung habe ich einfach die obige Schaltung zusammengestellt (mit einem MCP6021 und einer zufälligen LED) und es funktioniert gut. Ich habe einen 10-Meg-Widerstand mit 100 pF parallel verwendet.
Mir gefällt die Idee, LEDs als farbselektive Fotodioden zu verwenden, aber 320 MOhm erfordern ein sorgfältiges Layout - um es so optimistisch wie möglich auszudrücken ... Schaltungen mit solchen Widerständen neigen dazu, auf seltsame Weise zu reagieren, wenn eine Katze darüber springt ein Stein fünf Blocks nordöstlich Ihres Labors...
@zebonaut - Ich vermute, die 320 MOhm sind etwas hoch und zB 10 MOhm reichen aus. Sie können bei Bedarf jederzeit eine weitere Verstärkungsstufe hinzufügen.
Ich mag wirklich die allgemeine Einfachheit (und ich glaube, als Ergebnis - die niedrigen Kosten) dieser Schaltung.

Wenn Sie eine ganz bestimmte Farbe erkennen möchten, benötigen Sie einen Schmalbandfilter wie diesen 11-nm-Bandbreitenfilter von Edmund Optics. Die Produkte von EO sind wirklich hochpräzise Laborgeräte, und der Preis ist es auch: 300 Dollar.

Wenn Sie sich mit weniger zufrieden geben können, würde ich vorschlagen, einen fotografischen Filter zu verwenden . Verwenden Sie einen Fototransistor mit einer breiten spektralen Empfindlichkeit, insbesondere im Bereich von 400 nm, und vergleichen Sie die Messung mit und ohne Blaufilter. Wenn die Farbe des Objekts blau ist, ist der Unterschied beim Lesen geringer als beispielsweise bei einem roten Objekt. Sie müssen auch einen Versatz berücksichtigen, da der Filter nicht 100 % Licht durchlässt, selbst wenn es blau ist.

Wenn der Filter beispielsweise um 3 dB dämpft (Fotografen sprechen von Blenden), werden aus einem Blauwert ohne Filter von 1 V mit Filter 0,7 V. Wenn die Farbe rot ist, ergibt ein Messwert von 1 V ohne Filter wahrscheinlich etwa 0,4 V mit Filter.

Sie können den Strom der Fotodiode mit einem Vorwiderstand oder mit einem Opamp-Transimpedanzverstärker in eine Spannung umwandeln:

Geben Sie hier die Bildbeschreibung ein

Beachten Sie, dass die Anode der Diode an eine Spannung gebunden werden muss, die negativer ist als der nicht invertierende Eingang. Ich finde überraschend viele Schaltungen im Netz, bei denen die Anode mit Masse verbunden ist. Da die Diode jedoch einen Spannungsabfall erzeugt, kann der Operationsverstärker den Ausgang nicht so regeln, dass die Eingänge gleich werden und der Ausgang gesättigt wird.

Danke @stevenvh. Dies kommt dem am nächsten, woran ich dachte, wenn auch auf einer sehr abstrakten Ebene. Zwei weitere Fragen: [F1] Können der Filter + die Fotodiode des Fotografen leicht durch eine einzelne (oder ein Array von) Fotodiode(n) mit eingebautem Filter ersetzt werden, wie von Russell in seiner Antwort vorgeschlagen? [Q2] Bei einem batteriebetriebenen Stromkreis (12 V) glaube ich, dass ich die -5 V an den -ve-Anschluss der Batterie, GND für den Operationsverstärker mit 6 V (Spannungsteiler) und + 5 V des Operationsverstärkers binden könnte, um den + ve-Anschluss von zu sagen Batterie. Rechts ?
@icarus74 - die Fotodiode + Filter ist wie Russells TCS3210, aber dann nur mit dem blauen und klaren Kanal. Im Datenblatt des TCS3210 sehen Sie, dass Blau auch Infrarot erkennt. Sie müssen einige Verarbeitungen auf allen vier Kanälen durchführen, um tatsächliche blaue Daten zu erhalten. Der fotografische Filter kann stärker auf die interessierenden Wellenlängen beschränkt sein. [F2]: Ja.

Ein sehr einfacher Ansatz zur Bestimmung der Farbe einer Oberfläche besteht darin, eine Fotodiode oder einen Fotowiderstand und eine Anzahl (z. B. 3 wie bei RGB) LEDs unterschiedlicher Farbe zu verwenden, um die Oberfläche zu beleuchten.

Dann wird jede der LEDs im Zeitmultiplexverfahren einzeln nacheinander eingeschaltet, um die Oberfläche zu beleuchten, und die Intensität des reflektierten Lichts wird für jede von ihnen gemessen.

Beispiel: Wenn Sie drei LEDs verwenden, eine rot, eine grün und eine blau, ergibt dies drei Reflexionsintensitätswerte, einen für jede Farbkomponente, die zusammen nach einer möglichen Normalisierung in irgendeiner Form eine numerische Annäherung an die Farbe der Oberfläche ergeben des RGB-Raums (der natürlich von den spezifischen Wellenlängenverteilungen der LEDs abhängt).

(Ich werde im Folgenden der Einfachheit halber den RGB-Dreifarben-Beispielaufbau verwenden, aber es kann eine beliebige Anzahl von 1 bis n unterschiedlich farbiger Lichtquellen verwendet werden; je mehr verschiedene Farben verwendet werden, desto genauer kann die Farbe der Oberfläche bestimmt werden.)

Das Prinzip ist dasselbe wie im Chip einer Kamera: Die Intensitäten der Rot-, Blau- und Grünanteile des einfallenden Lichts werden unabhängig voneinander gemessen und die Kombination der drei Intensitäten bestimmt die Farbe. In der Kamera gibt es für jede dieser drei Grundfarben einen 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 also 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 ist es für Ihre Wahrnehmung egal, ob Sie Ihre blau getönte Sonnenbrille aufsetzen oder stattdessen eine blaue Lichtquelle 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 reflektiert wird Licht wird reflektiert. Je nach Farbe der Oberfläche sind die Intensitäten für die verschiedenen Lichtfarben (Wellenlängen) unterschiedlich.

Sie erhalten jeweils drei Intensitätswerte, die jeweils die Intensität eines bestimmten Teils des Farbspektrums bestimmen. Jede vollständige Messung ergibt somit ein Triplett (r,g,b), das die gemessene Farbe bestimmt. Wie in der Computergrafik repräsentiert das Triplett (0,0,0) völlige Dunkelheit, schwarz; (1,1,1) ist das hellste Weiß, und jede Kombination (r,g,b) mit r == g == b steht für einen gewissen Grauton. Alle anderen möglichen Kombinationen identifizieren einen markanten Punkt im RGB-Raum, der die gemessene Farbe definiert. (0,5,0,0) ist zum Beispiel ein mittleres Rot und (0,9,0,9,0) ist ein relativ helles Gelb usw.

Notiz:

  1. Der Fotodetektor muss natürlich für alle (3) verwendeten Lichtfarben empfindlich sein.
  2. Der Fotodetektor benötigt möglicherweise einige Zeit, um sich nach dem Umschalten der LEDs zu stabilisieren, bevor genaue Messwerte erhalten werden können. Fotowiderstände zum Beispiel sind normalerweise relativ langsam. Zehn bis Hunderte von Millisekunden können für eine akzeptable Genauigkeit benötigt werden, Minuten für die genauesten Werte.
  3. Sobald die Hardware eingerichtet ist, kann sie einfach auf die interessierenden Oberflächenfarben kalibriert werden, indem einfach eine Probe von jeder gemessen wird. Auf diese Weise müssen keine Anstrengungen unternommen werden, um zu versuchen, exakte Wellenlängenverteilungen oder die relative Helligkeit der LEDs oder die relative Empfindlichkeit des Sensors für diese Wellenlängen zu bestimmen.
  4. Vor dem eigentlichen Einsatz 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 gemessenen Werten bei leuchtender LED subtrahiert. Im Allgemeinen ist der für jede Farbkomponente gemessene Absolutwert von geringerer Bedeutung als die relative Differenz zwischen ihnen.

Einige zufällige Seiten mit 'hands on' 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

Vielen Dank. Auf jeden Fall einen Versuch wert, vor allem, wenn ich auf die Erkennung einer etwas breiteren Farbpalette abziele. Ich bin mir jedoch nicht sicher, ob ich die Physik hinter diesem Prinzip verstehe. Eine einfache Fotodiode / ein einfacher Fotowiderstand würde nur die Intensität erkennen, und ich denke, dass man für jedes R, B, G die gleiche Intensität melden kann. Da frage ich mich, wie das funktionieren soll.
Bitte sehen Sie sich meine Bearbeitung an und lassen Sie uns wissen, wenn etwas immer noch nicht klar ist.

Es gibt eine beträchtliche Anzahl von ICs, die diese Aufgabe mit unterschiedlichen Fähigkeiten erfüllen. Ich werde den Bereich in 3 Teile aufteilen, aber es gibt absolut harte und schnelle Grenzen.

(1) Am unteren Ende befinden sich ICs mit effektiv einem einzelnen Diodensensor pro Farbe, RGB-Filtern und 3-Kanal-Ausgang.
Ein Beispiel (nicht auf Lager bei Digikey) ist der Avago ADJD-S311-CR999

(2) Darüber befinden sich kleine Arrays von Fotodioden mit RGB-Filtern und möglicherweise auch ungefilterten Zellen. Beispiel unten.

(3) Am oberen Ende stehen vollfarbige Kamera-ICs zu recht günstigen Preisen. Beispiel unten.

Einfach und günstig – analoge Rechteckwellenausgabe auf RGB-Luminanzkanälen.
Für etwa 3,50 $ auf Lager in 1/s bei Digikey – 24 oder 64 Fotodioden, angeordnet in 4 verschachtelten Gruppen – jeweils 25 % R-, G-, B- und Clear-Filter.
Die Preise gelten für den größeren IC. Datenblatt hier

  • Die programmierbaren Farb-Licht-Frequenz-Wandler TCS3200 und TCS3210, die konfigurierbare Silizium-Fotodioden und einen Strom-Frequenz-Wandler auf einer einzigen monolithischen integrierten CMOS-Schaltung kombinieren.
    Der Ausgang ist eine Rechteckwelle (50 % Einschaltdauer) mit einer Frequenz, die direkt proportional zur Lichtintensität (Bestrahlungsstärke) ist.
    Die Full-Scale-Ausgangsfrequenz kann über zwei Steuereingangspins um einen von drei voreingestellten Werten skaliert werden. Digitale Eingänge und digitale Ausgänge ermöglichen eine direkte Schnittstelle zu einem Mikrocontroller oder anderen Logikschaltkreisen. Output Enable (OE) versetzt den Ausgang in den hochohmigen Zustand für die gemeinsame Nutzung einer Mikrocontroller-Eingangsleitung durch mehrere Einheiten.
    Im TCS3200 liest der Licht-Frequenz-Wandler ein 8 × 8-Array von Fotodioden. Sechzehn Fotodioden haben blaue Filter, 16 Fotodioden haben grüne Filter, 16 Fotodioden haben rote Filter und 16 Fotodioden sind klar ohne Filter.
    Im TCS3210 liest der Licht-Frequenz-Wandler ein 4 × 6-Array von Fotodioden. Sechs Fotodioden haben blaue Filter, 6 Fotodioden haben grüne Filter, 6 Fotodioden haben rote Filter und 6 Fotodioden sind klar ohne Filter.
    Die vier Typen (Farben) von Fotodioden sind interdigitalisiert, um den Effekt der Ungleichmäßigkeit der einfallenden Bestrahlungsstärke zu minimieren. Alle Fotodioden der gleichen Farbe sind parallel geschaltet. Pins S2 und S3 werden verwendet, um auszuwählen, welche Gruppe von Fotodioden (rot, grün, blau, klar) aktiv sind. Fotodioden sind 110 μm × 110 μm groß und befinden sich auf 134 μm Mitten.

Etwas teurer. Komplexer. Weitaus leistungsfähiger.
Für 18 US-Dollar auf Lager bei Digikey können Sie einen vollständigen 5-MP-RGB-"Farbkamera"-Sensor erhalten - 2592 x 1944 x 14 fps oder VGA mit 53 fps. Dies sollte Ihren Bedarf decken [tm].
Datenblatt hier

  • Der Aptina® MT9P031 ist ein digitaler 1/2,5-Zoll-CMOS-Aktivpixel-Bildsensor mit einem aktiven Pixelarray von 2592 H x 1944 V. Es enthält ausgeklügelte Kamerafunktionen auf dem Chip wie Windowing, Spalten- und Zeilensprungmodus und Schnappschussmodus. Es ist über eine einfache serielle Zweidrahtschnittstelle programmierbar.
Danke Russel. Ich bin mir nicht sicher, ob es an der Formatierung liegt, aber ich kann nicht klar erkennen, ob Sie von 3 Optionen mit 3 Details oder nur 2 Optionen sprechen. Aus Kostengründen kann ich mir den Photodioden-Array-Ansatz leisten. Ich frage mich jedoch, ob ich mit einer einzelnen Fotodiode im Vergleich zu einem 4x6-Array im Vergleich zu einem 8x8-Array wirklich viel Genauigkeit bei der Bestimmung der Objektfarbe gewinnen würde? Ich denke schon, würde aber gerne von anderen hören.
@icarus74 - Antwort aktualisiert.