1 of 69

A - Sistemi di elaborazione dati

ES02 - Dispositivi di I/O, pulsanti e led

FB - 10.2025 - v1.0

“La teoria è quando si sa tutto e niente funziona. La pratica è quando tutto funziona e nessuno sa il perché. Noi abbiamo messo insieme la teoria e la pratica: non c'è niente che funzioni… e nessuno sa il perché!”

“La teoria è quando si sa tutto e niente funziona. La pratica è quando tutto funziona e nessuno sa il perché. Noi abbiamo messo insieme la teoria e la pratica: non c'è niente che funzioni… e nessuno sa il perché!”

2 of 69

Introduzione ad Arduino

La piccola scheda italiana che anima le cose

2

© FB - 10.2025

3 of 69

Indice

3

© FB - 10.2025

4 of 69

Obiettivi didattici

4

5 of 69

Obiettivi didattici

  • Utilizzo di pulsanti e led con Arduino

5

© FB - 10.2025

6 of 69

Introduzione teorica

6

7 of 69

Pulsanti

8 of 69

Pulsanti e microcontrollori

Utilizzo di pulsanti, interruttori e deviatori con i microcontrollori

8

© FB - 02.2024

9 of 69

Pulsanti, interruttori, deviatori e invertitori

nei circuiti elettronici

9

© FB - 11.2021

10 of 69

Pulsanti, interruttori, deviatori nei circuiti elettronici

10

© FB - 11.2021

11 of 69

Pulsanti, interruttori e contatti

Pulsanti, interruttori e contatti sono dispositivi elettromeccanici di comando destinati, se azionati, a cambiare lo stato di un circuito.

  • il pulsante è un elemento monostabile, quando rilasciato ritorna in posizione di riposo;
  • l’interruttore è un elemento bistabile, con due posizioni stabili ON e OFF
  • il contatto è un elemento pilotato elettricamente, nei relè e nei contattori.

Pulsanti, interruttori e contatti possono essere NA o NC

  • NA = normalmente aperto – nella posizione di riposo non è permesso il transito della corrente
  • NC = normalmente chiuso – nella posizione di riposo è permesso il transito della corrente.

11

© FB - 11.2021

12 of 69

Pulsante NA e NC

Un esempio di pulsante NA è il campanello, che quando è rilasciato torna in posizione di riposo. Un esempio di pulsante NC è il pulsante del frigorifero, che spegne la luce se premuto. Per ogni tipologia di interruttore, pulsante o contatto, il passaggio di corrente avviene ogni volta che due lamelle metalliche si toccano tra loro a seguito di un’azione meccanica da parte di un utilizzatore esterno.

12

© FB - 11.2021

13 of 69

Parametri caratteristici

Gli interruttori e i pulsanti, come ogni altro componente elettronico, sono caratterizzati da alcuni parametri, di seguito indicati, che aiutano il progettista a effettuare la scelta più corretta in relazione alle proprie esigenze.

  • Tensione massima: è la tensione massima che può essere applicata all’interruttore per non subire danneggiamenti. Oltre al valore numerico viene indicata la tipologia di tensione (AC-DC).
  • Corrente massima: è la corrente massima che può attraversare l’interruttore.
  • Resistenza di isolamento: è la resistenza offerta tra i due contatti. Solitamente è dell’ordine dei megaohm.
  • Resistenza di contatto: è la resistenza offerta a contatto elettrico chiuso che offrono i contatti metallici dell’interruttore.
  • Temperatura di esercizio: indica il range tipico di funzionamento dell’interruttore.
  • Vita media: espressa in cicli di ON/OFF

13

© FB - 11.2021

14 of 69

Pulsanti

14

© FB - 11.2021

15 of 69

Deviatore - Toggle switch - Slide switch

15

© FB - 11.2021

16 of 69

Deviatore

16

© FB - 11.2021

17 of 69

Deviatore

17

© FB - 02.2026

18 of 69

Interruttori dip-switch

18

© FB - 11.2021

19 of 69

Rotary coding switch

19

© FB - 11.2021

20 of 69

Collegare un pulsante al microcontrollore

Simboli usati negli schemi elettrici

20

© FB - 02.2024

21 of 69

Pull-up/Pull-down

21

© FB - 10.2021

22 of 69

Resistenze di pull-up e di pull-down

La pratica sconsiglia vivamente di lasciare liberi (floating -flottanti) ingressi di componenti MOS/CMOS perchè, nelle condizioni peggiori, sono in grado di funzionare da sensibili antenne per disturbi di ogni genere, anche di frequenze radio, e creare situazioni di malfunzionamento assai difficili da debuggare. Considerazioni per il dimensionamento:

  • Vogliamo che la caduta di tensione sulla resistenza sia piccola
  • Vogliamo che la corrente assorbita quando l'interruttore è chiuso sia piccola
  • Per il calcolo preciso dobbiamo conoscere la resistenza su pin di ingresso del microcontrollore. Se questa è circa 1Mohm, allora R di pull-up può andare bene da 5-100Kohm

[Approfondimenti: Resistenza di pull-up / pull-down; Come calcolare le resistenze di pull-up e pull-down - Video 238]

22

© FB - 02.2024

23 of 69

Collegamento tipico pull-up

23

© FB - 02.2024

24 of 69

Collegamento tipico con pulsante pull-down

24

© FB - 02.2024

25 of 69

Collegamento tipico con pulsante pull-down

25

© FB - 02.2024

26 of 69

Utilizzo delle resistenze interne di pull-up e pull-down

Molti microcontrollori incorporano al loro interno resistenze di pull-up e pull-down attivabili via software. �Con questo tipo di collegamento e configurazione del microcontrollore, quando il pulsante non è premuto, sul pin dove è collegato, sarà presente il livello logico alto (5V), mentre con la pressione, ci sarà un collegamento diretto a massa e quindi il livello logico basso (0V).

26

© FB - 02.2024

27 of 69

Utilizzo delle resistenze interne di pull-up e pull-down

#define LED_PIN 13

#define SW_PIN 2

void setup() { // Inizializzazione

pinMode(LED_PIN, OUTPUT);

pinMode(SW_PIN, INPUT_PULLUP);

}

void loop() { // Loop infinito

if(digitalRead(SW_PIN)==HIGH)

//Pulsante non premuto

digitalWrite(LED_PIN, HIGH);

else

//Pulsante premuto

digitalWrite(LED_PIN, LOW);

}

Approfondimenti:

27

© FB - 02.2024

28 of 69

Rimbalzi e Debounce

28

© FB - 10.2021

29 of 69

Rimbalzi e Debounce

Alla pressione o al rilascio del pulsante o dell’interruttore si osservano dei rimbalzi del segnale che possono durare diversi ms (2-30ms).

29

© FB - 11.2020

30 of 69

Codice di esempio

30

© FB - 02.2024

31 of 69

Routine di esempio

visto che la pressione del pulsante dura alcuni millisecondi possiamo controllare per 5-50msec che il pulsante rimanga premuto, per scartare pressioni non valide.

per rilevare un click dobbiamo aspettare che il pulsante venga rilasciato

un pulsante può anche generare gli eventi:

  • Click
  • LongPress (pressione > 1-2 sec)
  • LongLongPress (pressione > 5-10 sec)
  • LongClick
  • DoubleClick
  • TripleClick

Se volessimo utilizzare la pressione del pulsante per impostare un orologio realizzato con microcontrollore bisognerebbe utilizzare l’evento LongPress e non Press. Provate a tenere premuto un tasto sul pc e pensate a cosa succederebbe se non ci fosse un ritardo tra due letture successive.

31

© FB - 02.2024

32 of 69

La programmazione

33 of 69

Altre funzioni utili

33

© FB - 02.2024

34 of 69

L’istruzione micros()

L'istruzione micros(), restituisce il numero di microsecondi da quando la scheda Arduino ha iniziato a eseguire il programma corrente.

il valore restituito e di tipo unsigned long (32 bit)

Possiamo utilizzare questa istruzione per misurare un intervallo di tempo

ES.

time_start = micros(); //Es. 1.235.000

Serial.println(time_start); //prints time since program started

delay(1000);

time_end = micros(); //Es. 2.235.000

Serial.println(time_end ); //prints time since program started

Serial.println(time_end - time_start); //Intervallo in microsecondi

34

© FB - 05.2021

35 of 69

L’istruzione millis()

millis è una funzione built-in di Arduino che restituisce il numero di millisecondi trascorsi dalla pressione del tasto di reset o dall'avvio del programma. La funzione millis utilizza un contatore interno che aumenta di continuo, e quindi fornisce un modo semplice per misurare il tempo trascorso durante l'esecuzione di un programma. L'unità di misura è il millisecondo, ovvero un millisecondo è un'unità di tempo equivalente a 1/1000 di secondo. millis è spesso utilizzato in applicazioni che richiedono un controllo del tempo, come per esempio la creazione di timer, la gestione dei delay, e molto altro ancora. Il valore restituito e di tipo unsigned long (32 bit)

Possiamo utilizzare questa istruzione ad esempio per scrivere una funzione che se richiamata all'interno di un loop fa lampeggiare un led senza bloccare l’esecuzione del microcontrollore:

void ledTask() {

static unsigned long previousMillis = 0;

unsigned long currentMillis = millis();

if (currentMillis - previousMillis >= 1000) {

previousMillis = currentMillis;

digitalWrite(ledPin, !digitalRead(ledPin));

}

}

35

© FB - 02.2024

36 of 69

La breadboard per la prototipazione di circuiti

37 of 69

La Breadboard

E’ utilizzata per realizzare prototipi di circuiti elettronici. Non necessita la saldatura dei componenti elettronici come avviene per la basetta mille fori o i circuiti stampati quindi è riutilizzabile.

© FB - 09.2020

38 of 69

La Breadboard

Le breadboard sono dispositivi di prototipazione che consentono di testare progetti di circuiti elettronici. I componenti del circuito sono interconnessi inserendo cavi nei fori della breadboard e utilizzando cavi jumper per completare il circuito quando necessario.

© FB - 03.2021

39 of 69

La Breadboard

I fori nella breadboard sono allineati con clip metalliche perché il metallo conduce l'elettricità e consente alla corrente di fluire. I fori nel breadboard sono collegati da clip metalliche nel modello mostrato dalle linee verdi nell'immagine qui a fianco:

© FB - 03.2021

40 of 69

La Breadboard

© FB - 04.2020

41 of 69

La Breadboard

© FB - 04.2020

42 of 69

Montaggio circuito su Breadboard

© FB - 04.2020

43 of 69

Montaggio disordinato da non imitare

  • per sostituire un integrato siamo costretti a smontare gran parte del circuito
  • non è rispettato il colore dei fili collegati all’alimentazione
  • ottimo invece la parte di rame inserita nella breadboard

44 of 69

Montaggi a confronto

45 of 69

Schema elettrico e montaggio a confronto

46 of 69

Montaggio

Una corretta alimentazione è fondamentale per il funzionamento del circuito, ma soprattutto evita il danneggiamento dei componenti. Per poter controllare facilmente una corretta alimentazione usiamo questa convenzione dei colori:

  • colori per l’alimentazione: nero gnd (0V), rosso 5V, segnali di altro colore

  • parte non isolata circa 7mm
  • compromesso tra ordine e velocità di montaggio

47 of 69

Consigli di utilizzo

  • Non usare fili di rame di diametro eccessivo, per non deformare il connettore interno (clip metallica)
  • Non usare fili troppo lunghi per i collegamenti in modo da ottenere un montaggio ordinato
  • Cercare di mantenere un layout di montaggio simile a quello dello schema elettrico in modo da semplificarne il collaudo
  • Evitare il passaggio dei fili sopra i circuiti stampati in modo da semplificarne la eventuale sostituzione

48 of 69

Pinza a becco piatto, pinza tronchesina, forbice elettricista

© FB - 10.2019

49 of 69

Esercitazione

49

50 of 69

Esercizio a

Pull-up e pull-down

50

© FB - 10.2025

51 of 69

Collegamento tipico pull-up

51

© FB - 02.2024

52 of 69

Collegamento tipico con pulsante pull-down

52

© FB - 02.2024

53 of 69

Collegamento tipico con pulsante pull-up interno

53

© FB - 02.2024

54 of 69

Esercizi a

Mostrare il funzionamento di circuiti con collegamenti in pull-up, pull-down e internal pull-up. Montare i tre circuiti differenti

Se usate Tinkercad, collegare un multimetro per mostrare la tensioni sul pin di Arduino quando viene premuto il pulsante o quando non lo è

54

© FB - 11.2025

55 of 69

Esercizio b�Accensioni e spegnimento collegate alla pressione del pulsante

55

© FB - 10.2025

56 of 69

Esercizio b - Internal pull-up di Arduino

Spiegare il funzionamento del circuito e scrive il codice che alterni la visualizzazione del led in base alla pressione del pulsante

56

© FB - 10.2025

57 of 69

Esercizio c

Pressione Pulsante (con durata minima)

57

© FB - 10.2025

58 of 69

Rilevamento pressione pulsante di durata minima

Montare un circuito con 2 led e due pulsanti. Nel loop del programma verificare la pressione del pulsante P1. Accendere il Led1 (verde) se P1 (verde) premuto per un tempo minimo, altrimenti spegnerlo.

58

© FB - 10.2025

59 of 69

Rilevamento pressione pulsante di durata minima

Utilizzare la funzione digitalRead(P1_PIN) per ottenere lo stato del pulsante. Questa funzione, quando il pulsante è collegato in pullup, restituisce HIGH (oppure 1) se il pulsante è rilasciato e LOW se è premuto.

Scrivere una funzione denominata P1_Press() in C++ per il rilevamento di un pulsante premuto per un periodo di tempo minimo. Questa funzione deve restituire 1 se il pulsante è stato premuto costantemente per almeno 50 millisecondi, altrimenti deve restituire 0.

Logica della Funzione: Se il pulsante non è premuto inizialmente (digitalRead(P1_PIN) restituisce HIGH), la funzione deve restituire 0. Se il pulsante è premuto, inizia un conteggio: Attendi 1 millisecondo in ogni iterazione del ciclo utilizzando la funzione delay(1). Verifica se il pulsante è stato rilasciato (digitalRead(P1_PIN) restituisce HIGH). Se è stato rilasciato prima che il conteggio raggiunga 50 millisecondi, la funzione deve restituire 0. Se il pulsante è stato costantemente premuto per almeno 50 millisecondi, restituisci 1.

59

© FB - 10.2025

60 of 69

Rilevamento pressione pulsante di durata minima

Creare delle funzioni per inizializzare i led e i pulsanti da richiamare nella funzione setup dello sketch (void led_configura(); void puls_configura();)

nel loop richiamare la funzione puls_press(). Se pulsante premuto accendere il led (led_accendi) altrimenti spegnerlo (led_spegni)

60

© FB - 10.2025

61 of 69

Esercizio d

Puls_LongPress

61

© FB - 10.2025

62 of 69

Puls_LongPress

Aggiungere al programma precedente la funzione P2_longPress() da richiamare nel main loop. La funzione restituisce 1 o 0 (vero o falso)

Testare questa funzione nel loop del programma: Se viene premuto per più di 3 secondi il pulsante cambiare lo stato del led arancione (Led2) (Toggle/Inverti)

62

© FB - 10.2025

63 of 69

Esercizio e

Puls_Click

63

© FB - 10.2025

64 of 69

Puls_Click() e doppioClick() (opzionale)

Aggiungere al programma precedente la funzione P3_click() (restituisce 1 o 0) da richiamare nel main loop. Se viene cliccato il pulsante cambiare lo stato del led blu (Led3) (Toggle/Inverti)

Provare ad implementare anche la funzione P3_doppioClick() ad esempio fare led_blink del led blu

64

© FB - 10.2025

65 of 69

Valutazione

65

66 of 69

Griglia di valutazione

Si ricorda l’importanza di svolgere e consegnare i progetti assegnati.

66

© FB - 09.2025

67 of 69

Grazie per l’attenzione

68 of 69

Link/Riferimenti

68

© FB - 09.2025

69 of 69

Revisioni

v1.0 04/10/25 - versione iniziale

69