Arduino tiene activa la salida del pin D5 que da voltaje a las dos arandelas a través de dos resistencias de 6,8 MOhms y detecta el voltaje recibido por los pin D4 y D6 cuando se acerca el dedo a las arandelas. Los pin D4 y D6 están protegidos por una resistencias de 1 KOhm para proteger de los picos de la electricidad estática.
Al pulsar o acercar el dedo a las arandelas, debido a la electricidad estática del cuerpo, en los pin D4 y D6 se recibe la variación de voltaje.
Se puede usar cualquier otro metal que no sean arandelas.
Las resistencias de 6,8 MOhms se pueden sustituir por otros valores entre 100.000 Ohms y 10.000.000 Ohms. Cuanto mayor sea la resistencia se aumenta la sensibilidad y se hace más lenta la detección.
Vídeo del funcionamiento de este montaje (Archivo MP4. Tamaño: 3,2 MB)
Este montaje se ha realizado en base al descrito en la página PJRC de Paul Badger:
https://www.pjrc.com/teensy/td_libs_CapacitiveSensor.html
Para probar el funcionamiento de este sensor se ha utilizado el Arduino Nano y el mismo programa de ejemplo que ofrece esa página web con alguna ligera modificación en cuanto a los pins del Arduino que se utilizan y que se usan solo 2 sensores.
#include/* * 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_5_4 = CapacitiveSensor(5,4); // 10M resistor between pins 5 & 4, pin 4 is sensor pin, add a wire and or foil if desired CapacitiveSensor cs_5_6 = CapacitiveSensor(5,6); // 10M resistor between pins 5 & 6, pin 6 is sensor pin, add a wire and or foil // CapacitiveSensor cs_5_8 = CapacitiveSensor(5,8); // 10M resistor between pins 5 & 8, pin 8 is sensor pin, add a wire and or foil #define LED1_PIN 9 #define LED2_PIN 10 void setup() { pinMode(LED1_PIN, OUTPUT); pinMode(LED2_PIN, OUTPUT); //cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example //cs_4_6.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example Serial.begin(115200); } void loop() { long start = millis(); long total1 = cs_5_4.capacitiveSensor(30); long total2 = cs_5_6.capacitiveSensor(30); // long total3 = cs_5_8.capacitiveSensor(30); Serial.print(millis() - start); // check on performance in milliseconds Serial.print("\t"); // tab character for debug windown spacing Serial.print(total1); // print sensor output 1 Serial.print("\t"); Serial.println(total2); // print sensor output 2 // Serial.print("\t"); // Serial.println(total3); // print sensor output 3 if (total1 > 200) { digitalWrite(LED1_PIN, HIGH); } else { digitalWrite(LED1_PIN, LOW); } if (total2 > 200) { digitalWrite(LED2_PIN, HIGH); } else { digitalWrite(LED2_PIN, LOW); } delay(10); // arbitrary delay to limit data to serial port }
Pulsa aquí para descargar el código "sensores-capacitivos-con-arandelas.ino"




