Edoardo Vignali
Arduino e libreria CapSense
Tutorials -
Martedì 03 Agosto 2010 17:04
Scritto da Edoardo Vignali

CapSense

La libreria CapSense ci permette di trasformare il nostro arduino in un rivelatore di prossimità di esseri umani, libreria trasformerà il nostro arduino in un sensore capacitivo in grado di sentire la capacità elettrica del corpo umano. Questo principio fisico ha trovato un'applicazione pratica nello strumento di Theremin che è diventato famoso per aver fatto parte della colonna sonore del celebre film Frankenstein Junior. Eccovi un esempio:

Tornando al nostro arduino, installate questa libreria in libraries e adesso vi illustrerò i metodi:

  • CapSense CapSense(byte sendPin, byte receivePin)

Viene creata un istanza dalla libreria capsense, sendPin e receivePin sono i pin a cui sarà collegata la resistenza e il filo di rame con il foglio di alluminio che sarà il sensore vero e proprio.

  • long capSenseRaw(byte samples)

Restituisce un parametro che indicherà la capacità assoluta. Il parametro sample servirà ad avere una risoluzione maggiore appesantendo il lavoro del nostro microcontrollore. Il valore restituito dalla funzione non sarà la media del totale dei campione, ma sarà la sommatoria dei campioni misurati. capSenseRaw restituirà -2 se il tempo impiegato per misurare il nostru numero di samples supererà  il valore di CS_Timeout_Millis . Il valore di CS_Timeout_Mill di default è di 2 secondi.

  • long capSense(byte samples)

capSense richiede un parametro e restituirà sottoforma di long la capacità misurata. capSense tiene traccia del più basso valore misurato (ovvero la Baseline, quindi probabilmente sarà quello in cui saremo più lontani e sarà costituito prevalentemente da rumore), e lo sottrae agli altri valori.  La Baseline viene ricalibrata ogni 20 secondi, è possibile disattivarla con il metodo set_CS_AutoCal() posto alto quindi HIGH.

  • void reset_CS_AutoCal()

Chiamando questo metodo si forza l'autocalibrazione.

  • set_CS_Timeout_Millis void (timeout_millis unsigned long);

Setta il tempo di timeout della funzione capSense.

  • void set_CS_AutocaL_Millis(unsigned long autoCal_millis)

Serve per impostare il tempo di timeout della funzione AutoCal, posto a "0xFFFFFFFF" si disabiliterà l'autocalibrazione.

La scelta della resistenza non è banale infatti dovremo sceglierla da:

  • circa 1Mohm e per attivare il nostro arduino dovremo proprio toccare il nostro sensore
  • 10Mohm inizieremo a sentire la presenza umana dai 10 ai 15 cm.
  • 40Mohm la sensibilità è altissima, riusciremo a sentire la presenza umana dai 30 ai 40 cm.

In generale vengono utilizzate resistenze da 10Mohm, inoltre è molto importante che il vostro arduino sia messo ben a massa. Quando eseguite il programma tenete il vostro arduino lontano dal pc, che tende a influenzare il comportamento del sensore e alimentatelo con un alimentatore esterno. Inoltre si possono connettere ad arduino più sensori.

/*
 * 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
 * Best results are obtained if sensor foil and wire is covered with an insulator such as paper or plastic sheet
 */


CapSense   cs_4_2 = CapSense(4,2);        // 10M resistor between pins 4 & 2, pin 2 is sensor pin, add wire, foil
CapSense   cs_4_5 = CapSense(4,5);        // 10M resistor between pins 4 & 6, pin 6 is sensor pin, add wire, foil
CapSense   cs_4_8 = CapSense(4,8);        // 10M resistor between pins 4 & 8, pin 8 is sensor pin, add wire, foil

void setup()                    
{

   cs_4_2.set_CS_AutocaL_Millis(0xFFFFFFFF);     // turn off autocalibrate on channel 1 - just as an example
   Serial.begin(9600);

}

void loop()                    
{
    long start = millis();
    long total1 =  cs_4_2.capSense(30);
    long total2 =  cs_4_5.capSense(30);
    long total3 =  cs_4_8.capSense(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.print(total2);                  // print sensor output 2
    Serial.print("\t");
    Serial.println(total3);                // print sensor output 3

    delay(10);                             // arbitrary delay to limit data to serial port 
}

Tratto dal playground inglese di arduino

CC

 

Gioblu Robotics © 2010 - 2012 · Sitemap · privacy

gioscarab@gmail.com

Gioblu BOTServer è online dal 10 Aprile 2010 - 319.232 Visite - 1.027.175 Pagine visualizzate - 182.309 Visitatori unici - 536 utenti attivi