Arduino et capteur capacitif

Bonjour,

J’ai crée un petit programme tout simple, un en utilisant la librairie CapPin, l’autre en utilisant la librairie CapacitiveSensor, tous deux fonctionnent comme il faut lorsque je branche l’arduino sur mon ordinateur, mais tous deux font n’importe quoi aussi lorsque je branche l’arduino sur secteur avec un adaptateur type téléphone, quelqu’un saurait-il pourquoi ? ou d’où vient le problème ?

lisez la partie “Grounding and other known issues” de cet article

https://playground.arduino.cc/Main/CapacitiveSensor/

Donc ci je comprends bien, il faudrait que je connecte le GND de mon arduino à une prise de terre ?

Oui faut jouer avec la terre et l’isolation d’une façon ou d’une autre

Oui merci ça à résolu ce problème, maintenant j’ai un autre petit problème mais je pense que c’est niveau réglage.

Je me sers du programme pour effectuer un “interrupteur tactile” pour l’éclairage de ma salle de bain, avec un petit relais qui pilote mon télérupteur, j’ai ajouté une condition dans mon programme pour régler ma valeur seuil, une fois atteinte elle déclenche mon relais, cependant quelque secondes après la détection pour l’allumage uniquement, la valeur passe de nouveau ma valeur seuil sans raison, et éteint la lumière du coup, ça ne me le fait pas à l’extinction de la lumière, sauriez vous pourquoi ?

Postez le code et la description du montage

#include <CapacitiveSensor.h>

/*
   CapitiveSense Library Demo Sketch
   Paul Badger 2008
   Uses a high value resistor e.g. 10M between send pin and receive pin
   Resistor effects sensitivity, experiment with values, 50K - 50M. Larger resistor values yield larger sensor values.
   Receive pin is the sensor pin - try different amounts of foil/metal on this pin
*/


CapacitiveSensor   cs_4_2 = CapacitiveSensor(4, 2);       // 10M resistor between pins 4 & 2, pin 2 is sensor pin, add a wire and or foil if desired


void setup()
{
  cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
  Serial.begin(9600);
  pinMode(8, OUTPUT);
  digitalWrite(8, 1);

}

void loop()
{
  long start = millis();
  long total1 =  cs_4_2.capacitiveSensor(50);

  Serial.print(total1);                  // print sensor output 1
  Serial.print("\t");
  if (total1 >= 4000)
  {
    digitalWrite(8, 0);
    delay(50);
    digitalWrite(8, 1);
    delay(1000);
  }
  delay(50);
}

En Pin 8 c’est donc le pilotage de mon relais, sur lequel j’ai la bobine de mon télérupteur pris sur le commun, et le NO du relais

Pin 4 et 2 c’est mon capteur, avec le Pin 2 comme Sensor.

J’ai pensé à un reset_CS_AutoCal() dans mon if, non ?

le code envoie une impulsion effectivement à chaque fois que le seuil est dépassé et vous avez une attente active de 1s qui correspond sans doute au temps que vous mettez pour relâcher le bouton. essayez avec une attente active de relâchement pour être sûr que le bouton a été relâché

#include <CapacitiveSensor.h>
CapacitiveSensor   cs_4_2 = CapacitiveSensor(4, 2);       // 10M resistor between pins 4 & 2, pin 2 is sensor pin, add a wire and or foil if desired

const byte pinRelai = 8;

void setup() {
  pinMode(pinRelai, OUTPUT);
  digitalWrite(pinRelai, HIGH);
  cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
}

void loop() {
  if (cs_4_2.capacitiveSensor(50) >= 4000) {
    digitalWrite(pinRelai, LOW);
    delay(50);
    digitalWrite(pinRelai, HIGH);
    while (cs_4_2.capacitiveSensor(50) >= 4000); // on attend le relâchement
    delay(500);
  }
  delay(50);
}

effectivement je n’avais pas pensé à ça vu que ma valeur redescendait aux alentours des 2000 puis elle avait un pic supérieur à ma valeur.
J’essayerais ça quand même, malgré avoir mis un : cs_4_2.reset_CS_AutoCal(); et une réinitialisation de mon total1 à 0, et je n’ai plus le problème.
Et oui la seconde de delay était pour éviter l’anti rebond et de “jouer” avec la lumière.
Merci pour votre aide.