Aunque desde el grupo se han dedicado muchísimas horas al desarrollo del medidor de CO2 conectado a nuestro servidor no ha sido el único punto en el que hemos trabajado. En el siguiente video corto se puede ver los primeros pasos de la sensorización de la maqueta tiflológica: algo tan sencillo como el archiconocido sensor «siguelíneas» CNY70 conectado al ESP32, que a su vez monta un lector de tarjetas microSD con una pista MP3 grabada y todo ello conectado a un pequeño altavoz. El funcionamiento es muy simple, al detectar algo a pocos centímetros inicia la reproducción del audio; al dejar de detectar, deja de reproducir. Obviamente, la modificación software para hacer que aunque se retire la mano se siga reproduciendo hasta el final la pista o bien se pare cuando se vuelva a pasar la mano es trivial.
Este montaje en concreto es el de uno de los alumnos del grupo de segundo de Mantenimiento Electrónico. Seguimos en marcha.
Perdonad las mayúsculas, pero es la emoción: ¡POR FIN ESTAMOS SUBIENDO DATOS EN TIEMPO REAL!
Este es el primer puntito que ha marcado la diferencia, ese pequeño pálido puntito rojo (Sagan rules!):
El jueves por la noche concretamente, tras muchas horas de trabajo y de discusiones en el grupo de trabajo, se encendió la bombillita necesaria para que funcione el envío de datos cifrados al servidor propio montado en el Politécnico Jesús Marín, de manera que ahora podemos incrustar los frames donde están las gráficas de datos en el blog y desde cualquier parte del mundo se puede saber qué nivel de CO2 hay en cada aula del centro. No es poca cosa!!!
Además estamos recogiendo datos de temperatura y humedad que también se podrían mostrar en tiempo real de cada una de estas aulas/talleres y a partir de ahora la imaginación es el límite. Hemos ido un paso más allá de todos los proyectos similares que hemos visto en Internet haciendo las comunicaciones seguras (realmente hay un pequeño detalle de seguridad que nos gustaría pulir, pero las comunicaciones son cifradas).
Detalles interesantes:
El sensor del medidor 4 sigue dando problemas, seguramente habrá que cambiarlo, porque ese nunca ha ido fino fino y creemos que el problema de actualización de datos de este medidor se debe únicamente al sensor.
Tenemos 2 medidores en planta -1 donde se evidencia, como cabía esperar, que la ventilación es peor, si bien es cierto que los hemos colocado en estancias que ya sabíamos que probablemente darían problemas.
Tenemos 2 medidores en planta 1 con mediciones muy desiguales por el número de alumnos y la ventilación propia del aula.
Tenemos 1 medidor en planta 2 que evoluciona parece que favorablemente a pesar del número alto de alumnos.
Tenemos 1 medidor en planta 3 que se pone en rojo con cierta facilidad según el número de alumnos (como es lógico), y que está viniendo muy bien para alertar de que se ha olvidado de abrir las ventanas o que «la plasta» de la calima ha hecho de las suyas y no corre el aire.
No hay más medidores en más aulas, simplemente porque estamos haciendo un estudio y no podemos abarcar todo el centro como quisiéramos (cada medidor vale un dinerito), pero la intención final es liberar todo el código y esquemas para que cualquiera se lo pueda montar.
Resuelto el problema de la seguridad en el servidor, queda por resolver el envío seguro de datos desde los medidores. Por ese motivo ahora no se están actualizando los datos en tiempo real, salvo aquellos que van a servidor externo que son los del medidor 6 del aula de edificación.
Resueltos los problemas de visualización de datos en el blog y ya están en marcha los gráficos en tiempo real de los 6 medidores provenientes del servidor propio del Politécnico con algunas restricciones:
Medidor 1: Aula 10 de administrativo en planta 2, que aún no está realmente conectado, pero está listo para recibir datos.
Medidor 2: Taller T2 de electrónica en planta -1, en marcha desde hace tiempo.
Medidor 3: Aula 05 de informática en planta -1, que se está rebelando como una zona con mala ventilación a tenor de las mediciones.
Medidor 4: Aula 25 en planta 3, que aún no está realmente conectado, pero está listo para recibir datos.
Medidor 5: Aula teoría de edificación en planta 1, funcionando con servidor externo.
Medidor 6: Aula práctica de edificación en planta 1, funcionando con servidor propio.
Entramos ya en breve en fase de recogida y estudio de datos, si bien aún queremos retocar algunas cosas:
Retomamos la documentación de los prototipos con el prototipo de escudo para Arduino UNO:
Historia
Este proyecto surge como una forma práctica de aplicar los conocimientos que el alumnado de segundo de mantenimiento electrónico ha adquirido a lo largo del primer curso de forma que puedan realizar todo el proceso completo de diseño de placa de circuito impreso, soldadura y testeo en un proyecto con dificultad acotada y con el objetivo de darle un posterior uso por otros grupos a las placas realizadas.
Los requisitos funcionales para este shield eran que debía tener:
Capacidad para montar una minibreadboard de las de 170 puntos.
Pantalla Oled LCD 128×64 0.96″ SSD1306 I2C.
Conexión inalámbrica por medio del módulo NRF24101 (usa 5 pines digitales). Ojo, que este funciona a 3,3V.
Zócalos para la conexión del módulo sensor de temperatura y humedad DHT11.
Estos tres elementos: pantalla, antena inalámbrica y sensor DHT11, deben poder apagarse con tres microinterruptores que irían montados en un módulo que controlaría su entrada de alimentación.
Todos los pines no usados del Arduino se dejarían disponibles en zócalos hembra listos para que se puedan pinchar cables unifilares y usar la minibreadboard como placa de desarrollo de prototipos, además de alguna conexión a 5V y 0V.
En la serigrafía de la placa habría que colocar el logo del instituto y la indicación de qué es cada pin.
Diseño de PCB (Printed Circuit Board)
Teniendo en cuenta las medidas de cada elemento, se procede al diseño de la PCB que cumpla con los requisitos.
El esquemático que se realizó fue este:
Que contiene un error, ya que la alimentación del módulo NRF-24L01 debe estar entre 1,9V y 3,6V; es decir, el interruptor debe tomar la alimentación del pin de 3,3V y no del de 5V. Después haremos una chapuza para arreglarlo, porque de esto nos dimos cuenta una vez mandado a fabricar.
El layout resultante fue este:
Una vez mandado a fabricar, el resultado es el siguiente (parte frontal y trasera):
Y vamos ahora a arreglar el fallo. Recordemos que el fallo ha sido no acordarse de que la alimentación del módulo inalámbrico era de 3,3V y por tanto ha habido que hacer una chapuza por debajo con un regulador de tensión SMD de 3,3V colocado estratégicamente.
Veamos sobre el propio material la modificación que hay que hacer en el anverso de la placa para que quede operativa (hay que asegurarse con el polímetro de que la línea ha quedado cortada):
Ahí se ve el corte que hay que hacer con un cúter o similar y así aislar el pin central inferior del pack de interruptores.
Por debajo de la placa hay que fabricar un puente entre el pin 1 y 3 de la fila inferior de interruptores y además soldar con la patilla 1 del regulador de tensión (Vin, que son 5V).
La patilla 2, la central, se puede cortar o dejar, no estorba.
La patilla 3 (Vout, de 3,3V) va soldada al pin 2 de la fila inferior de interruptores (en la foto se ve regular).
La patilla grande que queda al otro extremo (Tab) se suelda a una tierra cercana, la que correspondería al sensor de humedad y temperatura montado en el zócalo de 3 pines.
Entre las dos fotos siguientes nos podemos hacer una idea de cómo queda.
Consejos para hacer las soldaduras y para el “arreglo”
Colocar los pines macho sobre un Arduino y sobre estos el shield.
Hacer las soldaduras de los extremos de cada hilera de pines, comprobar que están rectos y bien y seguir con el resto. Haced zoom en mis soldaduras, se ven bien las que hay sobre el regulador. Así es cómo hay que intentar que queden todas: brillantes, convexas y sin exceso de estaño.
Luego seguir con todos los zócalos hembra donde corresponda siguiendo la misma indicación: primero fijar un pin, corregir si es necesario y seguir con los demás.
Colocar los interruptores con la orientación adecuada (¡antes cortar la pista! Y asegurarse de que queda cortada comprobando con polímetro) y soldar los pines correspondientes.
Hacer el puente con un cablecito y paciencia.
Colocar el regulador (se puede fijar con la ayuda de un clip o un compañero que lo sujete perfectamente con unas pinzas o un alicate de punta fina.
Soldar la hilera doble de pines al módulo inalámbrico NRF24L01 siguiendo las mismas indicaciones del punto 1 para que quede bien alineado. Para esta operación, cuanto más fina sea la punta del soldador, mejor. El espacio es muy escaso. Mucho ojo con los excesos de estaño.
Colocar y atornillar los separadores de placa con sus tuercas y tonillos.
Colocar los elementos sueltos en su posición: pantalla OLED, módulo inalámbrico y placa de prototipos.
Enchufarlo y probar.
Tiempo aproximado de puesta en marcha: 1 hora y media.
Lista de componentes (para cada escudo)
2 Espaciadores de placa hembra-macho 10mm M2
2 Tornillos para espaciadores M2
2 Tuerca para espaciadores M2
1 Header hembra 2 pines una fila
1 Header hembra 3 pines una fila
2 Header hembra 4 pines una fila
1 Header hembra 8 pines dispuestos en 2 filas de 4
1 Header hembra 10 pines una fila
1 Header macho 40 pines una fila
1 PCB mandada a fabricar en China a partir del diseño
1 Placa miniprotoboard 170 puntos
1 Pantalla OLED LCD 128×64 0.96″ SSD1306 I2C
1 Módulo de antena inalámbrica NRF24101
1 Módulo DIP 3 microinterruptores con distancia entre pines de 2,54mm.
1 Módulo sensor de temperatura y humedad DHT11.
Resultado final
Aunque no lo parezca, debajo tiene un Arduino UNO.
Líneas futuras
Rehacer el diseño para arreglar el problema con la alimentación del módulo de antena.
Añadir leds SMD para indicar la activación de cada microinterruptor.
Quitar la breadboard y añadir otros componentes de testeo que puedan resultar interesantes.
Realizar una versión para Arduino NANO.
Código para probar la comunicación
Esto hay que hacerlo usando 2 dispositivos, uno como transmisor y el otro como receptor (comentando o descomentando lo que sea necesario en el código) . Así testearemos la pantalla y la antena.
Hacen falta varias librerías: Adafruit_GFX, Adafruit_SSD1306, nRF24L01, RF24.
Adafruit_SSD1306 display(128, 64, &Wire); const int pinCE = 9; const int pinCSN = 10; RF24 radio(pinCE, pinCSN);
// Single radio pipe address for the 2 nodes to communicate. const uint64_t pipe = 0xE8E8F0F0E1LL;
char dataTX[16] = "1,2,3" ; char dataRX[16];
boolean transmitiendo = true;
void setup() { // Código que se ejectua una única vez, en el arranque
logo_begin(); // Logo delay(3000); Serial.begin(9600); // Puerto serie con el PC (sólo para test) Serial.println(F("Starting...")); pantalla_iniciando(); // OLED: "Iniciando..."
Tras la recogida de datos de ayer se comprobó en el servidor que el medidor 5 había hecho un recalibrado automático a las 19:00, quedando emparejado con el resto de medidores. No ocurrió lo mismo con el 4, que parece tener un offset de 90 en exceso respecto al resto, así que procedemos a corregir vía software.
Además, se ha eliminado el delta que añadíamos artificialmente de 16ppm, ya que todos los medidores parecían medir ligeramente en exceso, alrededor de esas 16 unidades.
Con todo esto en mente, paso a encerrarme en solitario en el departamento, hacer subir el CO2, realizar mediciones y grabar las curvas. Los resultados se pueden ver a continuación:
Los números son muy buenos. Ahora todos los medidores están bien correlados entre ellos en el rango que nos interesa. Parece haber diferencias respecto al medidor que usamos como referencia, pero puede ser que sea justamente este el que esté realizando una medida con un cierto offset. Recordemos que los sensores usados para nuestros medidores son de bastante calidad, así que es muy poco probable que todos estén fallando a la vez, además de que las mediciones encajan con lo esperado.
Viendo las gráficas es aún más evidente que la respuesta está perfectamente correlada y la respuesta es la misma. Con estos datos, podemos considerar que nuestros medidores quedan bien calibrados y podemos tomarlos como referencia para controlar el nivel de CO2 de un cierto espacio. ¡Victoria!
Seguimos con la puesta a punto de los medidores. Ahora añadimos el comercial que usaremos como referencia para intentar sacar conclusiones…
Con estos 5 medidores más el comercial en marcha, me encierro en el departamento para hacer subir el CO2 a solas y saco datos que esperamos que sirvan para hacer correcciones a la calibración de cada uno de los medidores. El resultado en números es el de la siguiente foto:
Con los datos de la media se debería poder hacer una calibración suficientemente buena haciendo la suposición de que tienen un comportamiento lineal en el margen que nos interesa al menos.
De cualquier forma seguiremos haciendo alguna prueba más para tener más números y asegurar que, al menos entre 400 y 1000 ppm, los valores son acertados.
Vamos a hacer un análisis muy preliminar con lo que hay ahora mismo sobre la imagen a continuación y teniendo muy en cuenta que no están en las mismas condiciones:
Primero lo obvio, el medidor 6 no está conectado, ya que ese es el que está montado en el aula de edificación y, de momento, está enganchado al servidor gratuito de Thingspeak.
Segundo, el medidor 2 está en el taller 3 de electrónica, donde tiene acceso a aire fresco, ya que las ventanas se quedan abiertas normalmente (no deberían, pero sé que hoy se han quedado…). Esto provoca que llegue a los niveles base de CO2 alrededor de las 420ppm. Pero es curioso que entre las 20:00 y las 22:00 suele hacer ese pico, como si el tráfico de hora punta o el viento o alguna otra cosa hiciera que se acumulase mas CO2 llegando hasta 460-470ppm.
Tercero, los otros 4 medidores están en el departamento de electrónica, prácticamente metidos en un zulo sin ventilación. Es por eso que el nivel de CO2 baja lentísimo siguiendo aproximadamente la misma pendiente en todos los casos pero con distinto offset. Si tomamos el punto más alto como referencia, se puede ver que el medidor 1 parte de unas 620ppm, el medidor 3 parte de unas 660ppm, el medidor 4 parte de unas 680ppm y el medidor 5 parte de unas 700ppm. Tocará ponerlos a todos a mano de aire fresco para ver cuál de ellos se baja hasta el nivel correcto y entonces podríamos aplicar un offset vía software.
A priori, si consideramos que la media da el valor correcto, este se correspondería con 665ppm y entonces el error de los «peores medidores» estaría entre el 5% y el 7%.
Otra cosa curiosa es que el medidor 4 y también el 1 a veces muestra unos picos extraños que no tienen una explicación más allá de fallos del sensor. Realmente esto le pasa a todos, pero no llegan a salir en las gráficas porque el envío de datos sólo se realiza cada minuto y debería coincidir que en ese instante se hubiera producido el pico.
Ya tenemos los medidores con sus carcasas 3D y listos para ser puestos a prueba (para ser exactos hay que mecanizar un par de tapas para dejarlos todos perfectos):De momento se han quedado recalibrando y comprobando que cada uno tiene su programación correcta (sospecho que no, por lo que se ve en la siguiente imagen…).
Da la impresión de que se están mezclando los datos de dos medidores con el mismo ID y canal. Es un error de programación, pero que viene muy bien para comparar la respuesta de los sensores. Se puede observar que la diferencia del sensor de temperatura es mínima (diferencia de 0,1ºC). En la imagen no se ve, pero ocurre lo mismo con el de humedad (diferencia del 1%).
Peor es la diferencia del sensor de CO2, de unas 50ppm, pero la buena noticia sería que esa diferencia es fija alrededor de las 50ppm, lo cual ayudaría mucho para hacer una corrección software si el comportamiento de la curva se confirma al menos en el rango que queremos usar, que estaría entre las 420ppm y las 1000 o 1500ppm para tiempos pospandemia. Mientras se mantengan las limitaciones Covid no es adecuado subir de las 700ppm.
Gran trabajo el de Francis Valero y sus alumnos del ciclo de ASIR poniendo en marcha un servidor virtualizado propio de Thingspeak. Funciona tan rápido como si lo tuviéramos en local en nuestro disco duro… Dejamos la imagen del primer envío de datos…
Aunque en este punto ya llegaban los datos y se podían descargar como CSV por ejemplo, aún no era posible visualizarlos por problemas en la configuración.
Apariencia
Con un poco más de trabajo extra… voilà! el primerísimo dato que entró al servidor fue exactamente este pequeño puntito. Parafraseando a Carl Sagan, ese pequeño punto pálido (ni tan pálido jejeje):