| Módulo | Conector Interface | Pino Arduino | Notas |
|---|---|---|---|
| 💨 MQ-2 — Analógico | GAS_A | A1 | Concentração contínua 0–1023 |
| 💨 MQ-2 — Digital | GAS_D | D7 | LOW = gás acima do limiar (ajustável com potenciómetro) |
Valores de referência em condições normais de sala (sem gás):
Lê continuamente o valor analógico do sensor e imprime no Monitor Série. Aproxima um isqueiro (sem acender!) ou acende um fósforo para observar a subida dos valores.
#define MQ2_ANA A1
void setup() {
Serial.begin(9600);
Serial.println("A aguardar aquecimento do sensor (30s)...");
delay(30000); // 30s de aquecimento mínimo
Serial.println("Sensor pronto. A ler...");
}
void loop() {
int gas = analogRead(MQ2_ANA);
Serial.print("Gas: ");
Serial.println(gas);
delay(500);
}
Usa a saída digital do MQ-2 (pino D7) cujo limiar é ajustado pelo potenciómetro no módulo. Quando o nível de gás ultrapassa o limiar, D7 vai a LOW — acende LED vermelho e toca buzzer.
#define MQ2_DIG 7
#define LED_BRANCO 5
#define BUZZER 6
void setup() {
pinMode(MQ2_DIG, INPUT);
pinMode(LED_BRANCO, OUTPUT);
pinMode(BUZZER, OUTPUT);
Serial.begin(9600);
delay(30000); // Aquecimento obrigatório
Serial.println("Sistema de alarme de gas ativo.");
}
void loop() {
int alerta = digitalRead(MQ2_DIG);
if (alerta == LOW) { // LOW = gás acima do limiar
digitalWrite(LED_BRANCO, HIGH);
tone(BUZZER, 800); // Som contínuo de alarme
Serial.println("ALERTA: Gas detetado!");
} else {
digitalWrite(LED_BRANCO, LOW);
noTone(BUZZER);
}
delay(200);
}
Usa o pino analógico A1 para distinguir três níveis de concentração — ar limpo, atenção e perigo — com respostas progressivamente mais intensas.
#define MQ2_ANA A1
#define LED_BRANCO 5
#define LED_AMARELO 6 // Nota: LED amarelo é D6 — repartilha com buzzer
#define BUZZER 6 // Usar apenas um de cada vez
#define LIMIAR_ATENCAO 400
#define LIMIAR_PERIGO 700
void setup() {
pinMode(LED_BRANCO, OUTPUT);
Serial.begin(9600);
Serial.println("A aquecer sensor MQ-2 (30s)...");
delay(30000);
Serial.println("Pronto. Monitorizar gas.");
}
void loop() {
int gas = analogRead(MQ2_ANA);
if (gas < LIMIAR_ATENCAO) {
// Ar limpo
digitalWrite(LED_BRANCO, LOW);
noTone(BUZZER);
Serial.println("OK — Ar limpo");
} else if (gas < LIMIAR_PERIGO) {
// Atenção: pisca LED e 2 bips
digitalWrite(LED_BRANCO, HIGH);
delay(300);
digitalWrite(LED_BRANCO, LOW);
tone(BUZZER, 600, 100);
delay(200);
tone(BUZZER, 600, 100);
Serial.print("ATENCAO: Gas="); Serial.println(gas);
} else {
// PERIGO: LED ligado + buzzer alarme rápido
digitalWrite(LED_BRANCO, HIGH);
tone(BUZZER, 1000, 100);
delay(120);
tone(BUZZER, 800, 100);
delay(120);
Serial.print("!!! PERIGO: Gas="); Serial.println(gas);
}
}
Integra o sensor MQ-2 com o display LCD 1602. Mostra o valor de gás na primeira linha e o estado do alarme na segunda. Toca buzzer e pisca LED em caso de perigo.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#define MQ2_ANA A1
#define LED_BRANCO 5
#define BUZZER 6 // Buzzer passivo
#define LIMIAR_PERIGO 600
LiquidCrystal_I2C lcd(0x27, 16, 2);
void setup() {
pinMode(LED_BRANCO, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0); lcd.print("Gas: A aquecer");
lcd.setCursor(0, 1); lcd.print("Aguarda 30s...");
delay(30000);
lcd.clear();
}
void loop() {
int gas = analogRead(MQ2_ANA);
// Linha 1: valor de gás
lcd.setCursor(0, 0);
lcd.print("Gas: ");
lcd.print(gas);
lcd.print(" "); // Limpa dígitos antigos
if (gas > LIMIAR_PERIGO) {
// ALARME
lcd.setCursor(0, 1);
lcd.print("!! GAS DETETADO !!");
digitalWrite(LED_BRANCO, HIGH);
tone(BUZZER, 1000, 200);
delay(250);
tone(BUZZER, 700, 200);
delay(250);
} else {
// Normal
lcd.setCursor(0, 1);
lcd.print("Estado: OK ");
digitalWrite(LED_BRANCO, LOW);
noTone(BUZZER);
delay(500);
}
}
millis()) de cada evento de alarme