Otra estación meteorológica

Hola a todos.

Primero agradecer a todas aquellas personas que hacen posible este y otros foros, y que ponen a disposición de los demás su código y muestran sus proyectos.

Soy profe de un colegio en españa, tengo algo de experiencias escribiendo código, y desde siempre me ha gustado programar, pero hace años que no he desarrollado ningún proyecto de software.

Como colegio nos hemos propuestos construir 18 estaciones con Arduino, que midan los siguientes valores por todo el colegio: Temperature, Humidity, CO2eq, TVOC, General Air quality, PM1.0 concentration, PM2.5 concentration, PM10 concentration, noise, Illuminance. Las estaciones estarán en el interior (aulas y espacios comunes) y una estará en el exterior, y medirá también la presión. La idea es medir la calidad del aire y del entorno en las aulas y espacios comunes del colegio, sobre todo mientras están los chicos en clase. Las estaciones estarán el colegio, estarán alimentadas por un cargador conectado a la red, y acceden al WIFI del colegio.

Soy nuevo en el tema de Arduino, y Hardware, pero llevo dos meses (ya sé que es poco), probando, y sobre todo leyendo documentación y ejemplos.

Como Hardware nos hemos decidido por: Placa Arduino mkr 1010, con MKR EnvShield y MKR Grove Carrier, y sensores Grove a 3.3V de Seedstudio.

-Grove - VOC and eCO2 Gas Sensor (SGP30): https://www.seeedstudio.com/Grove-VOC-and-eCO2-Gas-Sensor-SGP30.html
-Grove - Air quality sensor v1.3: https://www.seeedstudio.com/Grove-Air-quality-sensor-v1-3-p-2439.html
-Grove - Sound Sensor: https://www.seeedstudio.com/Grove-Sound-Sensor.html
-Grove - Laser PM2.5 Sensor (HM3301): http://wiki.seeedstudio.com/Grove-Laser_PM2.5_Sensor-HM3301/

Al tratarse de un proyecto escolar, empezaremos con proyectos con el MKR 1010 sencillos, e iremos escalando poco a poco. Al final montaremos la estación completa, aplicando cosas que los chicos y chicas han trabajado antes.

Mi idea es: son 10 valores a medir, en 18 estaciones, y quiero subirlo a Internet y guardarlo en la SD, cada medición con su hora de medición.

  • Las placas se conectan la primera vez a Internet para obtener la hora. Esa hora la administran internamente, hasta que haya pasado un día, y al cabo de un día, vuelven a leer la hora de Internet. (evitar overflow)
  • La frecuencia de las mediciones depende de la hora (ya que sé que hora es). Evito realizar demasiadas mediciónes (p.ej. por la noche no debería haber muchos cambios; cada 5 minutos de 8.30 a 17.30; cada 45 minutos en las demás franjas de tiempo).
  • Como sé la hora y el día, creo un fichero por sensor al día, con el nombre del día e id del sensor, escribiendo tras cada medición la hora de medición, la id del sensor (sensor1, sensor2, ...), y los valores de medición.
  • Exporto tras cada medición los datos directamente a GoogleSheet: la id del sensor (sensor1, sensor2, ...), y los valores de medición. La hora, la sabe Google al enviarle los datos.
  • Nota: todos los sensores mandan su información a un mismo Google Sheet. Ver Script de Trieu Le o propio de Arduino, de Marco Passarello, encontrado a través de los ejemplos de MKR 1010, y al enviar por WebHook. Así todos los sensores tienen el mismo software, y se diferencian únicamente por una constante, que es su identificador de sensor (sensor1, sensor2, ...). También podría crear para cada sensor, un GoogleSheet, y luego hacer un merge de los datos... Pro: Puedo almacenar más datos. Contra: Mayor cantidad de ficheros.

Un quebradero de cabeza que he tenido, es dónde guardar los datos. Lo más seguro es guardarlo en la SD, pero quiero tener los sensores monitorizados, y no llevarme sustos de que uno o varios no hayan escrito los datos. Por eso es muy importante exportarlos a Internet. Si lo hago usando la página de Arudino, guay, pero solamente puedo medir 5 sensores. Además, cada sensor se tendría que asociar a una cuenta diferente (realizable, pero tengo que controlar las 18 cuentas). Eso lo podemos hacer para ejercicios al principio. Pero cuando tengamos todos los sensores funcionando, debo poder verlos de un plumazo. Por eso enviar todos los datos al mismo GoogleSheet.

En un GoogleSheet puedo almacenar 5 millones de valores. Si guardo más datos cuando los alumnos están en el colegio, y menos las demás horas, puedo llegar a almacenar datos durante un mes en un GoogleSheet. Desde ahí puedo crear gráficas, o exportarlos a otros sheets.

¿Qué os parece el proyecto?

Hasta ahora he probado cada parte por separada, y se ha podido. Además, mi único problema creo que es a nivel de Software, porque en Aruduino y SeedStudio está todo muy bien encapsulado, y las conexiones son tipo clip sin opción a error. Además, he encontrado multitud de ejemplos para cada problema.

¿Creeis que subir los datos a GSheet directamente es una buena opción? Esto todavía no lo tengo muy claro, y no sé que hace la gente cuando tiene millones y millones de datos. Usa una base de datos, claro, pero no quiero subir a ese siguiente nivel...

Muchas gracias, y saludos,
Harut.

Rectifico. El reloj lo controlaría con la biblioteca RTC, y tampoco habría que actualizarlo cada día.

¿Ya las decisiones sobre como hacerlo son firmes ?¿O quieres nuestra/mi opinión sobre el Hardware elegido?

La opción Hardware está cerrada.

La decisión de sobre como hacerlo no está cerrada. Ahora estoy viendo que el ejemplo que he visto yo para mandar los datos a GSheet usa Wifi101.h, y yo iba a usar WifiNina.h (por ser más nueva), y no está siendo tan inmediato.

Buscaba algo de feedback.

Bueno ahora otra pregunta ¿La parte didáctica se centra en la construcción de la red o en la parte meteorológica?
Deberías empezar primero decidiendo que tipo de red quieres: las opciones, que hasta ahora consideraste, se basan en diversos dispositivos IOT, pero no es la forma mas simple de hacerlo. Tu estación meteorológica es un simple Datalloger ( la información va en solo sentido) por eso una red Maestro-Esclavo es mas simple. Un solo maestro, que mediante algún protocolo (modbus/TCP ip, Mqtt u otro) junte la información y la presente a internet. Agregando un PC o un Raspberry se simplificaría mucho el trabajo. Es bastante simple agregar un base de datos a la ecuación.

Muchas gracias. Eso es una muy buena consideración.

El nivel es un 4ºESO. La didáctica se centra en la construcción de la red y posteriormente en el análisis de los datos obtenidos (excel).
En otras asignaturas (como física), podemos hablar sobre dónde colocar los sensores (lejos de radiadores, ventanas, ... evitando luz directa), el efecto del propio calentamiento de los componentes.

PeterKantTropus:
Deberías empezar primero decidiendo que tipo de red quieres: las opciones, que hasta ahora consideraste, se basan en diversos dispositivos IOT, pero no es la forma mas simple de hacerlo. Tu estación meteorológica es un simple Datalloger ( la información va en solo sentido) por eso una red Maestro-Esclavo es mas simple. Un solo maestro, que mediante algún protocolo (modbus/TCP ip, Mqtt u otro) junte la información y la presente a internet.

Me gustaría dejarlo en una red IOT, dónde cada sensor loggea sus datos en la SD y los sube a la nube. Aunque estoy abierto a otras sugerencias.

En principio la finalidad es obtener datos del colegio, y los sensores pueden estar en cualquier sitio. Por ese motivo no van a ir conectados a un PC. Los datos se guardarán en tarjetas SD. Y si es posible, mandar todos los datos también a través de la red WIFI.

La otra opción que no había considerado es mandar los datos a una Raspberry (la red que antes has mencionado). Pero escribiendo el código para subir los datos a arduino.cc o IFTTT, y dejarlo preparado para los alumnos tampoco me parece tan mala opción.

En ese caso te recomiendo le des un vistazo al protocolo MQTT, es bastante simple implementar un broker MQTT en una raspberry y desde allí hacer lo que se quiera, como utilizar una base de datos, un servidor de archivos, un web server o lo que se ocurra, pero con la facilidad de hacerlo desde una plataforma mas amigable para ello.
Desde ya que hay miles de formas mas de hacerlo.

Si adopas la sugerencia del Raspberry, podrias usar algo como Node Red para visualizar la información y que actue como servidor para quienes desean ver las cosas.
Node Red dispone de capacidad de almacenamiento (loggeo) en base de datos, hay gran cantidad de tutoriales.
Es un entorno grafico que requiere de programación si deseas hacer cosas elaboradas pero digamos que en primer instancia se puede resolver la mayoría de modo simple
Como te dijo PeterKantropus, si usaras por ejemplo MQTT e instalas Mosquitto en el Raspberry, basicamente con tus MKR enviando paquetes MQTT y el Raspi bajo Node Red recepcionandolos y guardándolos en su DB, tendrias graficación, servidor y todo lo que desees.

OK. Entonces recomendais usar MQTT, a través p.ej. de una RaspberryPi, conectada a la red local.

Vale, lo intentaré.

Otra pregunta: Y usar Webhooks? Tengo un GSheet, con código JavaScript preparado para aceptar por argumento valores e importarlos al sheet. ¿Se podría hacer así también?

Como comente mas arriba: hay muchísimas maneras de hacerlo y creo que es posible hacerlo con almacenamiento en la nube como propones, no quiero influenciar mucho en el camino a tomar, ya que depende mucho de las herramientas con que mejor te desenvuelvas. En particular tengo prejuicios en almacenar datos en la nube y prefiero hacerlo en local, pero no es mi proyecto :slight_smile:

Opino como PeterKanTropus, la nube para los nubarrones.
Esta todo muy lindo pero cuando el proyecto escala hay que pagar.

Muchas gracias a los dos por vuestro consejo. En serio.

De formación soy matemático, he programado bastante, pero ahora mismo no tengo ganas de meterme en otro fregado, como montar un servidor y preocuparme cómo servir los datos hacia fuera. También tengo varias RaspberryPi's en casa, que he usado como servidor, ordenador de sobremesa, o para ver la tele, son la leche. No soy informático al uso, y con el poco tiempo que me queda como profesor, no quiero usarlo para abrir más frentes.

Desde luego, estas navidades, si me veo capaz lo intentaré. Y os agradezco mucho vuestra disposición.

Ahora mismo he hecho funcionar a la placa mkr, guardando regularmente los datos en la SD, y subiendolos a IOT de arduino.cc, junto con el RTC. Como solamente me permite subir 5 valores, voy a subir 4, y el quinto será un string con todos los valores restantes. Eso me molaría mandarlo vía Webhook a una página GoogleSheet, que puede usar cualquiera fácilmente. (no me está saliendo de momento, pero tiempo...)

¿Lo consideráis una tremenda chapuza, o está dentro del margen tolerable?

Quien evalúa que tan eficiente resulta algo es justamente uno mismo, o en tu caso, serán tus estudiantes también. En cuanto participes a tus alumnos en el proyecto, recibirás tal nivel de feedback que tendrás que frenarlos, para llevar una linea de trabajo, pero imagino que eso no será problema.

Prueba lo que mencionas, ya que como dices te sientes cómodo con ello.

Lo que te sugerimos tanto @PeterKanTropus como yo, es algo que obviamente estamos usando y da buenos resultados.

Pregunto y que harás con este hilo si tienes abiertas consultas en el foro en inglés y en el foro en español?

Porque la idea de un proyecto es que justamente se lea todo como un libro, donde presentas los problemas y buscas o te sugerimos soluciones.

Hola surbyte.

Creo que ahora he pillado la idea del tema "proyectos" en el foro (todas la preguntas respecto a mi proyecto en este hilo).... Lo siento de veras. No os quería incomodar... Pensaba que cada pregunta debía ir o a "Software" o a "Proyectos". Además tenía una pregunta específica sobre el mkr1010 que puse en la página en inglés...

Ahora sí que tengo otra pregunta: He llegado a un nivel mostrable del proyecto, y me gustaría presentar un poco lo que he ido documentando, y también subir el código p.ej. a GitHub. ¿Puedo presentar el proyecto aquí, o dónde?