Kapazitiven Sensor Auswerten, Capacitive Switch
guten morgen,
ich verwende hier einen kapazitiven sensor als lichtschalter, grundsätzlich schon relativ gut funktioniert. dabei verwende ich die hier erwähnte bibliothek:
capacitive sensing
zwischen pin 2 und 5 hängt ein 1m widerstand und ein kleiner kondensator (ich meine 100pf) geht von pin 2 auf masse.
der code sieht wie folgt aus:
um das system stabil zu bekommen, muss ich alle paar sekunden einen kalibrierung durchführen lassen, die reaktion des lichtschalters unnötig langsam macht. wenn ich die kalibrierung nicht durchführen lasse, steigt der gelesene wert stetig an, bis das licht von selbst ein oder ausgeschaltet wird. evtl. lässt sich das problem hardwareseitig lösen, indem ein kondensator oder hochohmiger entladewiderstand von der sensorfläche gegen masse geschalten wird.
ich würde die ganze problematik nun aber gerne wie folgt umgehen, weiß aber nicht wie der code dazu aussehen müsste.
momentan sieht der code welcher die problematik betrifft ja wie folgt aus
ich würde den schaltpunkt nun gerne nicht über einen absolutwert ((total1 > 600) sondern über die steilheit des wertanstieges definieren. wie folgt if ( (total1 innerhalb 400ms um mehr als 500 einheiten steigt dann...
da ich leider nicht wirklich vom fach bin fehlt mir leider ein ansatzpunkt wie das umzusetzen wäre. ist klar ich erreichen möchte und hat wer eine idee wie ich das umsetzen kann?
grüße,
jan
ich verwende hier einen kapazitiven sensor als lichtschalter, grundsätzlich schon relativ gut funktioniert. dabei verwende ich die hier erwähnte bibliothek:
capacitive sensing
zwischen pin 2 und 5 hängt ein 1m widerstand und ein kleiner kondensator (ich meine 100pf) geht von pin 2 auf masse.
der code sieht wie folgt aus:
code: [select]
#include <capacitivesensor.h>
int dosean = 12; // pin 12 schaltet über reed relais, das relais für licht
int statusreset = 0; // verhindert schalten bevor reset schwellenwert unterschritten ist
int statusan = 0; // speichert status licht an
unsigned long previousmillis = 0; // speichert wie viele sekunden seit derletzten Änderung vergangen sind
unsigned long interval = 3000; // kalibrierungsinterval
capacitivesensor cs_5_2 = capacitivesensor(5,2); // 1m widerstand zwischen pin 5 und 2, pin 2 hängt die sensorfläche
void setup()
{
serial.begin(9600);
pinmode(dosean, output); // pin dosean als ausgang definieren
}
void loop()
{
// an
long start = millis();
long total1 = cs_5_2.capacitivesensor(30);
if( (total1 > 600 )&&(statusreset == 0)&&(statusan == 0) ){
digitalwrite(dosean, high);
statusan = 1;
statusreset = 1;
delay(300);
serial.println("an");
}
//aus
start = millis();
total1 = cs_5_2.capacitivesensor(30);
if( (total1 > 600 )&&(statusreset == 0)&&(statusan == 1) ){
digitalwrite(dosean, low);
statusan = 0;
statusreset = 1;
delay(300);
serial.println("aus");
}
// reset aus
start = millis();
total1 = cs_5_2.capacitivesensor(30);
if(total1 < 310 ){
statusreset = 0;
serial.println("reset");
}
// kalibrierung alle 3 sekunden
if (millis() - previousmillis > interval) {
previousmillis = millis();
cs_5_2.reset_cs_autocal();
serial.println("kalibrierung");
}
// daten über serial monitor ausgeben
serial.println(total1); // sensorwert sensor 1 über serial port ausgeben
delay(250); // delay für serialport ausgabe
}
um das system stabil zu bekommen, muss ich alle paar sekunden einen kalibrierung durchführen lassen, die reaktion des lichtschalters unnötig langsam macht. wenn ich die kalibrierung nicht durchführen lasse, steigt der gelesene wert stetig an, bis das licht von selbst ein oder ausgeschaltet wird. evtl. lässt sich das problem hardwareseitig lösen, indem ein kondensator oder hochohmiger entladewiderstand von der sensorfläche gegen masse geschalten wird.
ich würde die ganze problematik nun aber gerne wie folgt umgehen, weiß aber nicht wie der code dazu aussehen müsste.
momentan sieht der code welcher die problematik betrifft ja wie folgt aus
code: [select]
{
// an
long start = millis();
long total1 = cs_5_2.capacitivesensor(30);
if( (total1 > 600 )&&(statusreset == 0)&&(statusan == 0) ){
digitalwrite(dosean, high);
statusan = 1;
statusreset = 1;
delay(300);
serial.println("an");
}
ich würde den schaltpunkt nun gerne nicht über einen absolutwert ((total1 > 600) sondern über die steilheit des wertanstieges definieren. wie folgt if ( (total1 innerhalb 400ms um mehr als 500 einheiten steigt dann...
da ich leider nicht wirklich vom fach bin fehlt mir leider ein ansatzpunkt wie das umzusetzen wäre. ist klar ich erreichen möchte und hat wer eine idee wie ich das umsetzen kann?
grüße,
jan
in diesem thread hier ganz unten findest du einen sketch wo ich sowas ähnliches gemacht habe:
http://forum.arduino.cc/index.php?topic=257024.msg1837174#msg1837174
die funktion glaetten() macht den geglätteten wert. je nach größe des faktors wird stärker oder weniger geglättet.
grüße,
sven
http://forum.arduino.cc/index.php?topic=257024.msg1837174#msg1837174
die funktion glaetten() macht den geglätteten wert. je nach größe des faktors wird stärker oder weniger geglättet.
grüße,
sven
Arduino Forum > International > Deutsch (Moderator: uwefed) > Kapazitiven Sensor Auswerten, Capacitive Switch
arduino
Comments
Post a Comment