Visualizzazione post con etichetta pulsante. Mostra tutti i post
Visualizzazione post con etichetta pulsante. Mostra tutti i post

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.





lunedì 28 dicembre 2015

Scratch e Arduino - Progetto #3: Il pulsante

Nei primi due progetti abbiamo acceso dei led tramite una scrittura di un valore su un pin digitale di arduino.In questo terzo progetto vediamo come effettuare una lettura digitale dello stato di un pulsante ed in generale di un pin digitale di arduino.


Obiettivi del progetto

Far accendere un led in conseguenza della pressione di un pulsante.

Lista Componenti

Vediamo di cosa abbiamo bisogno per eseguire il progetto.


Scheda Arduino
Breadboard

Pulsante per breadboard



1x Led

1x Resistenze da 220 ohm 



1x Resistenza da 100 Kohm


Fili Maschio-Maschio




Circuito e collegamenti

Qui lo schema dei collegamenti da realizzare. Ho usato il software Fritzing per rappresentare gli schemi di collegamento.






E qui la realizzazione su breadboard del circuito















Il circuito e' composto da due parti

  • connessioni per accensione led (come nei progetti precedenti)
  • connessioni per lettura stato pulsante

Come si vede il led e' collegato al piedino digitale 3 di arduino.
Come si vede il pulsante quando premuto collega i due piedini (normalmente un pulsante da breadboard ne ha 4, ma sono collegati a due a due) comportandosi cosi' come un filo. Questo ci permette di interrompere o di chiudere il circuito.

Un piedino del pulsante e' collegato al pin di arduino  +5V tramite il filo arancione. Il secondo piedino e' collegato al piedino GND di arduino tramite una resistenza (100 Kohm). Un capo della resistenza e' collegato al piedino 8 di arduino tramite un filo blue. Questo ci serve per permettere ad arduino di leggere lo stato del pulsante.

Questa resistenza si chiama resistenza di pull-down (per chi e' interessatu qui piu' dettagli) e ci serve per far leggere ad arduino uno stato logico LOW quando il pulsante e' rilasciato o non premuto.

Come si vede nel caso che il pulsante non sia premuto il pin 8 di arduino e' collegato tramite il filo blu alla resistenza che e' collegata tramite il filo nero a GND. Quindi il pin 8 e' effettivamente collegato a GND (LOW).

Al contrario quando il pulsante viene premuto i due piedini vengono cortocircuitati e quindi ai capi del filo blue ci sono +5V (HIGH) provenienti da arduino tramite il filo arancione.

In questo modo in funzione della pressione o rilascio del pulsante sul piedino 8 di arduino ci saranno +5V (HIGH) o GND (LOW). Non ci resta che leggere il valore del piedino 8 tramite il software per rilevare lo stato del pulsante.


Programma Scratch

Adesso che il circuito e' completo, passiamo alla parte software.
In sostanza dobbiamo accendere e spegnere i led in funzione dello stato del pulsante.

Codice base


Crea questo script in Scratch usando il mouse






Adesso vediamo cosa fa il programma scratch descrivendo i vari blocchetti dall'alto al basso:





Come nel primo esercizio connettiamo il ledA al pin digitale numero 3 di arduino. Siccome abbiamo associato un led al pin 3, scratch capisce che questo pin deve essere impostato come un'uscita (OUTPUT) e quindi scrivere un valore (HIGH/LOW)




In maniera simile, assiciamo il pulsanteA al pin digitale 8 di arduino.  Siccome abbiamo associato un pulsant al pin 8, scratch capisce che questo pin deve essere impostato come un ingresso (INPUT) e quindi leggere un valore (HIGH/LOW)

Questo e' il blocco principale che e' all'interno di un ciclo per sempre. Per prima cosa verifichiamo se il pulsante A e' stato premuto? Se si allora impostiamo il ledA a acceso di fatto accendento il led. Se no allora spegniamo il led (imposta led A a spento)


Come vedete il programma e' molto semplice, ma allo stesso tempo ci permette di imparare come leggere il valore di un pin digitale (pulsante) ed eseguire una logica per impostare il valore di un altro pin digitale (led).
Queste operazioni per quanto basilari sono utilissime in moltissimi progetti Arduino.

In questo progetto hai anche appreso l'utilizzo del costrutto condizionale (se - allora - altrimenti) che sara' utile in moltissimi altri progetti arduino.

Una volta fatto click sulla bandierina verde il programma inizia controllando lo stato del pulsante periodicamente ed accendendo o spegnendo il led di conseguenza.







Complimenti!!! Adesso possiamo pilotare arduino tramite la pressione di un pulsante!!!