viernes, 27 de marzo de 2015

Termómetro LCD

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:

  1. VSS, o GND
  2. VCC, 5 Volts, (comprobarlo en el datasheet, pues hay fabricantes que usan 3,3V)
  3. Contraste, (llevarlo al puntero de un potenciómetro de 10K para ajustar) 
  4. RS
  5. RW
  6. Enable,
  7. DB0, (de DB0...DB7), se usan para transmisión de datos
  8. DB1
  9. DB2
  10. DB3
  11. DB4
  12. DB5
  13. DB6
  14. DB7
  15. LED+, alimentación positiva para la retroiluminación.( no para todas las pantallas)
  16. 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.



2 comentarios:

  1. Hola Andrea,

    Uso uno Arduino Uno standar, un TMP 36 standard en configuración TO-92, una pantalla LCD de 16 x 2, un potenciometro de 10k para el brillo del LCD, y una protoboard mini.

    Un saludo

    ResponderEliminar