Site icon AranaCorp

Utilisation d’un Capteur capacitif avec Arduino

Les capteurs capacitifs sont couramment utilisés notamment pour la détection d’objet. Il permettent, par exemple, de détecter le passage d’un objet sur un tapis roulant ou encore de repérer le niveau d’un liquide dans un réservoir. Plus proche de nous, les capteurs capacitifs sont utilisés dans les écrans tactiles ou encore comme interrupteur. Dans ce tutoriel nous allons voir comment créer une capteur capacitif à l’aide d’un simple conducteur et d’un microcontrôleur.

Matériel

Principe de fonctionnement

Un capteur capacitif fonctionne comme une antenne qui génère un champ électrique. Lorsqu’un matériau se rapproche de l’antenne, il va modifier la capacité de ce champ. Le microcontrôleur capte cette différence et peut déterminer la proximité de l’objet. Avec cette technologie, il est possible de transformer n’importe quel objet conducteur en capteur.

Schéma

Pour créer un capteur de toucher sur une carte Arduino. Il vous faudra un résistance et un câble et/ou de la peinture conductrice. La résistance relie la broche de mesure avec la broche de référence et le câble part de la broche de mesure jusqu’à une feuille d’aluminium, de la peinture conductrice ou autre. La valeur de la résistance va définir la sensibilité du capteur. Plus la valeur de résistance est grande, plus le capteur sera capable de détecter un objet de loin. Nous utilisons une résistance de 1MOhm mais vous pouvez choisir la plus adaptée à votre application entre 500k et 40Mohm.

Il existe des microcontrôleur comme les NodeMCU (ESP8266 ou ESP32) possédant des capteurs de toucher intégrés. Dans ce cas, un simple conducteur connecté à la broche suffit pour créer un capteur capacitif.

Code

Pour utiliser l’objet Capacitive nous utilisons la librairie CapacitiveSensor.h. Pour initialiser le capteur, il faut préciser les broches utilisées (ici, 2 et 3). Il est possible d’ajuster la sensibilité du capteur lors de la fonction d’appel cs.capacitiveSensor(sensitivity). Pour avoir plus de maitrise sur la précision du capteur nous utilisons une moyenne glissante gérée par la fonction smooth() afin de filtrer les mesures du capteurs.

//Libraries
#include <CapacitiveSensor.h>//https://github.com/PaulStoffregen/CapacitiveSensor

//Parameters
bool autocal  = 0;
const int numReadings  = 10;
long readings [numReadings];
int readIndex  = 0;
long total  = 0;
const int sensitivity  = 1000;
const int thresh  = 200;
const int csStep  = 10000;
CapacitiveSensor cs  = CapacitiveSensor(2, 3);

void setup() {
  //Init Serial USB
  Serial.begin(9600);
  Serial.println(F("Initialize System"));
  //Init cs
  if (autocal == 0) {
    {
      cs.set_CS_AutocaL_Millis(0xFFFFFFFF);
    }
  }
}

void loop() {
  Serial.println(smooth());
}

long smooth() { /* function smooth */
  ////Perform average on sensor readings
  long average;
  // subtract the last reading:
  total = total - readings[readIndex];
  // read the sensor:
  readings[readIndex] = cs.capacitiveSensor(sensitivity);
  // add value to total:
  total = total + readings[readIndex];
  // handle index
  readIndex = readIndex + 1;
  if (readIndex >= numReadings) {
    readIndex = 0;
  }
  // calculate the average:
  average = total / numReadings;

  return average;
}

Applications

Sources

Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie

Quitter la version mobile