PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C-Farb-Sensoren (RGB) für Raspi u/o Arduino



HaWe
17.03.2016, 15:59
hallo,
welche I2C-Farb-Sensoren würdet ihr empfehlen zum Anschluss an Arduino und/oder Raspberry PI ?
sie sollten aktiv Licht senden (z.B. mit 3 getrennten RGB-LEDs oder weißes Licht, aber mit 3 selektiven Detektoren, Licht möglichst moduliert gegen Störung durch Fremdlicht)

Vom System her vergleichbar mit denen hier von Lego (die sind aber nicht Standard-I2C-kompatibel):
https://www.hitechnic.com/cgi-bin/commerce.cgi?preadd=action&key=NCO1038
http://shop.lego.com/en-US/Color-Sensor-9694
http://shop.lego.com/en-US/EV3-Color-Sensor-45506

was gibt es da als Standard-Elektronik?

edit:
Entfernung vom Sensor zum Messfeld: es wäre gut, wenn der Bereich (größenordnungsmäßig) 0,5 - 3 cm abgedeckt wäre.

HaWe
18.03.2016, 13:48
sagt bloß, hier kennt keiner was in der Art?

Peter(TOO)
18.03.2016, 19:01
Hallo,

RGB-Sensoren finden sich in Smartphones.
Aber komplette Module kenne ich nicht.

MfG Peter(TOO)

HaWe
18.03.2016, 19:49
ih dachte eigentlich, wenns schon 3 verschiedene Farbsensoren für Lego-Spiel-µCs gibt, dann müsste es doch sicher Dutzende - wenn nicht hunderte - verschiedene für "normale" Standard- Bastel-µCs (Arduino, Raspi etc.) geben?!?

i_make_it
19.03.2016, 08:12
Es gibt ja auch RGB Farbsensoren zum Basteln. (TCS230, TCS3200, TCS34725....)

Das war aber nicht Deine Frage.


welche I2C-Farb-Sensoren

Mit I2C kenn ich keinen, deshalb auch keine Antwort.
Denn, das ich keinen kenne, heist ja nicht das es keinen gibt.

Könnte anderen bei der Fragestellung ähnlich gegangen sein.

---Korrektur---
Mit dem TCS34725 hatte ich mich wegen dem IR Filter noch nicht befasst, da ich die Farbe bei verschiedenen Lichttemperaturen brauchte, also auch mit IR und UV Anteil.

Laut Datenblatt ist der TCS34725, I2C fähig.

HaWe
21.03.2016, 10:27
hallo,
danke für den Tipp mit dem TCS34725 https://learn.adafruit.com/adafruit-color-sensors/overview :
hier hatte ich völlig verpasst, dass der einen i2c-Anschluss hat!
https://learn.adafruit.com/adafruit-color-sensors/assembly-and-wiring

wenn jetzt hier noch jemand bestätigen kann, dass der im praktischen Betrieb auch unter wechslenden Umgebungslicht-Verhältnissen zuverlässig funktioniert (draußen oder am Fenster bei bedeckten Himmel oder Sonne und drinnen bei Glühlampen- und Halogenbeleuchtung), dann wär's das!

i_make_it
21.03.2016, 12:17
Das wird Dir niemand bestätigen, da die Lichttemperatur und die Lichtintensität natürlich die Farbwahrnehmung verändert.

Du kannst nur einen zweiten Sensor nehmen, der dir Korrekturwerte liefert oder den Sensor mit einer Lichtquelle in einen Tubus einbauen, der Fremdlicht abschirmt.

Bei meinem Projekt ging es grade darum wie bei verschiedenen Lichttemperaturen der Farbeindruck von Kunststoff Spritzguß Teilen ist.
Danach wurden dann die Rezepturen der Masterbatches angepasst, damit z.B. eine Tupperbox unter Leuchtstofflampen genauso gut aussieht wie im Freien bei prallem Sonnenschein oder Glühlampen.

oberallgeier
21.03.2016, 12:28
Das wird Dir niemand bestätigen, da die Lichttemperatur und die Lichtintensität natürlich die Farbwahrnehmung verändert ..Das ist ja wohl eine grundlegende Ursache für den Weißabgleich bei bildgebenden Sensoren; Digitalbild-Geräte manchen den heute zum größten Teil automatisch, "von Hand" wirs meist besser. Früher, bei analogen Fotoapparaten/Filmkameras, hatte ich dazu die Graukarte genommen.

Die Analyse "unter allen Umständen" könnte wohl ein Spektrumanalysator machen. Gibts für ein bisschen Geld und ein paar Kilos . . .

HaWe
21.03.2016, 14:31
ich hatte es jetzt so verstanden, dass der Adafruit-Farbsensor (genau wie die Lego-Sensoren) seine eigenen Beleuchtungs-Lämpchen hat, genau damit die Messung standardisiert und unabhängig vom Umgebungslicht ist?
Oder misst der etwa nur rein passiv? (Das wäre natürlich sehr schlecht!)

i_make_it
21.03.2016, 15:34
https://www.adafruit.com/datasheets/TCS34725.pdf
Seite 2.
Ein Array von 3x4 Photodioden hinter einem IR Filter.

Aber selbst wenn Du eine eigene Lichtquelle hinzufügst, wird sich durch Fremdlicht immer das Spektrum und damit die Lichttemperatur additiv verändern.

Bei meinem Projekt wurde der Sensorkopf immer lichtdicht auf die Testfläche gepresst und einmal durch Lichtquellen im Sensorkopf eine Auflichtmessung durchgeführt und noch eine Durchlicht Messung mit Hilfe von Lichtquellen unter der Auflagefläche für das Messplättchen.
Die Platten waren abgestuft in 5 Stärken und je eine Hälfte hatte eine glatte Oberfläche und die andere eine strukturierte.
Damit hatte man 20 Messreihen für jede Färbung des Kunststoffes.

Du wirst vermutlich nur Auflichtmessungen durchführen wollen, aber je nach Transparenz des Ziels und dem Durchlichtanteil, kann es da auch zu unterschiedlichen Ergebnissen kommen.
Die Frage ist halt welche Varianz der Messwerte definiert man noch als akzeptabel um die selbe Farbe zu repräsentieren.
Wenn es nur darum geht farbige Bausteine zu sortieren (mein erstes Projekt mit Farbsensoren), und man nur eine Handvoll stark unterschiedlicher Farben zu unterscheiden hat, ist das eine andere Anforderung wie wenn man einen 24 Bit Farbraum hat und über 3,6 Millionen Farben unterscheidet.

Crazy Harry
21.03.2016, 16:22
TCS3414 hat I2C und sogar mit 16Bit Auflösung je Kanal.

.... für die Beleuchtung mußt du aber selber sorgen ;)

HaWe
21.03.2016, 16:31
ja, danke - so viel verschiedene Farben bräuchte ich gar nicht mal.
Die Lego Sensoren messen je nach Betriebsart zwar auch getrennte RGB-Kannäle, wenn ich mich recht erinnere im raw-Modus aber nut 8-bit pro Kanal. Das würde mir selber auch dicke reichen. Allerdings messen die (je nach Bauart) mit eigenen farbigen LEDs, evtl pulsierend, um die Fremdlichtfehler gering zu halten. Das müsste man also beim Adafruit Sensor alles selber machen, was es sehr kompliziert macht bei wechselndem Umgebungslicht (Störlicht). Vielleicht könnte mit aktiv pulsierendem farbigem Licht die "echte Farbe" besser gemessen werden. So etwas müsste bei einem Farbsensor wie bei Lego schon eingebaut sein.

i_make_it
22.03.2016, 08:49
"echte Farbe" das impliziert das es eine falsche Farbe gibt.

Wenn man eine Farbe sieht, ist diese unter den gegebenen Bedingungen des Lichtspektrums und der Lichtintensität die Farbe die ein Objekt hat.
Außer du willst eine Spektralanalyse auf Basis von Adsorbtionslinien durchführen um bei einem bewegtem Objekt Rot- oder Blauverschiubung auszuschließen.

Ein einfacher Sensor sagt halt einfach das ist so, Punkt. Ein besserer Sensor erlaubt Dir mehr zu erkennen. In der Regel das die Antwort nicht so einfach ist wie Sie durch Simplifizierung des einfachen Sensors gemacht wurde.

Eine modulierte Lichtaussendung gibt Dir als Information nur zu welcher Zeit die Lichtquelle welches Signal aussendet. Dadurch weist Du immer noch nicht welcher Anteil des Lichtes das dein Sensor empfängt, Fremdlicht ist.
Du kannst höchstens in den Pausen auch messen und diesen Wert von dem anderen abziehen.

Eine andere Möglichkeit, die ich mal benutzt habe, ist eine Photodiode und mehrere farbige LEDs.
Ich habe in den pausen zwichen den einzelnen LEDs die Helligkeit gemessen und den Wert als Null genommen. Dann für jede Wellenlänge den Wert genommen. und so ein Profil für jede Farbe erstellt. Mit den "gelernten" Werten konnte ich dann Fremdlicht unabhängig die Farbe ermitteln.

31448

Wie man erahnen kann, kam ich erst später drauf das der Aufbau auch störsicher gegen Fremdlicht ist (solange das Fremdlicht nicht zu hell ist).
In der Zeichnung steht noch Phototransistor. Es wurde später aber eine Photodiode.

HaWe
22.03.2016, 14:21
du hast ntl völlig Recht, "echte" Farbe war Blödsinn.
"reproduzierbare Farbmessung, unabhängig vom Umgebungslicht" wäre korrekter gewesen.
Wie das technisch wirklich machbar ist, weiß ich gar nicht, so was in der Art "automatischer, integrierter Weißabgleich" wäre sicher nicht verkehrt: das müsste aber der Sensor on-board leisten.

Der allererste und einfachste Schritt wäre sicher eine superhelle weiße onboard-Beleuchtungs-LED mit einer kleinen Linse davor.

i_make_it
22.03.2016, 14:28
Superhell wird dir nichts nutzen.
Da sieht man dann auch keine Farben mehr, nur noch das Spektrum der Lichtquelle.
Da müsste man dann auf Mittel der Astrometrie zurückgreifen um noch eine Farbe detektieren zu können.

Als Erstes muß man sich mal mit der Lichttemperatur befassen und deren Einfluß auf die Farbe eines Objektes.
http://crealightiv.com/wp-content/uploads/2014/05/farbtemperatur.png
Dann kann man für ein und das Selbe Objekt eine Sammlung von Datensätzen bei verschiedenen Lichttemperaturen und unterschiedlichen Oberflächen Eigenschaften anlegen.
Wenn man dann entsprechend viele Objekte (Farben) hat, dann kann man Messergebnisse mit den Daten abgleichen und belastbare Aussagen machen.

Ich habe fast 1 Jahr an dem Thema gearbeitet (Farbsensor).
Nicht umsonst arbeiten professionelle Farbdetektoren mit einer Fremdlichtabschirmung.

Letztes Jahr hatte ich wieder damit zu tun, da die Geldscheinprüfung, unter anderem, sowohl beim Papier als auch bei der Druckfarbe auch prüft ob diese im jeweiligen Spektrum die korrekte Farbe hat.

Hat man Objekte mit bekannten Farben, die man nur unterscheiden will, kann man mit einem einfachen Sensor mit einer Weißlichtquelle arbeiten, da man dann nur das Datum einer bestimmten Lichttemperatur braucht um unterscheiden zu können.
Das trifft allerdings halt nur auf Farben zu die sich bei Bestrahlung mit Licht im sichtbaren Spektrum unterscheiden.
Ich habe hier ein paar Schwarzlichtfarben, die bei Tageslicht alle weiß aussehen. Erst bei Bestrahlung mit UV Licht wird es bunt.

HaWe
22.03.2016, 14:42
ich sehe schon, so etwas vernünftig selber zu machen ist schwierig.
Ein kleiner Onboard-Prozessor im Farbsensor, der das alles mit vertretbarem Aufwand selber erledigt, wäre sicher die beste Lösung.

Frank E.
03.04.2016, 23:56
Farben mit einem "lumpigen" RGB-Sensor zu "messen" kannst du eigentlich vergessen. Dem Prinzip nach ist das ein 3-Band-Colorimeter, also quasi das Primitivste, was geht. Man kann damit Farben unterscheiden, aber mit Messen hat das wenig zu tun. Du benötigst also entweder mehr Farben - selbst billigste Amateurgeräte z.B. für die Kalibrierung von Tintendruckern - sind wenigstens 7-Band-Colorimeter oder du verwendest gleich das Prinzip des Spektralfotometers. Bei Letzterem wird das Messlicht an einem Gitter oder Prisma aufgespalten und über eine CCD-Zeile mit mid. 128 oder mehr Zellen ausgewertet. Spektralfotometer verwenden überigens wegen des kontinuierlichen Spektrums auch heute noch Glühlämpchen als Lichtquelle.

Mxt
04.04.2016, 07:20
Spektralfotometer verwenden überigens wegen des kontinuierlichen Spektrums auch heute noch Glühlämpchen als Lichtquelle.
Gehört habe ich das auch schon, aber bei denen, die ich bisher in der Hand hatte (z.B. Boehringer Microparts oder ColorLite) waren LEDs drin. Immerhin würden die, theoretisch, am Raspi gehen, sie haben RS232 oder USB.

HaWe
04.04.2016, 18:37
mir würde etwas dicke reichen, das leistungsmäßig dem Hitechnic (Lego-"I2C") oder NXT- (Lego-"analog") oder EV3-(Lego-"UART") Farbsensor entspricht.
Alle haben getrennte Farbkanäle und eine eigene Beleuchtung "on-board".
Allerdings Protokolle nach Standard, vorzugsweise I2C mit frei wählbaren dev-Adressen, nicht die Lego-Verballhornung der Protokolle.

HaWe
05.04.2016, 15:42
wer kennt jetzt hinreichend genaue Farbsensoren, die den Lego Sensoren gleichkommen?
Es sollte übrigens i2c sein (mit verstellbarer dev addr), weil ich 2 oder 3 davon gleichzeitig einsetzen will und keine 2 oder 3 UART ports etc. auf dem Raspi habe.