Está en la página 1de 7

Tutorial Arduino I: Mostrar Temperatura en Display LCD

En este tutorial de Arduino vamos a medir la temperatura ambiente con un sencillo sensor y
mostrarla en un display LCD de 16x2, de esta forma podemos familiarizarnos con los
principios bsicos de programacin de esta plataforma.

Material Necesario

El material necesario para la realizacin de este tutorial viene incluido en cualquiera de los Kit
Arduino que comercializamos y consiste en:
1.
2.
3.
4.
5.
6.

Arduino Uno
Breadboard con Puentes de Conexion
Sensor de Temperatura TMP36
Display LCD 16x2 LMB162HBC
Resistencia Ajustable de 10K Ohm
Tira de 40 Pines Macho

Esquema de Montaje

El esquema de montaje en Fritzing de todos los componentes y las conexiones necesarias es


el siguiente:

El esquema es bastante sencillo, en lo que se refiere al sensor TMP36 por un pin se le da


alimentacin, el central se conecta a la entrada analgica A0 del Arduino y el tercer pin se
conecta al GND. En lo que se refiere al display LCD y a la resistencia variable de 10K
necesaria para su funcionamiento:

Salida 5V del Arduino al positivo de la Breadboard


GND del Arduino al GND de la Breadboard
Un pin del potenciometro de 10K Ohm al positivo de la Breadboard
Pin central del potenciometro de 10K Ohm al GND de la Breadboard
El tercer pin del potenciometro de 10K Ohm al pin 3 del LCD (V0)
Pin 15 LCD (BLA) al positivo de la breadboard
Pin 16 LCD (BLK) al GND de la breadboard
Pin 1 LCD (VSS) al GND de la Breadboard
Pin 2 LCD (VDD) al positivo de la Breadboard
Pin 4 LCD (RS) a la salida 7 del Arduino
Pin 5 LCD (R/W) al GND de la Breadboard
Pin 6 LCD (E) a la salida 8 del Arduino
Pin 11 LCD (DB4) a la salida 9 del Arduino
Pin 12 LCD (DB5) a la salida 10 del Arduino
Pin 13 LCD (DB6) a la salida 11 del Arduino
Pin 14 LCD (DB7) a la salida 12 del Arduino

Este esquema es vlido para cualquier display compatible con Arduino (es decir, compatible
con el driver

Hitachi HD44780 o cualquier clon del mismo), la nica variacin posible es la posicin de
determinados
pines, generalmente el 15 y el 16, asociados a la iluminacin del fondo del display LCD.
Cuando se trabaja con este tipo de componentes, en este caso el sensor TMP36 y el display
LCD resulta muy til consultar los datasheet de los mismos, esto nos permite conocer detalles
necesarios sobre la configuracin y funcionamiento de los mismos.
1.
2.

Datasheet Display LCD 16x2 LMB162HBC


Datasheet TMP36
Con respecto al display veremos la configuracin de los pines, para poder realizar las
conexiones de forma correcta y asegurar que funcione con la librera correspondiente incluida
en el IDE de Arduino. En lo que se refiere al sensor de temperatura TMP36, vemos que se
trata de un sensor anlogico cuyo rango es de -50C a 125C y cuya salida saca 10mV por
cada C de temperatura (este dato ser importante a la hora de programar el sketch de
Arduino).

Sketch Arduino

La programacin para conseguir el objetivo del tutorial, mostrar la temperatura medida por el
sensor en el display, sera este:
#include <LiquidCrystal.h>
LiquidCrystal lcd(7, 8, 9, 10, 11 , 12);
const int sensorPin =A0;
void setup(){
Serial.begin(9600);
}
void loop(){
int sensorVal = analogRead(sensorPin);
Serial.print("Sensor Value: ");
Serial.print(sensorVal);
float voltage = (sensorVal/1024.0) * 5.0;
Serial.print(", Voltios: ");

Serial.print(voltage);
Serial.print("; Temp. Grados: ");
int temperature = (voltage - .5) * 100;
Serial.println(temperature);
lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.write("Temperatura: ");
lcd.setCursor(12,0);
lcd.print(temperature);
lcd.setCursor(14,0);
lcd.write((char)223);
lcd.setCursor(15,0);
lcd.write("C");
delay(2000);
}
La primera parte del sketch no tiene ningn misterio, simplememte "llamamos" a la libreria
"LiquidCrystal" , una de las incluidas por defecto en el IDE oficial de Arduino, para poder usar
alguna de sus funcionalidades. Definimos los pines que usamos en el Display de acuerdo al
esquema de conexionado que hemos realizado con anterioridad y creamos una constante,
sensorPin, para el sensor TMP36, asignandole el pin A0 al que lo hemos conectado, que
usaremos con posterioridad.
En el "setup" usamos una interesante funcionalidad de Arduino, el Monitor Serial, el cual
permite comunicarse al PC con la placa y viceversa, es decir, permite enviar instrucciones en
tiempo real al Arduino o recibir en el PC datos del Arduino, tambin en tiempo real. En este
caso solo vamos a recibir datos del Arduino. Iniciamos la comunicacin e indicamos la
velocidad en baudios de la conexin, en nuestro caso 9600, con la funcin:
Serial.begin(9600);

Para ver en el PC los datos que nos envie el Arduino simplemente hay que abrir el Monitor
Serial:

En el "Loop", es decir, aquella parte del sketch que queremos que se repita ciclicamente,
comenzamos definiendo una variable, sensorVal, como el valor de la lectura obtenida del
sensorPin definido antes (A0), usando la funcin:
int sensorVal = analogRead(sensorPin);

Luego vamos a definir que informacin queremos mostrar en Monitor Serial usando la funcin
"Serial.print", esta funcin solo tiene un argumento, si el mismo lo entrecomillamos, ser lo
que directamente queramos que muestre (sin variacin posible), generalmente un texto
identificativo del campo posterior, sino usaremos la variable cuyo valor queremos que muestre,
en nuestro caso sensorVal:
Serial.print("Sensor Value: ");
Serial.print(sensorVal);

Para entender la siguiente linea del sketch es necesario explicar que la funcin "analogRead"
usada antes tiene un pequeo "truco", si bien el TMP36 emite un voltaje en funcin de la
temperatura (10mV por grado) el Arduino no nos da un voltaje como valor de la entrada
analgica, para dicha lectura utiliza un protocolo llamado ADC (Analog to Digital Converter)
que nos da un valor comprendido entre 0 y 1023 proporcional al voltaje recibido, por lo que si
queremos operar con valores de voltajes, es necesario realizar una pequea operacin
matemtica, dividir el valor de la lectura entre 1024 (valores posibles) y multiplicar por 5 (las
entradas analgicas Arduino solo pueden medir valores entre 0 y 5V), de esta forma:
float voltage = (sensorVal/1024.0) * 5.0;

Con esos voltios, para obtener una temperatura, de nuevo hay que formular, al voltaje obtenido
antes hay que restarle 0,5, para registrar las temperaturas negativas dado que el TMP36
puede mediar hasta -50C y multiplicar por 100. Ambas variables, voltaje y temperatura, las
mostramos en el Monitor Serial de la misma forma que hicimos con el sensorVal:
Serial.print(", Voltios: ");
Serial.print(voltage);
Serial.print("; Temp. Grados: ");
int temperature = (voltage - .5) * 100;
Serial.println(temperature);

Lo nico a mencionar es que la variable Temperatura la hemos definido usando "int" (integer) y
no "float" la diferencia es que el primero solo admite nmeros enteros y la segunda admite
decimales, obviamente es ms correcto, o al menos ms preciso, usar la segunda en vez de la
primera. La razn de haberlo hecho as, es que todo lo que mostraremos en el display nos
quepa en una sola linea. Por otra parte si es relevante la precisin es siempre mejor usar
sensores digitales como el DS18B20 y no analgicos, y si se usan analgicos y existe la
posibilidad, como es el caso, alimentarlos a 3.3V y no a 5V para reducir el ruido, lo que
cambiara ligeramente el sketch. Tambien fijaros que en la comunicacin por Serial Monitor si
queremos que el siguiente dato lo muestre en una linea diferente, no a continuacin de los
anteriores, usamos "Serial.println".
Finalmente la ltima parte del sketch la dedicamos a mostrar los datos que queremos en el
display LCD, en nuestro caso un texto con la variable que mostramos (Temperatura) y su valor:

lcd.begin(16, 2);
lcd.setCursor(0,0);
lcd.write("Temperatura: ");
lcd.setCursor(12,0);
lcd.print(temperature);
lcd.setCursor(14,0);
lcd.write((char)223);
lcd.setCursor(15,0);
lcd.write("C");
delay(2000);

Primero definimos el tamao del display usado, 16 caracteres y 2 lineas, situamos el cursor en
la primera posicin de la primera linea (0,0) y comenzamos a escribir. Lo nico relevante es
que el simbolo de los grados () hay que definirlo, lo hacemos con (char)223. Por ltimo
establecemos un delay de 2 segundos para que actualice el dato en pantalla, al repetir el
proceso.

También podría gustarte