Apri/Chiudi


Arduino Duemilanove: il pulsante

4 febbraio 2009 , di Boliboop

In questo nuovo articolo affronteremo la prima interazione Arduino-uomo, usando un pulsante che, quando premuto, invia un segnale ad Arduino. Il software che caricheremo, quando riceverà questo segnale, deciderà di accendere il led rosso.

Il pulsante (o pushbutton) è un componente che, quando premuto, connette due punti del circuito. Ci sono 5 pushbutton nel KIT Workshop che abbiamo acquistato all’inizio di questo viaggio alla scoperta di Arduino e ognuno di questi ha il seguente schema costruttivo:

pushbutton

In pratica i piedini A e C sono sempre connessi fra loro, così come i piedini B e D, mentre se il pulsante viene premuto, sono connessi tra loro tutti i piedini. Come possiamo utilizzare il pushbutton con Arduino? Basta seguire un tutorial, sul sito ufficiale, chiamato appunto Button e che permette di accendere un led quando viene premuto il pulsante. Ecco come si realizza.

Come si realizza questo circuito con pulsante? Colleghiamo il piedino A direttamente a terra (ad esempio uno dei pin etichettati con Gnd nella fila di pin chiamata POWER) e il piedino B prima ad una resistenza da 2.2 KOhm (ecco come è fatta) e poi all’alimentazione da 5 V. Come mostrato nello schema seguente, dobbiamo connettere il piedino B anche con il pin 2 che sarà quello che riceverà il messaggio “pulsante premuto”:

pushbuttoncircuit

Il tutorial originale spiega che la resistenza da 2.2 KOhm ha una funzione cosiddetta di pull-up che serve ad evitare che il segnare sul pin 2 fluttui quando il pin viene disconnesso dal circuito. Durante le mie prove non ho però riscontrato fluttuazioni ma piuttosto, quando ho eliminato la resistenza sostituendola con un collegamento normale, un assorbimento eccessivo di energia che ha fatto decidere al Mac di disattivare momentaneamente la porta USB a cui Arduino era collegato (con conseguente riavvio del dispositivo). Osservando il funzionamento del circuito, che illustrerò qui di seguito, ho idea che la resistenza di pull-up serva sostanzialmente a forzare un livello logico (come il nostro HIGH) quando il circuito è aperto permettendo di andare su LOW non appena si chiude il circuito. Ma vediamo in dettaglio il circuito e di seguito ne illustrerò il funzionamento e il software da utilizzare:

Arduino - pushbutton in funzione

Come funziona esattamente il circuito? Quando il pushbutton è aperto (ovvero, come abbiamo visto prima, non è premuto) non c’è nessuna connessione fra i due piedini che abbiamo usato, il piedino A e il B. In tale situazione (anche se attraverso la resistenza di pull-up) il pin 2 è connesso all’alimentazione da 5 V e quindi Arduino legge il pin ad un livello HIGH. Quando invece il pushbutton è premuto il circuito è chiuso e fra il piedino A e il B si crea una connessione, quindi il pin 2 si trova allo stesso potenziale della terra e Arduino leggerà quindi il valore LOW (ovviamente il pin 2 è ancora connesso con l’alimentazione a 5 V, ma la resistenza interposta fa sì che tale pin sia più vicino alla terra).

Viene a stabilirsi quindi la seguente corrispondenza:

  • Pulsante non premuto -> pin 2 a livello HIGH
  • Pulsante premuto -> pin 2 a livello LOW

A questo punto manca solo il codice da inviare ad Arduino, che non farà altro che ricevere il segnale dal pin 2 e reagire con una istruzione, nel nostro a caso al pin 13:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int ledPin = 13;
int inPin = 2;
int val = 0;
 
void setup() {
  pinMode(ledPin, OUTPUT);
  pinMode(inPin, INPUT);
}
 
void loop(){
  val = digitalRead(inPin);
  if (val == HIGH) {
    digitalWrite(ledPin, LOW);
  } else {
    digitalWrite(ledPin, HIGH);
  }
}

Più in dettaglio, le prime tre righe di codice dichiarano le variabili che impostano il pin 13 come collegamento al led rosso, il pin 2 come pin di entrata del segnale del pulsante, e che infine (con val) impostano il valore iniziale dello status del pin 2 (ovvero del pushbutton).

All’interno del blocco setup() avviene qualcosa di importante, ovvero viene impostato il led 13 come OUTPUT e, per la prima volta, il pin 2 come INPUT.

A questo punto, nel blocco loop(), la prima istruzione, in riga 11, non fa altro che leggere il valore di input, ovvero lo status del pulsante, tramite la funzione digitalRead().

Successivamente il blocco if controlla se il valore di input val è stato letto come HIGH e quindi accende il led rosso (riga 13), altrimenti, lo spegne.

Se volessimo invertire il funzionamento del pushbutton basterebbe scambiare LOW e HIGH nelle righe 13 e 15 del software (senza dover toccare il circuito).

Ma la caratteristica più importante di questo circuito e del software annesso è che le istruzioni di accensione e spegnimento del led sono solamente un esempio e quindi, una volta ricevuto l’input dal dito della persona che ha premuto il pulsante, Arduino può reagire virtualmente in qualsiasi modo. Il limite è il nostro ingegno.

A presto per nuovi articoli su come imparare a usare Arduino!

Articoli correlati:

  1. Arduino Duemilanove: inizia l’avventura
  2. Arduino Duemilanove: espandere Hello, Blink! con una breadboard
  3. Arduino Duemilanove: Hello, Blink!

9 Commenti a “Arduino Duemilanove: il pulsante”

  1. 1

    Stefano ha detto

    Grazie davvero per queste lezioni per imparare ad usare Arduino! L’ho appena comprato per regalarlo al mi’ babbo per la festa del papà, immagino che ne diventerà matto, è uno smanettone d’altri tempi e legge circuiti elettronici come un musicista uno spartito. L’unico mio problema era trovare dei tutorial in italiano per fargli muovere i primi passi, e grazie a te questo problema è risolto!
    Spero pubblicherai presto altri articoli.
    Ancora grazie,
    Stefano

  2. 2

    MarcoP ha detto

    In effetti, oltre al pull-up lo scopo del resistore è proprio quello di evitare il corto circuito tra l’alimentazione e Gnd.. cosa di cui il tuo Mac si accorge immediatamente!
    :wink:

  3. 3

    Marco ha detto

    Complimenti, ottimi post introduttivi, veramente chiari :) spero ne arrivino altri, mi hanno convinto a procurarmi subito un Arduino per smanettarci a più non posso :P

    Marco

  4. 4

    MarcoP ha detto

    In realtà lo scopo del resistore di pull-up, oltre quello di forzare alto l’ingresso, è proprio di evitare il corto circuito tra l’alimentazione 5V e Gnd alla chiusura del pulsante… ci credo che il tuo Mac ha disattivato le uscite!
    :wink:

  5. 5

    luca ha detto

    ringrazio anche io per il tutorial! è davvero ben fatto, il migliore che ho trovato per uno come me che sta iniziando proprio adesso da zero e che si ritrova alla disperata ricerca di tutorial base. Ti faccio i miei complimenti per il blog, spero continui a postare tutorial simili. Resto in attesa

    Ciao,
    Luca

  6. 6

    Realscorpion ha detto

    Ciao io sono tentato all’aquisto di questo arduino… ho visto queste tue guide e sono a dir poco fantastiche.. spieghi in maniera facilissima.. :D Mica potresti fare una guida su come gestire un display? ho visto che c’è una liberia LCDLibrary ma come cavi ecc… non ho capito molto bene :D

  7. 7

    Lario3 ha detto

    Adoro tutti i tipi di pulsanti :-D

    Grazie mille per il commento, CIAO!!!

  8. 8

    gaetano ha detto

    ciao, a quando i prox articoli?…ciao e grazie!!! :wink:

  9. 9

    paolo ha detto

    ciao, sono Paolo e sto seguendo questo tutorial con tutti i tuoi articoli; sono un patito di ferromodellismo e sto cominciando a provare un po’ di circuiti per automatizzare il mio plastico.
    Complimenti per il tuo modo di insegnare le cose.
    Grazie per averti inventato
    Ciao

Lascia un commento



Chiudi
E-mail It