Início › Exercícios Intermédios › Alarme
🔀 Multi-componente

🚨 Sistema de Alarme

LDR + Buzzer + LED. Alarme ativado por mudança súbita de luminosidade.

⏱️ Duração: 45 min
🧩 Componentes: LDR + Buzzer + LED R + Botão
📚 Pré-req: LDR + Buzzer + Botão

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.
Próximo: Estação Meteorológica →