Siguiendo con el proyecto, vamos a ver el código necesario para leer los datos de los sensores, y mostrarlos por la salida serie.
En esta primera versión no empleamos el módulo Ethernet, y nos centraremos en realizar las lecturas de las entradas analógicas. Tal y como se vió en el anterior post, podemos utilizar dos referencias para los voltajes de entrada (5V y 1,1V), el código de ambas versiones es prácticamente idéntico a excepción del ajuste de la señal de referenvia (5V ó 1,1V) y el consiguiente cálculo para convertir la señal leída en la entrada al valor en mV.
Comenzamos por la versión más sencilla, la de 5V, y después indicaremos las modificaciones necesarias para la versión a 1,1V. Veremos las ecucaciones que necesitamos para convertir los datos recibidos de las entradas analógicas en valores de temperatura y humedad relativa, ecuaciones que obtenemos de las hojas de características de los dispositivos. Dado que disponemos de dos tipos distintos de sensores de temperatura, necesitaremos dos ecuaciones diferentes en función del dispositivo utilizado.
Licenciado bajo Creative Commons CC-BY 3.0.
Conversión de la señal de entrada a mV
La entrada analógica entrega un valor entre 0 y 1023, que necesitamos convertir en mV. Esta conversión depende de la señal de referencia escogida. Para la versión a 5V, esto se hace mediante la ecuación:

Para la versión a 1,1V, usamos una ecuacion parecida, teniendo en cuenta la nueva referencia:

Conversión de la señal en mV a los valores reales
Debemos convertir estos valores en mV a sus correspondientes valores físicos (ºC y % de humedad relativa). En todos los casos, debemos obtener las ecucaciones para la conversión de las hojas de características de cada dispositivo.
Sensores de temperatura
En el caso de las sondas de temperatura MCP9700A, vemos que la señal que entregan a 0ºC es de 500mV, así pues al valor recibido en mV desde la entrada analógica le restaremos esta cantidad. Además, el valor que se obtiene habrá que dividrlo por 10, dado que cada grado de temperatura supone un incremento de 10mV en la señal de salida. Por lo tanto, la ecuación es:

En el caso de los sensores LM35, ya están calibrados para grados centígrados. Por lo tanto, la salida en mV es directamente proporcional a la temperatura, y sólo deberemos dividir el valor por 10 (cada grado supone un incremento de 10mV en la salida):

Estas ecuaciones son las mismas tanto para la señal de referencia de 5V como para la señal de 1,1V.
Sensor de humedad
En el caso del sesor de humedad 808H5V5, la ecuación sufrirá modificaciones en función de la señal de referencia, dado que en uno de los casos utilizamos un divisor de tensión. En la versión a 5V, comprobando las hojas de características vemos que el sensor entrega 0,8V para un 0% de HR y 3,9V para el 100%. Por lo tanto, a la señal medida en mV le restamos 800mV, y para obtener el dato en porcentaje, dividimos el resultado entre 31 (3900 - 800=3100):

Si empleamos la referencia de 1,1V, deberemos hacer los cálculos para adaptar estos valores. Con el divisor de tensión empleado, las señales de salida normales, 0,8V a 3,9V, se convierten en 0,224V a 1,092V. Esto supone que al valor medido en mV deberemos restarle 224mV, y para convertir el resultado a porcentaje, dividimos por 8,68 (1092-224=868):

Código Arduino
Para descargar los ficheros con los programas, ve al final del post.
Versión con referencia de 5V
Comenzamos con el código para la referencia de 5V. Lo que vamos a llevar a cabo en esta primera versión es una lectura simple que nos muestre los datos por el puerto serie. Este código servirá como primera aproximación, y veremos que tiene algunos problemas que se solucionarán en posteriores versiones. Está completamente comentado (incluyendo las explicaciones de las ecuaciones anteriores). Por defecto se supone el uso de las sondas de temperatura MCP9700A, pero también se incluye el código para las LM35 (comentado).
Versión con referencia de 1,1V
El código para la versión a 1,1V tiene algunas variaciones. La primera es el cambio de la tensión de referencia con la instrucción analogReference(INTERNAL), y además tendremos que adaptar las ecuaciones empleadas para hacer la conversión de las lecturas, tal y como se explica en las ecuaciones anteriores.
Ejecución y resultados
Mediante el entorno de desarrollo de Arduino, se ha compilado el código y se ha subido a la placa, donde comienza a ejecutarse inmediatamente. Si nos conectamos al monitor serie incluido en el entorno, obtenemos las lecturas de los sensores. Tal y como se comenta en el código, esta primera versión tiene algunos problemas que se observan en el resultado:
- Baja estabilidad de las medidas: las lecturas de las tensiones en las entradas analógicas varían mucho entre cada ejecución (esto es especialmente notable en las lecturas del sensor de humedad).
- Diferencia de temperatura entre los dos sensores: cada sensor entrega una temperatura diferente, debido al error interno que presenta cada componente.
- Resultados sin calibrar: los valores mostrados difieren del valor real de temperatura y humedad en la habitación, dado que no se han calibrado los componentes.
- En la versión a 5V, debido a la pérdida de precisión, los saltos entre diferentes medidas son bastante grandes.
El primero de estos problemas se puede solucionar de forma sencilla en las siguientes versiones del código. Los dos problemas referidos a la calibración de los sensores se dejan para una etapa posterior, con el montaje final ya realizado en la placa definitva, dado que es posible que el montaje actual (en una placa de prototipado) introduzca ruido en las señales que afecte a las medidas. Con respecto al problema de precisión, se soluciona empleando la referencia de 1,1V.
Un ejemplo de la salida del programa (en concreto, de la versión a 1,1V usando sensores LM35) es el siguiente:

Se puede observar la elevada variabilidad del sensor de humedad, y la precisión en las medidas: la variación mínima que pueden detectar los sensores de temperatura está en torno a los 0,11ºC, mientras que el salto mínimo en la versión de 5V está en torno a los 0,51ºC (como vemos, directamente relacionado con la señal de referencia escogida).

Sensor Arduino: Código inicial by Hector Fiel is licensed under a Creative Commons Attribution 3.0 Spain License.

