El sensor capacitivo, tiene la peculiaridad de funcionar con multitud de materiales, metales y no metales, debido a que se caracterizan por medir la capacitancia o las diferencias de en la misma. Es decir, que funciona como un condensador.
Se suele definir un condensador como dos placas metálicas separadas por un dielectro. Basándonos en esto se pueden crear sensores que detecten que un ser humano lo está activando sin necesidad de llegar a tocar la placa metálica que forma parte del sensor.
Esta característica hace que se pueda colocar materiales no conductores como polímeros o cerámicos sobre el sensor sin casi afectar a su comportamiento.
Crear un sensor táctil capacitivo con Arduino es sumamente sencillo. Se necesitan 4 componentes:
- Una resistencia de 100 KΩ o superior.
- Un condensador de aproximadamente 100 pF.
- Un trozo de material conductor, como por ejemplo papel de aluminio.
- Cable.
¿Librerías?
La respuesta es afirmativa, como ya sabrás podemos hacer todo lo que queramos sin librerías, pero si simplificamos el proceso, una vez que entendemos como funciona el circuito, mejor que mejor.
Vamos a usar la librería «CapacitiveSensor» que nos permitirá un control absoluto y fácil del sensor capacitivo. Recuerda que puedes acceder al repositorio de GitHub de la librería desde aquí.
El sensor capacitivo, funcionar, funciona, pero ¿cómo?
La librería usa dos pines para cada sensor, el denominado Sender (transmisor) y el Recieve (receptor). Aunque en realidad el primero puede ser compartido por varios sensores. Cuando se produce un cambio de voltaje en el pin sender este cambio se encuentra con un circuito RC y por tanto el cambio no será tan inmediato como a priori podíamos pensar.
Recordemos que una de las peculiaridades de los condensadores es que si variamos la tensión en sus terminales, este generará un transitorio de carga/descarga que evitará que la tensión cambie bruscamente.
Por tanto el tiempo que tardará el pin Recieve en alcanzar la tensión del pin Sender dependerá de la capacidad del condensador del circuito RC, y ¿cuánto vale la capacidad del condensador? Si conectamos el condensador de 100pF, está será la capacidad. El truco viene cuando acercamos la mano al sensor, el cuerpo actuará como un condensador y modificará el valor de capacidad. De este modo si se mide el valor de capacidad antes de tocar y durante, observaremos una variación y es esta variación la que nos permite saber si estamos tocando el sensor o no.
Llegados a este punto, puede surgir una duda, ¿qué nos interesa conocer, el valor de capacidad o su variación? En este caso como buscamos un resultado binario (está la mano sobre el sensor o no lo está) nos interesa la variación entre los dos estado. Si bien es cierto que en otras circunstancias nos puede interesar obtener un valor analógico, lo que se complica bastante, puesto que realmente es un poco difícil dar un valor que represente la capacidad.
Y todo esto, ¿para qué?
Imagina que tienes que activar la iluminación o sonido de una piscina y quieres poner una botonera al borde de la piscina ¿pondrías botones mecánicos?
Probablemente yo lo haría, buscaría una caja estanca y en la cara interior de la tapa pondría los sensores capacitivos conectados a un micro que controlara transistores, triacs, reles, … que controlen lo que necesitemos y sobretodo que estén alejados del agua.
Y como este ejemplo lo que se te ocurra, una botonera secreta, oculta, que solo tú sabes que existe y que está tras un espejo. Un sensor colocado en el interior de la caja de un proyecto por mera estética, … el límite es tu imaginación, así que a pensar.
Código para leer un sensor capacitivo DIY
Con el siguiente código para Arduino puedes replicar el ejemplo de un solo sensor capacitivo. Se imaginativo, lee, el código, investiga y aprende como funciona y podrás escalarlo.
#include <CapacitiveSensor.h> //Crear e indicar pines del sensor //4 -> Sender 3 -> Receiver CapacitiveSensor sensor = CapacitiveSensor(4,3); void setup() { //Pin 12 (led) como salida pinMode(12,OUTPUT); } void loop() { //Almacenar lectura del sensor en una variable long lectura = sensor.capacitiveSensor(30); //Comparar lectura if(lectura > 1) digitalWrite(12,HIGH); else digitalWrite(12,LOW); delay(10); }
Voy a ser bueno y también te dejo el código de la Marcha Imperial. Ya sabes, el límite, tu imaginación.
#include <CapacitiveSensor.h> #define c 261 #define d 294 #define e 329 #define f 349 #define g 391 #define gS 415 #define a 440 #define aS 455 #define b 466 #define cH 523 #define cSH 554 #define dH 587 #define dSH 622 #define eH 659 #define fH 698 #define fSH 740 #define gH 784 #define gSH 830 #define aH 880 int altavoz = 11; CapacitiveSensor ca = CapacitiveSensor(8,2); CapacitiveSensor cf = CapacitiveSensor(8,3); CapacitiveSensor cch = CapacitiveSensor(8,4); CapacitiveSensor ceh = CapacitiveSensor(8,5); CapacitiveSensor cfh = CapacitiveSensor(8,6); CapacitiveSensor cgs = CapacitiveSensor(8,7); void setup() { pinMode(altavoz, OUTPUT); } void loop() { long ba = ca.capacitiveSensor(30); long bf = cf.capacitiveSensor(30); long bch = cch.capacitiveSensor(30); long beh = ceh.capacitiveSensor(30); long bfh = cfh.capacitiveSensor(30); long bgs = cgs.capacitiveSensor(30); if(ba > 10) tone(altavoz, a, 10); else if(bf > 10) tone(altavoz, f, 10); else if(bch > 10) tone(altavoz, cH, 10); else if(beh > 10) tone(altavoz, eH, 10); else if(bfh > 10) tone(altavoz, fH, 10); else if(bgs > 10) tone(altavoz, gS, 10); delay(10); }