ARDWARE #3 Porta Logica NOT 74HC04

Obiettivo: Utilizzare la porta logica NOT (74HC04)

Componenti elettronici:

  • Arduino
  • 1 led
  • 1 interruttori a scorrimento (slideswitch)
  • 1 resistenza (100 Ohm) per non fare bruciare il LED
  • 1 circuito integrato 74HC04 (TTL serie)

TeoriaObiettivo di questa esperienza è imparare ad utilizzare una porta logica NOT (74HC04) utilizzando degli interruttori e Arduino come semplice generatore di tensione.

La logica booleana rappresenta quel ramo dell’algebra in cui le variabili possono assumere solamente due valori: vero e falso (valori che nelle discipline elettroniche diventano 1 e 0). Le principali operazioni logiche sono 3: AND (prodotto logico), OR (somma logica), NOT (complemento). In seguito viene illustrato nel dettaglio il funzionamento di una porta logica NOT.

NOT – TABELLA DI VERITA’

L’operatore NOT restituisce il valore inverso a quello in entrata. In seguito è riportata la tabella di verità dell’operatore NOT

A NOT A
1 0
0 1

NOT – SIMBOLO CIRCUITALE

Da un punto di vista grafico la porta not è rappresentata mediante il seguente simbolo:

Simbolo Circuitale

NOT – CIRCUITO INTEGRATO (74HC04)

Da un punto di vista elettronico le operazioni logiche sono implementate grazie all’utilizzo di un circuito integrato. A seguire viene riportata una porzione del datasheet dell’integrato 74HC04 utilizzato per realizzare l’operazione logica NOT.

Questo circuito integrato permette di utilizzare 6 differenti porte logiche. Per funzionare deve essere alimentato a 5 volt. Nel dettaglio, il pin 14 deve essere collegato a VCC mentre il pin 7 al ground (GND). I pin 1,3,5,9,11,13 rappresentano gli input delle porte logiche, mentre i pin 2,4,6,8,10,12 gli output.

Nell’esempio trattato in questo articolo, è stato utilizzato un interruttori a scorrimento per gestire l’input della porta logica. Se l’interruttore è collegato ai 5 Volt l’input della porta logica è 1, differentemente se l’interruttore è collegato a 0 Volt l’input della porta logica è 0.

Collegamento Circuitale:

Schema elettrico

E’ facilmente verificabile che impostando l’input della porta logica a zero il led collegato all’uscita si accende, viceversa si spegne.

Tinkercad:



Codice:

Non serve codice.

Osservazioni:

  1. Prova a collegare più porte logiche in cascata.




ARDWARE #2 Logica booleana con interruttori

Obiettivo: Conoscere la logica booleana (NOT, AND, OR) utilizzando semplici interruttori

Componenti elettronici:

  • Arduino
  • Alcuni led
  • Alcuni interruttori a scorrimento (slideswitch)
  • Delle resistenze (100 Ohm) per non fare bruciare i LED

TeoriaObiettivo di questa esperienza è ricreare i semplici operatori logici (OR e AND) utilizzando degli interruttori e Arduino come semplice generatore di tensione.

La logica booleana rappresenta quel ramo dell’algebra in cui le variabili possono assumere solamente due valori: vero e falso (valori che nelle discipline elettroniche diventano 1 e 0). Le principali operazioni logiche sono 3: AND (prodotto logico), OR (somma logica), NOT (complemento). Tali operazioni sono descritte da delle specifiche tabelle di verità.

NOT

L’operatore NOT restituisce il valore inverso a quello in entrata. In seguito è riportata la tabella di verità dell’operatore NOT nel caso di due entrate:

A NOT A
1 0
0 1

AND

L’operazione AND restituisce come valore 1 se tutti gli elementi hanno valore 1, mentre restituisce 0 in tutti gli altri casi. Tale operazione è anche detta prodotto logico. In seguito è riportata la tabella di verità dell’operatore AND nel caso di due entrate:

A B A AND B
0 0 0
0 1 0
1 0 0
1 1 1

OR

L’operazione OR restituisce come valore 1 se almeno uno degli input ha valore 1. Tale operazione è anche detta somma logica. In seguito è riportata la tabella di verità dell’operatore OR nel caso di due entrate:

A B A OR B
0 0 0
0 1 1
1 0 1
1 1 1

Nell’esempio trattato in questo articolo, sono stati utilizzati degli interruttori a scorrimento per realizzare semplici porte logiche AND e OR. Nello specifico, attraverso gli interruttori è possibile collegare/scollegare il LED alla alimentazione. Modificando la posizione dell’interruttore, il circuito si apre/chiude impedendo/permettendo il passaggio della corrente che permette di spegnere/accendere il LED.

Collegamento Circuitale:

Nella precedente rappresentazione sono riportati quattro differenti circuiti.

  • Circuito1: LED sempre acceso con resistenza per limitare il passaggio di corrente (utile ad evitare la rottura della lampada).
  • Circuito2: Utilizzo di un semplice interruttore a scorrimento per interrompere il flusso di corrente e accendere/spegnare il LED.
  • Circuito3: Realizzazione di una porta logica AND mediante la connessione serie di due interruttori. Nella seguente galleria di immagini sono riportate le differenti combinazioni di input per una porta logica AND realizzata con gli interruttori.

  • Circuito4: Realizzazione di una porta logica OR mediante la connessione parallelo di due interruttori. Nella seguente galleria di immagini sono riportate le differenti combinazioni di input per una porta logica OR realizzata con gli interruttori.

Codice:

Non serve codice.

Tinkercad:



Osservazioni:

  1. Prova a realizzare combinazioni di porte logiche utilizzando gli interruttori in serie o parallelo.




ARDWARE #1 I Led Arcobaleno

Obiettivo: Utilizzare Arduino come alimentatore per gestire 5 led arcobaleno (rosso, blu, arancione, giallo, verde)

Componenti elettronici:

  • Arduino
  • 5 led
  • 5 interruttori a scorrimento (slideswitch)
  • 5 resistenze (100 Ohm)

TeoriaObiettivo di questa esperienza è gestire 5 differenti led utilizzando Arduino come un semplice alimentatore. In questa esperienza, non c’è né codice né programmazione; i led sono gestiti nella vecchia maniera (old school) attraverso dei semplici interruttori che separano la lampada dalla rete di alimentazione.

Nell’esempio trattato in questo articolo, sono stati utilizzati degli interruttori a scorrimento i cui terminali sono collegati alla tensione di alimentazione (5 Volt) o alla massa (0 Volt). Modificando la posizione dell’interruttore, il morsetto centrale si collega ad una delle due tensioni di riferimento. Tale interruttore è collegato direttamente ad un LED (una semplice lampada che funziona con una tensione di 1,5 Volt). Una resistenza in serie al LED è indispensabile al fine di regolare la tensione e la corrente presente sulla lampada evitando di danneggiarla.

Collegamento Circuitale:

Codice:

Non serve codice.

Osservazioni:

  1. Il circuito non è completo, divertiti a completarlo.




ARDWARE #0 Come collegare le resistenze sulla Breadboard?

Obiettivo: Imparare come realizzare semplici circuiti resistiti sulla breadboard.

Pre-requisiti

Componenti elettronici:

  • Arduino
  • 2 resistori da 270 Ohm
  • 2 resistori da 150 Ohm

TeoriaObiettivo di questa esperienza è realizzare uno specifico circuito su breadboard utilizzando degli elementi resistivi e Arduino come alimentatore.

Osservando il circuito è facile riconoscere il collegamento serie degli elementi R1 e R2. Dove, R12 = R1+R2 = 300 Ohm

Il secondo collegamento circuitale osservabile è dato dal parallelo delle resistenze R12 e R4 = R12*R4/(R12+R4) = 142 Ohm

Infine è possibile calcolare la resistenza totale data dalla serie di R3 e R142 = 412 Ohm

Il precedente circuito può essere montato sulla breadboard utilizzando le seguenti modalità:

Esempio di collegamento Serie e Parallelo

Collegamento Circuitale:

Codice:

Non serve codice.

Verifica:

Utilizzare il metodo della resistenza equivalente per determinare le tensioni presenti su tutte le componenti resistive.




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



Pulsante come Interruttore


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.





Utilizzare e Creare una Libreria per il Display a 7 Segmenti

Obiettivo: Utilizzare e creare una libreria (file header e cpp) per un Display a Sette Segmenti.

Puoi scaricare i file di libreria cliccando nel seguente link: http://www.arduinofacile.it/wp-content/uploads/2021/03/SevenSegment.zip
I file scaricati devono essere inseriti all’interno della cartella di progetto insieme al file .ino

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Display a 7 Segmenti
  • 8 Resistenze

Pre-requisiti:


Creare funzioni con Arduino … per un Display a 7 Segmenti


Teoriala realizzazione di funzioni di libreria permette di facilitare l’operazione di riutilizzo del codice rendendo più veloce e più rapido lo sviluppo. Nel caso specifico la funzione di libreria implementata sarà costituta da un file header (.h) e da un file sorgente (.cpp).

Un file header è  un file di testo che contiene i prototipi dei metodi (funzioni) definite nel relativo file sorgente. Nel caso in questione il file header contiene anche la dichiarazione della classe “SevenSegment” utilizzata per modellare il display a sette segmenti.
Tale classe sarà caratterizzata da 10 attributi:

  • int pinA: il pin A del display a sette segmenti
  • int pinB: il pin B del display a sette segmenti
  • int pinC: il pin C del display a sette segmenti
  • int pinD: il pin D del display a sette segmenti
  • int pinE: il pin E del display a sette segmenti
  • int pinF: il pin F del display a sette segmenti
  • int pinG: il pin G del display a sette segmenti
  • int pinDP: il pin DP del display a sette segmenti
  • bool isCommonAnode: indica se il display è di tipo anodo comune oppure no

e da 11 metodi

  • void Print0(): metodo utilizzato per stampare il numero 0
  • void Print1(): metodo utilizzato per stampare il numero 1
  • void Print2(): metodo utilizzato per stampare il numero 2
  • void Print3(): metodo utilizzato per stampare il numero 3
  • void Print4(): metodo utilizzato per stampare il numero 4
  • void Print5(): metodo utilizzato per stampare il numero 5
  • void Print6(): metodo utilizzato per stampare il numero 6
  • void Print7(): metodo utilizzato per stampare il numero 7
  • void Print8(): metodo utilizzato per stampare il numero 8
  • void Print9(): metodo utilizzato per stampare il numero 9
  • void CountDown(): metodo utilizzato per eseguire il countdown.

Nel file sorgente viene invece riportata l’implementazione dei prototipi delle funzioni dichiarate nel file header.

Collegamento Circuitale:

Collegamento Circuitale

Codice:

Vengono in seguito riportate le tre porzioni di codice utilizzate per creare la funzione di libreria relativa al display a sette segmenti.

  • File Header: contiene la definizione della classe con i propri attributi (i.e., pinA, pinB, etc) ed i prototipi dei relativi metodi.



  • File Sorgente: contiene le implementazioni dei metodi riportati nel file header.



  • File Arduino: Utilizzato per fornire un esempio di come utilizzare la libreria per la gestione del display a sette segmenti.



Se tutti i file sono correttamente posizionati sullo stesso livello all’interno della cartella di progetto, due nuove tab compariranno nell’ambiente di sviluppo utilizzato per programmare Arduino. Attraverso queste tab sarà possibile visionare e modificare il file sorgente (.cpp) ed il file header (.h)

IDE con l’utilizzo della libreria SevenSegment.h




Arduino Cyclone Arcade Game

Obiettivo: Realizzare un gioco Arcade, basato su LED e pulsanti, utilizzando il microcontrollore Arduino.



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Resistenze da 1kOhm per i pulsanti
  • 8 Resistenze da 100 Ohm per i LED.
  • 1 Buzzer Passivo (per la realizzazione di una melodia)
  • 8 LED (7 LED Rossi ed 1 Led Verde)
  • 1 Pulsante

Pre-requisiti:


Pulsante come Interruttore



Blinking Led Senza Delay: MILLIS()



Buzzer Passivo


TeoriaLo scopo di questo progetto è quello di creare un semplice gioco per bambini interattivo e divertente, sfruttando il microcontrollore Arduino. Il progetto proposto prende spunto da un gioco realmente prodotto e commercializzato negli anni 80 denominato “Cyclon jr” (vedi figura).

Cyclone Jr

Il progetto è di facile realizzazione e si basa sull’utilizzo di un pulsante e di alcuni LED che si accenderanno in sequenza. L’obiettivo del gioco è premere il pulsante quando la luce del cyclone raggiunge l’unico LED verde presente nel tabellone di gioco. In caso di successo, il livello di difficoltà aumenterà ed i led si accenderanno più velocemente. Differente, in caso di sconfitta, il gioco ricomincerà da capo ed i led si accenderanno più lentamente.

L’utilizzo di un buzzer passivo permette di generare un segnale acustico in caso di vittoria o sconfitta. Analogamente una gioco di luci sarà avviato ogni volta che il giocatore preme il pulsante in modo corretto.

Collegamento Circuitale:

Collegamento Circuitale

Codice:

Sebbene le componenti hardware impiegate nel progetto in questione sono di comune utilizzo, il codice non è dei più immediati. Innanzitutto, è importante considerare che per fare lampeggiare i LED è stata utilizzata la funzione millis() a discapito della tradizionale delay. L’impiego della funzione millis() permette infatti una maggiore reazione nel rilevare la pressione di un pulsante. Inoltre l’impiego dell’operatore modulo % permette di gestire in modo facile la corretta accensione dei led in sequenza. La difficoltà è infine regolata dal parametro K che aumenta ad ogni vittoria.




PersonalizzazioniE’ possibile aggiungere un numero maggiore di led per rendere il gioco più completo.





L’Albero di Natale (Gioco Luci + Melodia)

Obiettivo: Riprodurre la melodia “Merry Christmas” e creare un gioco luci Natalizio utilizzando la piattaforma Arduino (senza utilizzare la funzione delay).



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Buzzer
  • 6 Resistenze (100 Ohm)
  • 6 Led (Possibilmente rossi)

Pre-requisiti:


Arduino Jingle Bells



Blinking Led Senza Delay: MILLIS()


TeoriaNelle lezioni precedenti è stato illustrato come ogni melodia musicale è composta da note e pause. Se le singole note possono essere facilmente generate grazie all’utilizzo di un buzzer passivo e della funzione tone() le pause possono essere riprodotte utilizzando la funzione delay().
Tuttavia è importante considerare che sebbene la funzione delay risulti molto pratica e permetta una facile realizzazione di giochi luci o riproduzione di melodie, questa produce un blocco del controllore il quale può impedire il corretto funzionamento di altre operazioni.
Nel caso specifico, se utilizzassimo la funzione delay sia per gestire il gioco luci sia per riprodurre la melodia, la funzione delay utilizzata in entrambi i task andrebbe a danneggiare la corretta esecuzione di una delle due attività. Ad esempio, si avrebbero delle pause troppo lunghe nella melodia rendendola incomprensibile.

Per risolvere questo problema si è deciso di utilizzare la funzione millis sia per realizzare il gioco luci sia per implementare la melodia.

La funzione millis restituisce il numero di millisecondi che sono passati da quando la board Arduino ha eseguito il programam corrente. Questo numero si riazzera dopo circa 50 giorni.

Collegamento Circuitale:

Circuito Elettrico

Codice: