Realizzare un Cronometro Digitale con Arduino

Obiettivo: Realizzare un cronometro digitale per misurare lo scorrere del tempo in millisecondi utilizzando il microcontrollore Arduino, un display LCD e due pulsanti
Un progetto realizzato dagli alunni della classe 3ATLC dell’Istituto Tecnico Industriale “Enrico Mattei” di Urbino:
– Benedetti Nicolas
– Puca Edoardo

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 2 Resistenze da 100 Ohm per i pulsanti
  • 1 Display LCD
  • 2 Pulsanti

Pre-requisiti:


Blinking Led Senza Delay: MILLIS()


TeoriaRealizzare un cronometro digitale con il controllore Arduino, è relativamente semplice. Per implementare questo dispositivo, basta collegare arduino ad un display LCD ed utilizzare l’istruzione millis() nell’apposito sketch.
Nel dettaglio, la funzione millis restituisce il numero di millisecondi che sono passati da quando la board Arduino ha eseguito il programma corrente. Questo numero si riazzera dopo circa 50 giorni.
A tale fine è importante ribadire che mediante la funzione millis è possibile effettuare più misurazioni nel corso del tempo e per calcolare il tempo trascorso tra una misurazione e l’altra basta fare al differenza:

tempo = misura2 – misura1 

Collegamento Circuitale:

Collegamento Circuitale

Codice:

Attraverso l’utilizzo della funzione millis è possibile realizzare un cronometro digitale con il controllore Arduino. Nel caso specifico due differenti misure vengono effettuate per determinare il tempo trascorso. La prima misura viene salvata nella variabile “tempoI” mentre la seconda nella variabile “tempoF“. Il tempo trascorso tra le due differenti misure viene memorizzato nella variabile”tempo” ottenuta come la differenza tra “tempoF” e “tempoI“.



Tinkercad






Realizzare un Voltmetro [0-5Volt] con Display a 7 Segmenti

Obiettivo: Realizzare un dispositivo per misurare tensioni nel range 0.5 V utilizzando il microcontrollore Arduino ed il display a sette segmenti.
Un progetto realizzato dagli alunni della classe 3AUT dell’Istituto Tecnico Industriale “Enrico Mattei” di Urbino:
– Amadori Federico
– Fucili Elia

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 14 Resistenze da 100 Ohm per I display a sette segmenti
  • 2 Display a 7 Segmenti

Pre-requisiti:


1..2..3.. Il Display a 7 Segmenti



Le Funzioni digitalWrite, digitalRead, analogWrite e analogRead


TeoriaEffettuare la misura di una tensione compresa nel range 0-5 V, utilizzando il controllore Arduino, è relativamente semplice. Per effettuare questa misura, basta collegare l’elemento di cui vogliamo analizzare la tensione ad un ingresso analogico (A0-A5) e utilizzare l’istruzione analogRead nell’apposito sketch.
A tale fine è importante ribadire che l’ingresso analogico compreso nel range 0-5V viene mappato utilizzato la funzione analogRead(A0) nel range 0-1023, pertanto è indispensabile utilizzare una corrispettiva funzione di conversione basta sulla seguente proporzione:

ValoreAnalogRead : 1023 = ValoreTensione : 5 

In conclusione, il valore di tensione può essere semplicemente ottenuto dividendo per 1023 e moltiplicando per 5 il valore letto utilizzando la funzione analogRead(A0).

Tale valore può essere poi visualizzato su differenti tipi di display: monitor del computer, display LCD e display a 7 segmenti. Nell’esempio in questione vengono utilizzati due display a 7 segmenti (uno per la parte intera ed uno per la parte decimale) al fine di visualizzare la tensione misurata.

Collegamento Circuitale:

Collegamento Circuitale

Codice:

Attraverso l’utilizzo di due display a sette segmenti è possibile visualizzare la tensione prodotta dalla “patata”. Nel caso specifico viene utilizzata una patata come generatore di tensione per verificare che il dispositivo fornisca una valutazione corretta della tensione misurata. Delle funzioni specifiche (e.g., zeroI, unoI, zeroD, unoD, etc) vengono utilizzate per visualizzare i vari numeri nei due differenti display.



Tinkercad




PersonalizzazioniE’ possibile utilizzare altre tipologie di display per visualizzare la tensione misurata.





Realizzare un Contapunti con Display LCD

Obiettivo: Realizzare un contapunti manuale utilizzando il microcontrollore Arduino ed il display LCD

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 2 Resistenze da 1kOhm per i pulsanti
  • 1 Resistenza da 100 Ohm per il display LCD
  • 1 Trimmer (per regolare il contrasto del display LCD)
  • 2 Pulsanti

Pre-requisiti:


Come Collegare un Display LCD ad Arduino



LED e Pulsante


TeoriaAttraverso l’utilizzo di due semplici pulsanti e di un display LCD è possibile realizzare un contapunti digitale per riprodurre il punteggio di una partita di biliardo, pallavolo, calcetto, etc. Ogni volta che uno dei due pulsanti è premuto viene incrementato il punteggio di una delle squadre.

Collegamento Circuitale:

Codice:

Attraverso l’utilizzo di due contatori cnt1 e cnt2 è possibile memorizzare il punteggio di ogni squadra. Tali valori sono riprodotti sul display LCD utilizzando l’istruzione LCD.print().
Per evitare delle letture multiple che potrebbero portare ad un comportamento errato del circuito si utilizza una variabile globale che memorizza lo stato precedente del pulsante (i.e., valButton1Old e valButton2Old).




PersonalizzazioniE’ possibile introdurre un ulteriore pulsante per resettare il punteggio senza necessariamente dovere riavviare il controllore Arduino. Inoltre si può aggiungere un dispositivo di segnalazione acustica per avvisare l’utilizzatore del cambio di punteggio.





Realizzazione di un Gioco a Quiz – La macchina a stati finiti

Obiettivo: Realizzare un gioco a Quiz mediante pulsanti e display LCD 16×2 (basato su un Driver Hitachi HD44780). L’attività prevede la realizzazione software di una macchina a stati.



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Display LCD (e.g., 1602A) compatibile con Driver Hitachi HD44780 
  • 1 Resistenza da 220 Ohm (per il display)
  • 1 Trimmer da 10 kOhm (per il display)
  • 2 Pulsanti
  • 2 Resistenze da 1kOhm (per i pulsanti)

Pre-requisiti:


Come Collegare un Display LCD ad Arduino



LED e Pulsante


TeoriaL’utilizzo di una progettazione basata sul concetto di macchina a stati finiti permette la facile realizzazione di apparati elettronici e sistemi capaci di fornire output desiderati a partire da specifici input ricevuti. Questo paradigma si basa sulla definizione degli stati di funzionamento del dispositivo da realizzare e sul codice associato allo stato stesso. A seguire sono riportati alcuni esempi pratici di stati di sistemi generici:

  • Semaforo: verde, giallo, rosso
  • Ascensore: primo piano, secondo piano, etc
  • Cancello: aperto, chiuso

Da un punto di vista pratico si potrebbe affermare che: “Attraverso una macchina a stati è possibile avere tanti loop quanti sono gli stati del dispositivo in questione “. Tuttavia è importante considerare che solamente uno di questi loop è attivo. (La macchina non può torvarsi in più stati contemporaneamente).
Nel caso specifico di un gioco a quiz gli stati sono rappresentati dalle:

  • Domande: la domanda deve essere visualizzata sul display
  • Risposte: l’utente deve premere il pulsante e il controllore deve verificare se la risposta è corretta.

Pertanto si avranno tanti stati quante sono il numero di domande moltiplicato per due.
E’ infine importante considerare che, nel caso della realizzazione di un quiz a risposta multipla, l’impiego di una macchina a stati permette di risolvere il problema annoso del delay. Questa funzione può infatti essere tranquillamente utilizzata negli stati associati alle domande (l’utente deve avere tempo di leggere la domanda) mentre non deve essere assolutamente impiegata negli stati relativi alle risposte.

La realizzazione di una macchina a stati mediante il controllore Arduino è relativamente semplice. Infatti, il concetto di stato viene implementato grazie all’utilizzo di una variabile globale (tipicamente denominata state) e attraverso una serie di if o mediante uno switch case si seleziona il codice da eseguire in quello specifico stato.

Collegamento Circuitale:

CodiceAttraverso la variabile “state” è possibile specificare il “loop” che Arduino dovrà eseguire. Nel dettaglio, valori pari della variabile “state” sono utilizzati per riprodurre la domanda sul display, mentre valori dispari sono impiegati per gestire la risposta. E ‘importante notare che non sono presenti delay nel loop di gestione della risposta (ad eccezione di quello utilizzato per visualizzare se la risposta data è corretta oppure errata).




PersonalizzazioniE’ possibile aggiungere un numero maggiore di domande ed un numero maggiore di pulsanti per gestire più risposte.





Controllo del Contrasto di un Display LCD mediante PWM

Obiettivo: Controllare il contrasto di un Display LCD 16×2 (basato su un Driver Hitachi HD44780) mediante PWM. (Se non possiedi un Trimmer puoi utilizzare questa strategia basata su PWM e filtro passa-basso).

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Display LCD (e.g., 1602A) compatibile con Driver Hitachi HD44780 
  • 1 Resistenza da 220 Ohm
  • 1 Resistenza da 1kOhm (per filtro passa basso)
  • 1 Condensatore elettrolitico da 22uF (per filtro passa basso)

Pre-requisiti:


Come Collegare un Display LCD ad Arduino


TeoriaIn un display LCD basato su Driver HD44780 il pin numero 3 è utilizzato per gestire il contrasto. Questo pin viene tipicamente collegato ad un potenziometro con tensione variabile nel range 0 a 5v. Pertanto variando la posizione del Trimmer cambia il livello di contrasto del display. Il contrasto è un parametro di fondamentale importanza nella gestione di una dispositivo elettronico che utilizza un display LDC. Un’errata regolazione del livello di contrasto può rendere un’immagine troppo o poco dettagliata con il rischio che le aree più chiare e/o quelle più scure possano scomparire rendendo il testo non leggibile. Pertanto, nel caso in cui non si possedesse un Trimmer, l’utilizzo di un display LCD potrebbe essere facilmente compromesso a causa della incapacità di settare un livello di contrasto corretto.
Tuttavia, è importante considerare che, esistono delle alternative all’utilizzo di un trimmer per generare una tensione variabile compresa tra 0 e 5 Volts. Nel dettaglio, in questo articolo viene presentata una tecnica basata sull’utilizzo della PWM e di un filtro passa basso. L’impiego della tecnica PWM permette di generare un segnale con un duty cycle regolabile. Questa tecnica viene utilizzata anche nell’istruzione analogWrite per creare dei segnali apparentemente analogici partendo da segnali digitali. Il segnale PWM viene in seguito filtrato utilizzando un filtro RC passa basso del primo ordine. Attraverso questa operazione è infatti possibile ottenere la componente continua del segnale PWM necessaria per regolare il contrasto.

Collegamento Circuitale:

Collegamento Circuitale

CodiceAttraverso la variabile contrast (regolabile nel range 0-255) è possibile modificare il valore del contrasto da software fino ad ottenere l’effetto desiderato.




PersonalizzazioniE’ possibile introdurre due pulsanti per modificare il contrasto del display utilizzando il valore PWM (0-255). Un pulsante può incrementare il valore della variabile contrast mentre l’altro pulsante può decrementare il suo valore.





Come Collegare un Display LCD ad Arduino

Obiettivo: Utilizzare un Display LCD 16×2 (basato su un Driver Hitachi HD44780).



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Display LCD (e.g., 1602A) compatibile con Driver Hitachi HD44780 
  • 1 Potenziometro da 10 kOhm
  • 1 Resistenza da 220 Ohm

TeoriaI display basati su Driver Hitachi HD44780 sono tra i più diffusi in ambito embedded. Caratterizzati da differenti formati (i.e., 8×1, 8×2, 16×2, 20×2, 16×3, etc), questi display permettono di visualizzare solo caratteri. Nella seguente tabella si riporta la descrizione dei PIN del dispositivo:

PIN Descrizione
1 Vss (Massa)
2 Vcc (Genericamente 5 V)
3 Vee (Controllo contrasto, collegato in genere ad un potenziometrocon tensione che varia da 0 a 5v)
4 R/S (0 per selezionare l’invio di un comando, 1 per i dati)
5 R/W (0 per selezionare la scrittura di dati o comandi, 1 per la lettura dei dati o dello stato)
6 E (inizia il ciclo di scrittura o lettura, secondo R/S e R/W)
7 D0 (Bus dati)
8 D1 (Bus dati)
9 D2 (Bus dati)
10 D3 (Bus dati)
11 D4 (Bus dati)
12 D5 (Bus dati)
13 D6 (Bus dati)
14 D7 (Bus dati)
15 A (Vcc retroilluminazione, se presente)
16 K (Vss retroilluminazione, se presente)

Il Driver HD44780 si basa su una modalità di trasferimento dati di tipo parallelo. Nel dettaglio è supportato sia il trasferimento di 8 bit (l’intero comando D0-D7) sia il trasferimento di 4 bit (D4-D7). Nel secondo caso, per trasmettere un byte vengono effettuati due trasferimenti.

Per la scrittura di un singolo carattere è necessario rispettare il seguente “protocollo di trasmissione“:

  • Posizionare il cursore nella posizione desiderata
  • Impostare a 1 il pin R/S e a 0 il pin R/W
  • Inviare il codice ASCII del carattere
  • Impostare ad 1 il pin E per un minimo di 450 nanosecondi ed, in seguito, riportarlo a 0

Da un punto di vista pratico, grazie all’impiego della specifica libreria LiquidCrystal inclusa nel pacchetto software di Arduino è possibile pilotare il display semplificando notevolmente la parte di gestione dei pin, dei comandi e delle relative temporizzazioni. La libreria mette infatti a disposizione una classe LiquidCrystal all’interno della quale sono definite le principali funzioni necessarie per utilizzare i display basati su Driver HD44780. Quali:

  • Begin: Inizializza l’interfaccia del display LCD specificandone le dimensioni (larghezza ed altezza)
  • SetCursor: Posizione il cursore LCD ovvero la posizione nella quale verrà visualizzato il testo scritto
  • Print: Scrive il testo sul display LCD.

Collegamento Circuitale:

Codice:




PersonalizzazioniE’ possibile modificare il contrasto del display intervenendo sul potenziometro.