Hoy vamos a hablar de c\xf3mo podemos leer la temperatura ambiente. Para ello vamos a utilizar un sensor de temperatura en Arduino UNO, m\xe1s concreto el sensor anal\xf3gico LM35. Como ya hablamos en el cap\xedtulo donde trat\xe1bamos la API, necesitamos la funci\xf3n analogRead para capturar el valor que nos proporciona el sensor.
Si tienes alguna duda sobre Raspberry Pi o alg\xfan otro tema de tecnolog\xeda puedes contactar con nosotros a trav\xe9s del formulario de contacto, en Twitter y en Facebook. Tambi\xe9n tenemos a tu disposici\xf3n una lista de distribuci\xf3n.
Sorteo
Como queremos premiar a todos nuestros seguidores fieles y tambi\xe9n que os inici\xe9is en el maravilloso mundo de Arduino, vamos a sortear un KIT DE INTRODUCCI\xd3N A ARDUINO para que pod\xe1is empezar. El sorteo se realizar\xe1 con todos aquellos que est\xe9n suscritos a la lista de distribuci\xf3n hasta el d\xeda 27 de Octubre de 2015 a las 24H (hora peninsular espa\xf1ola). Si todav\xeda no est\xe1s suscrito, a qu\xe9 esperas.
Antes de meternos en faena, recordemos como funcionan las entradas anal\xf3gicas en Arduino. Aunque estemos hablando de un valor anal\xf3gico, Arduino discretiza en 1024 valores (0 a 1023). Esto quiere decir que si tenemos un rango de valores de entre 0 V y 5 V, cuando el sensor nos de un valor de 0 V con analogRead tendremos un valor de 0 y cuando nos de 5 V tendremos 1023. Si nos da un valor de 2,5 V simplemente tenemos que hacer una regla de 3 y calcular que valor nos proporcionar\xe1 dicha funci\xf3n.
LM35 sensor de temperatura
En este art\xedculo vamos a utilizar el sensor LM35. Este sensor, como cualquier otro sensor, tiene unas caracter\xedsticas de funcionamiento las cuales se pueden ver en su ficha t\xe9cnica. Este documento es el punto de partida para utilizar cualquier sensor en Arduino. Nos aportar\xe1 la informaci\xf3n necesaria para trabajar con \xe9l y es indispensable consultarlo antes de empezar.
Lo primero que debemos tener claro es el conexiado. Si nos vamos a la p\xe1gina 3 veremos que el sensor tiene 3 patillas, hay que fijarse en el gr\xe1fico que pone LP Package 3-Pin TO-92. Si miramos de frente el sensor, por la parte plana veremos algo parecido a la siguiente imagen.
lm35-sensor
Donde Vs es la alimentaci\xf3n, normalmente a 5 V que es lo que nos da la placa de Arduino salvo que especifiquemos lo contrario, GND es la toma de tierra y Vout es la salida que proporciona el sensor.
Por lo tanto de aqu\xed podemos sacar como debemos conectar el sensor con Arduino. Antes de hacerlo tenemos que estar seguro que el rango de trabajo de este sensor soporta los 5V que nos va a proporcionar nuestra placa. En caso contrario deber\xedamos hacer algo para reducir esos 5V. En la p\xe1gina n\xfamero 1 encontramos un apartado que pone Features (caracter\xedsticas). De aqu\xed podemos sacar mucha informaci\xf3n. Si miramos en el apartado que pone Operates from 4 V to 30 V, nos est\xe1 diciendo que funciona con voltajes de 4 V a 30 V as\xed que estamos dentro del rango permitido.
Ahora vamos a fijarnos en la salida que nos proporciona el LM35. Las dos primeras l\xedneas dicen:
Calibrated Directly in Celsius (Centigrade)
Linear + 10-mV/\xbaC Scale Factor
La primera l\xednea nos dice que el sensor est\xe1 calibrado en grados cent\xedgrados con lo cual no har\xe1 falta realizar ninguna transformaci\xf3n si queremos saber la temperatura en estas unidades. La segunda l\xednea nos viene a decir que los cambios de temperatura son lineales con un factor de escala de 10mV por \xbaC (grado cent\xedgrado) es decir, para 1 \xbaC tendremos una tensi\xf3n de 10 mV. Esto es muy importante ya que hay una regla de proporci\xf3n entre el voltaje de salida y los grados.
Si nos fijamos un poco m\xe1s abajo en las Features (caracter\xedsticas) encontramos el rango completo de temperaturas de -55 \xbaC a 150 \xbaC. Esto quiere decir que a -55 \xbaC tendremos -550 mV y a 150 \xbaC tendremos 1.500 mV. Esto tambi\xe9n lo puedes ver en la ficha t\xe9cnica en la primera p\xe1gina el gr\xe1fico que pone Full-range Centigrade Temperature Sensor.
Por \xfaltimo hay fijarse tambi\xe9n en las Features, donde nos dice 0.5\xb0C Ensured Accuracy (at 25\xb0C) que quiere decir que para garantizar la precisi\xf3n hay que trabajar en este rango de temperaturas de 0.5\xbaC a 25\xbaC.
As\xed que ya has podido ver lo importante que son las fichas t\xe9cnicas de los sensores y dispositivos. Hay que remitirse siempre a la web del fabricante y obtener dicha ficha para sacar el m\xe1ximo partido a los sensores.
Calcular la temperatura
Llega la hora de los c\xe1lculos. Como buen programador debes hacer uso de las matem\xe1ticas y la l\xf3gica y cuando trabajamos con Arduino, debemos hacer exactamente lo mismo. No estoy hablando de hacer ecuaciones diferenciales ni derivadas, aunque en alg\xfan caso esta operaci\xf3n matem\xe1tica nos pueda salvar, estamos hablando que lo m\xe1s complicado que haremos por el momento ser\xe1 una simple regla de 3.
Si os acord\xe1is de cuando hablamos de la API de Arduino, hay una funci\xf3n que se llama analogRead donde le pasamos como par\xe1metro el n\xfamero de pin que queremos leer y nos da un valor entre 0 y 1023 osea, 1024 valores. Esto quiere decir que si en el pin tenemos 0V nos dar\xe1 0 y si tenemos 5V o 3.3V (depende de a que voltaje est\xe9 funcionando nuestro Arduino) nos dar\xe1 1023, as\xed de sencillo.
Por lo tanto si queremos saber que voltaje tenemos en la entrada anal\xf3gica solo debemos de multiplicar por 5/1024 (0.0048V de precisi\xf3n). Esto nos da el voltaje de nuestro sensor, ahora hay que transformar los voltios en grados. Ya hemos averiguado, gracias a la ficha t\xe9cnica, que 1\xbaC equivale a 10mV (0.01V) por lo tanto solo debemos de dividir el valor de voltaje obtenido antes entre 0.01 y nos dar\xe1 la temperatura. Para que os quede m\xe1s claro os dejo aqu\xed la formula que deber\xedamos aplicar.
Temperatura = (Valor * 5 / 1024) / 0.01 = Valor * 5 * 100 / 1024
Y con esta f\xf3rmula tendr\xedamos la temperatura que nos est\xe1 facilitando el sensor LM35.
Aumentar la precisi\xf3n
Como ya hemos visto en la ficha t\xe9cnica, si queremos garantizar la precisi\xf3n debemos trabajar en el rango de valores de 0.5\xbaC y 25\xbaC. Esto no quiere decir que nos tengamos que ce\xf1ir a estas temperaturas pero si que nos da una idea de con que precisi\xf3n deber\xedamos trabajar. Para estos dos valores de grados corresponden 5mV y 250mV.
\xbfC\xf3mo podemos aumentar la precisi\xf3n? Ya hablamos en su d\xeda de la funci\xf3n analogReference que nos permite establecer el valor de referencia para el valor 1023 en los pines anal\xf3gicos. Esta funci\xf3n puede tomar tres posibles valores:
DEFAULT
Toma como referencia el valor interno de la placa 3.3V o 5V.
INTERNAL
Toma como referencia un voltaje interno de 1.1V.
EXTERNAL
Toma como referencia lo introducido en el pin AREF.
Si dejamos la primera opci\xf3n, DEFAULT, utilizaremos la f\xf3rmula que hemos visto antes pudiendo detectar temperaturas de hasta 500\xbaC. No tiene ning\xfan sentido ya que el rango m\xe1ximo ser\xe1 150\xbaC. As\xed que podemos aumentar la precisi\xf3n de nuestro sensor utilizando la configuraci\xf3n INTERNAL. Esto nos permite medir hasta un rango de 110\xbaC. Al cambiar el valor de la referencia, la f\xf3rmula cambia, ahora para obtener la temperatura debemos de utilizar la siguiente:
Temperatura = (Valor * 1.1 / 1024) / 0.01 = Valor * 1.1 * 100 / 1024
Concluyendo, es muy importante fijarse en la ficha t\xe9cnica de cualquier dispositivo, nos dar\xe1 informaci\xf3n de la precisi\xf3n, el rango de valores, amperaje y voltaje y factor de escala. Con toda esta informaci\xf3n podemos obtener la temperatura de nuestro sensor con simples operaciones matem\xe1ticas.
En el cap\xedtulo hablamos de los siguientes enlaces
All datasheet
Bases del sorteo Kit de iniciaci\xf3n de Arduino
Recurso del d\xeda
Codebender
Es un entorno de desarrollo online para Arduino. Se ejecuta en la nube y te permite programar para cualquier sensor o dispositivo conectado. Tiene modo depuraci\xf3n y cuenta con casi 500 librer\xedas a tu disposici\xf3n. Puedes trabajar online desde diferentes m\xe1quinas manteniendo las cofiguraciones establecidas. Adem\xe1s del entorno de desarrollo, te permite guardar tus proyectos en la nube y poder compartir para que la gente colabore.
Muchas gracias a todos por los comentarios y valoraciones que nos hac\xe9is en iVoox, iTunes y en Spreaker, nos dan mucho \xe1nimo para seguir con este proyecto.