Nano + CapSense funktioniert nur bei Berührung

Hallo Community,

ich bin neu in der Materie Arduino.
Habe zu meinem Thema schon viel gegoogelt und gesucht aber nicht das Richtige gefunden.

Mein Szenario: Ich habe einen Arduino Nano (Nachbau!?) Amazon
Auf diesem läuft dieser Sketch den ich aus dem Capsense Beispielsketch zusammengestrichen habe:

#include <CapacitiveSensor.h>

CapacitiveSensor sens = CapacitiveSensor(7,3); // 10M resistor pins D3 & D7 , Pin D3 is sensor-pin


void setup()                    
{
   //sens.set_CS_AutocaL_Millis(0xFFFFFFFF); // deaktivate autocalibration
   Serial.begin(9600);
}

void loop()                    
{
    long myVal = sens.capacitiveSensor(30);
    Serial.println(myVal);
    if (myVal >= 7500)
    {
      Serial.print("Switch ");
      Serial.println(myVal);
      delay(500);
    }
    delay(10);
}

Angeschlossen habe ich, zwischen Pin 7 und Pin 3, einen 10M Widerstand. Auf Seiten Pin 3 habe ich nun ein Kabel angeschlossen an dessen Ende eine kleine Platine mit Kupferschicht angelötet ist. Diese ist ca 5cm² groß.
Das Kabel ist ein 0,14² Kabel, ca 1,5m lang.
Der Nano hat eine Verbindung zwischen dem Schutzleiter der Steckdose und GND.
Ich habe auch zusätzlich noch eine größere Platine mit Kupferschicht an den GND des Nano angeschlossen und unter der “Sensorplatte” angebracht.

Nun zu meinem Problem:
Die Werte, die der Nano misst, gehen nur nach oben, wenn ich die Kupferplatte wirklich berühre.
Gehe ich nach diese angaben, die man überall im Netz lesen kann, müsste sich aber schon eine Veränderung einstellen, wenn ich die Hand nur 2-3cm darüber halte:

* Use a 1 megohm resistor (or less maybe) for absolute touch to activate.
* With a 10 megohm resistor the sensor will start to respond 4-6 inches away.
* With a 40 megohm resistor the sensor will start to respond 12-24 inches away (dependent on the foil size). Common resistor sizes usually end at 10 megohm so you may have to solder four 10 megohm resistors end to end.

Ich möchte die Sensoren gerne unter meinem Schreibtisch aus einer Multiplexplatte anbringen. Die ist 25mm stark. Das sollte doch eigentlich funktionieren!?

Hat jemand von euch eine Idee, was an meinem Aufbau falsch sein könnte?
Ich will nach der Arbeit mal versuchen auszuschließen, obs an den langen Kabeln liegt.

Bin für jeden Tipp dankbar. :slight_smile:

Meines Erachtens ist das Problem die lange Zuleitung zur Sensorfläche. Probier mal mit einer kurzen Verbindung ( ca 10cm) Grüße Uwe

Auch aus der Anleitung:

Also if the sensor is exposed metal, it is possible that the send pin will never be able to force a change in the receive (sensor) pin, and the sensor will timeout.

Verpacke Deine Sensor-Fläche also mal in ein Plastiktäschchen und teste erneut (mit der Verkürzung, die uwefed bereits erwähnte).

Danke für die Tipps. Werde beides nacher versuchen. Dann muss halt ne lange USB Leitung her, da der RaspberryPi, mit dem der Arduino später kommunizieren soll woanders steht. Aber solange es funktioniert bin ich happy. Melde mich dann nochmal.

So ich hab jetzt einen 5cm langen 0,8mm Draht angelötet. Leider bleibt das Ergebnis das Gleiche :-/

Habe den Sensor vorher auch mal mit TesaFilm abgeklebt, wegen der Folie, aber das hat auch nichts gebracht :-/ Das verstehe wer will.

zeig uns mal ein paar gute Fotos vom Aufbau. Grüße Uwe

Na klar :) Einmal der nano in nah: Pin 7 ist sendpin und Pin 3 ist receive Pin. Leider sind meine 10M Widerstände noch aufm Postweg daher musste ich mir 10 x 1M nehmen :-/ Der Rote Draht auf GND zur Rechten, kommt vom Schutzleiter Steckdose, der Schwarze am GND zur Linken geht an die Platte die ich ursprünglich unter dem Sensor liegen hatte.

Hier noch ein Überblick mit dem Sensor im Bild:

hi,

ich frage mich, ob 10 widerstände in diesem fall wirklich dasselbe sind wie einer... (vom widerstand her schon, aber hier geht's um kapazität)

gruß stefan

Da habe ich auch schon mit mir gehadert. Nur leider habe ich nichts Anderes da. Muss ich wohl mal warten, bis der Kram aus Chinesien da ist. Habe da ein größeres Sortiment mit einigem Anderen bestellt. Und der lokale Dealer hier hat nur maximal 1M. Danke schonmla für eure Gedanken.

Falls noch jemand was weiss, immer her damit :)

hi,

was passiert, wenn Du nur 1M nimmst?

gruß stefan

Die Idee kam mir auch, darum habe ich mal nur einen 2,5M Trimmer den ich hier hatte dazwischen gehangen. Da war es dann leicht näherungsempfindlich. Scheint also evtl. doch an den vielen Widerständen zu liegen.

Die Widerstände sind braun schwarz schwarz grün braun? Laut https://www.ph-ludwigsburg.de/html/2f-tech-s-01/studium/Veranstaltungsmaterial/Programme/Widerstand%20Farbcode%204%20und%205%20Ringe_DIN%2041429.htm und http://www.calculino.com/de/elektronik/ohmscher-widerstand_rechner.html sind das 10M. Versuchs mal nur mit einem Widerstand anstatt 10 in Serie. Grüße Uwe

Interessant oO.

Nee also ich hab die gemessen und da hat jeder 1M und zusammen genau 10M. Habs wie gesagt, mit nem 2,5M Trimmer getestet, der hat gewisse Eigenschaften von Annäherungsempfindlichkeit gezeigt. Muss jetzt mal die anderen Widerstände abwarten. Wo ich doch so geduldig bin :grin:

Ich habe jetzt beim lokalen Händler 4,7M und 8,2M bekommen. Nix. fehlanzeige. Selbst mit 2 x 8,2Mer in Reihe tut sich nichts. Bei Berührung exorbitante Werte und eine Annäherung ird nicht registriert oO. :(

DerMega: Ich habe jetzt beim lokalen Händler 4,7M und 8,2M bekommen. Nix. fehlanzeige. Selbst mit 2 x 8,2Mer in Reihe tut sich nichts. Bei Berührung exorbitante Werte und eine Annäherung ird nicht registriert oO.

Das ist merkwürdig. Mementan habe ich zwar keine CapSense-Library installiert, aber ich kann mich gut erinnern, dass es bei mir mit einem UNO bestens funktioniert hat, sogar mit nur einem 820K Widerstand konnte ich geringe Abstände zuverlässig zwischen Sensorfläche und Hand berührungslos detektieren.

Mein Aufbau war damals noch flatteriger, als Sensorfläche hatte ich nur ein Stück Haushalts-Alufolie auf ein Breadboardkabel gespießt, und man konnte bei Annährung eine deutliche Werteänderung feststellen.

Was bei mir damals aber komplett anders war als bei Dir: Ich habe kein Breadboard verwendet und meinen 820K Widerstand auf allerkürzestem Weg zwischen Sender- und Receiver-Pin verkabelt: Die Enden des Widerstands waren einfach nur in die Pin-Header des Arduino UNO eingesteckt.

Vielleicht probierst Du das auch mal: Das Breadboard bei der Sensorverkabelung weglassen, Widerstand direkt und kurz an die Pins des Controllers anschließen, und nur die Sensor-Kontaktfläche wird mit einem Stück Kabel vom Controller etwas abgesetzt.

Gggf. auch mal zwei andere Pins als Sender und Receiver verwenden, vielleicht hast Du schon Pins am Board "kaputtgespielt".

Wenn es dann immer noch nicht funktioniert, schreibe bitte mal genau, welche CapSensense Library Du verwendet hast, genauer Download-Link. Dann versuche ich das mal anhand genau der Library nachzuvollziehen, die Du auch verwendest.

Bei Berührung exorbitante Werte

Die Kapazität hängt von Fläche/Abstand ab. Und ändert sich also mit Abstand -> 0 gewaltig. (Wenn du bei Berührung nicht gar eine leitende Verbindung herstellst ?)

Vielleicht die Sensorfläche-Alufolie größer machen (~ Handfläche), mit dickerem Papier (= Mindestabstand und Isolator) bedecken und die ganze Handfläche annähern ...

Ausserdem, hast du den Tip im Playground mit dem kleinen Kondensator parallel (20pF gegen GND mal ausprobiert? Das sollte die Unterschiede zwischen Sensor berührt/nicht berührt verringern. Macht es was aus, wie/ob du mit Arduino-GND verdunden bist? (Was hast du in der anderen Hand?)

In diesem Video nimmt er übrigens nur einen 1M Widerstand, sagt er ...

Hi,

ich habe die Lib von hier: https://codeload.github.com/arduino-libraries/CapacitiveSensor/legacy.zip/master gezogen am 26.05.2014

Ich habe einen 100p Kondenator genommen. Von dem hatte ich irgendwo gelesen und auch, dass man mal zwischen 40 und 400p probieren solle.

Es wird schierig den Widerstand direkt auf den Header zu stecken, da der Nano Stifte hat und keine Weiblichen Header :-/ Ich werd aber mal rumprobieren. Andere Pins hatte ich auch schon versucht, werde die zur Sicherheit aber nochmal komplett umlegen. Danke schonmal für eure vielen Tipps.

Schade wäre, wenn ich eine riesen Fläche nehmen müsste. Ich wollte ganze gerne mehrere "Buttons" unter meinem Schreibtisch realisieren, auf den ich von oben eine Klarsichtfolie mit Piktogrammen kleben wollte, für die jeweilige Funktion :D

DerMega:
Es wird schierig den Widerstand direkt auf den Header zu stecken, da der Nano Stifte hat und keine Weiblichen Header :-/
Ich werd aber mal rumprobieren.

OK, ich habe es gerade mal mit zwei Testaufbauten getestet:

  1. UNO-Board ohne Breadboard
  2. MicroPro-Board mit Breadboard

Mit 820 K Widerstand und einem 15cm langen Breadboardkabel mit einem am Ende aufgesteckten Stück Haushalts-Alufolie von ca. 3*3cm.

Stromversorgung in beiden Fällen: USB vom PC.

Ergebnis mit einem UNO-Board, Widerstand direkt in den Headerleisten:
Es war möglich, mit dem UNO vor meiner Tastatur liegend eine brauchbare Sensorposition zu finden.

Ergebnis mit einem MicroPro-Board mit Headerleisten auf einem Breadboard aufgesteckt, Widerstand daneben gesteckt.
Es war völlig unmöglich, im elektronischen Störnebel von PC, Tastatur und Monitor eine brauchbare Position für den Sensor zu finden, an der er kein Signal liefert. Der Sensor gab stets ein Grundrauschen von ca. gut 30 ab, das in derselben Größenordnung wie das Signal bei Annährung einer Hand liegt. Offenbar fängt das Breadboard so viel Störnebel auf, dass eine Sensorauswertung in der Nähe elektronischer Störquellen unmöglich wird.

So klappt es mit dem Arduino MicroPro auf dem Breadboard:
Man nehme ein mindestens 1m langes USB-Kabel und führe das Breadboard mit der aufgebauten Schaltung weg vom PC, so dass sich die Schaltung testweise knapp einen Meter vom PC und anderen elektronischen Störquellen (z.B. Monitor, Tastatur, Maus) entfernt befindet.

Verwendeter Sketch:

#include <CapacitiveSensor.h>
// getestet mit 820 K Widerstand zwischen Pin 9 und 2
// und einem Breadboardkabel an Pin-2 mit ca. 3*3cm Aluminium-Haushaltsfolie als Sensorfläche
CapacitiveSensor   capSensor = CapacitiveSensor(9,2);  

void setup(){
   capSensor.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
   Serial.begin(9600);
}

void loop(){
    long start = millis();
    long total =  capSensor.capacitiveSensor(30);
    Serial.print(millis() - start);        // check on performance in milliseconds
    Serial.print("\t");                    // tab character for debug windown spacing
    Serial.println(total);                  // print sensor output 1
    delay(200);                             // arbitrary delay to limit data to serial port 
}

Wenn der Sensor nicht betätigt wird, müßte im Ruhezustand ungefähr so etwas im seriellen Monitor durchlaufen:

1	4
1	4
1	3
1	6
3	2
1	6
1	6
1	4
1	3
2	0
1	4
1	4
1	2
1	3
2	5
1	4
1	0
1	4
1	3
1	3
1	4
1	2
1	4

Wenn man die Hand bis auf ca. 10mm Abstand an die Folie annährt, müßte sich ein Signal von über 30 ergeben, so sieht es im seriellen Monitor aus, wenn man die Hand annährt und wieder wegzieht:

1	4
1	6
2	4
1	4
1	6
1	25
1	35
1	33
2	34
1	37
1	35
1	33
2	35
1	38
1	36
1	35
2	32
1	35
1	6
2	4
2	7
1	8
1	8
1	4
2	4
1	5

Das ist das, was ich ermitteln konnte.
Der Aufbau mit einem Mini-Board, das mit Headerleisten auf ein Breadboard gesteckt ist, ist jedenfalls so anfällig für elektronischen Störnebel von Geräten in der Nähe, dass man kein Nullsignal mit “Werten unter 10” erhält, so dass ein auswertbares Signal bei Annährung einer Hand tatsächlich nicht feststellbar ist.

Das ist mit dem Aufbau auf Breadboard erst möglich, wenn man den Aufbau aus dem elektronischen Störnebel heraus ablegt und man zuerst ein sauberes Nullsignal mit Werten unter 10 erhält, um dann bei Annährung ein Signal über 30 zu bekommen.

Interessant, daran habe ich noch garnicht gedacht. Danke für den Test. Mein Breadboard hängt neben meinem RaspberryPi und ist knapp 2 Meter vom DesktopPC entfernt. Allerdingssollte ich ja durch den höheren Widerstand (8,2M) auch eine höhere Empfindlichkeit haben. Werte unter 40 (schwankend von 0-40) habe ich ohne Annäherung. Nähere ich mich, passiert nichts bis kaum mess- und auswertbar. Berüchre ich die Sensorfläche, bekomme ich werte über 100k. Das ist das was mich wundert. Ich hätte bei Annäherung schonmal auf Werte um die 10k gerechnet. Ich hätte ja mal schnell was auf Lochraster zusammen gelötet und Abseits getestet aber mien Lötkolben bringt leider keine Temps mehr und ich muss jetzt mal suchen, wie ich den ersetze :-/

hi,

mir hat die herumprobiererei irgendwann gereicht und ich hab' mir ein paar MPR121 um je 8 euro gekauft. sind allerdings noch nicht ausprobiert worden und liegen wie das meiste zeuch nur rum...

im netz findet man aber gute meinungen dazu.

gruß stefan