Sensore touch capacitivo – Arduino

In questo tutorial vi mostrerò come creare un sensore touch capacitivo con arduino.  Immaginiamo che bello poter arrivare a casa e dover accendere la luce solo sfiorando con un dito una piccola porzione di muro, che ha al suo interno un interruttore nascosto, quello di cui sto parlando è di creare un pulsante capacitivo in grado di far accendere e spegnere una luce in una stanza. L’ideatore di questo progetto è Paul Bagder, il concetto che sta alla base di tutto il progetto è data dallo strumento Theremin, che è quello strumento musicale che si suona avvicinando e allontanando le mani da un’asta di ferro.

Il funzionamento di questo progetto è semplicissimo, in pratica riesce a rilevare la presenza di carica su un corpo nelle sue vicinanze e ne calcola la sua capacità complessiva.

Prima di incominciare a realizzare il progetto abbiamo bisogno della libreria scritta da Paul Bagder, scaricabile a questo indirizzo LINK.

Oltre alla libreria c’è anche una descrizione dettaglia del suo utilizzo e del principio di funzionamento di questo tipo di sensore compreso la sintassi utilizzata per richiamare le varie funzioni al suo interno.

Quindi una volta scaricato il file, aprite l’archivio, estraete le due cartelle denominate CapacitiveSensorCapacitiveSensorDue e copiatele nella directory libraries di Arduino,

ovvero in C:\ProgramFiles\Arduino\libraries. Ora siamo pronti per realizzare il progetto 😉

Innanzitutto abbiamo bisogno di alcuni materiali:

  • Arduino (Va bene qualsiasi versione)
  • Un led
  • Una resistenza nell’ordine dei Mega ohm
  • Dei cavi elettrici
  • Un foglio di alluminio

Per farvi capire il funzionamento del sensore ho realizzato 2 esempi.

Primo esempio:

Ecco il circuito da realizzare:

Sensore capacitivo

In questo circuito come notate ho collegato una resistenza tra il PIN 2 e 4, un led tra il 13 e GND (è consigliabile inserire una piccola resistenza tra il led e il PIN 13 in modo da non farlo bruciare) ed un filo collegato in questo modo:  un’estremità al PIN 2 e l’altra estremità (scoperta) va messa in mezzo ad un foglio di alluminio. Riguardo la resistenza voglio precisare che più è grande il valore di resistenza più è sensibile il nostro sensore alla nostra presenza, il che significa che se noi ad esempio mettiamo una resistenza nell’ordine dei 10 – 20 Mega ohm il sensore ci rileva la presenza della mano ad una distanza di qualche cm dal sensore. In questo tutorial ho utilizzato una resistenza da 2,2 Mega ohm.

Il funzionamento di questo programma di esempio è semplice: in pratica il led si accende quando avviciniamo la mano al sensore e si spegne quando la allontaniamo.

Ecco lo sketch da caricare su arduino:

// www.giuseppecaccavale.it
// By Giuseppe Caccavale
#include <CapacitiveSensor.h>

int led=13;
CapacitiveSensor   cs_4_2 = CapacitiveSensor(4,2);

void setup()                    
{
  pinMode(led, OUTPUT);
  cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
}

void loop()                    
{
    long total1 =  cs_4_2.capacitiveSensor(30);

if (total1>100)
{
digitalWrite(led,HIGH);
}else
{digitalWrite(led,LOW);
}
    delay(10);
}

Spiegazione del programma:

CapacitiveSensor   cs_4_2 = CapacitiveSensor(4,2);

Questa stringa ci indiica dove viene collegata la resistenza, nel nostro caso tra il pin 4 e il pin 2, ovviamente questi due valori possono essere cambiati, l’importante e che siano PIN digitali.

 

cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);

Serve per impostare il tempo di auto calibrazione del sensore, ponendo la funzione in questo modo viene disattivata l’auto calibrazione del sensore.

 

long total1 =  cs_4_2.capacitiveSensor(30);

Questa variabile registra la capacita totale misurata sommando 30 campioni, anche qui il 30 può essere cambiato come si vuole.

Secondo esempio:

Ecco il circuito da realizzare:

Sensore capacitivo 2

 

In questo esempio accenderemo il led con il sensore 1 e lo spegneremo con il sensore. 2

I collegamenti e la funzionalità sono gli stessi del circuito precedente cambia solo il programma da caricare.

Sketch:

// www.giuseppecaccavale.it
// By Giuseppe Caccavale
#include <CapacitiveSensor.h>

int led = 13;
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2);
CapacitiveSensor cs_7_5 = CapacitiveSensor(7,5);

void setup() 
{
pinMode(led, OUTPUT);
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example
}

void loop() 
{
long total1 = cs_4_2.capacitiveSensor(30);
long total2 = cs_7_5.capacitiveSensor(30);

if (total1>100)
{
digitalWrite(led,HIGH);
}

if (total2>100)
{
digitalWrite(led,LOW);
}
delay(10);
}

 

Terzo esempio:

Ecco a voi un altro esempio semplice.

Accendere un led con lo stesso sensore, il circuito è lo stesso del primo esempio, ecco lo sketch da caricare:

// www.giuseppecaccavale.it
// By Giuseppe Caccavale
#include <CapacitiveSensor.h>
int statoLed = LOW;
int led = 13;
CapacitiveSensor cs_4_2 = CapacitiveSensor(4,2);

void setup() 
{
pinMode(led, OUTPUT);
cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF); // turn off autocalibrate on channel 1 - just as an example
}

void loop() 
{
long total1 = cs_4_2.capacitiveSensor(30);

if (total1 > 100){
if (statoLed == LOW){ 
statoLed = HIGH;
digitalWrite(led, statoLed);
delay(200);} 
else{ 
statoLed = LOW;
digitalWrite(led, statoLed);
delay(200);
}
}
delay(10);
}