Sistema de monitorização ambiental para laboratório ou sala de aula que mede temperatura, humidade e deteta presença de chama ou fumo. Quando qualquer parâmetro sai dos limites seguros, o LED 2 cores muda para vermelho e o buzzer ativo soa. Simula um sistema de alarme de segurança real.
| Módulo | Pino do módulo | Pino Arduino | Função |
|---|---|---|---|
| DHT11 (#19) | VCC / GND / S | 5V / GND / D2 | Temperatura e humidade |
| Sensor de Chama (#1) | VCC / GND / DO / AO | 5V / GND / D3 / A0 | Deteção de chama/IR |
| LED 2 Cores (#10) | VCC / GND / R / G | 5V / GND / D12 / D11 | Verde = OK, Vermelho = Alerta |
| Buzzer Ativo (#20) | VCC / GND / S | 5V / GND / D8 | Alarme sonoro |
Liga o DHT11 ao D2. Usa o código de Sensor DHT para confirmar que lê valores correctos antes de continuar.
Liga o sensor de chama (DO→D3, AO→A0). Lê o valor analógico no Serial Monitor com luz normal — esse é o teu valor de referência. Ajusta o potenciómetro para que o LED da PCB acenda apenas na presença de IR intenso.
Liga o LED 2 cores (R→D12, G→D11) e o buzzer ativo (S→D8). Testa: digitalWrite(12, HIGH) deve ligar vermelho; digitalWrite(8, HIGH) deve soar.
Carrega o sketch completo. Ajusta TEMP_MAX, HUM_MAX e CHAMA_LIMIAR aos valores do teu ambiente.
#include <DHT.h>
#define DHT_PIN 2
#define CHAMA_D 3 // Saída digital — LOW = chama
#define CHAMA_A A0 // Saída analógica
#define LED_R 12 // Vermelho = alerta
#define LED_G 11 // Verde = OK
#define BUZZER 8
#define TEMP_MAX 30.0
#define HUM_MAX 75.0
#define CICLO_MS 2000
DHT dht(DHT_PIN, DHT11);
unsigned long ultimoAlerta = 0;
#define PAUSA_BUZZER 5000 // Buzzer não repete antes de 5s
void alarme() {
if (millis() - ultimoAlerta < PAUSA_BUZZER) return;
ultimoAlerta = millis();
for (int i = 0; i < 3; i++) {
digitalWrite(BUZZER, HIGH); delay(200);
digitalWrite(BUZZER, LOW); delay(150);
}
}
void setup() {
dht.begin();
pinMode(CHAMA_D, INPUT);
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(BUZZER, OUTPUT);
Serial.begin(9600);
Serial.println("Sistema Qualidade do Ar — INICIADO");
}
void loop() {
delay(CICLO_MS);
float t = dht.readTemperature();
float h = dht.readHumidity();
bool chama = (digitalRead(CHAMA_D) == LOW);
int irRaw = analogRead(CHAMA_A);
bool alerta = false;
String causa = "";
if (isnan(t) || isnan(h)) {
Serial.println("ERRO: sensor DHT sem resposta"); return;
}
if (t > TEMP_MAX) { alerta = true; causa += "TEMP_ALTA "; }
if (h > HUM_MAX) { alerta = true; causa += "HUM_ALTA "; }
if (chama) { alerta = true; causa += "CHAMA "; }
digitalWrite(LED_G, !alerta);
digitalWrite(LED_R, alerta);
if (alerta) alarme();
Serial.print("T:"); Serial.print(t,1);
Serial.print(" H:"); Serial.print(h,1);
Serial.print(" IR:"); Serial.print(irRaw);
Serial.print(" | ");
Serial.println(alerta ? causa : "OK");
}