TCS3414 hat I2C und sogar mit 16Bit Auflösung je Kanal.
.... für die Beleuchtung mußt du aber selber sorgen ;)
Druckbare Version
TCS3414 hat I2C und sogar mit 16Bit Auflösung je Kanal.
.... für die Beleuchtung mußt du aber selber sorgen ;)
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.
"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.
Anhang 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.
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.
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/up...temperatur.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.
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.
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.
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.
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.