QUE ES UN SENSOR DE TEMPERATURA
.
Un sensor de temperatura es simplemente un chip que nos
devuelve un valor de tensión proporcional a la temperatura a la que está
sometido. En esta sesión vamos a utilizar unos modelos comerciales muy
extendidos y fáciles de encontrar por muy poco dinero: TMP36 o LM35DZ.
Vamos a ver como los usamos. Lo primero, tenéis que buscar
la hoja de especificaciones del fabricante. (Busca TMP36 o LM35DZ data
sheet)Aunque al principio no es fácil acostumbrarse a leer este tipo de
documentación (y que encima vienen en inglés), en último término es a donde hay
que ir cuando queráis saber exactamente las características de su
funcionamiento.
Pero el resumen
podría ser más o menos así:
·
Mide la temperatura en grados centígrados.
·
Funciona entre -50º C y 125ºC para el TMP36.
·
Funciona entre 0º C y 100ºC para el LM35DZ
.
·
No es especialmente preciso, ya que tiene ± 1ºC
de incertidumbre, pero normalmente nos sobra para proyectos sencillos y es muy
barato.
·
EL encapsulado es similar al de un transistor y
también tiene tres patas, así que mucho cuidado con confundirlos. Intentad leer
las letras que lleva serigrafiadas (si podéis, porque suelen ser tan pequeñas que a veces no se leen ni con lupa).
El pin central es el de señal, pero para saber cuál es GND y
5V, el encapsulado tiene una cara plana y otra curva. Poniendo la cara plana
mirando hacia vosotros con las patas hacia abajo(de modo que podais leer el
modelo), el pin de la izquierda es alimentación 5V y naturalmente
el otro es GND.
·
SI conectáis la tensión al revés, Tendréis
tiempo de reaccionar y cambiarla, pero mucho cuidado porque se calentará más
que suficiente para haceros una quemadura dolorosa.
·
Si veis que está caliente no tratéis de sacarlo
con los dedos, simplemente desconectad el Arduino y dadle un rato para que se
enfríe.
ESQUEMA ELECTRÓNICO DEL CIRCUITO.
Vamos a montar un pequeño circuito que lea la temperatura de
un sensor, imprima el valor en la consola y encienda un diodo cuando esta
sobrepase un cierto umbral. Aquí tenemos el esquema electrónico:
Y
el circuito para protoboard sería muy sencillo también:
CALCULANDO LA TEMPERATURA.
.
El fabricante del TMP36 y del LM35DZ nos
dice que la salida de tensión será de 10 mV (mili voltios) por cada grado de
temperatura y además sabemos que nuestro Arduino mide en las puertas
analógicas una máximo de 1.024 para 5V (y 0 para 0V), por tanto, para una
lectura dada, el valor en voltios de la medida será:
Y como cada voltio equivale a 100ºC ( 1V / 10mv = 100), la
temperatura en grados Celsius es resultado de multiplicar esto por 100.
Pero para que la cosa no sea tan fácil el fabricante del TMP36 nos
dice que el 0V no es 0º sino -50º (y así poder leer valores bajo cero), así que
al total hay que restarle 50. En cambio com el LM35DZ empieza en 0º,
no hay que restarle nada, es más cómodo de manejar.
Resumiendo. Para calcular la temperatura en ºC a partir de
la lectura de Arduino:
Recordad que el LM35DZ no empieza en -50º si no
en 0º por lo que no es necesario restarle los los 50º de ajuste.
Podéis encontrar cantidad de sensores similares a estos con
diferentes rangos de medida, tanto por arriba como por abajo,
pero podéis usar este mismo método para calibrar la medida.
Así pues, ya tenemos claro como calcular la temperatura,
pero como vemos por ahí que tenemos divisiones, nos conviene utilizar nuestra
primera variable de tipo float, o sea que va a tener decimales.
Ya sé que la tendencia natural es usar int para todo, pero
normalmente en cuanto haya una división de por medio os conviene usar un float
hasta que tengáis muy claro porque usáis otro tipo.
Cada vez que tomemos una muestra de nuestra entrada
analógica vamos a calcular la temperatura y si sobrepasa el umbral definido,
damos orden de activar la alarma, en caso contrario la apagamos.
Como la temperatura es algo que varía lentamente usaremos un
delay para que solo nos dé una medida por segundo.
EL PROGRAMA DE CONTROL.
En primer lugar
vamos a definir un par de variables:
int
Sensor = 0 ;
int
umbral = 25 ;
Sensor es el pin analógico (A0) al que conectamos el sensor
de temperatura y umbral el valor a partir del cual disparamos la alarma de
temperatura.
·
El valor de umbral habrá que ajustarlo en
función de la temperatura ambiente donde estéis montando el circuito.
·
En principio 25ºC son buenos para que si queréis
subir la temperatura, lo podáis hacer simplemente soplando o manteniendo entre
los dedos el sensor. Otro sistema de subir la temperatura rápido, es poner el
sensor al lado de la salida de refrigeración de un portátil.
Y pasando los
cálculos de la página anterior a C++ nos quedaría algo parecido a:
void loop ()
{
int lectura = analogRead(Sensor);
float voltaje = 5.0 /1024 * lectura ; // Atencion
aqui
// Si usais un LM35DZ vuestra formula sera
//float temp = voltaje * 100 ;
float temp = voltaje * 100 -50 ;
Serial.println(temp) ; delay(1000); }
Importante: En la línea donde calculamos el voltaje hemos
escrito 5.0 y no 5. Esto es para evitar que C++ (que es un poco vago)
intente hacer una división entre enteros y nos desprecie los decimales.
·
Haced la prueba de escribir en vuestro programa
el 5 a secas y veréis que el resultado de temperatura será siempre -50 ¿Porque?
·
Pues sencillamente porque la parte entera de
5/1024 es 0 y punto. Así que por mucho que después multipliquemos por lectura
seguirá siendo 0. Y nuestro programa dice que para 0V la temperatura es -50ºC.
·
Hasta que comprendáis como entiende C++ las
operaciones andad con piés de plomo y comprobadlas sino queréis sorpresas. Una
parte de esta sesión es provocar este tipo de situaciones con las variables
float.
Ya solo nos resta comprobar si la temperatura alcanza el
umbral y encender el LED o apagarlo. Descargar Prog_15_1
int Sensor =
0 ; // Prog_15_1
int umbral = 25 ;
void setup()
{
Serial.begin(9600);
pinMode(11,OUTPUT);
}
void loop()
{
int lectura = analogRead(Sensor);
float voltaje = 5.0 /1024 * lectura ; // Atencion
aqui
// float temp = voltaje * 100 ; para el LM35DZ
float temp = voltaje * 100 -50 ; Serial.println(temp) ;
if (temp >= umbral)
digitalWrite(11, HIGH) ;
else digitalWrite(11,LOW);
delay(1000); }
Si disponéis de un pequeño ventilador de 5V, de los que
suelen tener en las tiendas de informática (o si desmontáis un equipo viejo),
sería fácil cambiar el LED por ese ventilador y orientarlo hacia el
sensor.
Fijando un umbral superior y otro inferior podemos escribir
un programa que arranque o pare el ventilador cuando la temperatura se sale de
los márgenes fijados. Habríais conseguido, de un modo muy sencillo, una regulación
de temperatura con un sensor y un ventilador.
CONVIRTIENDO LA TEMPERATURA A ºF.
.
En Europa estamos bastante acostumbrados a los grados
Celsius desde pequeños, pero en América las medidas de temperatura en grados
Fahrenheit son habituales. Así que vamos a modificar nuestro programa para que
mida en ºF.
La forma de convertir una temperatura medida en Celsius a
Fahrenheit es:
Os propongo que convirtáis el programa anterior para que dé medidas de temperatura en grados Fahrenheit en lugar de Celsius (o mejor aún, que dé ambas en la misma línea).
Comentarios
Publicar un comentario