venerdì 2 febbraio 2018

Pulsanti e Resistenze di Pull Up-Down con Arduino







In questo post tratto un tema base per chi si avvicina ad Arduino ed in particolare come leggere correttamente lo stato di un pulsante ed accendere un led di conseguenza.

Il tema puo' sembrare banale ma ho visto sul gruppo Facebook che moltissime persone che si avvicinano ad Arduino non hanno ben chiaro il concetto di Resistenza di Pull-Up e di Pull-Down.

In questo post spiego questo concetto e lo applico ad un pulsante. 

Questo e' un concetto base che poi e' utilizzato in altri scenari nell'uso di Arduino e nella realizzazione di progetti.


Alta Impedenza

Quando in uno sketch impostiamo (tipicamente nel setup) un digital pin a input




Il pin in questione viene portato in uno stato di Alta Impedenza,  come se in serie al pin ci sia una resistenza da 100 MOhM. In tale stato il pin in ingresso richiede una piccolissima corrente per cambiare stato logico.

In altre parole il pin in alta impedenza si comporta come una "semplicissima "antenna" e puo' captare qualsiasi tipo di rumore o perturbazione e di conseguenza cambiare stato logico in maniera casuale e non controllabile.




Per esempio nel codice qui sopra in cui accendiamo un led in base allo stato di un pulsante, non riusciremo a raggiungere l'effetto desiderato in quanto il led si accenderà' anche senza una pressione del pulsante.


Pull-Up e Pull-Down

Il problema sopra evidenziato si risolve collegando opportunamente una resistenza al pin in question.







Piu' nello specifico ci sono due configurazioni possibili:

  • Pull-Up: si inserisce un'opportuna resistenza (10-100K Ohm) tra il piedino e l'alimentazione (VCC)
  • Pull-Down:si inserisce un'opportuna resistenza (10-100K Ohm) tra il piedino e la massa (GND)


Vediamo piu' in dettaglio il funzionamento (la linea blu rappresenta il flusso di corrente).





Pull-Up


In questo caso si vede che con il pulsante OFF (non premuto) il pin assume stato logico stabile 1 (HIGH).
Contrariamente al caso in cui la resistenza non e' presente lo stato logico 1 permane all'ingresso del pin di arduino in modo stabile e permanente.





In questo caso si vede che alla pressione del pulsante la corrente fluisce verso massa portando il pin allo stato logico 0 (LOW).

Pull-Down





In questo caso si vede che con il pulsante OFF (non premuto) il pin assume stato logico stabile 0 (LOW).
Contrariamente al caso in cui la resistenza non e' presente lo stato logico 0 permane all'ingresso del pin di arduino in modo stabile e permanente.






In questo caso si vede che alla pressione del pulsante la corrente fluisce verso massa portando il pin allo stato logico 1 (HIGH).



Circuito con Pulsante e resistenza di Pull-Up

Qui il classico schema elettrico per il collegamento di un pulsante ad arduino in modo corretto (a meno del bouncing)





Qui lo schema su breadboard





Qui un semplice codice di test.





Circuito con Pulsante e resistenza di Pull-Down

Qui il classico schema elettrico per il collegamento di un pulsante ad arduino in modo corretto (a meno del bouncing)



Qui lo schema su breadboard






Qui un semplice codice di test







Circuito con Pulsante senza Resistenza

Ora che il concetto di Pull-Up e Pull-Down e' chiaro possiamo sfruttare una caratteristica del micro Atmel 328 (quello di arduino).
In particolare questo micro controllore fornisce internamente per ogni pin di I/O digitale una resistenza di Pull-Up.

Questo e' un grande vantaggio in quanto ci permette di risparmiare una resistenza e di semplificare il nostro circuito.

Qui il classico schema elettrico per il collegamento di un pulsante ad arduino in modo corretto (a meno del bouncing) senza resistenza di Pull.









Qui un semplice codice di test



Come si vede basta durante la configurazione del pin di input usare il valore INPUT_PULLUP e la resistenza interna al micro viene abilitata.

Si fa notare che la resistenza interna e' solo di Pull-UP.
Se si vuole usare la configurazione Pull-Down e' necessario inserire la resistenza esternamente come mostrato sopra.

Spero con questo post di fare un po' di chiarezza per chi e' alle prime armi e non ha le nozioni base di elettronica ed elettrotecnica.