Obiettivo: Utilizzare una “funzione di reset” per riavviare Arduino via codice.
Teoria:
In alcune applicazioni potrebbe essere utile avere la possibilità di riavviare l’esecuzione dello sketch via software. In questo modo si può ripristinare la board ad una condizione iniziale certa. Un esempio potrebbe essere la gestione del meccanismo di sicurezza di una macchina industriale dove, premendo il pulsante di arresto, il dispositivo deve ritornare ad uno stato iniziale ben definito. In questo specifico caso, è possibile definire ed utilizzare una funzione di Reset, che se richiamata, permette di riavviare il programma. Nel dettaglio prima della funzione di setup viene dichiarato un puntatore a funzione il quale punta alla posizione zero. Richiamando questa funzione Arduino esegue il codice come se fosse stato appena avviato.
Codice: Viene in seguito riportato il codice necessario per riavviare via software il microcontrollore Arduino. Nello specifico il programma, una volta avviato, attende per cinque secondi prima di effettuare il reset software. Il monitor seriale viene utilizzato per fornire i feedback relativi alle fasi di start e di reset.
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)
Teoria: In 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:
Codice: Attraverso la variabile contrast (regolabile nel range 0-255) è possibile modificare il valore del contrasto da software fino ad ottenere l’effetto desiderato.
Personalizzazioni: E’ 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.
Real Time Clock per Arduino
Obiettivo: Scrivere e poi leggere l’ora e la data da una scheda RTC Real Time Clock.
Comunicazione: I2C (possibilità di collegare altri dispositivi I2C in cascata)
Batteria di backup supportata (NON inclusa): LIR2032
Ciclo di funzionamento del modulo (a piena carica): 1 anno
Dimensioni: 28 x 28 x 9mm
Peso: 4g
Se avete bisogno nei vostri progetti di un sistema per la
gestione di data e orario questa scheda è quello che fa per voi.
Per utilizzare tale scheda viene utilizzata la libreria RTClib.h
Tramite tale libreria è possibile settare nella funzione di setup la data e l’ora personalizzata (riga codice n.25), oppure quella di compilazione (riga codice n.22) , la prima volta che si carica il codice in Arduino, in modo tale che la scheda TinyRTC si configuri con un orario e data opportuni, poi si deve ricaricare lo stesso sketch commentando la riga di codice (n.22 o n.25).
Da questo momento in poi Arduino sarà in grado di utilizzare
un orologio real time in grado di gestire ore, minuti, secondi, anni, mesi e
giorni!
Collegamento Circuitale:
Codice
Leggere informazioni dal GPS BN-880 o uBlox M8N
Obiettivo:
Leggere tutte le informazioni provenienti dal GPS BN-880 utilizzando la libreria TinyGPS++
Alla base di questa esercitazione c’è il modulo GPS Baitian BN-880, ma andrebbe benissimo anche un modulo uBlox NEO-7M o M8N o equivalenti.
Il modulo in oggetto oltre ad avere integrato il GPS,
oggetto dell’esercitazione, ha anche integrato una bussola (compass) HMC5883l comunicante
tramite il bus/protocollo I2C.
Ecco alcune caratteristiche:
Inexpensive,
light, Dual Mode GPS and GPS/Compass using UBLOX M8N module
Receiving
Format: GPS, GLONASS, Galileo, BeiDou, QZSS and SBAS
Data Protocol: NMEA-0183 or UBX, Default
NMEA-0183
Single GNSS: 1Hz-18Hz
Concurrent GNSS: 1Hz-10Hz
Compass IC: HMC5883L
Il sistema GPS (Global Positioning System):
GPS sta per Global Positioning System cioè un Sistema di Posizionamento Globale, la cui funzione primaria è quella di determinare con precisione la posizione sul pianeta Terra di un ricevitore (come ad esempio uno smartphone o un apparecchio dedicato). Il ricevitore GPS riceve continuamente segnali da lontani satelliti in orbita attorno alla Terra. Attorno alla Terra, a circa 20.200 km di altitudine, orbitano 31 satelliti del sistema GPS. Ogni satellite ha al suo interno un precisissimo orologio atomico. Ogni satellite invia continuamente un segnale radio contenente la sua posizione, e l’orario di trasmissione del segnale. Il ricevitore GPS confronta questi segnali, e tramite alcune equazioni riesce a stabilire la sua posizione.
Il pallino rosso è il ricevitore GPS. Alle ore 12:00 tutti i
satelliti GPS inviano un segnale che dice “io mi trovo nella posizione XYZ, e
sono le 12:00”. Poiché i satelliti hanno distanze diverse dal ricevitore, il
segnale “io mi trovo nella posizione XYZ, e sono le 12:00” arriva al ricevitore
in momenti diversi: quello del satellite 4 arriva per primo; poi quello del
satellite 2; poi 3; e poi 1. Sapendo quanto ci ha messo il segnale ad arrivare,
e quindi la distanza fra il ricevitore e i vari satelliti, il ricevitore GPS,
con una relativamente semplice triangolazione, riesce a stimare la propria
posizione sul pianeta Terra.
Che cosa trasmette il modulo GPS:
Il modulo GPS trasmette tramite Seriale TTL (0-5 Volt) delle
“sentenze” tramite il protocollo NMEA0183.
NMEA 0183 (o più comunemente NMEA) è uno standard di comunicazione di dati utilizzato soprattutto in nautica e nella comunicazione di dati satellitari GPS. L’ente che gestisce e sviluppa il protocollo è la National Marine Electronics Association. Questo protocollo si basa sul principio che la fonte, detta talker, può soltanto inviare i dati (sentences) e la ricevente, detta listener, può soltanto riceverli.
Ad esempio la seguente sentenza $GGA trasmette tantissime
informazioni oltre alla Latitudine e Longitudine:
Tramite
la libreria TinyGPS++ è possibile intercettare tutti i tipi di sentenze GPS e
inoltre nell’ultima versione anche di elaborare le sentenze particolari, ad
esempio prelevate da altre fonti NMEA0183.
Schema Elettronico (Fritzing):
Codice:
Utilizzare e Creare una Libreria per il Sensore ad Ultrasuoni
Obiettivo: Utilizzare e creare una libreria (file header e cpp) per un Sensore a Ultrasuoni (HC-SR04) utilizzato per misurare la distanza.
Teoria: la 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 “UltrasonicSensor” utilizzata per modellare il sensore ad ultrasuoni. Tale classe sarà caratterizzata da 2 attributi:
int pinEcho: il pin di echo
int pinTrigger: il pin di trigger
e da 4 metodi:
void SetPinEcho (int pinEcho): metodo utilizzato per settare il pin di echo
void SetPinTrigger(int pinTrigger): metodo utilizzato per settare il pin di trigger:
long GetDistance(): metodo utilizzato per effettuare la misura di distanza (restituisce un valore di tipo long)
long GetAverageDistance(int numIteration): metodo utilizzato per effettuare la misura di distanza media su un numero dato di misure (restituisce un valore di tipo long)
Nel file sorgente viene invece riportata l’implementazione dei prototipi delle funzioni dichiarate nel file header.
Collegamento Circuitale:
Codice:
Vengono in seguito riportate le tre porzioni di codice utilizzate per creare la funzione di libreria relativa al sensore ad ultrasuoni HC-SR04.
File Header: contiene la definizione della classe con i propri attributi (i.e., pinEcho e pinTrigger) 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 sensore ad ultrasuoni.
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)
Blinking Led Senza Delay: MILLIS()
Obiettivo: Realizzazione del classico blinking led senza utilizzare la funzione Delay
Componenti elettronici:
Arduino UNO
Breadboard
Led
Resistenza (100 Ohm)
Teoria: Se da un certo punto di vista l’impiego della funzione delay è particolarmente utile per la realizzazione di semplici applicativi; da un altro punto di vista molteplici potrebbero essere gli inconvenienti legati all’utilizzo di questa funzione. E’ infatti, molto importante, considerare che l’istruzione delay è un’istruzione bloccante. Questa istruzione “congela” Arduino nel suo stato corrente, pertanto negli istanti di delay non è possibile fare aggiornamenti, gestire input attraverso letture o comandare attuatori mediante scritture. Ad esempio, nel caso della realizzazione di un semaforo per perdoni, dove è possibile effettuare la chiamata mediante la pressione di un pulsante, l’impiego della funzione delay è altamente sconsigliato per la gestione del semaforo perchè questo renderebbe invisibile la pressione del pulsate. Per tutte queste ragioni è opportuno scrivere codici senza l’impiego della funzione delay. Nel dettaglio è opportuno sostituire la funzione delay con la più funzionale ma meno pratica funzione millis.
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:
Codice:
A seguire viene riportato il codice utilizzato per fare lampeggiare il led senza delay. Nello specifico il codice memorizza l’ultimo istante in cui è avvenuta una azione (il led ha cambiato stato) nella variabile previousMillis mentre nella variabile currentMillis viene memorizzato il tempo corrente. Attraverso la differenza tra questi due tempi si comprendere se il led deve cambiare stato (accendersi o spegnersi). Nel dettaglio, se la differenza tra la variabile currentMillis e previousMillis è maggiore di 1000 millisecondi allora lo stato del led cambia.
Personalizzazioni: E’ possibile modificare il comportamento del circuito in questione intervenendo sul valore della variabile interval. Modificando il suo valore infatti cambia la frequenza di lampeggiamento del LED. E’ inoltre possibile modificare il pin digitale utilizzato per pilotare il LED cambiando rispettivamente hardware e software.
L’utilizzo di una resistenza, in serie al LED, serve appunto per limitare la quantità di corrente presente sul diodo emettitore di luce.
App Inventor – Emoticon
Obiettivo: Realizzazione di una applicazione Android per riprodurre delle emoticon attraverso la pressione di pulsanti
Teoria: La realizzazione di applicazioni Android richiede la conoscenza di software specifici (Android Studio) e complessi linguaggi di programmazione (Java). Tuttavia, queste competenze non sempre sono possedute dagli studenti e dalle persone che vogliono avvicinarsi alla programmazione per la prima volta. A tale scopo, il MIT di Boston ha sviluppato un tool che permette di creare applicazioni Android in modo grafico e semplice. Questo tool, denominato AppInventor, è accessibile a tutti attraverso il seguente portale web:
A seguire viene riportata una guida passo passo per la realizzazione della applicazione in questione. Prima di iniziare è opportuno scaricare i file necessari nella sezione “Componenti“
Creazione di un nuovo progetto: attraverso il menu project creare un nuovo progetto cliccando su start new project. Denominare il progetto: Emoticon.
Inserimento degli elementi principali dell’applicativo: semplicemente trascinando gli elementi dalla palette (menu a sinistra) è possibile inserire i seguenti elementi: 2 Bottoni (il pulsante si trova in Palette/UserInterface) ed una immagine (si trova in Palette/UserInterface).
Inserire il file di sfondo (background): Per inserire il file di sfondo cliccare su screen1 nel menu components, ed in seguito cliccare sulla scritta background nel menu properties. Infine, uplodare il file di sfondo (EMOSfondo.png).
Centrare i pulsanti: Per centrare i pulsanti, cliccare su screen1 nel menu componenti ed in seguito settare la proprietà center negli allineamenti verticali ed orizzontali attraverso il menu properties.
Cambiare il testo dei pulsanti: Per cambiare il testo di un pulsante, cliccare su Button1 nel menu componenti ed in seguito cliccare su text e modificare il testo di riferimento.
Inserire le immagini contenti le emoticon: Per associare delle immagini ad un elemento è necessario innanzitutto caricare i file di sfondo. Pertanto selezionare image1 nella schermata componenti ed in seguito premere su Picture nel menu di proprietà. Caricare infine i due file associati (EMOFelice.jpeg, EMOTriste.jpeg)
Sviluppo dell’algoritmo (BLOCKS):
Terminata la creazione dell’interfaccia grafica è opportuno realizzare il codice associato all’applicazione. Per fare questo, cliccare in alto a destra sul pulsante BLOCKS.
Associare un evento al pulsante: Per cambiare uno sfondo di una immagine quando viene premuto un pulsante è opportuno associare l’opportuno ascoltatore. Pertanto cliccare su button1 ed in seguito trascinare nella schermata dei blocchi l’evento: “When Button1 Click do”. Eseguire la medesima operazione anche con il pulsante 2.
Modificare l’immagine: Per modificare il file associato ad una immagine selezionare il metodo set image Picture ed indicare il nome corretto del file nel campo stringa.
Download dell’applicazione:
Per scaricare l’applicativo è necessario avere un cellulare Android con relativo lettore di QRCode. Pertanto, terminato lo sviluppo cliccare nel menu build -> App (provide QR code for APK)
Controllo di un LED Mediante Telecomando SAMSUNG
Obiettivo: Controllo ON/OFF di un LED mediante il telecomando SAMSUNG ad infrarossi.
Componenti elettronici:
Arduino
Telecomando di un televisore SAMSUNG
Ricevitore IR
1 Resistenza 100 Ohm
1 LED
Pre-requisiti:
Per utilizzare il sensore ad Infrarossi ed il telecomando è necessario installare la libreria IRremote. Per scoprire come installare la libreria IRremote consultare la seguente lezione:
Teoria: Il telecomando è un dispositivo elettronico, sviluppato negli anni 50, che permette di inviare (ma non di ricevere) segnali ad un altro dispositivo situato a distanza per comandarlo. In genere, i telecomandi tradizionali sono in grado di trasmette il segnale fino ad una distanza di circa 20 metri sotto forma di raggi infrarossi codificati. Affinché il dispositivo da comandare possa ricevere i segnali inviati dal telecomando è necessario utilizzare un ricevitore ad infrarossi tipicamente fornito con il telecomando. La maggior parte dei ricevitori ad infrarossi in commercio sono dotati di 3 pin. Nel caso specifico, viene utilizzato il sensore KY 022, sul quale in prossimità dei connettori sono riportate tre lettere (G, R, Y)
Alimentazione (R)
Ground (G)
Uscita (Y)
Il pin di uscita (Y) del ricevitore permette di inviare al microcontrollore (al quale è collegato il ricevitore) il segnale ricevuto dal telecomando. E’ importante considerare come ad ogni pulsante del telecomando sia associato un codice univoco. Tali codici variano in funzione dei vari telecomandi; pertanto prima di realizzare il programma finale è importante ottenere il valore del codice associato ai vari pulsanti. Nel caso specifico, si è deciso di utilizzare un telecomando SAMSUNG di una SMART TV. Utilizzando il software riportato in seguito è stato possibile determinare i codici associati ai vari pulsanti:
Pulsante
Codice
ON/OFF Button
3772793023
UP Button
3772795063
DOWN Button
3772778743
Number 0
3772811383
Number 1
3772784863
Number 2
3772817503
Number 3
3772801183
Number 4
4120482440
Number 5
3772813423
Number 6
3772797103
Number 7
3772788943
Number 8
3772821583
Number 9
3772805263
MENU
3772799143
Se il telecomando a disposizione è differente da quello proposto in questa lezione è possibile ottenere i codici eseguendo il software riportato in seguito. Una volta ottenuti i codici, è possibile attraverso il seguente collegamento circuitale scrivere il programma per comandare un LED attraverso il pulsante di ON/OFF del telecomando.
Collegamento Circuitale:
Codice:
A seguire viene riportato il software utile per determinare i codici associati ad ogni pulsante del telecomando a IR.
Ottenuto il codice associato al pulsante desiderato è possibile modificare il software per comandare l’azionamento di un LED mediante telecomando a IR. Il programma è molto simile al precedente viene solamente aggiunta la parte di codice relativa alla gestione del LED ed una istruzione IF per determinare se il pulsante premuto è quello di ON/OFF. E’ importante infatti considerare che il LED si accenderà solamente quando il pulsante di ON/OFF è premuto.
Personalizzazioni:
E’ possibile aggiungere più LED e comandare i vari LED con i vari pulsanti del telecomando.
Controllo di un LED Mediante Telecomando ELEGOO
Obiettivo: Controllo ON/OFF di un LED mediante il telecomando ELEGOO ad infrarossi.
Componenti elettronici:
Arduino
Telecomando IR Elegoo
Ricevitore IR
1 Resistenza 100 Ohm
1 LED
Pre-requisiti:
Per utilizzare il sensore ad Infrarossi ed il telecomando è necessario installare la libreria IRremote. Per scoprire come installare la libreria IRremote consultare la seguente lezione:
Teoria: Il telecomando è un dispositivo elettronico, sviluppato negli anni 50, che permette di inviare (ma non di ricevere) segnali ad un altro dispositivo situato a distanza per comandarlo. In genere, i telecomandi tradizionali sono in grado di trasmette il segnale fino ad una distanza di circa 20 metri sotto forma di raggi infrarossi codificati. Affinché il dispositivo da comandare possa ricevere i segnali inviati dal telecomando è necessario utilizzare un ricevitore ad infrarossi tipicamente fornito con il telecomando. La maggior parte dei ricevitori ad infrarossi in commercio sono dotati di 3 pin. Nel caso specifico, viene utilizzato il sensore KY 022, sul quale in prossimità dei connettori sono riportate tre lettere (G, R, Y)
Alimentazione (R)
Ground (G)
Uscita (Y)
Il pin di uscita (Y) del ricevitore permette di inviare al microcontrollore (al quale è collegato il ricevitore) il segnale ricevuto dal telecomando. E’ importante considerare come ad ogni pulsante del telecomando sia associato un codice univoco. Tali codici variano in funzione dei vari telecomandi; pertanto prima di realizzare il programma finale è importante ottenere il valore del codice associato ai vari pulsanti. Nel caso specifico del telecomando ELEGOO i codici associati ai vari pulsanti (ottenuti con il programma Arduino riportato in seguito) sono presentati nella seguente tabella:
Pulsante
Codice
ON/OFF Button
16753245
UP Button
16748655
DOWN Button
16769055
Number 0
16738455
Number 1
16724175
Number 2
16718055
Number 3
16743045
Number 4
16716015
Number 5
16726215
Number 6
16734885
Number 7
16728765
Number 8
16730805
Number 9
16732845
STOP
16769565
Se il telecomando a disposizione è differente da quello proposto in questa lezione è possibile ottenere i codici eseguendo il software riportato in seguito. Una volta ottenuti i codici, è possibile attraverso il seguente collegamento circuitale scrivere il programma per comandare un LED attraverso il pulsante di ON/OFF del telecomando.
Collegamento Circuitale:
Codice:
A seguire viene riportato il software utile per determinare i codici associati ad ogni pulsante del telecomando a IR.
Ottenuto il codice associato al pulsante desiderato è possibile modificare il software per comandare l’azionamento di un LED mediante telecomando a IR. Il programma è molto simile al precedente viene solamente aggiunta la parte di codice relativa alla gestione del LED ed una istruzione IF per determinare se il pulsante premuto è quello di ON/OFF. E’ importante infatti considerare che il LED si accenderà solamente quando il pulsante di ON/OFF è premuto.
Personalizzazioni:
E’ possibile aggiungere più LED e comandare i vari LED con i vari pulsanti del telecomando.
Come Installare una Libreria (IRremote Library)
Obiettivo: Installare una libreria per la gestione del telecomando ad infrarossi.
Teoria:
Per utilizzare con Arduino alcuni componenti elettronici particolarmente complessi, potrebbe essere necessario utilizzare una libreria di funzioni scritta dal produttore del dispositivo. Le librerie permettono di utilizzare il dispositivo attraverso una serie di funzioni semplificate che garantisco all’utilizzatore un elevata facilità di utilizzo. Alcune librerie sono native nell’ambiente Arduino (eg. SERVO, EEPROM, WIRE) altre devono essere scaricate ed opportunamente installate seguendo una specifica procedura.
A seguire sono riportate le istruzioni per installare la libreria IRRemote necessaria per utilizzare il telecomando ad infrarossi:
Per installare la libreria aprire l’editor di Arduino e andare in Sketch > Includi Libreria > Aggiungi Libreria da File ZIP, e selezionare il file IRremote ZIP che è stato scaricato dal link precedentemente riportato. Terminata la procedura sarà possibile aggiungere la libreria direttamente dalla sezione includi libreria (vedi le immagini riportate in seguito).