Quinto Esperimento: Rilevazione temperatura con sensore LM35dz stampato su lcd HD44780 compatibile

by admin on 26/07/2011

Come promesso, vi posto il tutorial riguardante il sensore di temperatura LM35dz   già usato nel precendente tutorial, ma ora lo rendiamo indipendente dal pc, il valore viene stampato su un lcd HD44780 compatibile al posto del monitor seriale dell’ide di Arduino.

Le premesse:

Se volete sapere cos’è uno schermo lcd hd44780 leggete l’articolo ad esso dedicato qui.

Se volete sapere cos’è un sensore di temperatura LM35dz leggete l’articolo ad esso dedicato qui.

Colleghiamo Arduino tramite una porta usb al pc, avviate l’ide, se non avete ancora configurato l’ide vi rimando all’articolo specifico qui.

Perfetto adesso entriamo nel vivo del tutorial, per prima cosa elenchiamo il materiale occorrente:

1 Arduino (il mio è un 2009)
1 schermo lcd hd44780 compatibile (oggi usiamo un Ampire 16×2 con controller Sitronix ST7066-0A)
1 sensore di temperatura LM35dz
1 potenziometro da 10 Kohm lineare (contrassegnato da una A )
1 breadboard (la mia è da 840 punti ma ne basta anche una piccola)
16 fili per i collegamenti (14 per lcd e 2 per il fotoresistore)
Tempo di realizzazione 8 minuti
copiamo lo sketch (il programma) nell’ide, basta selezionare tutto il programma di seguito, poi tasto destro, copia ed incolla nella pagina bianca dell’ide.
—-Inizio programma—-
/*
 An open-source LM35DZ Temperature Sensor and lcd HD44780 for Arduino. This project will be enhanced on a regular basis
 (cc) by Walter Esposito , http://www.arduinoproject.it
 http://creativecommons.org/license/cc-gpl
 */

#include <LiquidCrystal.h> //include la libreria per il funzionamento dell'lcd

LiquidCrystal lcd(12, 11, 5, 4, 3, 2); //settia le uscite di arduino per lcd
float tempC;      //dichiarazione di variabile
int tempPin = 0;  //inizializzazione del pin di Arduino

void setup() {

  lcd.begin(16, 2); // setta del numero delle colonne e delle righe
 }

void loop() {
  lcd.print("Temperatura..."); // stampa della prima riga sull'lcd
   tempC = analogRead(tempPin);           //lettura valore del sensore
   tempC = (5.0 * tempC * 100.0)/1024.0;  //conversione del dato analogico in temperatura

  lcd.setCursor(0, 1); // setta il cursore sulla seconda riga al primo carattere

  lcd.print(tempC); // stampa la temperatura
  lcd.print(" Celsius "); // stampa Celsius dopo il valore

  delay(1000); // aspetta 1 secondo (1000 millesimi)

  lcd.clear(); // pulisce lo schermo

}
—-Fine programma—-
una volta copiato lo sketch clicchiamo sull’icona upload ed attendiamo il caricamento su Arduino.

Tasto upload

Ora scolleghiamo Arduino dal pc, sistemiamolo vicino alla breadboard ed iniziamo ad inserire i componenti.
Inserire i pin dello schermo su una linea della breadboard
Posizionare di fianco ad esso sulla parte sinistra il potenziometro in modo da aver il minor accavallamento di fili possibili
Colleghiamo i fili in questo modo:

  • LCD   RS  (pin 4)  ——————–   ARDUINO uscita digitale 12
  • LCD Enable (pin 6) ——————  ARDUINO uscita digitale 11
  • LCD D4 (pin11) ———————-  ARDUINO uscita digitale  5
  • LCD D5 (pin12) ———————-  ARDUINO uscita digitale 4
  • LCD D6 (pin13) ———————- ARDUINO uscita digitale  3
  • LCD D7 (pin14) ———————- ARDUINO uscita digitale  2
  • LCD GND (pin1) ——————— POTENZIOMETRO uscita a destra —————– ARDUINO gnd
  • LCD VCC (pin2) ——————— POTENZIOMETRO uscita a sinistra ————— ARDUINO 5v
  • LCD Vo (pin3) ———————— POTENZIOMETRO uscita centrale
  • LCD R/W (pin5) ———————- LCD GND (pin1) ponticellare i pin 1 e 5

Una volta completata questa parte, relativa allo schermo lcd, possiamo inserire e collegare il sensore di temperatura:

LM35dz particolare

Colleghiamo i fili in questo modo:

  • LM35   +Vs   ——————–  Breadboard linea di alimentazione + (nella foto il filo giallo)
  • LM35 Vout —————— Arduino uscita analogica 0 (analog 0) (nella foto filo rosso lungo, il centrale)
  • LM35   GND   ——————–  Breadboard linea di alimentazione – (nella foto il filo rosso)
Perfetto!!!
Il circuito è pronto, di seguito alcune foto del circuito completo e funzionante, poi la spiegazione del codice.

Circuito completo e funzionante

 

Fili su arduino particolare

Fili su breadboard particolare

Lcd con temperatura

Illustriamo il programma creato, lo sketch non è altro che un mix tra quelli di due tutorial precedenti, il tutorial base su lcd hd44780 e il tutorial del sensore LM35dz, con la sola modifica di alcuni parametri.

Vediamo le varie righe di codice…

Include e settaggio pin lcd
Per utilizzare un lcd con chip HD44780 compatibile dobbiamo includere (caricare) la libreria LiquidCrystal.h che ci permette di utilizzare un lcd senza dover scrivere centinaia di righe di codice, per far si che tale libreria funzioni, settiamo tramite LiquidCrystal lcd() i valori delle uscite di arduino utilizzate da tale componente, se per qualche motivo utilizzate già tali porte, se ne possono scegliere altre, ma ricordandosi di sistemare i collegamenti su Arduino utilizzando tali valori.

Varabile ed inizializzazione riguardante il sensore di temperatura

 Tali righe di codice riguardano LM35dz, viene creata una variabile float, numeri con parte frazionaria, denominata tempC  dove, in seguito, verrà inserito il valore della temperatura registrato dal sensore e una variabile int , un numero intero, denominata tempPin che contiene il valore del pin utilizzato da arduino, ance in questo caso se la porta analogica 0 è già utilizzata da qualche altro sensore, possiamo cambiare il valore al suo interno con quello scelto per ricevere i dati del termometro.

Il void setup

L’unico settaggio da effettuare è quello riguardante lcd, nel progetto viene utilizzato un lcd composto da 2 righe e 16 colonne, chiamato 16×2, questi sono i valori inseriti all’interno della funzione lcd.begin() se si utilizza uno schermo ad esempio 40×2 basta sostituire i valori con questi.

Il ciclo principale del programma

L’ultima immagine riguarda il ciclo principale dello sketch, il void loop {} , questa parte di codice è quella che permette il corretto funzionamento di tutto il circuito, analiziamolo riga per riga.

lcd.print() è la funzione che ci permette di “stampare” su lcd il valore contenuto al suo interno, in questo caso il valore tra virgolette è una stringa, cioè una successione di tutti i valori ascii disponibili, si ricorda che lcd utilizzato è limitato a 16 caratteri per riga, quindi a meno di utilizzare alcuni accorgimenti, bisogna rispettare tale valore per non trovarsi davanti ad una stringa tagliata.

 tempC= analogRead(tempPin) tale riga di codice inserisce dentro la variabile tempC, il valore letto da analogRead sul pin tempPin, che nel nostro caso è 0, qui si capisce perchè utilizzare una variabile tempPin per inserire il valore di un pin di arduino, se non si utilizza tale variabile bisogna inserire il valore numerico del pin direttamente nella funzione analogRead all’interno del void loop, ma questa operazione rende difficoltoso il cambio di pin da parte del programmatore, poichè bisognerebbe andare a modificare il valore direttamente in un ciclo, dove possono esserci centinaia di righe di codice.

tempC = (5.0 * tempC * 100.0)/1024.0 ora nella variabile tempC viene inserito il risultato della codifica del valore analogico in una temperatura, gli ingressi analogici su Arduino hanno una risoluzione a 10 bit, che può fornire in uscita 2 ^ 10 = 1024 valori discreti. Usando l’alimentazione a 5V (5000 mV),  abbiamo bisogno di una conversione per poter definire il valore che poi sarà la temperatura, la risoluzione risultante è 5000mV/1024 = 4.8mV. Poiché l’LM35 ha una risoluzione di uscita di 10mV/°C (da datasheet), la risoluzione del termometro collegato ad Arduino è 10mV/4.8mV ~ 0,5 ° C.
Da queste due considerazione nasce la formula, se poniamo la lettura del pin analogico ad 1 (tempC) e si risolve l’espressione (5.0*1*100.0)/1024.0 il risultato è 0,488 cioè ~0,5 , questo ci da la possibilità di considerare 1024 valori diversi di tale sensore!!!

lcd.setCursor(0, 1) prima di stampare il valore elaborato (la temperatura in gradi centigradi) su lcd, tramite questa funzione, dobbiamo settare dove andare a scrivere, se non si inserisce questa riga, tutto ciò che viene passato tramite lcd.print() sarà stampato di seguito a quello che già compare sullo schermo, il settaggio contenuto nella funzione pone il cursore sulla posizione 0 per quanto riguarda la colonna e ad 1 per quanto riguarda la riga, ricordiamo che la pozione iniziale del cursore è 0,0 poichè in informatica si utilizza per convenzione il numero 0 come primo valore e non 1 come convenzione umana, quindi il valore 0,1 si riferiche alla prima posizione della seconda riga.

lcd.print(tempC)  ed  lcd.print(” Celsius “)  stampano di conseguenza sulla seconda riga dello schermo il valore della temperatura seguito dalla dicitura celsius.

delay(1000) grazie a questa riga, possiamo inserire all’interno del ciclo una pausa, altrimenti si chiederebbe al circuito di effettuare molte letture al secondo, in questo caso inutile, il valore 1000 è espresso in millisecondi, ed equivale ad 1 secondo di pausa ogni ciclo.

 lcd.clear() l’ultima riga di codice è una funzione che serve a ripulire i valori visualizzati su schermo, per una migliore lettura va sempre inserita, residui di scritture precedenti su lcd possono rendere di difficile lettura lo schermo.

Tutorial completato, buon divertimento e alla prossima!!!

2 Responses to “Quinto Esperimento: Rilevazione temperatura con sensore LM35dz stampato su lcd HD44780 compatibile”

  • e cosi facile da capire

  • gabriele says:

    molto interessante e descritto bene,
    solo che vorrei sapere se è possibile impostare
    una determinata temperatura (visualizzabile) con un potenziometro,
    la quale una volta superata mi faccia
    eccitare un relè
    grazie.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *