Termómetro con LCD gráfico y LM35D

A partir del tutorial en el que se mostraba el manejo básico del LCD gráfico de 84×48 píxeles el amigo de Ardumanía Antonio Moles ha elaborado un termómetro digital que utiliza esta misma pantalla LCD y un sensor de temperatura LM35D.

Partimos del mismo montaje, misma asignación de pines entre la pantalla y un Arduino UNO. Añadimos un sensor de temperatura LM35D conectado al pin analógico A0, tal como se muestra en el siguiente gráfico:

arduino lm35

Conexión del LM35D a Arduino

Así que el montaje queda de la siguiente forma:

lcd lm35 arduino

LCD, LM35D y Arduino

Y ahora vamos con el código, básicamente lo que hacemos es tomar la señal que el LM35D nos da por el pin analógico A0, lo convertimos en grados mediante un sencillo cálculo, procedemos a redondearlo (pues el cálculo nos devuelve unos decimales que aunque válidos son poco atractivos) y, por último, lo sacamos por la pantalla.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
/*  ==================================================================

    Sketch de ejemplo de uso de la pantalla LCD grafica de 84x48 pixeles
  disponible en Ardutienda.
 
  Autor: Antonio Moles.
  Version: 0.2
  Fecha: 22 de mayo de 2012
 
  Descripcion: termometro de ambiente con LM35D y pantalla LCD grafica
               de 84x48 pixeles

    ==================================================================   */


#include <Adafruit_GFX.h>
#include <Adafruit_PCD8544.h>

// pin 3 - Serial clock out (SCLK)
// pin 4 - Serial data out (DIN)
// pin 5 - Data/Command select (D/C)
// pin 7 - LCD chip select (CS)
// pin 6 - LCD reset (RST)
Adafruit_PCD8544 display = Adafruit_PCD8544(3, 4, 5, 7, 6);


//Control temperatura
int analogPin = 0; // Pin analogico 0 de Arduino
float temperature = 0.0;
int grados, decimas, gradR, deciR;
int lm35read, tmedia;
int val,cnt;


void setup()   {
  // Iniciamos comunicacion serie  
  Serial.begin(9600);
 
  // Iniciamos comunicacion con la pantalla
  display.begin();
 
  // Establecemos el contraste
  display.setContrast(45);

  // Mostramos la pantalla de inicio durante 2 segundos
  display.display();
  delay(2000);
  // borramos la pantalla
  display.clearDisplay();
}


void loop()
{
    // inicializamos el valor de tmedia
    tmedia=0;
   
    // medimos la temperatura 10 veces y la almacenamos en tmedia
    for ( cnt=0; cnt<10; cnt++)
    {
      lm35read = analogRead(analogPin);
      tmedia=tmedia+lm35read;
    }
   
    // calculamos la media de las medidas
    tmedia=tmedia/cnt;
   
    // convertimos tmedia en un valor en grados, pero
    // dadas las caracteristicas del sensor la precision es de
    // 0.5 grados y los decimales son .4 o .9
    temperature = (5.0 * float(tmedia) * 100.0)/1024.0;
   
    // mapeamos el valor tmedia para que nos de
    // la temperatura en decimas de grado
    val = map(tmedia,0,1023,0,4990);
   
    // ahora los grados los obtenemos dividiendo por 10
    grados=val/10;
   
    // y las decimas de grado son el resto de la division
    // por 10
    decimas=val%10;
   
    // Redondeamos los decimales a 0 o a 5
    if (decimas< 3)
       {
         gradR=grados;
         deciR=0;
       }
    if ((decimas > 2)&(decimas<7))
       {
         gradR=grados;
         deciR=5;
       }
     else
       {
         gradR=grados+1;
         deciR=0;
       }  
   
    // Sacamos los datos por el puerto serie  
    Serial.print("Lectura en bruto ");
    Serial.print(lm35read);
    Serial.print("  temperatura sin redondear  ");
    Serial.print(temperature);
    Serial.print("C  ");
    Serial.print("temperatura redondeada ");
    Serial.print(grados);
    Serial.print(".");
    Serial.println(deciR);
   
    // Y por ultimo lo mandamos a la pantalla LCD
    display.setTextSize(1);
    display.println("  Temperatura");  
    display.print(" ");
    display.setTextSize(2);
    display.print(gradR);
    display.print(",");
    display.print(deciR);
    display.print(".C");
    display.print("       ");
    display.display();
    delay(500);
    display.clearDisplay();
 
}

También se incluye un bloque de código que  muestra información por el puerto serie para que os quede más claro como se calculan los valores.

lcd lm35 arduino

24.5ºC, la temperatura del paraíso

 

Deja un comentario

Required fields are marked *.