En este post se van a describir los materiales y sensores a emplear, y su interconexión con Arduino. Vamos a entrar un poco en materias de electrónica, incluyendo algunos conceptos de conversión analógico a digital, así que si no te interesa mucho, lo mejor es que vayas a la parte final del post.
Como se indica en el anteproyecto, se va a utilizar una placa Arduino Duemilanove. El módulo Ethernet lo emplearemos en una etapa posterior, cuando las lecturas de medidas se hayan resuelto por completo.
Respecto a las sondas de temperatura y humedad, tenemos el circuto 808H5V5 para la sonda de humedad, y los circuitos MCP9700A y LM35 para las sondas de temperatura. Se van a realizar pruebas con ambos circuitos, para evaluar cual es el más adecuado para nuestro proyecto. Además, se buscará la forma de mejorar la precisión de las lecturas. A continuación vamos a explicar todos estos puntos, junto al diseño inicial de la conexión en la placa de prototipos.
Licenciado bajo Creative Commons CC-BY 3.0.
Entradas analógicas en Arduino, nivel de referencia y conversión A/D
Para empezar, vamos a describir brevemente el sistema de entradas analógicas de Arduino y la conversion A/D. Como podemos comprobar por la descripción de la placa, disponemos de 6 de estas entradas, con una resolución de 10 bits (esto es, que miden 1024 niveles diferentes en la señal recibida) y que admiten valores entre 0V y 5V (por defecto). Podemos ajustar este rango de entrada mediante la selección de la señal de referencia analógica. En la versión de Arduino que estamos empleando (con un ATMega 328) disponemos de las siguientes referencias:
- 5V (la que viene por defecto)
- 1.1V (generada de manera interna por la placa Arduino)
- Externa, que la recibe por medio del pin AREF, y podemos usar para establecer una referencia propia.
Estos valores serán de gran importancia en la precisión de las medidas, dado que nuestros sensores (tanto de temperatura como de humedad) entregan un voltaje de salida concreto para cada medición, que dependerá del modelo de circuito empleado. En el mejor de los casos, nuestros sensores nos entregarían una señal entre 0V y 5V, que nos permitiera aprovechar todo el margen disponible, pero ahora veremos que esto no sucede así, y deberemos escoger adecuadamente la referencia para poder obtener la precisión adecuada. Veamos esto con más detalle para intentar entenderlo:
Si escogemos el rango de 0V a 5V, con 10 bits de precisión (los 1024 niveles mencionados) tenemos que cada 4.88mV de incremento de la señal (aproximadamente, 5000/1024) suponen una diferencia de 1 bit. Esto quiere decir que una señal que tuviera 2.3V nos daría como nivel 471 [(2,5*1024)/5] (se obtiene 471.04, pero se redondea al entero más cercano. De igual forma, una señal con 4.85V nos daría el nivel 993 [(4.85*1024)/5]. Cualquier señal negativa o igual a cero nos dará nivel 0. Cualquier señal de 5V o superior nos dará como nivel 1023.
Si empleáramos la referencia de 1.1V, cada bit representaría 1.07mV. Esto nos permite medir con mucha más precisión señales muy pequeñas, pero como veremos más adelante, ya no podemos superar los 1.1V (cualquier señal superior daría como nivel 1023).
Por lo tanto, vemos como la selección de la señal de referencia impone restricciones a la amplitud de los niveles de entrada posibles.
Descripción de los sensores
Comenzaremos describiendo la primera de las sondas de temperatura. La MCP9700A de la casa Microchip tienen un rango entre -40ºCy 125ºC y un error típico de +-1ºC. Puede alimentarse con cualquier tensión entre 2.3V y 5.5V, y entrega 10mV por ºC, con valores de salida entre 100mV (a -40ºC) y 1,75V (a 125ºC). Debido a la relación que presenta entre temperatura y voltaje, habrá que hacer un sencillo cálculo para traducir las lecturas de mV a los grados que representa (lo veremos más adelante, en la parte del código). El cálculo concreto se puede obtener en la hoja de características del dispositivo.
El segundo sensor de temperatura, el LM35 de la casa National, tiene un rango entre -55ºC a 150ºC, con un error típico de 0.75ºC. La alimentación oscila entre los 4 y los 30 voltios, y entrega 10mV por ºC, con valores de 0mV (0ºC) hasta 1500mV (150ºC). Notar que decimos que mide desde -50ºC, y sin embargo entrega 0mV a 0ºC. Esto se debe a que se trata de un sensor de grados centígrados que, sin añadirle ningún componente, entrega valores de mV directamente proporcionales a la temperatura positiva en grados centígrados, por ejemplo 170mV para una temperatura de 17º, y 1V para una temperatura de 100ºC. Esto facilita enormemente la utilización en aquellos entornos que no necesitan de lecturas de temperatura negativas (como es nuestro caso). En caso de necesitar valores negativos, es necesario añadir a la salida una resitencia conectada a la tensión de alimentación en negativo, pero esta aplicación queda fuera de nuestro proyecto actual.
Respecto a la sonda de humedad, modelo 808H5V5 de Sencera, mide entre el 0% y el 100% de humedad relativa, teniendo la mayor precisión entre el 30% y el 80% (medida a 25ºC de temperatura). El error típico en la medida es del +-4% durante el primer año de uso, a partir del cual pierde en torno a 1% adicional por cada año. La sonda puede operar entre -40ºC y 85ºC, y tiene un tiempo de respuesta de 15s como máximo. La alimentación es exclusivamente a 5V, y los valores de salida son 0,8V para un 0% de humedad relativa, y 3,9V para un 100%.
Nivel de referencia y mejora de la precisión
Como vemos, los componentes que tenemos no entregan valores entre 0 y 5 voltios, sino que el rango de salida es mucho menor. Esto nos hace perder mucha precisión en la medida, y denemos solucionarlo. Lo primero que podemos hacer es modificar la referencia de la entrada analógica, para lo cual como hemos visto tenemos varias posibilidades de ajuste, interna a 1,1V o externa. Dado que buscamos la mayor simplicidad en nuestro circuito, vamos a optar por la referencia interna.
Usando la referencia de 1,1V
Con respecto a los sensores de temperatura, y dado que la máxima salida está en torno a los 1,5V y 1,75V según el modelo, podemos emplear la referencia de 1,1V. Esto va a tener como contrapartida una limitación en la máxima temperatura a medir, dado que cuando se superen los 1,1V en la salida del sensor siempre se leerán como 1,1V. En la sonda MCP9700A, el valor máximo que corresponde a los 1100mV son 60º, temperatura más que suficiente para nuestro proyecto, manteniendo la lectura de la mímina temperatura en -40ºC, correspondiente a 100mV. Con respecto al sensor LM35, los 1100mV corresponden a 110ºC, y la mínima temperatura se sigue manteniendo en 0ºC a 0mV.
Sin embargo, esta referencia de 1,1V nos impide usar directamente el sensor de temperatura, dado que la salida correspondiente al 100% de humedad relativa se sitúa en 3,9V. Por lo tanto, para poder usar los dos sensores de temperatura y el de humedad de forma simultánea con esta referencia, debemos reducir la salida del sensor de humedad, escalándola al nivel adecuado.
Para escalar la salida de 3,9V y convertirla en 1,1V, el mecanismo más sencillo que tenemos es un divisor de tensión. Si hacemos que nuestra señal sea 0.28 veces la señal original (1.1/3.9=0.28), la salida máxima del sensor es 1,1V, y la mínima de 0,8V se convierte en 0,224V. Para hacer esto, necesitamos un divisor de tensión:

Y la relación que debemos cumplir es:

Para implementarlo, usaremos una resistencia fija para R2, de un valor comercial común (1kΩ), y para R1 usaremos un potenciómetro que nos permita un ajuste preciso. Con los valores que tenemos para los voltajes de entrada y salida, y el valor indicador para R2, el valor de R1 que debemos ajustar con el potenciómetro es de 2571,43Ω, por lo tanto usaremos un potenciómetro de 4,7kΩ, valor comercial facilmente disponible. Dado que las resistencias comerciales tiene una cierta tolerancia, el valor final real en el potenciómetro variará un poco respecto a este cálculo. Para el ajuste preciso, alimentaremos el divisor con 5V, y ajustaremos el potenciómetro hasta obtener 1,4V exactos.
Con esta modificación, ya podemos emplear los tres sensores de forma simultánea con la referencia de 1,1V.
Conexionado de los componentes
A la hora de conectar los componentes, vamos a utilizar condensadores de desacoplo entre las patillas de alimentación y tierra de cada elemento, para filtrar el ruido en la señal. Estos condensadores son de un valor muy reducido (1μf) y no afectan al funcionamiento del circuito. Los componentes se alimentarán a partir del pin de 5V de Arduino, y la tierra irá conectada al pin GND. La salida de cada componente se conectará a una entrada analógica (0, 1 y 2). Es importante respetar correctamente los pines positivos y negativos de cada componente. Por ejemplo, en nuestro sensor de temperatura, tal y como se ha representado aquí, el pin positivo es el de la izquierda, mientras que en el de humedad es el de la derecha.
Si empleamos la referencia de 5V, la conexion es muy sencilla y directa, como vemos a continuación. Recordar que los 3 condesnadores (C1, C2 y C3) son de 1μf:

Si por el contrario vamos a utilizar la referencia de 1,1V, con el divisor de tensión, la conexión será la que mostramos a continuación. De nuevo los condensadores son de 1μf, la resistencia es de 1kΩ y el potenciómetro de 4,7kΩ. Recordar que el potenciómetro debe estar correctamente ajustado para permitir una lectura precisa (si lo alimentamos con 5V debemos obtener 1,4V de salida).

La conexión de la patilla central del sensor de humedad va a una de las patillas del potenciómetro (aquí se ha representado con el pequeño cable amarillo). Recordar que a pesar de emplear otra referencia, los circuitos se siguen alimentando a 5V.
En el siguiente post incluiremos el código necesario para hacer las primeras lecturas de nuestros sensores.
Reconocimientos:
Imagen del divisor de tensión obtenida de Wikimedia Commons, licencia CC BY SA 3.0. URL: http://commons.wikimedia.org/wiki/File:Resistive_divider.png
Licencia del post:

Sensor Arduino: Materiales y conexión de componentes - Teoría y práctica by Hector Fiel is licensed under a Creative Commons Attribution 3.0 Spain License.

