- Componentes requeridos
- Sensor Nova PM SDS011 para medir PM2.5 y PM10
- Conceptos básicos del módulo de pantalla OLED de 0.96 '
- Preparación del sensor MQ-7 para medir el monóxido de carbono (CO)
- Cálculo del índice de calidad del aire
- Diagrama de circuito
- Construcción del circuito del sistema de monitoreo de la calidad del aire en la placa de rendimiento
- Configuración de Adafruit IO
- Explicación del código para
- Carcasa impresa en 3D para el sistema de monitoreo AQI
- Prueba del sistema de monitoreo de AQI
A medida que se acerca el invierno, el aire que se cierne sobre nosotros se espesa con el humo y las emisiones gaseosas de los campos en llamas, las fábricas industriales y el tráfico de vehículos, que bloquea el sol y dificulta la respiración. Los expertos dicen que los altos niveles de contaminación del aire y la pandemia de COVID-19 pueden ser una combinación peligrosa que puede tener graves consecuencias. La necesidad de un monitoreo en tiempo real de la calidad del aire es muy evidente.
Entonces, en este proyecto, vamos a construir un sistema de monitoreo de la calidad del aire ESP32 utilizando el sensor Nova PM SDS011, el sensor MQ-7 y el sensor DHT11. También usaremos un módulo de pantalla OLED para mostrar los valores de calidad del aire. El Índice de Calidad del Aire (AQI) en India se basa en ocho contaminantes, PM10, PM2.5, SO2 y NO2, CO, Ozono, NH3 y Pb. Sin embargo, no es necesario medir todos los contaminantes. Entonces, vamos a medir la concentración de PM2.5, PM10 y monóxido de carbono para calcular el índice de calidad del aire. Los valores de AQI se publicarán en Adafruit IO para que podamos monitorearlo desde cualquier lugar. Anteriormente, también hemos medido la concentración de gas LPG, humo y amoníaco utilizando Arduino.
Componentes requeridos
- ESP32
- Sensor Nova PM SDS011
- Módulo de pantalla OLED SPI de 0.96 '
- Sensor DHT11
- Sensor MQ-7
- Cables de puente
Sensor Nova PM SDS011 para medir PM2.5 y PM10
El sensor SDS011 es un sensor de calidad del aire desarrollado por Nova Fitness. Funciona según el principio de dispersión láser y puede obtener una concentración de partículas entre 0,3 y 10 μm en el aire. Este sensor consta de un pequeño ventilador, una válvula de entrada de aire, un diodo láser y un fotodiodo. El aire entra por la entrada de aire donde una fuente de luz (láser) ilumina las partículas y la luz dispersa es transformada en señal por un fotodetector. Estas señales luego se amplifican y procesan para obtener la concentración de partículas de PM2.5 y PM10. Anteriormente usamos el sensor Nova PM con Arduino para calcular la concentración de PM10 y PM2.5.
Especificaciones del sensor SDS011:
- Salida: PM2.5, PM10
- Rango de medición: 0.0-999.9μg / m3
- Voltaje de entrada: 4,7 V a 5,3 V
- Corriente máxima: 100 mA
- Corriente de sueño: 2 mA
- Tiempo de respuesta: 1 segundo
- Frecuencia de salida de datos en serie: 1 vez / segundo
- Resolución del diámetro de partícula: ≤0.3μm
- Error relativo: 10%
- Rango de temperatura: -20 ~ 50 ° C
Conceptos básicos del módulo de pantalla OLED de 0.96 '
OLED (diodo emisor de luz orgánico) es un tipo de diodo emisor de luz que se fabrica con compuestos orgánicos que se excitan cuando se permite que la corriente eléctrica fluya a través de ellos. Estos compuestos orgánicos tienen su propia luz, por lo que no requieren ningún circuito de retroiluminación como las pantallas LCD normales. Por esta razón, la tecnología de pantalla OLED es energéticamente eficiente y se usa ampliamente en televisores y otros productos de pantalla.
Hay varios tipos de OLED disponibles en el mercado según el color de la pantalla, el número de pines, el tamaño y el controlador IC. En este tutorial, usaremos el módulo OLED monocromo azul de 7 pines SSD1306 de 0.96 ”que tiene 128 píxeles de ancho y 64 píxeles de largo. Este OLED de 7 pines admite el protocolo SPI y el controlador IC SSD1306 ayuda al OLED a mostrar los caracteres recibidos. Obtenga más información sobre OLED y su interfaz con diferentes microcontroladores siguiendo el enlace.
Preparación del sensor MQ-7 para medir el monóxido de carbono (CO)
El módulo del sensor de gas de monóxido de carbono MQ-7 CO detecta las concentraciones de CO en el aire. El sensor puede medir concentraciones de 10 a 10,000 ppm. El sensor MQ-7 se puede comprar como módulo o solo como sensor. Anteriormente, hemos utilizado muchos tipos diferentes de sensores de gas para detectar y medir varios gases, también puede consultarlos si está interesado. En este proyecto, estamos utilizando el módulo sensor MQ-7 para medir la concentración de monóxido de carbono en PPM. El diagrama de circuito de la placa MQ-7 se muestra a continuación:
La resistencia de carga RL juega un papel muy importante en el funcionamiento del sensor. Esta resistencia cambia su valor de resistencia según la concentración de gas. La placa del sensor MQ-7 viene con una resistencia de carga de 1KΩ que es inútil y afecta las lecturas del sensor. Entonces, para medir los valores apropiados de concentración de CO, debe reemplazar la resistencia de 1KΩ con una resistencia de 10KΩ.
Cálculo del índice de calidad del aire
El AQI en India se calcula sobre la base de la concentración promedio de un contaminante particular medida durante un intervalo de tiempo estándar (24 horas para la mayoría de los contaminantes, 8 horas para el monóxido de carbono y el ozono). Por ejemplo, el AQI para PM2.5 y PM10 se basa en una concentración promedio de 24 horas y el AQI para monóxido de carbono se basa en una concentración promedio de 8 horas). Los cálculos del AQI incluyen los ocho contaminantes que son PM10, PM2.5, dióxido de nitrógeno (NO 2), dióxido de azufre (SO 2), monóxido de carbono (CO), ozono a nivel del suelo (O 3), amoníaco (NH 3), y Plomo (Pb). Sin embargo, no todos los contaminantes se miden en todos los lugares.
Sobre la base de las concentraciones ambientales medidas de un contaminante durante 24 horas, se calcula un subíndice, que es una función lineal de la concentración (por ejemplo, el subíndice para PM2.5 será 51 a una concentración de 31 µg / m3, 100 a una concentración 60 µg / m3 y 75 a una concentración de 45 µg / m3). El peor subíndice (o el máximo de todos los parámetros) determina el AQI general.
Diagrama de circuito
El diagrama de circuito para el sistema de monitoreo de la calidad del aire basado en IoT es muy simple y se muestra a continuación:
El sensor SDS011, el DHT11 y el sensor MQ-7 se alimentan con + 5V mientras que el módulo de pantalla OLED se alimenta con 3.3V. Los pines del transmisor y receptor de SDS011 están conectados a GPIO16 y 17 de ESP32. El pin de salida analógica del sensor MQ-7 está conectado a GPIO 25 y el pin de datos del sensor DHT11 está conectado al sensor GPIO27. Dado que el módulo de pantalla OLED utiliza comunicación SPI, hemos establecido una comunicación SPI entre el módulo OLED y ESP32. Las conexiones se muestran en la siguiente tabla:
S. No |
Pin del módulo OLED |
Pin ESP32 |
1 |
GND |
Suelo |
2 |
VCC |
5V |
3 |
D0 |
18 |
4 |
D1 |
23 |
5 |
RES |
2 |
6 |
corriente continua |
4 |
7 |
CS |
5 |
S. No |
Pin SDS011 |
Pin ESP32 |
1 |
5V |
5V |
2 |
GND |
GND |
3 |
RX |
17 |
4 |
TX |
dieciséis |
S. No |
Pin DHT |
Pin ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
Datos |
27 |
S. No |
Pin MQ-7 |
Pin ESP32 |
1 |
Vcc |
5V |
2 |
GND |
GND |
3 |
A0 |
25 |
Construcción del circuito del sistema de monitoreo de la calidad del aire en la placa de rendimiento
Como puede ver en la imagen principal, la idea era utilizar este circuito dentro de una carcasa impresa en 3D. Entonces, el circuito completo que se muestra arriba está soldado a una placa perf. Asegúrese de utilizar cables para dejar suficiente distancia para montar el OLED y los sensores. Mi placa perf soldada a OLED y el módulo del sensor se muestra a continuación.
Configuración de Adafruit IO
Adafruit IO es una plataforma de datos abierta que le permite agregar, visualizar y analizar datos en vivo en la nube. Con Adafruit IO, puede cargar, mostrar y monitorear sus datos a través de Internet y habilitar la IoT de su proyecto. Puede controlar motores, leer datos de sensores y crear aplicaciones de IoT geniales a través de Internet utilizando Adafruit IO.
Para utilizar Adafruit IO, primero cree una cuenta en Adafruit IO. Para hacer esto, vaya al sitio web de Adafruit IO y haga clic en 'Comenzar gratis' en la parte superior derecha de la pantalla.
Después de finalizar el proceso de creación de la cuenta, inicie sesión en la cuenta y haga clic en 'Ver clave AIO' en la esquina superior derecha para obtener el nombre de usuario de la cuenta y la clave AIO.
Al hacer clic en 'AIO Key', aparecerá una ventana con la clave Adafruit IO AIO y el nombre de usuario. Copie esta clave y nombre de usuario, se utilizará en el código.
Ahora, después de obtener las claves AIO, cree una fuente para almacenar los datos del sensor DHT. Para crear un feed, haga clic en "Feed". Luego haga clic en 'Acciones' y luego seleccione 'Crear una nueva fuente' de las opciones disponibles.
Después de esto, se abrirá una nueva ventana donde debe ingresar el Nombre y la Descripción del feed. Escribir una descripción es opcional.
Haga clic en 'Crear', después de esto; será redirigido al feed recién creado.
Para este proyecto, creamos un total de seis alimentaciones para valores de PM10, PM2.5, CO, Temperatura, Humedad y AQI. Siga el mismo procedimiento anterior para crear el resto de las fuentes.
Después de crear feeds, ahora crearemos una función de panel de Adafruit IO para visualizar los datos del sensor en una sola página. Para eso, primero, cree un panel y luego agregue todos estos feeds en ese panel.
Para crear un tablero, haga clic en la opción Tablero y luego haga clic en 'Acción' y, a continuación, haga clic en 'Crear un nuevo tablero'.
En la siguiente ventana, ingrese el nombre del tablero y haga clic en 'Crear'.
A medida que se crea el tablero, ahora usaremos los bloques Adafruit IO como Gauge y Slider para visualizar los datos. Para agregar un bloque, haga clic en el '+' en la esquina superior derecha.
Luego seleccione el bloque 'Gauge'.
En la siguiente ventana, seleccione los datos de la fuente que desea visualizar.
En el paso final, cambie la configuración del bloque para personalizarlo.
Ahora siga el mismo procedimiento anterior para agregar bloques de visualización para el resto de las fuentes. Mi panel de Adafruit IO se ve así:
Explicación del código para
El código completo de este proyecto se encuentra al final del documento. A continuación, explicamos algunas partes importantes del código.
El código utiliza las SDS011, Adafruit_GFX, Adafruit_SSD1306, Adafruit_MQTT, y DHT.h bibliotecas. Las bibliotecas SDS011, Adafruit_GFX y Adafruit_SSD1306 se pueden descargar desde el Administrador de bibliotecas en el IDE de Arduino e instalar desde allí. Para eso, abra el IDE de Arduino y vaya a Sketch <Incluir biblioteca <Administrar bibliotecas . Ahora busque SDS011 e instale la biblioteca de sensores SDS de R. Zschiegner.
De manera similar, instale las bibliotecas Adafruit GFX y Adafruit SSD1306 de Adafruit. Adafruit_MQTT.hy DHT11.h se pueden descargar desde los enlaces dados.
Después de instalar las bibliotecas en Arduino IDE, inicie el código incluyendo los archivos de bibliotecas necesarios.
#incluir
En las siguientes líneas, defina el ancho y la altura de la pantalla OLED. En este proyecto, he utilizado una pantalla OLED SPI de 128 × 64. Se puede cambiar el SCREEN_WIDTH y SCREEN_HEIGHT variables de acuerdo a su pantalla.
#define SCREEN_WIDTH 128 #define SCREEN_HEIGHT 64
Luego defina los pines de comunicación SPI donde se conecta la pantalla OLED.
#define OLED_MOSI 23 #define OLED_CLK 18 #define OLED_DC 4 #define OLED_CS 5 #define OLED_RESET 2
Luego, cree una instancia para la pantalla Adafruit con el ancho y alto y el protocolo de comunicación SPI que se definió anteriormente.
Pantalla Adafruit_SSD1306 (SCREEN_WIDTH, SCREEN_HEIGHT, OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);
Luego, incluya las credenciales de WiFi y Adafruit IO que copió del servidor Adafruit IO. Estos incluirán el servidor MQTT, el número de puerto, el nombre de usuario y la clave AIO.
const char * ssid = "Galaxy-M20"; const char * pass = "ac312124"; #define MQTT_SERV "io.adafruit.com" #define MQTT_PORT 1883 #define MQTT_NAME "choudharyas" #define MQTT_PASS "988c4e045ef64c1b9bc8b5bb7ef5f2d9"
Luego, configure las fuentes Adafruit IO para almacenar los datos del sensor. En mi caso, he definido seis alimentaciones para almacenar diferentes datos de sensores, a saber: AirQuality, Temperature, Humidity, PM10, PM25 y CO.
Adafruit_MQTT_Client mqtt (& cliente, MQTT_SERV, MQTT_PORT, MQTT_NAME, MQTT_PASS); Adafruit_MQTT_Publish AirQuality = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / AirQuality"); Adafruit_MQTT_Publish Temperature = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Temperature"); Adafruit_MQTT_Publish Humedad = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / Humedad"); Adafruit_MQTT_Publish PM10 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM10"); Adafruit_MQTT_Publish PM25 = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / PM25"); Adafruit_MQTT_Publish CO = Adafruit_MQTT_Publish (& mqtt, MQTT_NAME "/ f / CO");
Ahora, dentro de la función setup () , inicialice Serial Monitor a una velocidad de 9600 baudios para fines de depuración. También inicialice la pantalla OLED, el sensor DHT y el sensor SDS011 con la función begin () .
configuración vacía () {my_sds.begin (16,17); Serial.begin (9600); dht.begin (); display.begin (SSD1306_SWITCHCAPVCC);
El bucle for dentro de la función de configuración se utiliza para recopilar los valores hasta un número definido y luego establecer el contador en cero.
for (int thisReading1 = 0; thisReading1 <numReadingsPM10; thisReading1 ++) {readingsPM10 = 0; }
Lectura de los valores del sensor:
Ahora, dentro de la función de bucle, use el método millis () para leer los valores del sensor cada hora. Cada uno de los sensores de gas genera un valor analógico de 0 a 4095. Para convertir este valor en voltaje, utilice la siguiente ecuación: RvRo = MQ7Raw * (3.3 / 4095); donde MQ7Raw es el valor analógico del pin analógico del sensor. Además, lea las lecturas de PM2.5 y PM10 del sensor SDS011.
if ((unsigned long) (currentMillis - previousMillis)> = intervalo) {MQ7Raw = analogRead (iMQ7); RvRo = MQ7Raw * (3,3 / 4095); MQ7ppm = 3.027 * exp (1.0698 * (RvRo)); Serial.println (MQ7ppm); error = my_sds.read (& p25, & p10); if (! error) {Serial.println ("P2.5:" + String (p25)); Serial.println ("P10:" + Cadena (p10)); }}
Conversión de valores:
Los valores de PM2.5 y PM10 ya están en µg / m 3, pero necesitamos convertir los valores de monóxido de carbono de PPM a mg / m 3. La fórmula de conversión se da a continuación:
Concentración (mg / m 3) = Concentración (PPM) × (Masa molecular (g / mol) / Volumen molar (L))
Donde: la masa molecular de CO es 28,06 g / mol y el volumen molar es 24,45 L a 25 0 C
ConcentrationINmgm3 = MQ7ppm * (28.06 / 24.45); Serial.println (ConcentrationINmgm3);
Cálculo del promedio de 24 horas:
Luego, en las siguientes líneas, calcule el promedio de 24 horas para las lecturas de PM10, PM2.5 y el promedio de 8 horas para las lecturas de monóxido de carbono. En la primera línea de código, tome el total actual y reste el primer elemento en la matriz, ahora guárdelo como el nuevo total. Inicialmente, será cero. Luego obtenga los valores del sensor y sume la lectura actual al total y aumente el índice numérico. Si el valor del índice es igual o mayor que numReadings, vuelva a establecer el índice en cero.
totalPM10 = totalPM10 - lecturasPM10; lecturas PM10 = p10; totalPM10 = totalPM10 + lecturasPM10; readIndexPM10 = readIndexPM10 + 1; if (readIndexPM10> = numReadingsPM10) {readIndexPM10 = 0; }
Luego, por fin, publique estos valores en Adafruit IO.
if (! Temperature.publish (temperatura)) {retraso (30000); } if (! Humidity.publish (humedad)) {retraso (30000); ………………………………………………………. ……………………………………………………….
Carcasa impresa en 3D para el sistema de monitoreo AQI
A continuación, medí las dimensiones de la configuración utilizando mi nonio y también medí las dimensiones de los sensores y OLED para diseñar una carcasa. Mi diseño se veía así a continuación, una vez hecho.
Después de que estuve satisfecho con el diseño, lo exporté como un archivo STL, lo corté según la configuración de la impresora y finalmente lo imprimí. Nuevamente, el archivo STL también está disponible para descargar desde Thingiverse y puede imprimir su carcasa usándolo.
Una vez realizada la impresión, procedí a montar el proyecto en un recinto permanente para instalarlo en una instalación. Con la conexión completa hecha, ensamblé el circuito en mi carcasa y todo encajó bien, como puede ver aquí.
Prueba del sistema de monitoreo de AQI
Una vez que el hardware y el código estén listos, es hora de probar el dispositivo. Usamos un adaptador externo de 12V 1A para alimentar el dispositivo. Como puede ver, el dispositivo mostrará la concentración de PM10, PM2.5 y monóxido de carbono en la pantalla OLED. La concentración de PM2.5 y PM10 está en µg / m 3 mientras que la concentración de Monóxido de Carbono está en mg / m 3.
Estas lecturas también se publicarán en Adafruit IO Dashboard. El máximo de todos los parámetros (PM10, PM2.5 y CO) será el AQI.
Los valores de AQI de los últimos 30 días se mostrarán en forma de gráfico.
Así es como puede utilizar los sensores SDS011 y MQ-7 para calcular el índice de calidad del aire. El funcionamiento completo del proyecto también se puede encontrar en el video vinculado a continuación. Espero que hayas disfrutado del proyecto y hayas encontrado interesante construir el tuyo propio. Si tiene alguna pregunta, déjela en la sección de comentarios a continuación.