Proyecto de Arduino: Sensor de Gas.
En este proyecto se desarrolló un sistema capaz de detectar la presencia de gas y
humo en el ambiente utilizando una placa Arduino y el sensor MQ-2.
El propósito principal es que, cuando el sensor identifique una concentración de
gas o humo mayor a un valor límite (umbral), el sistema active una alarma sonora
y un LED rojo, indicando una situación de peligro.
En condiciones normales, cuando no se detecta gas ni humo, el sistema
permanece en estado seguro y se enciende un LED verde.
Funcionamiento
• El sensor MQ-2 envía al Arduino un valor analógico que representa la
cantidad de gas o humo presente.
• Ese valor se compara con el umbral programado en el código.
• Si el valor supera el umbral (peligro):
o Se enciende el LED rojo.
o Se activa el buzzer (alarma).
o Se apaga el LED verde.
• Si el valor es menor al umbral (normal):
• Se apaga el buzzer.
• Se apaga el LED rojo.
• Se enciende el LED verde.
Además, los valores del sensor se muestran en el monitor serial, lo que permite
observar en tiempo real cómo cambian al acercar gas o humo.
Para comprobar el funcionamiento del sistema se utilizaron:
• Gas proveniente de un encendedor.
• Humo generado al encender un cartón.
Durante las pruebas se ajustó la sensibilidad del sistema modificando el valor del
umbral en el código, hasta obtener una respuesta adecuada.
Explicación general del código
Este código sirve para detectar gas o humo usando un sensor MQ-2 conectado
a un Arduino.
Cuando el sensor detecta una cantidad de gas o humo mayor al umbral, se activa
una alarma (buzzer) y un LED rojo.
Cuando no hay gas ni humo, se apaga la alarma y se enciende un LED verde.
Explicación del código línea por línea
Declaración de pines
int pinMQ2 = A0;
int buzzer = 8;
int ledVerde = 10;
int ledRojo = 9;
Aquí se indica en qué pines del Arduino está conectado cada componente:
• pinMQ2 = A0 → El sensor MQ-2 está conectado al pin analógico A0
• buzzer = 8 → El buzzer está conectado al pin digital 8
• ledVerde = 10 → LED verde en el pin 10
• ledRojo = 9 → LED rojo en el pin 9
Variables del programa
int valorMQ2;
int umbral = 200;
• valorMQ2 → Guarda el valor que lee el sensor MQ-2
• umbral → Es el límite que se usa para decidir si hay gas o humo
o Si el valor supera 200, se activa la alarma
Función setup()
void setup(){
pinMode(pinMQ2, INPUT);
[Link](9600);
pinMode(buzzer,OUTPUT);
pinMode(ledRojo,OUTPUT);
pinMode(ledVerde,OUTPUT);
}
Esta parte se ejecuta una sola vez cuando el Arduino se enciende.
• pinMode(pinMQ2, INPUT);
→ El sensor es una entrada, porque manda información al Arduino
• [Link](9600);
→ Inicia la comunicación serial para ver los valores del sensor
• pinMode(buzzer, OUTPUT);
• pinMode(ledRojo, OUTPUT);
• pinMode(ledVerde, OUTPUT);
→ El buzzer y los LEDs son salidas, porque el Arduino los controla
Función loop()
void loop(){
valorMQ2 = (analogRead(pinMQ2));
• Se lee el valor analógico del sensor MQ-2
• Ese valor se guarda en valorMQ2
Mostrar valores en el monitor serial
[Link](valorMQ2);
• Muestra el valor del sensor en el Monitor Serial
• Sirve para observar cuándo sube el nivel de gas o humo
Condición: detección de gas o humo
if(valorMQ2>umbral){
digitalWrite(buzzer, HIGH);
digitalWrite(ledRojo, HIGH);
digitalWrite(ledVerde, LOW);
delay(1000);
}
Si el valor del sensor es mayor que el umbral (200):
• Se activa el buzzer
• Se enciende el LED rojo
• Se apaga el LED verde
• Se mantiene la alarma por 1 segundo
Esto indica peligro por gas o humo.
Condición: estado normal
if(valorMQ2<umbral){
digitalWrite(buzzer, LOW);
digitalWrite(ledRojo, LOW);
digitalWrite(ledVerde, HIGH);
}
Si el valor del sensor es menor que el umbral:
• Se apaga el buzzer
• Se apaga el LED rojo
• Se enciende el LED verde
Esto indica que no hay gas ni humo.
Retardo final
delay(100);
}
• Hace una pausa de 100 milisegundos
• Evita que el programa se ejecute demasiado rápido
• Evita saturar el monitor serial
Código completo
int pinMQ2 = A0;
int buzzer = 8;
int ledVerde = 10;
int ledRojo = 9;
int valorMQ2;
int umbral = 200;
void setup(){
pinMode(pinMQ2, INPUT);
[Link](9600);
pinMode(buzzer,OUTPUT);
pinMode(ledRojo,OUTPUT);
pinMode(ledVerde,OUTPUT);
}
void loop(){
valorMQ2 = (analogRead(pinMQ2));
[Link](valorMQ2);
if(valorMQ2>umbral){
digitalWrite(buzzer, HIGH);
digitalWrite(ledRojo, HIGH);
digitalWrite(ledVerde, LOW);
delay(1000);
}
if(valorMQ2<umbral){
digitalWrite(buzzer, LOW);
digitalWrite(ledRojo, LOW);
digitalWrite(ledVerde, HIGH);
}
delay(100);
}