Como Funciona o Alarme
O sistema lê a luminosidade em repouso (calibração inicial) e deteta quando há uma mudança súbita — simula uma luz que se acende ou que é bloqueada por uma intrusão.
1
Calibração
Nos primeiros 3 segundos, o Arduino mede a luminosidade ambiente e define o limiar de alerta.
2
Monitorização
O LDR é lido continuamente. O LED verde indica estado normal.
3
Alarme
Se a luminosidade mudar mais de 30% do valor base, o LED vermelho acende e o buzzer dispara.
4
Reset
Prime o botão para silenciar o alarme e recalibrar.
Ligação
🔌 Ligações
| Arduino | → | Componente |
|---|---|---|
| 5V | → | LDR (pino 1) |
| A0 | → | LDR (pino 2) + Resistência 10kΩ → GND |
| Pino 9 | → | Resistência 220Ω → LED Vermelho |
| Pino 10 | → | Resistência 220Ω → LED Verde |
| Pino 8 | → | Buzzer (+) |
| Pino 2 | → | Botão → GND (com INPUT_PULLUP) |
| GND | → | LEDs (−) + Buzzer (−) |
Código
alarme_ldr.ino
const int LDR = A0;
const int LED_R = 9;
const int LED_G = 10;
const int BUZZER = 8;
const int BTN = 2;
int valorBase = 0;
bool alarmeAtivo = false;
const float LIMIAR = 0.30; // 30% de variação
void setup() {
pinMode(LED_R, OUTPUT);
pinMode(LED_G, OUTPUT);
pinMode(BUZZER, OUTPUT);
pinMode(BTN, INPUT_PULLUP);
Serial.begin(9600);
calibrar();
}
void calibrar() {
Serial.println("A calibrar... não toques no sensor!");
digitalWrite(LED_G, HIGH);
long soma = 0;
for (int i = 0; i < 10; i++) {
soma += analogRead(LDR);
delay(300);
}
valorBase = soma / 10;
Serial.print("Valor base: "); Serial.println(valorBase);
alarmeAtivo = false;
digitalWrite(LED_G, LOW);
}
void loop() {
// Reset com botão
if (digitalRead(BTN) == LOW) {
alarmeAtivo = false;
digitalWrite(LED_R, LOW);
digitalWrite(BUZZER, LOW);
delay(300);
calibrar();
return;
}
int leitura = analogRead(LDR);
float variacao = abs(leitura - valorBase) / (float)valorBase;
Serial.print("LDR: "); Serial.print(leitura);
Serial.print(" | Var: "); Serial.println(variacao, 2);
if (variacao > LIMIAR) {
alarmeAtivo = true;
}
if (alarmeAtivo) {
digitalWrite(LED_G, LOW);
digitalWrite(LED_R, HIGH);
// Sirene
digitalWrite(BUZZER, HIGH); delay(100);
digitalWrite(BUZZER, LOW); delay(100);
} else {
digitalWrite(LED_G, HIGH);
digitalWrite(LED_R, LOW);
}
delay(100);
}
🎯Desafio: Adiciona o LCD para mostrar o estado do alarme e o valor atual do LDR em tempo real.