Skip to Content

Sistema de vigilancia y alerta de la contaminación atmosférica mediante Arduino y MQ135

Sistema de vigilancia y alerta de la contaminación atmosférica mediante Arduino y MQ135

En este tutorial, proporcionaré los detalles esenciales sobre el índice de calidad del aire, el pinout del sensor MQ-135 y cómo medir la contaminación del aire utilizando el sensor MQ-135.

Después de este tutorial, serás capaz de desarrollar el sistema de monitorización y alerta de la contaminación del aire utilizando la placa Arduino Uno con un sensor MQ-135.

Componentes de hardware

Arduino Uno Rev3x1Amazon
Arduino Mega (opcional)x1Amazon
Sensor de calidad del aire MQ-135x1Amazon
Pantalla LCD 16 x 2x1Amazon
LEDx3Amazon
Zumbadorx1Amazon
Tablero de pruebasx1Amazon
Cables de puentex15Amazon
Potenciómetro de 10Kx1Amazon
Cable USB tipo A/Bx1Amazon

Software

Arduino IDEArduino IDE

Makerguides.com participa en el Programa de Asociados de Amazon Services LLC, un programa de publicidad de afiliados diseñado para proporcionar un medio para que los sitios ganen honorarios de publicidad mediante la publicidad y los enlaces a productos en Amazon.com.

¿Qué es la contaminación atmosférica?

La contaminación atmosférica es la presencia en la atmósfera de cantidades excesivas de sustancias sólidas o gaseosas indeseables e inseguras, como el monóxido de carbono, el plomo, el óxido de nitrógeno, el ozono, las partículas, el dióxido de azufre, etc.

Causa y efecto de la contaminación atmosférica

La contaminación atmosférica se ha convertido en un problema cada vez más peligroso en los últimos años. Este factor está directamente relacionado con la salud humana.

El calentamiento global se ha convertido en una grave preocupación para muchos países; uno de los problemas a los que más se enfrenta es la contaminación atmosférica.

Otros efectos de la contaminación atmosférica son diversas enfermedades como el cáncer de pulmón, la cardiopatía isquémica, los ataques de asma, etc.

¿Qué es un sistema de vigilancia de la contaminación atmosférica?

El sistema de monitorización de la contaminación atmosférica es una instalación que permite medir los contaminantes del aire mediante sensores, procesarlos con microcontroladores y mostrar los resultados con diversas pantallas.

¿Cómo se puede controlar la contaminación atmosférica?

La calidad del aire es una medida de lo limpio o contaminado que está el aire. La contaminación del aire suele medirse como Índice de Calidad del Aire (ICA) en la unidad PPM.

Los sensores son los más adecuados para identificar puntos conflictivos en los bordes de las carreteras y cerca de fuentes puntuales. Este sensor obtiene datos que pueden ser monitorizados continuamente a través de diferentes pantallas.

Valores del Índice de Calidad del Aire (ICA)Niveles de preocupación por la saludValores del Índice de Calidad del Aire (ICA)Nombre cualitativo
0 a 50Buena0 a 25Muy bajo
51 a 100Moderado25 a 50Bajo
101 a 150No es saludable para los grupos sensibles50 a 75Medio
151 a 200InsalubreDe 75 a 100Alta
201 a 300Muy poco saludable>100Muy alto
301 a 500Peligrosos

Índice de calidad del aire: Fuente

¿Qué sensor puede detectar la contaminación del aire?

Hoy en día, el progreso de las piezas electrónicas y la disponibilidad de varios sensores como MQ-135, MQ-2, MQ-3, MQ-4, MQ-5, MQ-6, etc., para medir el contaminante del aire, se desarrollan diferentes sistemas para controlar el número de contaminantes del aire.

El MQ135 es uno de los sensores más populares para medir el AQI en PPM.

¿Qué es el sensor del MQ-135?

MQ-135 Sensor Module
MQ-135 Sensor Module

El MQ-135 es un sensor de gas que tiene una menor conductividad en el aire limpio. Es de bajo coste y adecuado para diferentes aplicaciones.

Este módulo funciona a 5V, tiene una resistencia de 33Ω±5% y consume unos 150mA.

Este sensor tiene cuatro pines de cuatro pines, de salida digital y analógica, que se utilizan para aproximar estos niveles de gases en la atmósfera. 

Cuando estos gases superan un umbral límite en el aire, la clavija digital se eleva.

Este valor de umbral puede ajustarse mediante el potenciómetro incorporado.

Características del sensor MQ-135

  1. Amplio alcance de detección, respuesta rápida y alta sensibilidad
  2. Larga vida útil
  3. Tensión del calentador: 5,0V
  4. Contiene salida analógica y salida digital alta/baja
  5. La señal de salida TTL es un nivel bajo
  6. La tensión de funcionamiento es de +5V
  7. Detección/Medición de NH3, NOx, alcohol, benceno, humo, CO2, etc.
  8. Rango de detección: 10 - 300 ppm NH3, 10 - 1000 ppm Benceno, 10 - 300 Alcohol

Si desea obtener más detalles sobre el sensor MQ-135, consulte la hoja de datos del MQ-135 y el pdf del esquema del MQ-135.

Mecanismo de trabajo

Mecanismo de trabajo

Ahora, entendamos el mecanismo de funcionamiento del sensor de gas del MQ-135. 

El sensor de gas MQ-135 está compuesto por dióxido de estaño (SnO2). Cuando existe un gas contaminante objetivo, la conductividad del sensor aumenta junto con la concentración de gas.

Los usuarios pueden convertir el cambio de conductividad para que se corresponda con la señal de salida de la concentración de gas a través de un sencillo circuito.

El sensor de gas MQ-135 tiene una alta sensibilidad al NH3, S2, vapor de la serie C6H6 y puede controlar el humo y otros gases tóxicos. Puede detectar tipos de gases tóxicos.

Pinout de MQ135

El módulo sensor MQ-135 tiene cuatro pines, siendo la parte más importante un potenciómetro ajustable.

Pinout de MQ135
Pinout of MQ-135 Sensor Module
Número de pinNombre de la clavijaDetalles
1Clavija VCCEl Pin requiere 5V para alimentar el módulo.
2Clavija de tierraPara conectar el módulo a la tierra común del sistema
3Pin de salida digitalEste pin ajusta el valor del umbral mediante un potenciómetro.
4Pin de salida analógicaLa clavija de tensión analógica se basa en la concentración del gas.

¿Se puede medir la calidad del aire con un dispositivo Arduino?

Arduino Uno consta de 14 pines de entrada/salida (E/S) digitales y 6 pines de entrada analógica, que cumplen los requisitos del sistema de monitorización AQI. 

Este sistema puede ser ampliado por varios módulos compatibles con Arduino, como el escudo de Ethernet, el escudo de GSM/GPRS, el escudo del registrador de GPS, el escudo de RTC, y la placa incorporada con VCC, tierra, etc.

Ahora que ya sabes un poco sobre el sensor MQ-135, vamos a avanzar y aprender a interconectar el MQ-135 con Arduino.

Cableado del sensor MQ-135 con Arduino UNO

El diagrama de este circuito se explica por sí mismo. La mejor manera de interconectar este circuito es empezar con una placa Arduino Uno y LCD con la protoboard.

Paso 1: En primer lugar, coloque un LCD de 16×2 en la protoboard, como se muestra en la figura.

Ahora, conecta A a +5V con una resistencia de 220 ohmios y K a tierra. 

Para variar el contraste de un LCD 16×2, conecte el VO al pin central del potenciómetro y VDD a +5V, VSS y RW a tierra. 

Además, proporcione +5V y tierra al potenciómetro como se muestra en la figura.

El resumen de las conexiones se menciona en la siguiente tabla.

Arduino Uno PINLCD 16×2 Pin
Pin digital 2 RS
Clavija digital 3ES
Clavija digital 4D4
Clavija digital 5D5
Pin digital 6D6
Pin digital 7D7
LCD en la protoboard

Paso 2: El módulo MQ-135 se conecta al pin A0 de un Arduino Uno y conecta GND a tierra, proporcionando +5V a VCC.

El módulo MQ-135 se conecta al pin A0 de un Arduino Uno

Paso 3: Conecte el ánodo (+) del LED verde al pin digital 8 de Arduino; el LED azul al pin digital 9 de Arduino y el LED rojo al pin digital 10 de Arduino y todos los LEDs al cátodo (-) de tierra con una resistencia de 220 ohmios.

Paso 4: Conecta el terminal positivo del zumbador al pin digital 11 de Arduino y el terminal negativo a la tierra.

pin digital 11 de Arduino

Código Arduino para el control de la contaminación atmosférica

El siguiente código permite medir el contaminante del aire en una unidad PPM utilizando el sensor MQ-135.

Puedes ver los resultados en un monitor de serie y en una pantalla LCD de 16×2.

// Include library for LCD and define pins
#include "LiquidCrystal.h"

const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

// Define pins and variable for input sensor and output led and buzzer
const int mq135_aqi_sensor = A0;
const int green_led = 8;
const int blue_led = 9;
const int red_led = 10;
const int buzzer = 11;

// Set threshold for AQI
int aqi_ppm = 0;

void setup() {
  // Set direction of input-output pins
  pinMode (mq135_aqi_sensor, INPUT);
  pinMode (green_led, OUTPUT);
  pinMode (blue_led, OUTPUT);
  pinMode (red_led, OUTPUT);
  pinMode (buzzer, OUTPUT);

  digitalWrite(green_led, LOW);
  digitalWrite(blue_led, LOW);
  digitalWrite(red_led, LOW);
  digitalWrite(buzzer, LOW);

  // Initiate serial and lcd communication
  Serial.begin (9600);
  lcd.clear();
  lcd.begin (16, 2);

  Serial.println("AQI Alert System");
  lcd.setCursor(0, 0);
  lcd.print("AQI Alert System");
  delay(1000);
}

void loop() {
  aqi_ppm = analogRead(mq135_aqi_sensor);

  Serial.print("Air Quality: ");
  Serial.println(aqi_ppm);

  lcd.setCursor(0, 0);
  lcd.print("Air Quality: ");
  lcd.print(aqi_ppm);

  if ((aqi_ppm >= 0) && (aqi_ppm <= 50))
  {
    lcd.setCursor(0, 1);
    lcd.print("AQI Good");
    Serial.println("AQI Good");
    digitalWrite(green_led, HIGH);
    digitalWrite(blue_led, LOW);
    digitalWrite(red_led, LOW);
    digitalWrite(buzzer, LOW);
  }
  else if ((aqi_ppm >= 51) && (aqi_ppm <= 100))
  {
    lcd.setCursor(0, 1);
    lcd.print("AQI Moderate");
    Serial.println("AQI Moderate");
    tone(green_led, 1000, 200);
    digitalWrite(blue_led, HIGH);
    digitalWrite(red_led, LOW);
    digitalWrite(buzzer, LOW);
  }

  else if ((aqi_ppm >= 101) && (aqi_ppm <= 200))
  {
    lcd.setCursor(0, 1);
    lcd.print("AQI Unhealthy");
    Serial.println("AQI Unhealthy");
    digitalWrite(green_led, LOW);
    digitalWrite(blue_led, HIGH);
    digitalWrite(red_led, LOW);
    digitalWrite(buzzer, LOW);
  }
  else if ((aqi_ppm >= 201) && (aqi_ppm <= 300))
  {
    lcd.setCursor(0, 1);
    lcd.print("AQI V. Unhealthy");
    Serial.println("AQI V. Unhealthy");
    digitalWrite(green_led, LOW);
    tone(blue_led, 1000, 200);
    digitalWrite(red_led, HIGH);
    digitalWrite(buzzer, LOW);
  }
  else if (aqi_ppm >= 301)
  {
    lcd.setCursor(0, 1);
    lcd.print("AQI Hazardous");
    Serial.println("AQI Hazardous");
    digitalWrite(green_led, LOW);
    digitalWrite(blue_led, LOW);
    digitalWrite(red_led, HIGH);
    digitalWrite(buzzer, HIGH);
  }
  delay (700);
}

Cómo funciona el código

He utilizado un IDE de Arduino para programar una placa Arduino Uno.

Paso 1: En primer lugar, he incluido el archivo de cabecera necesario para 16×2 LCD,

#include "LiquidCrystal.h>"                // Header file for LCD

Paso 2: Definir las variables para los diferentes pines utilizados en la placa Arduino para LCD, Buzzer, LED, y MQ-135. También, definir la variable para el valor analógico.

const int rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; // Pines de LCD a Arduino
LiquidCrystal lcd(rs, en, d4, d5, d6, d7); // Función LiquidCrystal

const int mq135_aqi_sensor = A0; // Conectar el sensor MQ-135 al pin A0 de Arduino
const int green_led = 8; // Conectar el LED verde al pin digital 8 de Arduino
const int blue_led = 9; // Conectar el LED azul al pin digital 9 de Arduino
const int red_led = 10; // Conectar el LED rojo al pin digital 10 de Arduino
const int buzzer = 11; // Conectar el buzzer al pin digital 11 de Arduino

int aqi_ppm = 0; // Inicializar la variable para recuperar el valor analógico

Paso 3: En la función void setup(), he inicializado el Buzzer, el LED como dispositivo de salida, y el MQ-135 como dispositivo de entrada a Arduino Uno. 

lcd.begin(); función inicializar LCD de 16×2, antes de inicializar la LCD de 16×2 hay que borrar.

Usando la función lcd.clear();. Además, establezca la tasa de baudios a una velocidad de 9600 usando la función Serial.begin();.

Paso 4: Después de la inicialización, la pantalla LCD de 16×2 establece la posición de inicio del cursor.

 lcd.setCursor(0, 0);

El siguiente mensaje se imprimirá en el terminal de serie y en la pantalla LCD de 16×2.

Serial.println("Sistema de alerta AQI");

lcd.print("Sistema de alerta AQI");

Paso 5: En la función void loop(), inicializar la variable para captar el valor analógico, utilizando la función analogRead(); . E imprimir en la terminal serial de mensajes y en el LCD de 16×2.

aqi_ppm = analogRead(mq135_aqi_sensor);
Serial.print("Calidad del aire: ");
Serial.println(aqi_ppm);

lcd.setCursor(0, 0);
lcd.print("Calidad del aire: ");
lcd.print(aqi_ppm);

Paso 6: Si el valor de Suppose Analog está entre 0 y 50, el LED verde parpadeará. Imprime en el terminal serial de mensajes. Y en el LCD se imprimirá un mensaje en la segunda fila y primera posición.

    lcd.setCursor(0, 1);
    lcd.print("AQI Good");
    Serial.println("AQI Good");
    digitalWrite(green_led, HIGH);

Paso 7: Al igual que, dependiendo del valor de AQI, el LED parpadeará y se imprimirá en el terminal de mensajes en serie y en la pantalla LCD de 16×2 siguiendo la tabla.

Valor AQILED verdeLED azulLED rojoZumbadorTerminal de serie yMensaje LCD 16×2
0 - 50ENOFFOFFOFFAQI Bueno
51 - 100BLINKENOFFOFFAQI Moderado
101 - 200OFFENOFFOFFAQI Insalubre
201 - 300OFFBLINKENOFFAQI Muy Insalubre
> 301OFFOFFENENAQI Peligroso

Salida del LCD:

Salida LCD

Salida de monitor en serie:

Salida de monitorización en serie

Conclusión

Después de este tutorial, puedes desarrollar tu propio sistema de monitorización y alerta del aire utilizando el sensor MQ-135 y la placa Arduino Uno.

Espero que hayas encontrado este tutorial informativo. Si lo has hecho, ¡compártelo con un amigo al que le guste la electrónica y hacer cosas!

Me encantaría saber qué proyecto tienes pensado construir o has hecho ya con el Arduino.

Si tienes alguna pregunta o sugerencia o crees que faltan cosas en este tutorial, deja un comentario abajo.

Shelke Snehal

Saturday 9th of March 2024

Thank you so much

Jakub

Saturday 19th of August 2023

This code is terrible! Can't do "copy paste"!

Stefan

Saturday 19th of August 2023

hmm, works for me. I clicked "copy to clipboard" in the right upper corner and the copy worked. What Browser are you using? I am on Chrome.

Chackochan Sebastian

Thursday 1st of June 2023

Is there a need to calibrate the mq135 sensor for this project? If yes, can you tell me how?

성인망가

Thursday 26th of January 2023

Hello there! I simply wish to give you a huge thumbs up for the great info you have got right here on this post "성인망가"Does running a blog like this take a large attention-grabbing discussion is worth comment. It’s difficult to find knowledgeable people using the same blog platform.