Hi
Ich habe es mit der angehängten Schaltung aufgebaut. Mit dem ATTiny15L
erzeugt man ein Rechtecksignal zwischen 10-200kHz leitet dies zur
Sensorfläche und misst per ADC und RC Glied die Spannung. Der ADC läuft
im Freerunning Mode, und die gesampleten Werte werden per Software
einigen Auswertungen unterzogen.
An die anderen ADC können mit dem gleichen Rechtecksignal von PB1 noch
mehr solcher Sensoren drangehangen werden.
Je nach Sensorfläche und Frequenz konnte ich die Annäherung der Hand
bis zu 20cm weit messen. Bei ca. 2x2cm großen Sensoren (Alu-Papier)
beträgt die Entfernung immer noch 2-4 Millimeter. Am besten die
Sensorfläche befindet sich im Gerät, hinter der nichtleitenden
Gehäusewand, als Dielektrikum.
Schwieriger ist dann die Software. Sie muß absolut störsicher, sich
periodisch selbst kalibrierend arbeiten. Meine Lösung hatte ich so
konstruiert das ich die direkte, von Vorne gerichtete Annäherung und
wieder Entfernung der Hand erkennen konnte. Dabei spielte auch die
Annäherungsgeschwindigkeit eine Rolle. D.h. nur wenn man die Hand von
Vorne auf den Sensor zu annäherte, mit einer Geschwindigkeit die nicht
zu langsam oder eben zu schnell ist, durfte die Software diese Änderung
im ADC als gültiges Sensor-Ereignis werten.
Bei meinem Aufbau hat es wunderbar funktioniert.
Extrem interessant war der Punkt als ich meine Cola Flasche direkt auf
den Sensor stellte ;) Das Wasser in der Flasche vergrößerte, bei sehr
empfindlicher Kalibrierung des Sensor, die Empfindlichkeit derart das
selbst eine Annäherung einer Person aus 2 Meter Entfernung wahrgenommen
wurde.
Allerdings, kalibiriert man zu empfindlich entstehen zu häufige
Fehlinterpretationen.
Der Tiny15 erzeugt nun an PB1 das Rechtecksignal. Die ADC werden
einfach im Freerunning Mode mit nicht alzugroßer Abtastrate
eingestellt. In der ADC ISR wurden nun die ADC Werte eingelesen, auf 8
Bit geschnitten und zu einer Variablen, dem Durchschnitt, hinzuaddiert.
Zusätzlich werden noch die Min-Max Werte dieser Variablen gespeichert.
Nun vergleicht die Software den aktuellen Durchschnittswert der ADC's
mit deren vorher gesampelten Werten. Sollte der Wert kleiner sein so
wird eine Variable "StepDown" +1 inkrementiert und die Variable
"StopUp" auf Null gesetzt. Sollte der Wert größer sein wird jeweils
"StepUp" +1 und "StepDown = 0" gesetzt. D.h. man zählt wie oft sich
eine Änderung der ADC Werte in jeweils abwärtsd oder aufwärts Richtung
nacheinander erfolgten. Sollte einer der Werte in "StepUp" oder
"StepDown" eine Threshold übersteigen, zB. 16 dann wurde der Schalter
ausgelösst. Zusätzlich wurde per langsammen Timer die Variablen
"StepUp", "StepDown" wieder auf Null gesetzt. Somit muss per
Software am ADC eine kontinuierliche Wertänderung erfolgen, d.h. man
bewegt die Hand zum Sensor oder weg vom Sensor. Sollte diese Bewegung
zu langsam sein dann löscht der langsam laufende Timer diese Änderungen
und macht somit das Auslössen des Schalters unmöglich.
Gruß Hagen