Termometro LCD
En esta entrada vamos aprovechar nuestro montaje "estrella" del termómetro con un TMP36, para explicar el uso de una pantalla LCD.
Como podeis apreciar en la fotografia la pantalla consta de 16 pins que explicaremos brevemente a continuación.
El esquema de conexiones:
Siendo los pines en orden del 1 al 16, los siguientes:
- VSS, o GND
- VCC, 5 Volts, (comprobarlo en el datasheet, pues hay fabricantes que usan 3,3V)
- Contraste, (llevarlo al puntero de un potenciómetro de 10K para ajustar)
- RS
- RW
- Enable,
- DB0, (de DB0...DB7), se usan para transmisión de datos
- DB1
- DB2
- DB3
- DB4
- DB5
- DB6
- DB7
- LED+, alimentación positiva para la retroiluminación.( no para todas las pantallas)
- LED-, GND para la retroiluminación.
La pantalla del ejemplo tiene retroiluminación y funciona a 5V. Por tanto el esquema de conexión será el siguiente:
Estas pantallas pueden funcionar con 4 u 8 líneas de datos. Para la aplicación que nos ocupa, y para la mayoría, con cuatro tendremos suficientes.
Para este ejemplo, y otros que seguirán con este tipo de display, usaremos una pantalla compatible con el chipset de HITACHI HD44780. En este ejemplo, usaremos una pantalla de 16x2, es decir, 2 líneas de 16 caracteres cada una.
El motivo de usar este tipo de pantalla compatible, es el de usar una librería ya creada para el entorno Arduino, que tendremos que llamar con una línea como ésta al principio de nuestro sketch.
#include <LiquidCrystal.h> //libreria necesaria para el uso del LCD
Esta librería facilita enormemente la gestión de la pantalla, y realizar las operaciones más habituales, con unos sencillos comandos. Una vez incluida la librería, deberemos crear una variable para el LCD, definiendo los pines a los cuales la hemos conectado.
Por orden serán, RS, Enable, D4, D5, D6 y D7.
LiquidCrystal lcd(4,5,6,7,8,9);
Por último, y para terminar de configurar la pantalla deberemos incluir en el void setup{} la siguiente instrucción:
lcd.begin(16,2);
Esta instrucción configura nuestra pantalla LCD de 16 columnas y 2 filas, definida previamente como variable lcd.
Veamos ahora algunas de las instrucciones que usaremos en nuestro ejemplo.
lcd.clear();
Con esta instrucción , borramos el contenido de la pantalla.
lcd.setCursor(0,0);
Sirve para posicionar el cursor donde queremos emplazar el texto. Para colocarlo en la primera línea entre paréntesis usaremos los valores (0,0). Para colocarlo en el inicio de la segunda fila, la instrucción debe ser (0,1).
lcd.print("Temperatura:");
Escribe el texto entre parentesis. Funciona igual que la instrucción print, escribiendo tal cual el texto que se encuentra entre las comillas .
lcd.print(Temperatura);
Presenta el valor de la variable Temperatura.
Pues estas son las nociones básicas que deberían ser suficientes para completar esta primera parte del ejercicio propuesto. Si recuperamos de esta entrada, y sustituimos las líneas que muestran el resultado en el serialmonitor, por las LCD , y configuramos la pantalla, deberíamos conseguir finalizar el ejercicio....
Que no lo conseguimos, de acuerdo pues os muestro mi propuesta, que podéis descargar desde aquí.
/* Ejemplo practico para mostrar la temperatura de un TMP-36 en una pantalla LCD. La explicacion necesaria la encontramos aqui http://arduinopractico.blogspot.com.es */ #include <LiquidCrystal.h> //libreria necesaria para el uso del LCD LiquidCrystal lcd(4,5,6,7,8,9);// definicion de los pins conectados al // Arduino, por este orden RS, Enable, D4, D5, D6 y D7. void setup() { Serial.begin(9600); // Iniciamos puerto serie, solo necesario si usamos PC lcd.begin(16, 2); // Definimos el tamaño de pantalla que usaremos lcd.setCursor(0,0);// Posicionamos el cursor enel punto 0 lcd.print("Arduino practico"); // Imprimimos nuestro logo...usad el vuestro lcd.setCursor(0,1);// vamos a la segunda linea lcd.print("*Termometro LCD*"); // Y explicamos que haremos delay(3000); //Esperamos 3 segundos para dar tiempo a leerlo lcd.clear(); // Y borramos la pantalla } float temperatura = 0; // Variable para leer la temperatura void loop() { delay(200); temperatura = analogRead(0); // Lectura del TMP36 en pin0 temperatura = (temperatura*5000)/1024; // Convertimos el valor en milivolts temperatura = temperatura-500; // Restamos el offset de 0.5V temperatura = temperatura/10; // Convertimos los milivolts en º Celsius lcd.clear(); // Borramos pantalla lcd.setCursor(0,0); // vamos al inicio de la primera linea lcd.print("Temperatura"); // Mostramos el texto temperatura lcd.setCursor(0,1); // Saltamos a la segunda linea lcd.print(temperatura,2); // mostramos la temperatura con 2 digitos decimales lcd.print("C"); // la unidad de medida, grados Celsius delay(1000); // }
Os dejo con unas imágenes del montaje, y del resultado en pantalla que obtendréis.
Y funcionando:
Nos vemos.