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
- Ordinateur
- Arduino UNO
- Câble USB A Mâle/B Mâle
- Câble Dupont
- Résistance 1Mohm
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
- Créer un interrupteur tactile
- Créer un capteur de toucher ou de proximité
- Utilisation d’un touch sensor ESP32/ESP8266
Sources
- https://github.com/PaulStoffregen/CapacitiveSensor
- https://www.aranacorp.com/fr/implementation-de-la-moyenne-glissante-dans-arduino/
Retrouvez nos tutoriels et d’autres exemples dans notre générateur automatique de code
La Programmerie