Publicado por el 11 junio, 2016 2 comentarios
Dificultad bajaComplejidad baja
CC BY-SA 4.0

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. Se suele definir un condensador como dos placas metálicas separadas por un dielectro y esta es la ventaja, 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, se puede colocar materiales no conductores como polímeros o cerámicos entre el sensor y por ejemplo la mano.



Crear un sensor táctil capacitivo con Arduino es sumamente sencillo, se necesitan 4 componentes, una resistencia de 100KΩ o superior, un condensador de aproximadamente 100pF, un trozo de material conductor, como por ejemplo papel de aluminio y algo de 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.

CapacitorTransient Fuente:Wiikipedia

CapacitorTransient Fuente:Wiikipedia

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, pero cuando acercamos la mano al sensor, el cuerpo actuará como un condensador y modificará el valor de C. 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 estados, si bien es cierto que en otras circunstancias nos puede interesar obtener un valor analógico, eso 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/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

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);                       
}	 

[adsense_final]

Sobre el autor
Enrique Gómez
Amante de la ingeniería electrónica, de la comunicación audiovisual y de la divulgación ingenieril y científica. Friki de Star Wars desde el principio. Puedes saber más sobre mi y sobre mis trabajos en enrique.rinconingenieril.es
Artículos relacionados
Deja un comentario