What is this? From this page you can use the Social Web links to save Arduino Duemilanove: il pulsante to a social bookmarking site, or the E-mail form to send a link via e-mail.

Social Web

E-mail

E-mail It
febbraio 04, 2009

Arduino Duemilanove: il pulsante

Posted in: Informatica

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!


Return to: Arduino Duemilanove: il pulsante