/*Compilador: Geovane Manuel Cambonga
Semáforo Automático com Variação de Luz
Angola-Malanje 11/Setembro /2024 */
const int buzzer_pin = 13;
const int sensor_pin = 3; // Sensor de luz
const int led_pin1 = 4; // LED Verde
const int led_pin2 = 5; // LED Amarelo
const int led_pin3 = 6; // LED Vermelho
int rd; // Variável para ler o sensor
int ciclos = 5; // Número de ciclos para o semáforo
int tempoVerde = 3; // Tempo de duração do LED verde em segundos
int tempoAmarelo = 2; // Tempo de duração do LED amarelo em segundos
int tempoVermelho = 3; // Tempo de duração do LED vermelho em segundos
// Incluir a biblioteca do LCD
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 10, 9, 8, 7); // Pinos do LCD
void setup() {
// Configuração dos pinos
pinMode(sensor_pin, INPUT);
pinMode(led_pin1, OUTPUT);
pinMode(led_pin2, OUTPUT);
pinMode(led_pin3, OUTPUT);
pinMode(buzzer_pin, OUTPUT);
// Inicializar o LCD
lcd.begin(16, 2); // Configuração para LCD 16x2
lcd.setCursor(0, 0);
lcd.print("Geovane Cambonga");
delay(2000); // Exibir o nome por 2 segundos
// Mensagem de responsabilidade
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Conduza com");
lcd.setCursor(0, 1);
lcd.print("responsabilidade");
delay(2000); // Exibir por 2 segundos
lcd.clear();
}
void loop() {
// Ler o valor do sensor de luz
rd = digitalRead(sensor_pin);
// Ciclo de funcionamento do semáforo por 5 ciclos ao detectar luz
if (rd == LOW) { // Se houver luz visível
for (int i = 0; i < ciclos; i++) {
// Semáforo funcionando em 3 estágios (Verde, Amarelo, Vermelho)
// LED Verde
lcd.setCursor(0, 0);
lcd.print("Verde: s ");
for (int t = tempoVerde; t > 0; t--) {
lcd.setCursor(7, 0);
lcd.print(t); // Contagem decrescente no LCD
digitalWrite(led_pin1, HIGH);
delay(1000);
// Acionar o buzzer um terço do tempo antes da troca
if (t <= (tempoVerde / 3)) {
digitalWrite(buzzer_pin, HIGH);
delay(100);
digitalWrite(buzzer_pin, LOW);
delay(100);
}
}
digitalWrite(led_pin1, LOW);
// LED Amarelo
lcd.setCursor(0, 0);
lcd.print("Amarelo: s ");
for (int t = tempoAmarelo; t > 0; t--) {
lcd.setCursor(9, 0);
lcd.print(t); // Contagem decrescente no LCD
digitalWrite(led_pin2, HIGH);
delay(1000);
// Acionar o buzzer um terço do tempo antes da troca
if (t <= (tempoAmarelo / 3)) {
digitalWrite(buzzer_pin, HIGH);
delay(100);
digitalWrite(buzzer_pin, LOW);
delay(100);
}
}
digitalWrite(led_pin2, LOW);
// LED Vermelho
lcd.setCursor(0, 0);
lcd.print("Vermelho: s ");
for (int t = tempoVermelho; t > 0; t--) {
lcd.setCursor(10, 0);
lcd.print(t); // Contagem decrescente no LCD
digitalWrite(led_pin3, HIGH);
delay(1000);
// Acionar o buzzer um terço do tempo antes da troca
if (t <= (tempoVermelho / 3)) {
digitalWrite(buzzer_pin, HIGH);
delay(100);
digitalWrite(buzzer_pin, LOW);
delay(100);
}
}
digitalWrite(led_pin3, LOW);
}
} else {
// Apagar os LEDs se não houver luz visível
digitalWrite(led_pin1, LOW);
digitalWrite(led_pin2, LOW);
digitalWrite(led_pin3, LOW);
}
}