Nachdem ich selbst Interesse an einem IR-Sensor für eine interaktive Matrix/Tisch habe, erfolgt in diesem Thread mal eine praktische Überprüfung der hier aufgestellten Theorie.
Es ging darum, hinter einem diffusen/satinierten Plexiglas einen "Finderdruck"/"Handauflegen" zu erkennen durch die dadurch erhöhte Reflexion des IR, und zwar unabhängig von Störlicht. Dies sollte durch eine Vergleichsmessung mit und ohne IR-Licht aus dem Sensor geschehen.
Dazu habe ich erst mal einen einfachen IR-Reflexsensor aufgebaut, mit einem IR-Fototransistor (im folgenden der Einfachheit halber "Sensor" genannt) SFH320FA, und 2 850-nm-IR-LEDs - der Sensor hat bei 850 nm ca. 60% seiner Maximalempfindlichkeit, also sollte man die 2 LEDs durch eine 980-nm-LED ersetzen können:
Die LEDs leuchten hier ein bisschen direkt in den Sensor, wenn man das unterbindet, erreicht man einen noch besseren "Kontrast" bei der Auswertung - ich habe das mit Isolierband probiert (wie von Neni vorgeschlagen), aber dadurch kam dann auch weniger Licht "oben" raus, hier gibt es also noch Möglichkeiten zu optimieren (z.B. Fototransistor höher legen).
Hier der äußerst simple Schaltplan, die LEDs werden hier mit ca. 80 mA (gemessen) betrieben:
Ausgewertet wird die Spannung am Kollektor, je mehr IR auf den Sensor trifft, umso kleiner ist diese - die LEDs lassen sich vom µC aus ein- und ausschalten für die zwei Messungen.
Der 22-k-Widerstand ist experimentell ermittelt, so dass sich ein guter Zusammenhang zwischen Helligkeit und Spannung ergibt - hier kann je nach Fototransistor/Gegebenheiten ein anderer Wert nötig ein, die Spannung am Kollektor sollte bei angeschaltetem IR und ohne Störlicht möglichst groß sein, damit man noch genug Spielraum hat, wenn das Umgebungslicht dazu kommt.
Die Situation ist also folgende: eine IR-LED leuchtet von unten/hinten gegen eine Plexiglasscheibe - diese reflektiert schon mal einen Teil des Lichts. Wenn man nun die Hand auf das Plexi legt, sollte ein auswertbar größerer Teil IR reflektiert werden. Dazu kommt das Umgebungslicht als Störfaktor, das sowohl auf den Sensor (der sich neben der IR-LED befindet) trifft wenn keine Hand auf dem Glas liegt, wie auch vermindert, wenn die Hand aufliegt.
Die Idee war nun, zwei Messungen kurz hintereinander duchzuführen, einmal mit eingeschalteter IR-LED, einmal ohne. Das Störlicht sollte also bei beiden Messungen gleich sein (um gepulstes Störlicht "rauszubekommen" kann man auch mehrere Messungen machen und den Durchschnitt bestimmen). Zieht man nun also den Messwert ohne IR-LED von dem mit IR-LED ab, sollte man den selben Wert bekommen, wie wenn das Störlicht gar nicht vorhanden ist.
Dazu addiert sich dann (Lichtströme/Strahlungsleistungen lassen sich ja einfach addieren) bei eingeschalteter IR-LED das vom Plexi reflektierte Licht, dieses ist jedoch konstant, kann also ebenfalls rausgerechnet werden. Wird also noch mehr Licht reflektiert, muss etwas auf dem Plexi sein, das diese zusätzliche Reflektion verursacht. Und das wird dann als "Tastendruck" gewertet.
Hier mal ein Viedo, erst mal der Sensor ohne Plexi drüber, man sieht, dass die Spannung umso weiter sinkt, je näher die Hand am Sensor ist. Dann mit Plexi und IR-Beleuchtung, man sieht, dass die Spannung etwas sinkt, wenn die Hand aufgelegt wird. Die weiße Beleuchtung hat keinen Einfluß, das sind 6 XR-E Q5, das Licht enthält kein IR.
Das Plexi ist "Milchglas" mit recht wenig Transmission, bei satiniertem Plexi oder TrueLED etc. sollten die Ergebnisse noch besser sein. Die Größe des Feldes ist 12 cm x 12 cm, Abstand Plexi-Sensor 5 cm, also durchaus realistische Werte für einen interaktiven LED-Matrix-Tisch.
Kommt Störlicht dazu, sinkt die Spannung natürlich noch weiter, sie ist insgesamt niedriger als bei IR-Beleuchtung, da das Störlicht stärker ist (Halogen-Schreibtischlampe 50 Watt in 40 cm Abstand, sollte ca. ner normalen Wohnzimmerbeleuchtung auf dem Tisch entsprechen). Beim Handauflegen trifft natürlich wieder weit weniger Licht auf den Sensor, aber immer noch mehr, als bei ausgeschalteter IR-LED.
Hier mal ein paar Messwerte, da es "logischer" ist, wenn höhere Spannung höherer Helligkeit entspricht, diesmal über den Kollektorwiederstand gemessen:
Ohne Störlicht:
Ohne IR-LED: 0 Volt (klar, kein IR vorhanden)
mit IR-LED, ohne Hand: 2,00 Volt (die Reflektion vom Plexi, reiner Zufall, dass es genau 2 Volt sind)
mit IR-LED, mit Hand: 2,28 Volt (also deutlich mehr)
mit IR-LED, mit einem Finger in der Mitte: 2,16 Volt
man sieht, dass sogar ein einzelner Finger reicht, um einen spürbaren Unterschied hervorzurufen - das geht aber nur in der Mitte direkt über dem Sensor, das so zu bauen, dass schon ein einzelner Finger im Eck des Feldes reicht, erfordert dann doch noch größeren Aufwand.
Mit Störlicht:
ohne IR-LED, ohne Hand: 1,51 Volt
ohne IR-LED, mit Hand: 0,9 Volt
mit IR-LED, ohne Hand: 3,55 Volt
mit IR-LED, mit Hand: 3,24 Volt
beim Messen mit und ohne LED ergibt sich also folgender Unterschied:
ohne Hand: 3,55 - 1,51 = 2,04 Volt
mit Hand: 3,24 - 0,9 = 2,34 Volt
also, wie in der Theorie, das Störlicht ist eliminiert, man hat wieder die ca. 2 Volt Reflexion vom Plexi, und mit Hand drauf dann mehr.
Zur Auflösung: nimmt man den 10-Bit-ADC, dann teilen sich die 5 Volt durch 1.024, also ein Bit/Wert entspricht dann ca. 4,88 mV - der Unterschied zwischen ohne Hand/mit Hand entspricht hier also 61 "Stufen", das ist genug Spielraum, um eine vernünftige Schwelle festzulegen.
Jetzt fehlt eigentlich nur noch, das Ganze mal an nen µC zu klemmen und per SW auszuwerten - mein Mega8-Board ist leider gerade kaputt (mit dem Bürostuhl drüber gefahren), Tiny2313 hat keinen ADC und Tiny25 kein UART, was die Auswertung erschwert - kommt also noch...
Ebenso wie weitere Versuche mit anderem Plexi (wenn das dann da ist) und noch mehr Fremdlicht, auch mal Tageslicht durch's Fenster mittags etc.
Letztlich soll das dann ein kompakter Sensor (kleine Platine, bzw. Schaltung in eigenes Layout integriert) werden, der einfach 0 oder 1 ausgibt je nach Berührung oder nicht.
Da am Tiny25 insg. 5 Pins frei sind, 3 braucht man schon für Sensor, LED und Ausgang, hatte ich gedacht, die verbleibenden 2 als "enable"-Eingänge zu benutzen, dann könnte man mehrere Sensoren in einer Matrix abfragen.
Andererseits geht das auch mit noch weniger Pins am µC mit nem Schieberegister (mehrere Sensoren abfragen), und dann kann man die 2 freien Pins zum Kalibrieren benutzen: Da die 2 Volt ja nicht fest sind, sondern vom Plexi, Einbau und IR-LED (hier gibt's auch noch Schwankungen) abhängig, muss man jeden Sensor im fertigen Gerät einzeln kalibrieren.
Das hatte ich mir so gedacht: man macht das bei Dunkelheit/IR-freier Beleuchtung. Erst ohne Hand aufgelegt. Man zieht einen Pin auf "low", dann misst der µC mit eingeschalteter IR-LED den Wert am ADC und schreibt ihn in's EEPROM - das ist dann die Reflektion vom Plexi.
Dann legt man die Hand auf, und zieht den anderen Pin auf Low - da wird dann der Wert für Reflektion Plexi + Hand gemessen und gespeichert.
Der µC holt sich dann immer beim Starten diese Werte, rechnet den Durchschnitt aus, das ist dann seine Schwelle zum schalten, also z.B.:
Wert ohne Hand = 740, Wert mit Hand = 760, also wird bei einem Unterschied der Messungen größer als 750 eine Berührung erkannt. Da hat man beim Kalibrieren auch noch Einfluß darauf, legt man beim Kalibrieren nur einen Finger auf, wird das Ganze empfindlicher, aber gibt dann evtl. auch mal "Fehlalarm".
Interessant wäre noch, wie sich eine Temperaturdrift auswirkt - sollte eigentlich so wie das Störlicht keinen Einfluss haben, weil sich ja die Spannungen *insgesamt* verschieben, der *Unterschied* zwischen beiden Messungen aber der selbe ist (solange das alles noch in einem linearen Bereich bleibt).
Da mich einfach mal interessiert hat, was der Sensor so "sieht", habe ich mal einen IR-Filter (blockt alles unter 850 nm) auf die Videokamera, und ein paar Versuche gemacht:
man sieht hier schön, dass es kein so großer Unterschied in der Gesamt-Helligkeit ist mit Hand drauf oder nicht, aber das reicht. Ohne Plexi ist der Unterschied natürlich gewaltig. Was man im Video nicht so ganz sieht, ist, dass die dunkle Hand bei der Szene mit Fremdlicht auch (minimal) heller und dunkler wird, wenn man die IR-LED ein- und ausschaltet.
Und vielleicht noch von Interesse, Bilder mit ESL- und LED-Beleuchtung, mit und ohne Filter auf der Kamera, mit und ohne IR-Beleuchtung vom Sensor - ich war erstaunt, dass das Licht der ESL doch auch ein bisschen IR enthält - bei der LED-Beleuchtung mit Filter auf der Kamera ist's dann zappenduster - das spricht auch dafür, das Wohnzimmer mit LEDs zu beleuchten, wenn man IR-Störfreiheit haben will...