Utilizzare la EEPROM e salvare dati in modo permanente

Obiettivo: Salvare dati in modo permanente nella memoria EEPROM di Arduino.

Componenti Elettronici:

  • Arduino UNO

Teoria: Arduino UNO è una piattaforma HW dotata di Microcontrollore ATMega328P, questo dispositivo è dotato di tre differenti tipologie di memoria interna

  • FLASH 32 KB (Memoria allo stato solido): Memoria non volatile nella quale viene memorizzato il programma (include anche il bootloader (0,5 KB). 
  • SRAM 2 KB (Static RAM): Memoria volatile utilizzata per memorizzare le variabili e le costanti del software.etc)
  • EEPROM 1KB (Electrically Erasable Programmable ROM): Memoria non volatile utilizzate per salvare le differenti configurazioni del programma.

Schema Elettrico Arduino

E’ possibile utilizzare la EEPROM di Arduino al fine di memorizzare delle informazioni in modo permanente e che non vengano cancellate in mancanza di alimentazione. La Memoria EEPROM di Arduino UNO è pari a 1Kb = 1024 spazi o celle in cui si possono memorizzare i dati (numeri compresi tra 0 e 255).
E’ importante considerare che, se si prova a memorizzare un numero negativo oppure un numero maggiore di 255, i valori memorizzati risultano errati.
Per potere utilizzare la memoria EEPROM interna è necessario includere la specifica liberia “EEPROM.h”. Non sono necessari componenti hardware ulteriori.

Le principali funzioni utilizzate per gestire la memoria EEPROM sono:

  • EEPROM Clear: Cancella i Byte nella EEPROM.
  • EEPROM Read: Legge il valore memorizzato nella EEPROM.
  • EEPROM Write: Memorizza il valore nella EEPROM

Codice: Esempio di una scrittura su EEPROM

Per potere scrivere dati nella EEPROM è necessario includere la libreria “EEPROM.h”, nel dettaglio la funzione utilizzata è:

EEPROM.write(address, value)

dove address è il parametro che indica l’area di memoria dove scrivere il dato (da 0 a 1023), e value è il valore da scrivere in EEPROM (da 0 e 255).




Codice: Esempio di una lettura su EEPROM


Per potere leggere dati nella EEPROM è necessario includere la libreria “EEPROM.h”, nel dettaglio la funzione utilizzata è:

value = EEPROM.read(address)

dove address è il parametro che indica l’area di memoria dove leggere il dato (da 0 a 1023), e value è il valore del dato letto dalla EEPROM (da 0 e 255).






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:


Come Installare una Libreria (IRremote Library)


TeoriaIl 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)

Ricevitore IR

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:

Schema 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:


Come Installare una Libreria (IRremote Library)


TeoriaIl 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)

Ricevitore IR

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:

Schema 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:

  • Collegarsi al sito http://z3t0.github.io/Arduino-IRremote e scaricare lo zip relativo alla libreria.
  • 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).

Procedura per includere la libreria IRremote – Step 1

Procedura per includere la libreria IRremote – Step 2

Procedura per includere la libreria IRremote – Step 3




Password di accesso con KeyPad 4×4 e Arduino – (Tinkercad)

Obiettivo: Utilizzo di un keypad 4×4 per l’accensione di un led mediante una relativa password di accesso (lunga 4 caratteri). Simulazione basata sull’utilizzo del software Tinkercad.

Componenti elettronici:

  • Non servono componenti elettronici hardware, basta il tuo PC ed una connessione ad internet.
  • http://tinkercad.com/

TeoriaIl keypad è un dispositivo elettronico costituito da un insieme di pulsanti disposti in un blocco o “pad” che riportano cifre, simboli o lettere alfabetiche. I keypad sono prevalentemente utilizzati nei dispositivi elettronici che richiedono principalmente input numerici come calcolatrici, telefoni a pulsante, distributori automatici, bancomat, serrature a combinazione e serrature digitali. .
Il keypad presente nel software di simulazione Tinkercad è un keypad 4×4 che presenta 16 tasti di cui 10 numerici (0,1,2,3,4,5,6,7,8,9) e 6 tasti alfanumerici (A,B,C,D,*,#). A seguire vengono riportate alcune immagini e tabelle utili per comprendere il funzionamento del keypad da un punto di vista elettronico.

Pin Number Description
ROW
1 PIN1 is taken out from 1st  ROW
2 PIN2 is taken out from 2nd  ROW
3 PIN3 is taken out from 3rd  ROW
4 PIN4 is taken out from 4th  ROW
COLUMN
1 PIN1 is taken out from 1st  COLUMN
2 PIN2 is taken out from 2nd  COLUMN
3 PIN3 is taken out from 3rd  COLUMN
4 PIN4 is taken out from 4th  COLUMN

Come riportato in tabella, un Keypad 4X4 è dotato di otto terminali dove quattro sono le righe della matrice e quattro invece le colonne. Attraverso questi 8 terminali è possibile comprendere quale tasto è stato premuto.
La struttura interna del keypad è riportata nella seguente figura:

Struttura interna del dispositivo

Nel caso in questione il keypad è utilizzato per accendere un led per 1 secondo quando una password lunga 4 caratteri è inserita nel modo corretto.

Collegamento Circuitale:

Collegamento Circuitale

Codice:

La gestione del keypad è facilitata grazie all’utilizzo della libreria <keypad.h>. Mentre la libreria è presente di default nell’applicativo Tinkercad, nel caso in cui il lettore voglia realizzare questo progetto con Arduino fisicamente è opportuno aggiungere la libreria manualmente al progetto.



Personalizzazioni:

E’ possibile aggiungere un display ed utilizzare un relè per implementare il controllo di una cassaforte.




Controllo di un LED Mediante Telecomando Infrarossi – (Tinkercad)

Obiettivo: Controllo ON/OFF di un LED mediante il telecomando ad infrarossi. Simulazione basata sull’utilizzo del software Tinkercad.



Componenti elettronici:

  • Non servono componenti elettronici hardware, basta il tuo PC ed una connessione ad internet.
  • http://tinkercad.com/

TeoriaIl 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:

  • Alimentazione
  • Ground
  • Uscita

Il pin di uscita 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 di Tinkercad i codici associati ai vari pulsanti (ottenuti con il programma Arduino riportato in seguito) sono presentati nella seguente tabella:

Pulsante Codice
ON/OFF Button 16580863
UP Button 16601263
DOWN Button 16584943
Number 0 16593103
Number 1 16582903
Number 2 16615543
Number 3 16599223
Number 4 16591063
Number 5 16623703
Number 6 16607383
Number 7 16586983
Number 8 16619623
Number 9 16603303
STOP 16597183

Una volta ottenuti i codici è possibile attraverso il collegamento circuitale riportato in seguito scrivere il programma per comandare un LED attraverso il pulsante di ON/OFF

Collegamento Circuitale:

Schema 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.




Comando di una Lampada Mediante Relè – (Tinkercad)

Obiettivo: Comando di una Lampada mediante un relè. Simulazione bastata sull’utilizzo del software Tinkercad.



Componenti elettronici:

  • Non servono componenti elettronici hardware, basta il tuo PC ed una connessione ad internet.
  • http://tinkercad.com/

TeoriaUno dei problemi principali di Arduino è legato alla impossibilità apparente di comandare dispositivi che richiedono tensione e/o correnti elevate. Infatti, è importante considerare che Arduino, attraverso le sue istruzioni di digitalWrite può generare su uno specifico pin in uscita una tensione massima di 5 Volt con una corrente pari a 70 milliAmpere. Molti utilizzatori si chiedono pertanto come sia possibile comandare dispositivi più complessi rispetto a quelli presenti nei tradizionali kit base Arduino, come lampade, ventole, o stripline led. La risposta a questa domanda è legata ad un semplice dispositivo elettromeccanico denominato relè (in inglese relay): il quale può essere utilizzato come un interruttore (ad alta tensione) comandato elettronicamente. Da un punto di vista fisico, il relè è costituto da un elettromagnete (costituito da una bobina di filo conduttore elettrico, tipicamente rame, avvolto intorno ad un nucleo di materiale ferromagnetico). Al passaggio di corrente elettrica nella bobina, l’elettromagnete modificherà la posizione di un contatto mobile aprendo o chiudendo il circuito ad esso collegato. Il contatto aperto quando la bobina non è alimentata prende il nome di normalmente aperto (NO); mentre, l’altro contatto, quello chiuso prende il nome di normalmente chiuso (NC).

Esempio di funzionamento di un relèa

Da un punto di vista elettronico, utilizzare un relè per comandare una lampada a 230volts mediante Arduino è una procedura particolarmente semplice. Il primo passo è quello di collegare, mediante il contatto normalmente aperto del relè, la lampada ad una sorgente di alimentazione esterna (come ad esempio la rete elettrica di casa). In seguito la bobina del relè viene collegata al pin digitale di Arduino impiegato per il controllo della lampada. Questo ci permette di modificare la posizione del contatto mobile del relè attraverso l’istruzione di digitalWrite con la quale la bobina può essere o non essere eccitata. In questo modo è possibile comandare una lampada a 220Volts mediante una semplice tensione a 5Volts.

Datasheet del Relè LU-5-R presente in Tinkecad

Nel caso specifico, l’impiego di un pulsante permette di controllare l’attivazione della bobina e quindi il controllo della lampada. L’applicazione proposta è stata simulata mediante l’utilizzo del software di simulazione tinkercard. Tensioni elevate possono essere pericolose per la salute personale, pertanto l’impiego almeno in una fase iniziale di un simulatore rende questa operazione sicuramente più sicura. A seguire viene riportato lo schema elettrico ed il codice utilizzato per il comando della lampada mediante relè.

Collegamento Circuitale:

Schema Circuitale

Codice:

A seguire viene riportata la schematizzazione mediante flowchart dell’algoritmo utilizzato per realizzare il programma.

Flowchart



Personalizzazioni:

E’ possibile modificare il circuito utilizzando il pulsante come interruttore: la lampada deve rimanere accesa fino a quando il pulsante non viene premuto una seconda volta (Attenzione possibili problematiche di rimbalzo).




Controllo di un LED mediante Monitor Seriale

Obiettivo: Utilizzare il monitor seriale per l’accensione/spegnimento di un LED

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Resistenza (100 Ohm) per LED
  • 1 LED

TeoriaIl monitor seriale è uno degli strumenti più utilizzati per realizzare il “debug” delle applicazioni sviluppate sfruttando il microcontrollore Arduino. Attraverso il comando Serial.println() è infatti possibile stampare a monitor sia delle stringhe specifiche sia il contenuto delle variabili. Tuttavia, è importante considerare che attraverso il monitor seriale, non solo è possibile avviare una comunicazione Arduino->PC, ma anche una comunicazione PC->Arduino. Nel caso specifico di questa applicazione il monitor seriale sarà utilizzato per inviare al controllore Arduino un carattere (tipo char ad 8 bit) specifico per accendere o spegnere un LED.

Collegamento CircuitaleViene in seguito riportato lo schema elettrico utilizzato per controllare un LED mediante Monitor Seriale. Il LED risulta semplicemente collegato al pin digitale 8 di Arduino, il quale sarà attivato o disattivato (HIGH/LOW) in funzione del carattere ricevuto dal monitor seriale.

Codice:

Le principali funzioni della classe Serial sono impiegate nel seguente codice:

  • Serial.available():
    Restituisce il numero di byte (caratteri) disponibili per la lettura nella porta seriale. Questi dati vengono immagazzinati un buffer di ricezione seriale il quale può contenere 64 bytes.
  • Serial.read():
    Legge i dati provenienti dalla porta seriale






Carica di un Condensatore

Obiettivo : Analizzare la carica di un condensatore mediante una lettura analogica.

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Condensatore (1000 microFarad)
  • 1 Resistenza (100 Ohm) per carica condensatore
  • 1 Pulsante
  • 1 Resistenza (1 kOhm) per resistenza pulsante

TeoriaIl condensatore è un dispositivo elettronico che ha la capacità di immagazzinare carica elettrostatica. Tale dispositivo modifica il suo comportamento in funzione del segnale di alimentazione utilizzato nell’applicazione in questione (e.g., segnale continuo, segnale alternato, etc …).

In regime di tensione costante (corrente continua), il condensatore si carica inizialmente (regime transitorio) fino a raggiunge una situazione di equilibrio dove la carica sulle armature corrisponde esattamente alla tensione applicata mediante il generatore (regime stazionario). Una volta carico, il condensatore si comporta come un circuito aperto ovvero interrompe ogni flusso di corrente all’interno del circuito.
Al cessare dell’eccitazione sul circuito l’energia elettrica accumulata nel condensatore torna a scaricarsi sotto forma di corrente elettrica rilasciata nel circuito.

Il tempo di carica e di scarica dipende alla costante di tempo Tau definita come:

Tau = R*C

Nelle seguenti figure sono riportati i grafici relativi alla carica e alla scarica del condensatore. Nell’immagine di sinistra il condensatore, inizialmente scarico, si carica fino a raggiungere il livello di tensione finale f. Differentemente, nell’immagine di destra il condensatore, inizialmente carico e con una tensione f ai suoi capi, si scarica fino a raggiungere un livello di tensione finale pari a zero volt.

In questa esperienza si propone l’utilizzo del monitor seriale per visualizzare i tempi di carica del condensatore. E’ importante considerare che i dati riportati sul monitor seriale (tempo e tensione) possono essere facilmente copiati in un foglio excel per ottenere una migliore rappresentazione grafica dell’evoluzione della tensione nel tempo.

L’utilizzo di un pulsante permette di avviare la carica del condensatore mediante l’utilizzo di una istruzione di digitalWrite.

Collegamento Circuitale:

Viene in seguito riportato lo schema elettrico utilizzato per analizzare il tempo di carica di un condensatore. Nel dettaglio il tempo di carica viene monitorato utilizzando la lettura analogica del controllore Arduino.

Collegamento Circuitale

Codice:



Personalizzazioni:

E’ possibile modificare il codice e l’hardware per simulare anche la scarica del condensatore.




Controllo di Temperatura e Umidità mediante DHT11

Obiettivo: Realizzare un controllo di temperatura e umidità mediante il sensore DHT11.

Componenti elettronici:

  • Arduino UNO
  • DHT11

TeoriaIl DHT11 è un sensore digitale per la misura della temperatura ed umidità molto stabile e semplice da usare e configurare.
E’ un sensore di basso costo che ha un range di misurazione dell’umidità che va da 20%RH al 90%RH (con una precisione di 5%RH) e di temperatura da 0 a 50°C (con una precisione di 2°C)

Il sensore si presenta con tre pin.

Guardando il dispositivo dal lato della parte sensibile, si ha che il pin di sinistra è quello dell’alimentazione (5V), quello centrale è il GND e il destro è il PIN del segnale digitale, da collegare ad un’uscita digitale di Arduino.

Collegamento Circuitale:

Viene in seguito riportato lo schema elettrico utilizzato per valutare la temperatura mediante il dispositivo elettronico DHT11

Codice:

Per il funzionamento del dispositivo è necessario caricare la libreria DHT.h nell’ide. Successivamente va definito il tipo di dispositivo che si sta utilizzando (nel nostro caso DHT11). Tale informazione va inserita nella dichiarazione dell’oggetto DHT ( DHT dht(DHTPIN, DHTTYPE); ).

La proprietà readTemperature restituisce la temperatura in gradi Celsius come default, a meno che non si inserisce un valore booleano true come argomento. In questo caso la temperatura verrà espressa in gradi Farhenait.

La proprietà readHumidity restituisce l’umidità relativa (RH).



Personalizzazioni:

E’ possibile modificare il circuito aggiungendo un display per visualizzare i valori di temperatura e umidità.