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
Teoria: Il 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 Circuitale: Viene 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
ARDWARE #16 Carica e Scarica di un Condensatore. Visualizzare i tempi con i LED.
Obiettivo : Analizzare la carica e la scarica di un condensatore visualizzando i relativi tempi mediante due differenti LED
Componenti elettronici:
Arduino UNO
Breadboard
2 led (un led verde per il tempo di carica ed uno rosso per il tempo di scarica)
1 Condensatore (1000 microFarad)
1 Resistenza (1000 Ohm) per carica/scarica condensatore
2 Pulsanti
Teoria: Il 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. Questo poiché il legame tensione corrente in un condensatore è dettato dalla seguente relazione:
I(t) = C*dV(t)/dt
Pertanto essendo la tensione costante la derivata di tale valore sarà zero e di conseguenza anche l’intensità di corrente. 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 di due differenti led (un led verde ed uno rosso) per visualizzare i tempi di carica e di scarica del condensatore. Il principale vantaggio di questo approccio è legato all’utilizzo del mediatore visivo al fine di comprendere il comportamento di un condensatore. Nello specifico, premendo un il pulsante SW1 il condensatore inizierà a caricarsi e pertanto il led D1 si accenderà poiché percorso da corrente. Una volta carico il condensatore non permetterà più il passaggio di corrente e pertanto il led D1 si spegnerà. A questo punto sarà possibile premere il pulsante SW2 al fine di scaricare il condensatore. In questo caso ad accendersi sarà il led D2 che rimarrà accesso fino a che il condensatore non si sarà scaricato.
Schema Circuitale
Collegamento Circuitale:
Viene in seguito riportato lo schema elettrico utilizzato per analizzare il tempo di carica e di scarica di un condensatore.
Collegamento Circuitale
Tinkercad:
Personalizzazioni:
E’ possibile modificare i tempi di carica e di scarica variando il valore della resistenza o del condensatore.
La Morra Cinese con Arduino
Obiettivo: Realizzare il classico gioco Morra Cinese (Sasso Carta e Forbici) utilizzando il microcontrollore Arduino
Componenti elettronici:
Arduino UNO
Breadboard
3 Resistenze da 1kOhm per i pulsanti
3 Resistenze da 100 Ohm per i LED.
1 Buzzer Passivo (per la realizzazione di una melodia)
Teoria: Attraverso l’utilizzo di tre semplici pulsanti l’utente può selezionare il tipo di oggetto che desidera giocare (i.e., sasso carte e forbici). La scelta/risposta del computer viene selezionata attraverso l’impiego di un numero random generato in modo casuale con la funzione random(1,4). Tale funzione permetta la generazione di un numero casuale compreso tra 1 e 3, dove il numero 1 corrisponde al sasso, il numero 2 corrisponde alla carte ed il numero 3 a forbici. Questo valore viene confrontato nel blocco loop con i vari pulsanti premuti attribuendo la vittoria al computer o al giocatore ed accendendo il corrispettivo LED Attraverso l’utilizzo di un contatore di vittorie, si decide il vincitore finale al meglio delle 5 partite.
Algoritmo Morra Cinese
Collegamento Circuitale:
Collegamento Circuitale
Codice:
Personalizzazioni: E’ possibile modificare il gioco realizzando la versione più complessa: Sasso Carta Forbice Lizard Spock, proposta sulla serie TV “The Big Bang Theory”.
Algoritmo Morra Cinese – The Big Bang Theory Version
Misura di Temperatura mediante TMP36 [Tinkercad]
Obiettivo: Realizzare un controllo di temperatura mediante il dispositivo TMP36. Il TMP36 è il sensore di temperatura presente sul simulatore tinkercad.
Componenti elettronici:
Arduino UNO
Breadboard
TMP36
Teoria: Il componente elettronico TMP36 è un dispositivo integrato ad alta precisione utilizzato per misurare la temperatura ambientale. Dato il basso costo e l’ampia scala di valori ammissibili (ovvero da -40°C fino a 125°C) questi dispositivi sono particolarmente diffusi. E’ inoltre importante considerare che non è necessaria nessuna operazione calibrazione per ottenere valori di accuratezza pari a ±1°C ad una temperatura di circa +25°C e ±2°C nel range di temperature −40°C to +125°C.
Questo dispositivo è caratterizzato da tre differenti pin ed un corpo semi-cilindrico. Guardando il lato piatto del dispositivo, il pin di sinistra è l’alimentazione (5V), il pin di destra la massa (GND), mentre sul pin centrale viene generata una tensione funzione della temperatura. La temperatura può essere pertanto misurata attraverso una lettura analogica sul pin centrale effettuata mediante il controllore Arduino.
TMP36 Package
Come riportato in precedenza è possibile utilizzare un pin di input analogico per ottenere il valore di temperatura mediante l’istruzione di analogRead. Nel caso specifico, osservando il grafico che riporta la caratteristica tensione/temperatura (per il TMP36 la linea è evidenziata in rosso) per una tensione di uscita di 0.5V il sensore rileva la temperatura di 0°C. Pertanto valori di tensione inferiori a 0.5V indicano una temperatura sotto lo zero, mentre valori di tensione superiori a 0.5V indicano una temperatura positiva. Inoltre, è importante considerare che “una variazione di grado corrisponde ad una variazione di tensione di 10mV”. Quindi, se sul pin di input analogico sono presenti 550mV significa che il sensore sta rilevando una temperatura di 5°C (550mV – 500mV = 50 mV variazione di 5°C).
Caratteristica tensione corrente
Collegamento Circuitale:
Viene in seguito riportato lo schema elettrico utilizzato per valutare la temperatura mediante il dispositivo elettronico TMP36
Collegamento Circuitale
Codice:
La temperatura viene determinata attraverso una lettura analogica ed una opportuna scalatura. Nel dettaglio, la tensione prodotta dal componente TMP36 viene letta utilizzando il pin analogico A0 e mappata in un intervallo 0-1023. Considerando che alla temperatura di 0 gradi la tensione misurata è pari a 0.5V e che per ogni grado percepito si ha un incremento di tensione di 10mV è opportuno riportare il valore letto attraverso la funzione analogRead in mV ed eseguire un’opportuna scalatura. Pertanto se il valore letto mediante l’istruzione di analogRead è memorizzato in una variabile denominata valTMP la temperatura può essere ottenuta mediante la seguente formula:
temperatura = (((valTMP5.0)/1023.0)-0.5)*100
Tinkercad
Personalizzazioni:
E’ possibile modificare il circuito aggiungendo una ventola che si accende in modo automatico superata una determinata temperatura.
Controllo di Temperatura mediante LM35
Obiettivo: Realizzare un controllo di temperatura mediante il dispositivo LM35.
Componenti elettronici:
Arduino UNO
Breadboard
LM35
Teoria: Il componente elettronico LM35 è un dispositivo integrato ad alta precisione utilizzato per misurare la temperatura ambientale. Dato il basso costo e l’ampia scala di valori ammissibili (ovvero da -55°C fino a 150°C) questi dispositivi sono particolarmente diffusi. E’ inoltre importante considerare che e nessun tipo di calibrazione esterna è richiesta.
Estratto Datasheet LM35
Questo dispositivo è caratterizzato da tre differenti pin ed un corpo semi-cilindrico. Guardando il lato piatto del dispositivo, il pin di sinistra è l’alimentazione (5V), il pin di destra la massa (GND), mentre sul pin centrale viene generata una tensione funzione della temperatura (10mV per ogni grado sopra lo zero). La temperatura può essere pertanto misurata attraverso una lettura analogica sul pin centrale effettuata mediante il controllore Arduino.
LM35 Package
Collegamento Circuitale:
Viene in seguito riportato lo schema elettrico utilizzato per valutare la temperatura mediante il dispositivo elettronico LM35
Collegamento Circuitale
Codice:
La temperatura viene determinata attraverso una lettura analogica ed una opportuna scalatura. Nel dettaglio, la tensione prodotta dal componente LM35 viene letta utilizzando il pin analogico A0 e mappata in un intervallo 0-1023. Considerando che per ogni grado percepito si ha un incremento di tensione di 10mV è opportuno riportare il valore letto attraverso la funzione analogRead in mV. Questa operazione può essere svolta dividendo il valore letto per 1023 e moltiplicando il risultato per 5000. I gradi sono infine ottenuti dividendo il risultato per 10.
Personalizzazioni:
E’ possibile modificare il circuito aggiungendo una ventola che si accende in modo automatico superata una determinata temperatura.
Teoria: Partendo dall’applicativo Android, sviluppato nella lezione: “Appinventor – Bluetooth HC06 – LED” in questa lezione viene illustrato come utilizzare l’app creata per controllare un LED via smartphone attraverso il protocollo bluetooth.
Nel caso specifico il protocollo Bluetooth (abbreviato in BT) è uno standard di trasmissione dati per reti senza fili. Il BT fornisce un metodo standard, economico e sicuro per scambiare informazioni tra dispositivi diversi attraverso onde radio a corto raggio (qualche decina di metri). La comunicazione Bluetooth tra lo Smartphone ed Arduino avviene attraverso l’utilizzo di un modulo BT per Arduino denominato HC06.
Modulo BT HC06
Il Modulo HC06 implementa un convertitore da porta seriale UART a porta Bluetooth permettendo la comunicazione tra un microprocessore come una scheda Arduino e un dispositivo dotato di comunicazione Bluetooth (PC, Smartphone o Tablet). Il modulo è dotato di quattro differenti PIN descritti nella seguente tabella:
PIN
Descrizione
1
Vcc (Alimentazione, funziona correttamente anche con i 5 V di Arduino)
2
Gnd (Ground)
3
Txd (Pin di trasmissione seriale. Deve essere collegato ad un pin di ricezione)
4
Rxd (Pin di ricezione seriale. Deve essere collegato ad un pin di trasmissione)
Da un punto di vista pratico, grazie all’impiego della specifica libreriaSoftwareSerial inclusa nel pacchetto software di Arduino è possibile comunicare con il modulo Bluetooth ed il relativo dispositivo connesso. La libreria mette infatti a disposizione una classe SoftwareSerial all’interno della quale sono definite le principali funzioni necessarie per utilizzare il modulo HC06. Quali:
Begin: Inizializza l’interfaccia seriale definendo la velocità standard di comunicazione
Available: Indica se dei dati sono stati inviati al modulo HC06 (dati disponibili da leggere).
Read: Legge i dati ricevuti
Write: Scrive i dati
Collegamento Circuitale:
Schema Circuitale
Codice:
Personalizzazioni: E’ possibile aggiungere più led modificando l’applicazione ed il codice sorgente.
App Inventor – Bluetooth HC06 – LED
Obiettivo: Realizzazione di una applicazione Android per la comunicazione Smartphone-Android mediante protocollo bluetooth per il comando di un singolo LED (ON/OFF).
Componenti:
Appinventor
QRDroid
Teoria: Bluetooth è uno standard di trasmissione dati per reti senza fili. Questo protocollo è ampiamente utilizzato per la connessione tra i moderni smartphone e i differenti dispositivi casalinghi/industriali (amazon echo, altoparlanti, cuffie, etc). Nel caso specifico la comunicazione avviene mediante la realizzazione di una app tra Smartphone ed Arduino per il comando di un singolo LED.
Creazione della app (DESIGNER):
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: BluetoothLED.
Creazione di un nuovo progetto
Inserimento degli elementi principali dell’applicativo: semplicemente trascinando gli elementi dalla palette (menu a sinistra) è possibile inserire i seguenti elementi: Listpicker (si trova in Palette/UserInterface), Button (si trova in Palette/UserInterface), Label (si trova in Palette/UserInterface).
Inserimento degli elementi principali
Adattare le dimensioni dei pulsanti: Per adattare le dimensioni dei singoli elementi cliccare su screen1 nel menu components, selezionare in seguito l’elemento (sempre nel menu componenti) e cliccare su width nel menu properties. Infine, selezionare l’opzione fill parent (riempe il contenitore genitore).
Adattare le dimensioni dei pulsanti
Modificare il testo: Per modificare il testo riportato nelle singole entità, cliccare sui differenti componenti nel menu componenti ed in seguito settare il testo attraverso il menu properties.
Componenti bluetooth e pulsante ON/OFF: Per completare l’applicativo vengono infine inseriti: il ClientBluetooth (si trova in Palette/Connectivity) e due pulsanti (ON/OFF). E’ importante considerare che a differenza degli altri elementi il modulo bluetooth non risulta visibile nella GUI perché componente non visibile
Componenti Bluetooth
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.
Realizzazione del codice: Per gestire l’applicativo implementare la procedura riportata nella figura sottostante
Codice
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)
Il Sensore di Presenza
Obiettivo: Utilizzare un Sensore di presenza PIR.
Componenti elettronici:
Arduino UNO
Breadboard
1 Led
1 Sensore PIR
Teoria: Il sensore ad infrarossi passivo è un dispositivo elettronico che misura i raggi infrarossi irradiati dai vari oggetti nel suo campo di vista. Per questo motivo, questo dispositivo è ampiamente utilizzato come rilevatore di movimento partendo dal presupposto che ogni persona irradia energia nello spettro dell’infrarosso. Partendo da questo presupposto è importante considerare che un sensore PIR, a differenza di un sensore ad ultrasuoni non emette onde (rileva soltanto informazioni nello spettro infrarosso), inoltre è capace di misurare una variazione dell’energia associata al movimento di un oggetto/persona.
Nel caso specifico il sensore PIR proposto nell’attività è un HC-SR501. In seguito sono riportate le principali caratteristiche tecniche di questo sensore:
Tensione di alimentazione 5-20V
Corrente assorbita 65mA
Tensione in uscita 0-3,3V
Range di sensibilità: meno di 120 gradi per 7 metri
Sono inoltre presenti due differenti trimmer per personalizzare le caratteristiche del dispositivo:
Modifica la sensibilità legata alla distanza: ruotando in senso orario la distanza aumenta fino ad un massimo di 7 metri, differentemente, ruotando in senso antiorario il potenziometro la distanza diminuisce fino ad un minimo di 3 metri.
Modifica la sensibilità legata al tempo per il quale il segnale di uscita rimane alto: ruotando in senso orario il tempo aumenta (fino ad un massimo di 5 minuti), differentemente, ruotando in senso antiorario il tempo diminuisce (fino ad un minimo di tre secondi).
Nel sensore è inoltre presente un Jumper che permette di impostare due differenti modalità di funzionamento:
H (Hold/Repeat/Retriggering): In questa posizione il sensore continuerà a mantenere il livello del segnale in uscita HIGH fintanto che il movimento continuerà ad essere percepito.
L (Intermittent or No-Repeat/Non-Retriggering): In questa posizione il sensore continuerà a mantenere il livello del segnale in uscita HIGH per il tempo definito attraverso il potenziometro.
Il sensore di presenza HC-SR501 è costituito da 3 pin. Un pin di alimentazione (5v), un pin di ground, ed il pin che riporta l’eventuale presenza di un oggetto (da collegare ad un pin di input digitale di Arduino).
Collegamento Circuitale:
Collegamento Circuitale
Codice:
A seguire viene riportato il codice necessario per l’utilizzo del sensore PIR utilizzato per realizzare il programma.
Personalizzazioni:
E’ possibile modificare il circuito introducendo un relè indispensabile per comandare una “lampada reale” e non un semplice led.
Crepuscolare [Avanzato] (Smart Lamp)
Obiettivo: Accensione automatica di quattro LED al diminuire dell’intensità di luce rilevata.
Componenti elettronici:
Arduino UNO
Breadboard
4 Led
1 Foto-resistenza
4 Resistenze (100Ohm) per Led
1 Resistenza (2.2kOhm) per Foto-resistenza
Teoria: La foto resistenza è un componente elettronico la cui resistenza è inversamente proporzionale alla quantità di intensità luminosa che lo colpisce. Questo significa che la corrente (inversamente proporzionale alla resistenza) aumenta all’aumentare dell’intensità luminosa. A seguire, viene riportato la caratteristica Ohm/Lux di una fotoresistenza tipicamente impiegata in applicazioni realizzate mediante Arduino.
Datasheet Fotoresistenza
Nel caso specifico, è importante ricordare che Arduino non può rilevare né variazioni di resistenza né variazioni di corrente. Il microcontrollore può infatti analizzare solamente valori di tensione. Per questo motivo, l’utilizzo di una resistenza è indispensabile al fine di collegare correttamente la fotoresistenza ad Arduino. Nel dettaglio, il circuito previsto per trasformare la variazione di resistenza in una variazione di tensione è il partitore di tensione.
Partitore di Tensione e Fotoresistenza
Nel circuito presentato, la variazione di luminosità produce una variazione del valore della fotoresistenza. Di conseguenza anche il valore della corrente risulta funzione dell’intensità luminosa e di conseguenza anche il valore di tensione in ingresso ad Arduino. Nel dettaglio:
Un incremento della luminosità porta ad un decremento della tensione.
Un decremento della luminosità porta ad un incremento della tensione.
se il pulsante viene premuto la tensione in ingresso ad Arduino è pari a 0.
se il pulsante non viene premuto la tensione in ingresso ad Arduino è pari a Vcc (5V)
Resistenza di Pull Down:
se il pulsante viene premuto la tensione in ingresso ad Arduino è pari a Vcc (5V).
se il pulsante non viene premuto la tensione in ingresso ad Arduino è pari a 0.
Attraverso l’utilizzo del comando analogRead è possibile leggere la tensione su uno specifico pin analogico (A0-A5) di Arduino. La funzione analogRead restituisce un valore compreso tra 0 e 1023 a seconda della tensione letta dal microcontrollore. A titolo di esempio, se il valore di tensione letto utilizzando la funzione analogRead sul pin A0 di Arduino risulta pari a 613. Il valore di tensione può essere facilmente calcolato:
valoreTensioneAnalogico = 613/1023*5 = 3V
dove:
Il valore analogico di tensione letto utilizzando l’istruzione analogRead è pari a 613
Il valore di tensione massimo che può essere letto dalla funzione analogRead è pari a 1023
La tensione massima in uscita ad Arduino è pari a 5V
Tale valore può essere facilmente utilizzato per controllare uno o più led mediante l’istruzione condizionale IF.
Collegamento Circuitale:
Collegamento Circuitale
Codice:
A seguire viene riportata la schematizzazione mediante flowchart dell’algoritmo utilizzato per realizzare il programma.
Flowchart
Codice:
[crayon-673f2a69dbdca194372487/]
P
Crepuscolare (Smart Lamp)
Obiettivo: Accensione automatica di un LED al diminuire dell’intensità di luce rilevata.
Componenti elettronici:
Arduino UNO
Breadboard
1 Led
1 Foto-resistenza
1 Resistenza (2.2kOhm)
Teoria: La foto resistenza è un componente elettronico la cui resistenza è inversamente proporzionale alla quantità di intensità luminosa che lo colpisce. Questo significa che la corrente (inversamente proporzionale alla resistenza) aumenta all’aumentare dell’intensità luminosa. A seguire, viene riportato la caratteristica Ohm/Lux di una fotoresistenza tipicamente impiegata in applicazioni realizzate mediante Arduino.
Datasheet Fotoresistenza
Nel caso specifico, è importante ricordare che Arduino non può rilevare né variazioni di resistenza né variazioni di corrente. Il microcontrollore può infatti analizzare solamente valori di tensione. Per questo motivo, l’utilizzo di una resistenza è indispensabile al fine di collegare correttamente la fotoresistenza ad Arduino. Nel dettaglio, il circuito previsto per trasformare la variazione di resistenza in una variazione di tensione è il partitore di tensione.
Partitore di Tensione e Fotoresistenza
Nel circuito presentato, la variazione di luminosità produce una variazione del valore della fotoresistenza. Di conseguenza anche il valore della corrente risulta funzione dell’intensità luminosa e di conseguenza anche il valore di tensione in ingresso ad Arduino. Nel dettaglio:
Un incremento della luminosità porta ad un decremento della tensione.
Un decremento della luminosità porta ad un incremento della tensione.
Attraverso l’utilizzo del comando analogRead è possibile leggere la tensione su uno specifico pin analogico (A0-A5) di Arduino. La funzione analogRead restituisce un valore compreso tra 0 e 1023 a seconda della tensione letta dal microcontrollore. A titolo di esempio, se il valore di tensione letto utilizzando la funzione analogRead sul pin A0 di Arduino risulta pari a 613. Il valore di tensione può essere facilmente calcolato:
valoreTensioneAnalogico = 613/1023*5 = 3V
dove:
Il valore analogico di tensione letto utilizzando l’istruzione analogRead è pari a 613
Il valore di tensione massimo che può essere letto dalla funzione analogRead è pari a 1023
La tensione massima in uscita ad Arduino è pari a 5V
Tale valore può essere facilmente utilizzato per controllare un led mediante l’istruzione condizionale IF.
Collegamento Circuitale:
Collegamento Circuitale
Codice:
A seguire viene riportata la schematizzazione mediante flowchart dell’algoritmo utilizzato per realizzare il programma.
Flowchart
[crayon-673f2a69dee80232733573/]
Personalizzazioni:
E’ possibile modificare il circuito aggiungendo altri led. E’ inoltre possibile modificare il codice al fine di realizzare una lampada che accenda un numero differente di led in funzione della luminosità.