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

TeoriaIl 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

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




Controllare un LED mediante Smartphone

Obiettivo: Controllare un Led mediante Smartphone

Pre-requisiti:

Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 modulo Bluetooth HC06 
  • 1 Smartphone Android
  • 1 Resistenza da 220 Ohm
  • 1 LED

TeoriaPartendo 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 libreria SoftwareSerial 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:




PersonalizzazioniE’ possibile aggiungere più led modificando l’applicazione ed il codice sorgente.





Il Motore passo-passo (Stepper)

Obiettivo: Pilotare un motore passo-passo tramite Arduino



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Motore Stepper (e.g. Nema17 1.7A 1.8° 42MM Stepper Motor – 42shdc3025-24b)
  • 1 Driver A4988
  • 1 Alimentatore a 12 V e 2 A a corrente continua

TeoriaIl motore passo-passo, detto anche stepper, è un motore elettrico sincrono in corrente continua, senza spazzole, che permette la suddivisione della rotazione in piccoli angoli detti step. E’ un motore molto preciso e veloce e facilmente controllabile tramite una scheda elettronica, denominata “driver”. Esso viene collegato ad Arduino, e rende il controllo del motore molto facile, permettendo, con soli due uscite digitali, di controllare la velocità, la direzione e l’angolo di rotazione.

Il driver è il vero protagonista del controllo del motore passo-passo. Si pone tra Arduino e il motore e viene collegato come dal seguente schema:

I pin STEP e DIR servono per controllare la rotazione (e la velocità) e la direzione e vanno collegati a due uscite digitali di Arduino. Sulla destra invece l’A4988 presenta i pin per il collegamento al motore. GND (in basso) e VDD servono per alimentare la scheda tramite Arduino. Fondamentali sono i pin 1A, 1B, 2A e 2B che vanno collegati alle fasi del motore, come descritto più avanti. Infine, i pin GND e VMOT riguardano l’alimentazione del motore e vanno collegati all’alimentatore a 12 V.

Il motore necessita di 200 impulsi per completare un giro. Il programma si basa su cicli che gestiscono la rotazione. La velocità di rotazione dipende dal tempo di attesa tra un impulso e un altro all’interno dei singoli cicli di rotazione.

La pausa tra un impulso e un altro (e quindi la gestione della velocità di rotazione) dipende dalla funzione delayMicroseconds presente all’interno del ciclo di rotazione.

Collegamento Circuitale:

Codice:




PersonalizzazioniE’ possibile collegare un potenziometro e un pulsante per gestire la direzione e la velocità di rotazione.





Controllare un Servo Motore tramite Joystick

Obiettivo: Come controllare due servomotori utilizzando un Joystick per Arduino.



Pre-requisiti


Il Servomotore


Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 2 Servomotori
  • 1 Joystick KY-023K

TeoriaIl Joystick è una dispositivo elettronico che trasforma i movimenti di una leva manovrata dall’utente in una serie di segnali elettrici, questi segnali possono essere in seguito utilizzati per controllare un software (e.g., videogame), un’apparecchiatura o un attuatore meccanico. Possono esistere due differenti tipologie di Joystick:

  • Joystick Digitale: Rileva solamente la direzione dell’inclinazione della leva.
  • Joystick Analogico: Rileva anche l’ampiezza dell’inclinazione.

Nello specifico in questo articolo viene illustrato il funzionamento di uno dei controller più tipicamente utilizzati e presenti nei vari kit Arduino: il “Dual Axis Joystick Module KY-023“, Questo dispositivo, basato sul controller della PlayStation2, utilizza due potenziometri bi-assiali per controllare l’asse X e l’asse Y. Inoltre è possibile premere il controller per attivare uno switch. Nello specifico, la tensione di funzionamento del dispositivo è compresa nel range 3.3 – 5 V. Mentre le dimensioni sono pari a 2.6 x 3.4 cm.

Dual Axis Joystick Module KY-023

Nella tabella a seguire è riportata la piedinatura utile per collegare in modo corretto il Joystick KY-023.

KY-023 PIN Descrizione
GND Ground
+5V Alimentazione Vcc
VRx Uscita Analogica (Asse X)
VRy Uscita Analogica (Asse Y)
SW Switch

In questo articolo il Joystick viene utilizzato per comandare due differenti servomotori. Un servo è associato all’asse X ed un altro è invece associato all’asse Y. La posizione di riposo dei due servomotori è per entrambi 90 gradi. Spostando il Joystick lungo l’asse X si può modificare la posizione del servo associato all’asse X di un angolo variabile da 0 a 180 gradi. Lo stesso accade modificando la posizione del joystick lungo l’asse y.

Collegamento Circuitale:

Codice:






Pilotare un Servo Motore tramite Potenziometro

Obiettivo: Ruotare un Servo Motore tramite un potenziometro



Pre-requisiti


Il Servomotore


Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Servomotore
  • 1 Potenziometro

TeoriaIl Servomotore è uno particolare tipo motore ampiamente utilizzato sia in contesti industriali sia nell’ambito del modellismo. Nel dettaglio, il servomotore è impiegato in tutte le applicazioni che prevedono il controllo della posizione di in motore in corrente continua ed il raggiungimento di un determinato angolo in modo preciso indipendentemente dalla posizione iniziale. Le caratteristiche principali del servomotore sono:

Come già accennato, i servo
motori sono dispositivi molto utilizzati in svariati ambiti perché permettono
la rotazione del proprio albero in base ad un angolo prestabilito.

I servomotori sono stati utilizzati per la prima volta nel mondo del modellismo RC, generalmente per controllare lo sterzo delle auto RC o i flap su un aereo RC o per aprire botole su un drone. Con il tempo, hanno trovato il loro uso anche nella robotica, nell’automazione e in svariati progetti Arduino.

Solitamente l’albero può ruotare da 0 a 180 gradi e usando Arduino, possiamo dire a un servo di andare in una posizione specificata

In questo tutorial vedremo come interconnettere il servo motore ad Arduino e come farlo ruotare tramite un potenziometro con pochissime istruzioni.

Collegamento Circuitale:

Risultato:

Codice:






Il Servomotore

Obiettivo: Semplice comando di un servomotore



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Servomotore

TeoriaIl Servomotore è uno particolare tipo motore ampiamente utilizzato sia in contesti industriali sia nell’ambito del modellismo. Nel dettaglio, il servomotore è impiegato in tutte le applicazioni che prevedono il controllo della posizione di in motore in corrente continua ed il raggiungimento di un determinato angolo in modo preciso indipendentemente dalla posizione iniziale. Le caratteristiche principali del servomotore sono:

  • Tensione di alimentazione
  • Coppia Massima (espressa in Kg)
  • Angolo di rotazione

I servomotori sono caratterizzati da tre cavi che devono essere opportunamente collegati ad Arduino:

  • Il cavo di alimentazione positiva (+)
  • Il ground (-)
  • Il controllo

Collegamento Circuitale:

Collegamento Circuitale

Codice:



PersonalizzazioniE’ possibile modificare la velocità e l’angolo di rotazione del servomotore intervenendo direttamente sulle variabili in gioco.




Azionare un Motore a CC con il Transistor

Obiettivo: Azionare un motore a corrente continua tramite transistor



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Transistor p2n2222a
  • 1 Motore a DC 3V – 6V 17000 RPM
  • 1 Resistenza da 1KOhm

Teoria: Il Transistor è un elemento elettronico utilizzato come amplificatore di corrente o interruttore. E’ costruito da tre strati di materiale semiconduttori uniti con una doppia giunzione p-n, tipica dei diodi. Ad ogni strato è collegato un terminale: quello centrale si chiama Base, e quelli esterni Emettitore e Collettore. Il principio di funzionamento è basato sulla possibilità di controllare il passaggio di corrente tra collettore ed emettitore, tramite un impulso elettrico fornito alla base.

Esistono due tipologie di transistor, a seconda di come sono costruiti: Transistor PNP e NPN; l’unica differenza funzionale tra un transistor PNP e un transistor NPN è la polarità delle giunzioni durante il funzionamento

Tramite i transistor è possibile controllare attuatori che necessitano di grandi correnti, utilizzando una piccola tensione sulla base. In pratica basta collegare un ramo della corrente (ad esempio la terra) sul collettore e sull’emettitore del transistor e gestire il collegamento tramite la base.

Motori a Corrente Continua (DC): sono costituiti, al loro interno, da un magnete permanente e da un’elettrocalamita che viene alimentata da dei contatti striscianti, che, per come sono montanti, invertono la tonalità dell’elettrocalamita ad ogni mezzo giro, mantenendo in rotazione l’asse.

Collegamento Circuitale:

Codice:



PersonalizzazioniE’ possibile collegare un sensore di temperatura per far attivare il motore quando l’ambiente si surriscalda.




Come Collegare un Display LCD ad Arduino

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



Componenti elettronici:

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

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

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

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

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

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

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

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

Collegamento Circuitale:

Codice:




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





Creare funzioni con Arduino … per un Display a 7 Segmenti

Obiettivo: Creare una serie di funzioni con Arduino per utilizzare un display a 7 segmenti .



Componenti elettronici:

  • Arduino UNO
  • Breadboard
  • 1 Display a 7 Segmenti
  • 7 Resistenza (100 Ohm)

Pre-Requisiti:


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


TeoriaLa possibilità di riutilizzare il codice precedentemente scritto (code re-use) rappresenta una delle pratiche più comuni nella programmazione ovvero richiamare/invocare parti di codice precedentemente già sviluppate, ogni qualvolta risulta necessario, senza doverle riscrivere daccapo.

Nello specifico, questa possibilità si concretizza attraverso la scrittura di funzioni che possono essere richiamate/invocate all’interno dello stesso programma.

Queste funzioni possono svolgere diverse operazioni, che permettono di manipolare degli input dati ed eventualmente restituire degli output desiderati.

Nel caso in questione le tre funzioni implementate (denominate, uno, due e tre) non prevedono né il passaggio specifico di parametri di input né la restituzione di un output dato; queste tre funzioni svolgono solamente una serie di azioni sequenziali volte ad accendere alcuni elementi di un display a 7 segmenti. E’ importante considerare che le tre funzioni sono tutte definite prima del loro utilizzo (ovvero prima delle due funzioni principali di setup e loop).

  • Funzione Uno(): Stampa il carattere 1 sul display a 7 segmenti
  • Funzione Due(): Stampa il carattere 2 sul display a 7 segmenti
  • Funzione Tre(): Stampa il carattere 3 sul display a 7 segmenti
  • Invocazione delle Funzioni: Le funzioni possono essere invocate semplicemente richiamandole nel punto in cui devono essere eseguite. Nel caso in questione le funzioni sono richiamate all’interno del blocco loop().

Collegamento Circuitale:

Viene in seguito riportato lo schema elettrico utilizzato per comandare un display a 7 segmenti mediante funzioni. Nel dettaglio il display impiegato è della modalità anodo comune.

Collegamento Circuitale

Codice:

Considerando l’impiego di un display ad anodo comune i singoli LED possono essere accesi mediante l’istruzione digitalWrite(pinLed,LOW);

Tre differenti funzioni sono state create per gestire il display. La funzioni sono, rispettivamente denominate, uno(), due() e tre(). Queste funzioni devono essere definite prima dei blocchi setup e loop, non prevedono l’impiego di parametri in ingresso né la restituzione di output in uscita (funzioni di tipo void).



Personalizzazioni:

E’ possibile modificare il software aggiungendo altre funzioni per la rappresentazione dei vari numeri sul display a 7 segmenti.