Hey, ich suche eine Lösung für einen Touchsensor, der im Batteriebetrieb
funktionieren soll. Zuerst hatte ich es wie auf dieser Seite
rumprobiert:
http://playground.arduino.cc//Main/CapacitiveSensor?from=Main.CapSense#.UxCA8YW2_Yc
Das funktioniert ganz. Mit einem Problem, dass mein System mobil sein
muss und das System nur bei Masse von der Erde funktioniert. Heißt, habe
ich die Masse nur von der Batterie, reagieren die Sensoren überhaupt
nicht, das ich kein Potentialunterschied habe. Berühre ich aber die
Masse, funktiert es wunderbar.
Jetzt suche alternative Lösungen, wo man auch das System mit Batterie
funktioniert.
Hoffe, ich habe ich habe mich verständlich ausgedruckt.
Mfg
TG
Hautwiderstandssensor, mit 2 durch einen schmalen steg getrennten
Metallplatten.
Durch Berührung werden die beiden hochohmig durch den Finger verbunden.
War früher (TM) öfter in Fernbedienungen verbaut als das noch
Berührungssensor und nicht Touch-Sensor hies.
Falk Brunner schrieb:> Du brauchst einen differentiellen Touchsensor. Die meisten> Touchscreens> arbeiten so. Ich glaube Atmel hat ne Menge QT100 & Co.
Ich habe hier QT1010 rumliegen. Heißt das, wenn ich diese Schaltung
aufbaue(Link), soll es funktionieren, auch bei Batterie?
Thorsten G. schrieb:> Ich habe hier QT1010 rumliegen. Heißt das, wenn ich diese Schaltung> aufbaue(Link), soll es funktionieren, auch bei Batterie?
QT1010 und QT1012 funktionieren definitiv mit Batterie, haben wir in der
Firma schon als Beispielschaltung erstellt (Werbegeschenk). Schaltung
wie im Datenblatt angegeben, Empfindlichkeit über Widerstände
einzustellen.
doppelschwarz schrieb:> Thorsten G. schrieb:>> Ich habe hier QT1010 rumliegen. Heißt das, wenn ich diese Schaltung>> aufbaue(Link), soll es funktionieren, auch bei Batterie?>> QT1010 und QT1012 funktionieren definitiv mit Batterie, haben wir in der> Firma schon als Beispielschaltung erstellt (Werbegeschenk). Schaltung> wie im Datenblatt angegeben, Empfindlichkeit über Widerstände> einzustellen.
Ich habe jetzt 3 QT1010 für 3 Sensoren eingebaut. Es scheint zu
funktionieren, aber es hat einen merkwürdiges Verhalten. Ich lese
digital am Analogen Eingängen vom Arduino(A0, A1, A2). Die
Berührungssensoren sind getrennt. Egal welches Sensor ich berühre,
scheint nur ein Eingang zu reagieren.
PS: Schaltung auf Kurzschlüsse überprüft.
Udo Schmitt schrieb:> War früher (TM) öfter in Fernbedienungen verbaut als das noch> Berührungssensor und nicht Touch-Sensor hies.
...und wurde wenige Jahre später wieder abgeschafft, weil es
wohl zu unzuverlässig war.
Ich habe erstmal die Schaltung wie im Datenblatt aufgebaut, nur ohne Cx
und Rs. Und Pull-Down von 100k an jedem Eingang. Wie gesagt, egal
welches Sensor ich berühre, reagiert immer A1.
Ich bau jetzt einen Stützkondensator ein.
Hast du vllt ein Foto vom Aufbau?
Ich würde sagen, dass der Hersteller einen guten Grund hat, um Cs im
Schaltplan einzuzeichnen...
Cx ist nur die zu Messende Kapazität, z.B. dein Finger.
OK, die Stützkondensatoren sind eingebaut.
2 Eingänge empfangen immer HIGH's und reagieren nicht. Ein Pin
funktioniert. Er verändert sein Zustand beim Berühren von LOW auf HIGH.
mal auf Englisch: "Capacitive Touch Sensor" oder ähnlich. Habe da gerade
einen Film (in Englisch) gesehen, der genau erklärt, wie das ohne Erde,
auch mit Batterie fuktioniert. Leider habe ich den Link nicht
gespeichert.
2 mögliche Fehlerquellen:
1. Software im Arduino: Messe die Output-Pins von Hand, sind ja diskret.
Sollte sich dann mit Deiner Anzeige decken.
2. Hardware: Zeichne einfach kurz den Schaltplan von Hand und mach ein
Foto. Den QT brauchst du ja nur einmal zeichnen (sollten alle gleich
beschalten sein). Allerdings sollte Rs schon eingebaut sein, da er den
Ladestrom begrenzt und für eine konstante Ladezeit sorgt.
Die Empfindlichkeit wird übrigens mit Cs eingestellt, nicht mit Rs, wie
ich oben geschrieben hatte. Laut Datenblatt typischerweise 8,2 nF, aber
natürlich abhängig vom Overlay.
Okay, hier meine Schaltung und der Aufbau(Links):
Aufbau:
http://s14.directupload.net/images/140303/hrnesawg.jpg
Schaltung:
http://s14.directupload.net/images/140303/i5aoahys.jpg
Weiteres Phänomen, dass ich festgestellt habe: Ich habe die Elektroden
getrennt und direkt mit dem Finger die Leitung angefasst. Wenn ich die
linke Leitung anfasse, messen A2 und A0 ein High(die äußeren IC's),
obowhl nur A2 reagieren soll. Fasse ich direkt an A0, passiert nichts.
Mein Code:
1
#include <digitalWriteFast.h>
2
/*
3
DigitalReadSerial
4
Reads a digital input on pin 2, prints the result to the serial monitor
5
6
This example code is in the public domain.
7
*/
8
9
10
#define A A2
11
#define B A1
12
#define C A0
13
14
// digital pin 2 has a pushbutton attached to it. Give it a name:
15
16
17
// the setup routine runs once when you press reset:
18
void setup() {
19
// initialize serial communication at 9600 bits per second:
20
Serial.begin(9600);
21
// make the pushbutton's pin an input:
22
pinMode(A, INPUT);
23
pinMode(B, INPUT);
24
pinMode(C, INPUT);
25
26
27
28
}
29
30
// the loop routine runs over and over again forever:
31
void loop() {
32
// read the input pin:
33
int A2 = digitalRead(A);
34
int B2 = digitalRead(B);
35
int C2 = digitalRead(C);
36
// print out the state of the button:
37
38
Serial.print(A2);
39
Serial.print("\t");
40
Serial.print(B2);
41
Serial.print("\t");
42
Serial.println(C2);
43
44
delay(100); // delay in between reads for stability
Der Code sieht jetzt mal nicht falsch aus.
Die Hardware allerdings ist nicht optimal aufgebaut. Beim Touch sollte
man möglichst den Touch auf die eine Seite und den Rest auf die andere
Seite löten, da der Touch leicht beeinflussbar ist. Versuch einfach mal
noch, die Rs einzulöten, sollte ja möglich sein. SNS und SNSK sind auf
der richtigen Seite der Taste? Das sieht man auf dem Bild nicht so gut.
Falls Du es nochmal neu machen kannst: richte SNS und SNSK in Richtung
der Tasten (90°-Drehung) und führe alle anderen Leitungen auf der
anderen Seite weg. Den Kondensator zwischen Pin 2 und 5 zur Not einfach
über den IC löten. Die Touchbauteile auch möglichst nah am IC und kurze
Leitungen verwenden.
OK, ich habe die Fehler anscheinend behoben. Mein dritter QT war defekt,
also umgetauscht. Und im Code darf man nicht das Makro "#define A A2"
benutzen, da der Compiler wahrscheinlich beim Einlesen "pinMode(A,
INPUT);" das A als A0 interpretiert. Rs ist auch eingebaut worden.
Wo bitte ist denn in dem Code die Touch-Routine?!? o0
Alles was ich da sehe ist ein digitales Auslesen der I/O Pins. Wenn Du
da nen Taster ranpappst geht das so, aber für (Q)Touch braucht's dann
doch noch was mehr...
Shuzz schrieb:> Wo bitte ist denn in dem Code die Touch-Routine?!? o0
Der QT1010 und QT1012 sind fertige, programmierte Controller, bei denen
man nur die Empfindlichkeit über die Kapazitäten einstellen kann, sonst
nichts. Und sie geben gedrückt oder nicht gedrückt diskret aus,
Entprellung findet schon im Controller statt.