// Sistema de Controle de Iluminação Pública
// Autor: Adislson Silva
const int ldrPin = A0; // Sensor de luminosidade (LDR)
const int pirPin = 5; // Sensor de presença (PIR)
const int ledVermelho = 13; // LED vermelho - Emergência
const int ledAmarelo = 7; // LED amarelo - Noite
const int ledVerde = 2; // LED verde - Dia
const int botaoPin = 9; // Botão - Modo manual (ativa emergência)
bool emergenciaManual = false; // Estado da emergência manual
bool botaoAnterior = HIGH; // Estado anterior do botão (para detecção de clique único)
void setup() {
Serial.begin(9600);
pinMode(ldrPin, INPUT);
pinMode(pirPin, INPUT);
pinMode(botaoPin, INPUT_PULLUP); // Pull-up interno
pinMode(ledVermelho, OUTPUT);
pinMode(ledAmarelo, OUTPUT);
pinMode(ledVerde, OUTPUT);
digitalWrite(ledVermelho, LOW);
digitalWrite(ledAmarelo, LOW);
digitalWrite(ledVerde, LOW);
Serial.println("Sistema de Controle de Iluminação Pública Iniciado");
}
void loop() {
int valorLDR = analogRead(ldrPin);
int valorPIR = digitalRead(pirPin);
bool botaoPressionado = digitalRead(botaoPin) == LOW;
// --- Botão: ativa/desativa manualmente o modo emergência (um clique rápido) ---
if (botaoPressionado && botaoAnterior == HIGH) {
emergenciaManual = !emergenciaManual; // alterna o estado manual da emergência
Serial.println(emergenciaManual ? "Emergência manual ATIVADA" : "Emergência manual DESATIVADA");
delay(200); // debounce
}
botaoAnterior = digitalRead(botaoPin);
Serial.print("LDR: ");
Serial.print(valorLDR);
Serial.print(" | PIR: ");
Serial.print(valorPIR);
Serial.print(" | Emergência Manual: ");
Serial.println(emergenciaManual ? "Sim" : "Não");
// --- Modo Automático ---
if (valorLDR > 10) {
// Está claro → DIA
digitalWrite(ledVerde, HIGH);
digitalWrite(ledAmarelo, LOW);
digitalWrite(ledVermelho, LOW);
} else if (valorLDR <= 10) {
// Está escuro → NOITE
digitalWrite(ledVerde, LOW);
digitalWrite(ledAmarelo, HIGH);
// Emergência automática (sensor PIR)
if (valorPIR == HIGH) {
digitalWrite(ledVermelho, HIGH);
Serial.println("Emergência automática ATIVADA (movimento detectado)");
} else {
digitalWrite(ledVermelho, LOW);
}
}
// --- Emergência Manual tem prioridade ---
if (emergenciaManual) {
digitalWrite(ledVermelho, HIGH); // Força o LED vermelho ligado
digitalWrite(ledAmarelo, LOW);
digitalWrite(ledVerde, LOW);
}
delay(100); // Pequeno intervalo (não mais 5 segundos)
}