Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
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.
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.