Arduino e sensori digitali

Da GolemWiki.
Jump to navigation Jump to search

Pulsante-arduino.gif Stai leggendo la guida "Arduino"


Impostando i piedini digitali in lettura (INPUT), si possono collegare dei sensori e leggerne lo stato: se sul piedino è presente una tensione compresa fra 2.5 e 5 V viene letto HIGH, se la tensione è inferiore invece LOW.
Il bottone, o pushbutton, è uno dei sensori più semplici: premendolo i suoi piedini entrano in conduzione, altrimenti rimangono isolati. Una volta inserito nella breadboard, collegalo come nello schema sotto:

Arduino-bottone-schema.gif

Come funziona?

I collegamenti dovrebbero essere chiari: il bottone è collegato a 5v da una parte e al piedino digitale dall'altra. Se lo premi, Arduino legge HIGH, altrimenti LOW. Ma allora a cosa serve la resistenza? Quando il bottone non è premuto non è detto che venga letto LOW, perché il piedino è scollegato e qualsiasi corrente elettrostatica, come una scintilla che si scarica dalla nostra mano sul filo, può "sporcare" il segnale rendendolo fluttuante. Con la resistenza, invece, il piedino rileva una piccola corrente da massa, tanto quanto basta per tenere stabile il segnale a LOW: siccome tiene basso il segnale la resistenza è detta di pull-down. Quando invece il pulsante è premuto il piedino rileva lo stato HIGH e la resistenza evita un corto circuito.

Arduino-pullup-schema.gif

Se c'è la resistenza di pull-down, ci sarà anche la resistenza di pull-up: è collegata alla tensione positiva invece che a massa. Di conseguenza l'altro piedino del bottone sarà collegato a massa.

Di solito le resistenze di pull-up e pull-down hanno valore alto, circa 1KΩ-10KΩ.

Altri interruttori

Arduino-reed-tilt.gif

Oltre ai pushbutton ci sono altri sensori simili, ad esempio il tilt: un cilindretto metallico con una pallina all'interno e due piedini. Se lo si capovolge la pallina cortocircuita i piedini. Un altro sensore interessante è il reed: una fialetta con all'interno due lamine metalliche molto vicine che entrano in contatto avvicinando una calamita al sensore.

Il programma

//bottone.ino
const short led2 = 13;
const short led1 = 12;
const short bottone = 2;
void setup() {
	pinMode(led1,OUTPUT);
	pinMode(led2,OUTPUT);
	pinMode(bottone,INPUT);
}
void loop() {
if (digitalRead(bottone) == HIGH) {
	digitalWrite(led1,HIGH);
	digitalWrite(led2,LOW);
	}
else {
	digitalWrite(led1,LOW);
	digitalWrite(led2,HIGH);
	}
}

Il listato è molto simile a quello dei due LED che si accendono e si spegnono: la differenza è che stavolta puoi controllare tu lo stato dei LED attraverso il bottone. Per poter leggere dal piedino 2 devi impostarlo nel setup() come input, con l'istruzione pinMode(bottone,INPUT). A questo punto, per leggere lo stato del piedino durante l'esecuzione del programma si utilizza la funzione digitalRead(bottone);. Se usi una resistenza di pull-down, premendo il bottone il LED sulla breadboard si accende e quello sulla scheda si spegne; se provi a cambiare lo schema usando quella di pull-up il programma funzionerà al contrario.