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:
Así que el montaje queda de la siguiente forma:
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.



