Debido a los resultados mencionados en el anterior artículo, se ha optado por eliminar los sensores analógicos de temperatura y comenzar a usar sensores digitales. Con estos cambios, se ha logrado por fin un sistema estable y apto para su uso, y se ha dado por concluida la parte de desarrollo del proyecto.
Sensores digitales de temperatura
Se inicia un nuevo proceso de investigación de cara a evaluar las diferentes opciones de componentes en el mercado. Durante el mismo, se encuentran los sensores digitales de la casa Maxim (antigua Dallas Semiconductor), mencionados en los propios foros de Arduino. En concreto se trata de la familia de componentes digitales 1-Wire, que incluye, entre otros, diversos sensores de temperatura. Como principal característica de estos dispositivos se permite la conexión de hasta 64 componentes en un mismo canal digital de datos, lo que reduce las entradas digitales a utilizar, permitiendo la identificación de los dispositivos individuales mediante un número de serie único que se establece en fábrica. Además, los sistemas 1-Wire permiten alimentarse de dos formas: de manera directa (un cable para tensión, otro para tierra y otro para datos) o en el denominado modo parásito, donde el cable de datos lleva la propia alimentación, produciendo que en la práctica sólo se usen 2 cables para conectar el dispositivo. Se ha optado por utilizar los sensores DS18B20. Estos sensores presentan las siguientes características:
- Rango de temperatura de -55 a 125 ºC
- Precisión seleccionable de 9 a 12 bits
- Salida seleccionable en grados centígrados o farenheit
- Alimentación de 3 a 5,5V
- Precision media de ±0,5 ºC
- Tiempo de conversión de 750ms (máximo, a 12 bits)
Como contrapartida estos circuitos presentan, por unidad, un coste algo mayor que los analógicos -en torno a 5€ por unidad- aunque la compra en grandes cantidades reduce la diferencia (en internet se pueden adquirir packs de 30 unidades con un coste por circuito de menos de 1€). Para el nuevo montaje, se han adquirido dos unidades.
Nuevo diseño del circuito y el código
El uso de estos sensores ha implicado cambios en el circuito. Los sensores de temperatura se conectan ahora a la entrada digital (se ha utilizado la número 2) y necesitan de su correspondiente alimentación. Con respecto a esta, empleamos el modo normal, dado que acelera la velocidad de las lecturas frente al modo parástio. Se han eliminado además los condensadores asociados a los sensores de temperatura analógicos, dado que no tienen utilidad en estos dispositivos digitales.
Como resultado del cambio de circuitos, se ha podido llevar a cabo otra modificacion importante en el diseño. Dado que en las señales analógicas ya sólo tenemos el sensor de temperatura, el uso de la señal de referencia de 1,1V (y el consiguiente divisor de tensión para la humedad) ya no resulta útil, y se ha podido establecer de nuevo la referencia en 5V y conectar directamente el sensor 808H5V5 a la señal analógica. Esto elimina los posibles fallos asociados al ajuste del potenciómetro.
En lo relativo al código, existe una completa librería genérica para utilizar los dispositivos 1-Wire en arduino, y otra más específica para utilizar los DS18B20. Esto ha permitido que los primeros pasos con los nuevos sensores hayan sido muy sencillos, con resultados francamente positivos. Se han obtenido lecturas de muy alta precisión y estabilidad desde el primer momento. Como es lógico, el código ha sufrido algunos cambios, pero la existencia de las mencionadas librerías para arduino ha permitido realizar las modificaciones en muy poco tiempo, y la ampliación de forma muy rápida el número de sondas.
Nuevas pruebas y montaje final
Con el sistema modificado, se han llevado a cabo más pruebas para comprobar la validez del montaje. Se ha comprobado la estabilidad y corrección de las medidas, comparando los datos con otros termómetros que han permitido comprobar la veracidad de las mediciones. Una vez terminados los test, se ha procedido a trasladar los componentes desde la placa de prototipado a la placa de circuito final, con los componentes soldados, dando al sistema un aspecto mucho más acabado y profesional, así como mayor robustez. De cara a permitir el funcionamiento independiente del sistema durante pruebas de mayor duración, se ha conectando un módulo POE (Power Over Ethernet) para alimentar el conjunto. Esto permite su ubicación usando tan sólo un cable de red por el que viajan tanto los datos como la corriente necesaria para el funcionamiento, lo que facilita su instalación en zonas sin alimentación eléctrica.
Almacenamiento en base de datos
Los datos recogidos se vuelcan en una base de datos, que recibe la información desde arduino mediante un script PHP. Esta información, una vez almacenada, puede ser consultada a través del mismo servidor usando gráficas horarias, que permiten analizar con comodidad la evolución de la temperatura y humedad. El sistema permite seleccionar el sensor y la fecha de consulta, y genera un gráfico interactivo en flash con los datos almacenados. Este gráfico se genera mediante la librería libre Open Flash Charts V2 (bajo licencia LGPL). Además de la consulta de los registros completos del sistema, se ha creado una consulta de valores medios por días.
Resultado de las pruebas
Una vez que se ha completado el montaje definitivo, el prototipo se ha puesto en pruebas reales en un entorno de producción. Para ello, aprovechando la existencia de un departamento de archivo en el centro de trabajo, donde se efectúa un registro periódico de temperatura y humedad, se ha ubicado el sistema completo junto al sensor en uso actualmente, y se ha dejado funcionando varios días recopilando datos.
A la hora de escribir esto, el sistema lleva funcionando 15 días de forma continuada. Se detallan a continuación los problemas detectados y la evaluación de los resultados.
Durante el primer día se detectaron 2 problemas, ambos asociados al módulo ethernet. La versión de la placa ethernet usada en el montaje del prototipo tiene un problema con el sistema de inicialización, que obliga a pulsar el boton de reinicio de la placa una vez que se ha alimentado. Hasta que este proceso no se lleva a cabo, el módulo es incapaz de establecer una conexión ethernet correctamente. Esto supone que ante un corte de corriente, el sistema se inicia y comienza a tomar datos de temperatura y humedad, pero no es capaz de comunicar los mismos por red, con lo cual pierde toda la utilidad. No obstante, este problema, que esta localizado y documentado en la web de arduino, se ha solucionado en la actual versión de la placa que ya está disponible en las tiendas, con lo cual la inicialización del módulo se produce correctamente de manera automática. La única precaución es evitar la adquisición de las placas antiguas que aún quedan en stock, aunque esto es fácil de evitar: las nuevas placas corregidas llevan una ranura para tarjetas microSD que no estaba presente en la versión anterior (lo cual supone además un valor añadido para la placa). De cara a las placas actuales (incluida la usada en el prototipo), la solución pasa por conectar un pequeño condensador (en mi caso, he utilizado uno de 47nF) entre los pines de RESET y GND. Este condensador provoca que al conectar la placa a la corriente, la señal de reset se mantenga activa durante unos instantes más de lo normal, lo que permite la correcta inicialización del módulo Ethernet.
Por otro lado, al hacer numerosos accesos al servidor web integrado para comprobar el correcto funcionamiento del sistema, se produce un bloqueo del sistema, debido al agotamiento de los recursos de arduino. Esto se debe a que la librería ethernet empleada no gestiona las peticiones de los clientes con la suficiente rapidez, y ante varias solicitudes simultáneas es incapaz de liberar los recursos a tiempo. Se ha encontrado una librería ethernet no oficial que soluciona esto acelerando la respuesta a las peticiones, pero aún no se ha probado en el prototipo. Dado que una vez montado el sistema de registro en BBDD no ha sido necesario volver a consultar directamente al servidor integrado en arduino, el bloqueo no ha vuelto a producirse. Se probara con la librería no oficial, pero en caso de no obtener resultados correctos la mejor opción pasa por eliminar el servidor integrado y usar sólo el sistema de almacenamiento y consulta en BBDD.
Aparte de estos dos problemas mencionados, los únicos fallos detectados han sido la pérdida de 10 registros por cortes en la red local que une el sistema con el equipo que almacena la base de datos (problemas completamente ajenos al sistema). Teniendo en cuenta que lleva más de 4500 registros seguidos, el número es bastante positivo.
Con respecto a la calidad de las mediciones, los resultados son altamente satisfactorios. La medición de la temperatura es completamente estable, y de una precisión tan elevada que permite identificar cuando hay personas en la sala, dato observable en las pequeñas oscilaciones que se producen durante las horas de trabajo). Las mediciones coinciden completamente con las del sensor en uso actualmente, y presentan la ventaja del registro contínuo, lo que permite analizar la evolución por las noches y los fines de semana. momentos en los cuales hasta ahora no se realizaban anotaciones.
Y en referencia al sensor de humedad, la extremada sensibilidad y velocidad del mismo han permitido rastrear eventos completamente desconocidos de la sala. las fuertes variaciones de humedad registradas en intervalos muy pequeños de tiempo se achacaron inicialmente a un mal funcionamiento o montaje del sensor, pero a lo largo de los días los patrones observados se repitieron con bastante exactitud, como por ejemplo, una caida brusca de la humedad a una hora concreta de la mañana. Al observar que dichos patrones desaparecían durante los fines de semana, se comenzó a estudiar con detalle los mismos para asociarlos a actividad del personal de la sala. Se ha logrado comprobar que el sistema registra de manera inmediata cuando se abren y cierran las puertas de la sala, e incluso se han podido determinar los momentos de entrada del vigilante durante las rondas nocturnas. Se ha observado que el mero hecho de permanecer cerca del sensor unos instantes altera la medición de la humedad, lo que da una muestra de la elevada sensibilidad del mismo. Y aunque este hecho permite mantener un registro de enorme exactitud, debe tenerse en cuenta de cara a escoger la adecuada ubicación del sistema, dado que la interacción accidental con el mismo podría introducir variaciones no deseadas en las medidas y afectar a su validez.
Conclusión y memoria del proyecto
Las mediciones obtenidas superan con creces las espectativas buscadas, y la funcionalidad del sistema de consulta gráfica aporta una información muy valiosa, que supera ampliamente a la ofrecida por el sistema en uso actualmente. Debido a estos satisfactorios resultados, se considera que la parte de desarrollo del proyecto ha terminado, y sólo queda completar la documentación correctamente. Dado que el prototipo aporta una funcionalidad muy superior al sistema que existía previamente en la ubicación de pruebas, se ha decidido mantenerlo en uso de manera indefinida, e incluso se valora la posibilidad de construir una segunda unidad para instalarla de manera definitiva en dicha ubicación.
Los códigos definitivos usados tanto en arduino como en el servidor web, así como su explicación detallada, junto con los diseños del circuito usados en el prototipo final se están limpiando y formateando adecuadamente para su inclusión en la memoria final del proyecto, la cual se espera que esté disponible y liberada en las próximas semanas.

