PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Farbsensor - Selbstbau(Versuch)



OMarohn
01.09.2006, 12:03
Hallo,
nachdem ich seit einiger Zeit eifriger Leser des Forums bin und es mir bei meinen Anfängen mit µC sehr geholfen hat, habe ich in meinem ersten Projekt versucht einen Farbsensor zu bauen.
(Mein Sohn hat zur Zeit in Physik das Thema Licht und ich dachte das könnte man gut verbinden)

Elektrisch hab ich einen ATMega16 mit einem LDR verbunden und mit drei LEDs R(3000mcd), G(3500mcd) und B(2000mcd) die R LED ist mit einem Vorwiederstand von 150Ohm versehen die beiden anderen werden ohne Vorwiederstand betrieben.

Softwaremaessig messe ich zuerst die Helligkeit ohne angeschaltete LED danach schalte ich nacheinander die LEDS R/G/B und messe dabei erneut die Helligkeit.

Nun zu meinem Problem:
Nach meinem Theorieverständniss müsste doch ein grüner Gegenstand hauptsächlich das Lich der grünen LED zurückwerfen und ein blauer das Lich der blauen etc. und zusätzlich das ggf. komplementäre Licht schlucken.
Meine Werte sind aber nicht wirklich, zumindest für mich, nachvollziehbar.
Kann mir jemand bei der Deutung der Messwerte helfen?

Kein Objekt vorm Sensor:
R:0 G:0 B:0
weisses Objekt
R:61 G:18 B:44
blaues Objekt
R:157 G:54 B:136
grünes Objekt
R:177 G:73 B:111
schwarzes Objekt
R:184 G:48 B:110

robocat
01.09.2006, 12:27
beschämend, festzustellen, dass ich das schon mal wusste und inzwischen vergessen habe.. :(
aber ich glaube du müsstest dein testobjekt mit weissem, nicht kohärentem licht (glühbirne) anstrahlen, um auf das gewünschte ergebnis zu kommen. leds senden ja soweit ich weiß kein spektrum, sondern nur licht mit einer festgelegten wellenlänge aus.
vielleicht hilft das ein bisschen.

gruesse, die katz

womb@t
01.09.2006, 15:13
Vielleicht hilft dir das (http://www.robotroom.com/ColorSensor.html)?
Da ich das sowieso schon mal bauen wollte hab ich die Seite auch schon ein paar mal durchgelesen
zu beachten ist die Zeit, wie lang gemessen wird, da der Sensor relativ träge ist und dass der Sensor von den LED's abgeschirmt ist
und das das zu messende Material nicht reflektiert

OMarohn
01.09.2006, 16:39
@robocat
Vielen Dank für die Antwort, aber ich denke dann müsste ich mit Filtern über dem LDR arbeiten. Die Idee bei den LEDs ist ja gerade das diese Licht einer Wellenlänge aussenden.

@Wombat
Danke für den Link, der ist mir bekannt ;-)
Der hat mich ja darin bestätigt, das es klappen müsste!
Thanks anyway !

frank-findus
02.09.2006, 12:13
Hallo,

LEDs erzeugen spektral schmalbandiges Licht. Ein Gegenstand, der z.B. grün aussieht wirft zwar überwiegend Licht aus dem Bereich um 500 nm zurück, ob aber nun gerade genau die Spektrallinien der LED dabei sind, ist nicht sicher. Das hängt z.B. vom verwendeten Farbpigment ab.

Weiße LEDs helfen da auch nicht, weil die auch kein kontinuierliches Spektrum abgeben. In wirklichkeit sind das blaue LEDs, die ähnlich einer Leuchtstofflampe, einen Klecks andersfarbig fluoreszierende Substanzen auf dem Chip haben.

Dann wäre noch die spektrale Empfindlichkeit deines Lichtsensors. Du hast keinen Typ beschrieben. Aber außer Sensoren, die speziell für die Beleuchtungsmessung oder Fotozwecke entwickelt wurden, haben die auch ausgeprägte spektrale Eigenheiten. Die auf Siliziumbasis z.B. haben eine starke Empfindlichkeit für Rot und IR, für Grün sind sie fast blind. Fotowiderstände auf CdS-Basis haben eine für solche Zwecke gut geeignete breitbandige Empfindlichkeit.

- Du könntest ein weißes Glühlämpchen als Lichtquelle nehmen und Filterscheiben vor 3 Sensoren machen.

- oder 3 Glühlämpchen mit Farbfiltern (Tauchlack, Edding) und einen Sensor

- oder ein Glühlämpchen und einen Sensor und FIlterscheiben mit einem Servo oder Magneten ein- und ausschwenken.

Wenn du was ganz geiles basteln willst, lass das zurückkommende Licht eines weiß beleuchteten Gegenstandes durch einen Spalt fallen und spreize den mit einem Prisma auf. Dieses Lichtband lässt du auf eine monochrome CCD-Zeile (ohne Mosaikfilter) fallen - fertig ist der Spektrogaph :-)

Langer Rede kurzer Sinn, du musst dich mal mit dem Thema Spektren und spektrale Empfindlichkeit beschäftigen.

Gruß, Frank

OMarohn
02.09.2006, 15:27
Hallo Frank,

das mit der spektralen Empfindlichkeit hab ich gerade mal empirisch belegt indem ich nacheinander drei weitere LDR eingelötet habe und alle mit den selben Farben konfrontiert habe.
Jeder LDR hat anscheinend ein anderes Spektum, wobei Rot bei allen von mir eingesetzten gern gesehen wurde, Blau ein wenig schlechter und Grün konnte nur einer gut sehen.

Welcher Art die LDR sind, kann ich leider nicht sagen zwei waren in einem Metallgehäuse und zwei auf Plastikträgern. Ob nun ein CdS dabei war?

Eine Frage zu den Glühlampen, was würde das Ändern? Außer das das Spektrum des emittierten Lichts breiter würde?

Die Bastelanregung mit dem Spektrum vertage ich mal auf die langen Winterabende ;-)

Gruß
Oliver

Superhirn
02.09.2006, 16:47
Hi,

ich habs dsaa auch slebst gebastelt für die letzte Robotchallenge. jedoch wollte ich nur rot und blau und weis unterscheiden. ich nahm für die blaue und die rote led je einen ldr. auf die leds gab ich zusätzlich farbfilter drauf. aber so ganz gut funktinierte es nicjt. beim wettbewerb kam ich dann so weit dass ich mit nur 2 roten sonsoren (die blaue seite wurde abgeklebt) rot, bkau und weis unterschied. aber ich verwendete keinen ad sondern schloss die sensoren nur direkt an einen digitalen io an. also nicht so ganz perfekt. nächstes mal werd ichs mit ad machen. evt so wie der link oben.

edit: es funktonierte nur beim speziellen rot und blau beim wettbewerb nicht richtig, normales buntpapier ging perfekt.

frank-findus
02.09.2006, 17:58
Hallo Frank,
Eine Frage zu den Glühlampen, was würde das Ändern? Außer das das Spektrum des emittierten Lichts breiter würde?


Die möglichen Ursachen für das nicht richtige Funktionieren, die ich beschrieb, können ja auch gleichzeitig auftreten. Glühlampen erzeugen im Gegensatz zu LEDs ein kontinuierliches Spektrum. Grob vereinfachtes Beispiel:

Ein Gegenstand kann z.B. grün aussehen, wenn er nur 505 nm reflektiert, er sieht aber auch grün aus, wenn er 490 und 500-515 nm reflektiert. Das hängt von der Zusammensetzung der Farbe oder Lackierung ab.

Wenn nun die LED z.B. nur 500 nm emittiert, sieht in deren Licht der erstgenannte Gegenstand schwarz aus.

http://de.wikipedia.org/wiki/Bild:LED_Spektren.jpg

Gruß, Frank

P.S. ob der Fotowiderstand auf CdS (Cadmiumsulfid) basiert, findest du über die Typenbezeichnung. Oder du kaufst gezielt einen neuen, die sind nicht teuer (1..3 Euro).

OMarohn
02.09.2006, 20:12
Hallo,

@Superhirn, wie hast Du denn bestimmt, das der aktuelle Meßwert z.B. rot darstellt? Bei einem 1:1 Vergleich der R/G/B - Werte wirst Du immer bei anderen Lichtverhältnissen und ggf. Farbvarianten Probleme bekommen.
Hier kann ich Dir den Begriff 'euklidische Distanz' zum googeln empfehlen.

@Frank
Ich habe, so glaube ich zumindest, verstanden und meine Anwendung etwas umgebaut. Statt zu erwarten, dass der Sensor mir 'richtige' R/G/B-Werte liefert habe ich mich auch eine teach in Version verlegt, die nach 'Lernen' von max. 10 Werten, dann recht zuverlässig erkennen kann was ihm vorgehalten wird. (work in progress)

Danke & Gruß
Oliver

womb@t
02.09.2006, 20:36
Hast du sie auch die Helligkeit richtig eingestellt? Auf der Seite wurde das mit einem weißen Blatt Papier und den Wiederständen so eingestellt dass die ausgegebene Helligkeit dann immer gleich war!

OMarohn
03.09.2006, 12:48
Hast du sie auch die Helligkeit richtig eingestellt? Auf der Seite wurde das mit einem weißen Blatt Papier und den Wiederständen so eingestellt dass die ausgegebene Helligkeit dann immer gleich war!

Hallo Wombat,
nein hab ich nicht, ich habe versucht die Werte - ebenfalls über die Messwerte eines weißen Blatt - rechnerisch anzupassen.

Habe heute den Sensor fertiggestellt und man kann jetzt bis zu einer einstellbaren Maximalgrenze Samples erfassen.
Nach jedem Sample muss man einen Butten drücken und wenn die Maximalanzahl erreicht ist geht der AVR in den Erkennungsmodus.
Die Erkennung funktioniert ganz gut, aber eine Frabe wird nur erkannt wenn sie sehr ähnlich ist. (Kann man im Code einstellen - max euklidische Distanz)

Gruß & Dank
Oliver

Jango
20.09.2006, 20:03
Der Autor von "Itermediate Robot Building" hat sowas auch gemacht und auf seiner Homepage beschrieben.
http://robotroom.com/ColorSensor.html

OMarohn
21.09.2006, 09:25
Hallo Jango,

danke für den Tipp.

Ich verstehe nicht wieso David Cook vernünftige Farbwerte bekommt und ich nicht.
Ich meine die reine Erkennung funktioniert ja nun wie oben beschrieben, aber die RGB-Werte die ich bekomme sind weit von den korrespondierenden Farben entfernt.
Ich habe jetzt schon vier verschiedenen LDRS ausprobiert, jeder hat eine andere Charakteristik aber keiner liefert RGB-Werte welche der Vorlage entsprechen.