Sensor Grove - VOC and eCO2 Gas Sensor - Arduino Compatible - SGP30

Buenos días:

Para un proyecto de medición de CO2, tengo varios sensores Grove VOC y eCO2 de Seedstudio https://wiki.seeedstudio.com/Grove-VOC_and_eCO2_Gas_Sensor-SGP30/

En su página web está todo muy bien explicado, y hacen referencia a las librerías y código ejemplo: GitHub - Seeed-Studio/SGP30_Gas_Sensor: A arduino example for SGP30_Gas_Sensor,Measurement of TVOC and CO2

Es muy fácil de instalar y con el ejemplo se obtienen resultados inmediatamente.

Se trata de un proyecto escolar, en el que se mide la calidad del aire en las aulas, y cada X tiempo, estos valores se mandan a un servidor (queremos modificarlo para que se enciendan unos led, o de otro aviso, si el CO2 sube mucho). Durante el horario escolar, mido cada 3 minutos temperatura, humedad, y también eCO2. Pero si tomo una muestra, el valor de eCO2 es siempre el mismo (casi siempre). El mínimo, que son 400ppm.

Tengo entendido que estos sensores se tienen que calentar (funcionan mediante una resistencia). Porque, si lo tengo midiendo continuamente (cada segundo), el sensor reacciona inmediatamente (tarda como un minuto en mostrar valores diferentes al mínimo), cuando se le sopla, y sube el eCO2. Luego cuando se ventila, el valor baja. Esto lo he hecho con el ejemplo prueba de SeeedStudio, que mide cada segundo y lo muestra en la consola.

Lo que he hecho, es que el sensor mida en mi proyecto cada segundo, y luego cada vez que los datos son enviados al servidor, hace la media de las mediciones. Los demás sensores toman los datos en ese momento (temperatura, humedad, ...).

¿Es una burrada? No lo sé, pero lo intuyo...

Otra opción podría ser, tomar una muestra de 1-1.5 minutos en el momento de enviar los datos. Es decir, cada 3 minutos está midiendo durante 1.-1.5 minutos el eCO2.

Pregunté a SeedStudio, pero no obtuve respuesta. Espero que alguien tenga experiencia con este sensor. Uso también otros sensores (Grove - Air Quality Sensor v1.3 - Seeed Wiki, y Grove - Laser PM2.5 Sensor (HM3301) - Seeed Wiki), y estos miden solamente en el momento de enviar los datos.

Muchas gracias de antemano.

Moderador:
Hola, bienvenido al foro Arduino.
En la sección proyectos tienes estos dos hilos que debiste haber leído antes de postear

Como tu consulta es para otra sección lo muevo a Software.

Normas del foro

Hola zampatortas. Buena explicación de tu proyecto.
El promedio lo puedes hacer cuando gustes.
Cuando usas un sensor de medición de gases, se debe respetar los tiempos indicados en la hoja de datos para evitar falsas lecturas.
Asi que un tiempo de estabilización del sensor es importante que sea respetado y luego la decisión corre por tu cuenta.
En lo personal creo que los cambios no ocurren muy rápidamente.
Te aconsejo que tomes muestras a intervalos de 1, 5, 10 minutos y hagas luego comparaciones de los resultados obtenidos.
Digo 10 min pero podría ser hasta 30 o 1 hora.
Considera que todo eso debe almacenarse o subirse al servidor.

La hoja de datos dice que el warm-up time es de 48hs asi que presta atención a eso. Mientras es posible que el comportamiento no sea el adecuado.
ADemas la hoja de datos dice:

Standard condition of test
Temperature, humidity 20℃±2℃;65%±5%RH
Standard test circuit VC:5.0V±0.1V;
VH :5.0V±0.1V
Warm-up time More than 48 hours

O sea.. debes garantizar cierta temperatura y humedad y condiciones de tensión estable.
Supongo que mucho de eso esta garantizado por la circuitería, pero la temperatura y humedad ambiente seguro que no.

En la figura 4 Typical temperature/humiditycharacteristics tienes como se modifica la relación Rs/Ro para distintas temperaturas y distintas humedades relativas ambiente.

Son elementos para prestarle atención.
Como todo al comenzar te encuentras con muchas dudas/preguntas. Lo mejor sería disponer de un elemento de control y una cámara con un CO2 conocido y ver como tu sensor se desenvuelve a lo largo del tiempo.
No es algo fácil de hacer pero es lo que yo te recomiendo.
Sabiendo que el CO2 es de tal valor podrías medir temperatura y humedad e intentar corregir la lectura del sensor para aproximarse al valor que corresponde.