
Estación de Calidad del Aire IoT Easy Plug (EducaCont) con Arduino IDE y STEAMakerBlocks – AIDARAC
La calidad del aire es uno de los factores ambientales que más influyen en nuestra salud. En esta práctica vamos a utilizar la Estación para Medir Calidad del Aire IoT Easy Plug (EducaCont) para recoger datos reales de temperatura, humedad, dióxido de nitrógeno (NO₂), monóxido de carbono (CO) y partículas en suspensión (PM2.5).
Esta estación educativa está diseñada para que el alumnado pueda aprender conceptos de medio ambiente, Internet de las Cosas (IoT), programación y análisis de datos utilizando sensores reales conectados a una placa Keyestudio Easy Plug basada en Arduino.
¿Qué es la estación EducaCont?
La estación EducaCont integra varios sensores ambientales que permiten monitorizar la calidad del aire:
- Sensor DHT22 (temperatura y humedad).
- Sensor MICS4514 (NO₂ y CO).
- Sensor PM2.5 (partículas en suspensión).
- Placa Keyestudio Easy Plug compatible con Arduino.
Puede utilizarse para:
- Medir la calidad del aire en el aula.
- Comparar distintos espacios del centro educativo.
- Realizar proyectos de ciencia ciudadana.
- Desarrollar proyectos IoT.
- Trabajar análisis de datos en Bachillerato.
Más información:

Instalación de las librerías
Antes de abrir el programa en Arduino IDE debemos instalar las librerías específicas de STEAMakerBlocks.
Descarga:
https://www.steamakersblocks.com/web/help/libraries
Paso 1
Descargar el archivo ZIP.
Paso 2
Descomprimir el archivo.
Paso 3
Crear la carpeta:
Documentos
└── Arduino
└── libraries
Si no existe, créala manualmente.
Paso 4
Copiar dentro de libraries todas las carpetas descargadas.
Por ejemplo:
Arduino
└── libraries
├── ABlocks_DHT
├── ABlocks_PM25
├── ABlocks_MICS4514
└── ...
Paso 5
Cerrar y volver a abrir Arduino IDE.
¡MUY IMPORTANTE!
Problema al cargar programas
Durante nuestras pruebas encontramos un problema que puede volver loco a cualquiera.
La estación utiliza sensores conectados al puerto de comunicaciones de la placa.
Si intentamos cargar el programa con el cable COM conectado:
Aparecen errores como:
avrdude: stk500_recv(): programmer is not responding
avrdude: stk500_getsync()
o
Error: protocol expects sync byte
Solución
Antes de cargar
Desconectar el cable conectado al puerto COM.
Subir el programa
Esperar a que Arduino IDE indique:
Subido correctamente
Después
Volver a conectar el cable COM.
Resumen
Cada vez que modifiquemos el programa:
- Desconectar COM.
- Subir programa.
- Esperar a que termine.
- Reconectar COM.
Esta es probablemente la parte más importante de toda la práctica.
Programación gráfica con STEAMakerBlocks
La estación también puede programarse mediante bloques utilizando STEAMakerBlocks.

En él podemos observar:
- Lectura de humedad.
- Lectura de temperatura.
- Lectura de NO₂.
- Lectura de partículas PM2.5.
- Lectura de CO.
- Envío de todos los datos al puerto serie.
Una vez comprobado el funcionamiento podemos exportar el proyecto a Arduino IDE para trabajar directamente con código C++.
Programa completo
A continuación se muestra el programa completo utilizado en esta práctica. Puedes copiarlo y pegarlo directamente en Arduino IDE.
#include "ABlocks_DHT.h"
double humedad;
double temperatura;
double no2_ug_m3;
double particulas_ug_m3;
double co_mg_m3;
DHT dht9(9,DHT22);
void detener_medicion_nn_minutos() {
for (int count = 0; count < 15; count++) {
delay(60000);
}
}
void fnc_mics4514_preheat(int _prepin)
{
pinMode(_prepin, OUTPUT);
digitalWrite(_prepin, 1);
delay(50000);
digitalWrite(_prepin, 0);
}
double fnc_mics4514(int _prepin, int _noxpin, int _redpin, int _result, double _temp)
{
double vnox_value = (float)analogRead(_noxpin);
double VPIN_NO2 = vnox_value*5.0/1023.0;
double R0_NO2 = 2200.0;
double RS_NO2 = ((5.0*22000.0)/VPIN_NO2)-22000.0;
double ppbNO2 = 0.0473538*(RS_NO2/R0_NO2)-60.4778+50.8654* pow((RS_NO2/R0_NO2),0.327898);
double ug_m3NO2 = ppbNO2*1.88;
double vred_value = (float)analogRead(_redpin);
double VPIN_CO = vred_value*5.0/1023.0;
double R0_CO = 750000.0;
double RS_CO = ((5.0*47000.0)/VPIN_CO)-47000.0;
double FactorT = 250.0/(3313.44/_temp+194.11-2.51*_temp);
double RS_COT = RS_CO;
if(_temp > -999)
RS_COT = FactorT*RS_CO;
double ppmCO = -75.6518+exp(-143.735*(RS_COT/R0_CO))+41.1398/(RS_COT/R0_CO)+27.3354*(RS_COT/R0_CO);
double mg_m3CO = ppmCO*1.14;
if(_result==0)return max(0.0,ppbNO2);
if(_result==1 && (VPIN_CO >= 0.4))return max(0.0,ppmCO);
if(_result==2)return max(0.0,ug_m3NO2);
if(_result==3 && (VPIN_CO >= 0.4))return max(0.0,mg_m3CO);
if(_result==4)return max(0.0,VPIN_NO2);
if(_result==5)return max(0.0,VPIN_CO);
return 0.0;
}
double fnc_pm25(int _ledpin, int _outpin, int _result)
{
digitalWrite(_ledpin,LOW);
delayMicroseconds(280);
double voMeasured = (float)analogRead(_outpin);
delayMicroseconds(40);
digitalWrite(_ledpin,HIGH);
delayMicroseconds(9680);
double calcVoltage = voMeasured * (5.0/(1023.0+1.0));
double ug_m3PM = 1000*(0.172*calcVoltage - 0.0999);
if(_result==1)return max(0.0,ug_m3PM);
if(_result==2)return calcVoltage;
return 0.0;
}
void leer_sensores() {
humedad = dht9.readHumidity();
temperatura = dht9.readTemperature();
no2_ug_m3 = fnc_mics4514(8,A0,A1,2,temperatura);
particulas_ug_m3 = fnc_pm25(2,A6,1);
co_mg_m3 = fnc_mics4514(8,A0,A1,3,temperatura);
Serial.print(String("Humedad:"));
Serial.print(humedad);
Serial.print(String("-Temperatura:"));
Serial.print(temperatura);
Serial.print(String("-NO2:"));
Serial.print(no2_ug_m3);
Serial.print(String("-Partículas:"));
Serial.print(particulas_ug_m3);
Serial.print(String("-CO:"));
Serial.println(co_mg_m3);
delay(1000);
}
void setup()
{
pinMode(9, INPUT);
pinMode(8, OUTPUT);
pinMode(A0, INPUT);
pinMode(A1, INPUT);
pinMode(A6, INPUT);
pinMode(2, OUTPUT);
Serial.begin(9600);
Serial.flush();
while(Serial.available()>0)
Serial.read();
dht9.begin();
fnc_mics4514_preheat(8);
delay(1000);
Serial.println(String("INICIANDO"));
}
void loop()
{
leer_sensores();
}
Explicación del programa
Variables utilizadas
double humedad;
double temperatura;
double no2_ug_m3;
double particulas_ug_m3;
double co_mg_m3;
Estas variables almacenan las medidas obtenidas por los sensores.
Sensor DHT22
Permite medir:
- Temperatura (°C)
- Humedad (%)
humedad = dht9.readHumidity();
temperatura = dht9.readTemperature();
Sensor MICS4514
Permite estimar:
- Dióxido de nitrógeno (NO₂)
- Monóxido de carbono (CO)
no2_ug_m3 = fnc_mics4514(8,A0,A1,2,temperatura);
co_mg_m3 = fnc_mics4514(8,A0,A1,3,temperatura);
Este sensor necesita un calentamiento previo para ofrecer medidas fiables.
Por ello aparece:
fnc_mics4514_preheat(8);
Sensor PM2.5
Permite estimar la concentración de partículas contaminantes presentes en el aire.
particulas_ug_m3 = fnc_pm25(2,A6,1);
Envío de datos al puerto serie
Una vez obtenidas todas las medidas se envían al monitor serie.
Serial.print(String("Humedad:"));
Serial.print(humedad);
Serial.print(String("-Temperatura:"));
Serial.print(temperatura);
Serial.print(String("-NO2:"));
Serial.print(no2_ug_m3);
Serial.print(String("-Partículas:"));
Serial.print(particulas_ug_m3);
Serial.print(String("-CO:"));
Serial.println(co_mg_m3);
Inicialización
Al arrancar la placa:
Serial.begin(9600);
Se inicia la comunicación serie.
Posteriormente:
Serial.println(String("INICIANDO"));
muestra un mensaje de bienvenida.
Bucle principal
El programa ejecuta continuamente:
leer_sensores();
por lo que cada segundo obtenemos una nueva medida ambiental.
Ejemplo de salida
Humedad:52.4-Temperatura:24.8-NO2:17.2-Partículas:8.5-CO:0.42
Humedad:52.5-Temperatura:24.8-NO2:17.1-Partículas:8.7-CO:0.41
Humedad:52.6-Temperatura:24.9-NO2:17.3-Partículas:8.4-CO:0.43
Actividades propuestas
Actividad 1
Medir la calidad del aire dentro del aula.
Actividad 2
Comparar interior y exterior del centro.
Actividad 3
Comparar distintas aulas.
Actividad 4
Representar los datos mediante gráficos en LibreOffice Calc.
Actividad 5
Estudiar cómo cambia la calidad del aire durante el recreo.
Conclusión
Con esta práctica hemos aprendido a:
- Utilizar sensores ambientales reales.
- Programar una placa compatible con Arduino.
- Trabajar con STEAMakerBlocks.
- Exportar proyectos a Arduino IDE.
- Interpretar datos de calidad del aire.
- Comprender cómo funciona una estación IoT de monitorización ambiental.
Y sobre todo, hemos descubierto un truco fundamental para trabajar con EducaCont:
✅ Desconectar el cable COM antes de subir el programa y volver a conectarlo después.
Sin este paso, la carga del programa puede fallar aunque todo esté correctamente conectado. 🚀🤖🌍
Etiqueta:arduino, base meteorológica, ciencia, ciencia ciudadana, ies monterroso, robótica


