/* MÓDULO PERIFÉRICO 3
TCC 2025
Instituição - Escola Técnica Estadual Aristóteles Ferreira (ETECAF).
Cidade - Santos, SP, Brasil.
Orientador/Professor - Carlos Barreira da Silva Farinhas.
Projeto - Sistema de automação residencial: uma solução para usuários domésticos.
Componentes do projeto:
- Arthur Rodrigues Telles Guimarães.
- Luan Guimarães Santos Passos.
- Rodrigo Francisco Pettinati Mikaro.
Telefone para contato:
Arthur:
Luan: +55 (013) 99887-8487
Rodrigo:
*/
//Pinos entrada:
#define pino_interruptor_lampada 0 //0
#define pino_bot_diminui 17 //1
#define pino_bot_aumenta 2 //2
#define pino_interruptor_sentido 16 //3
//Pinos saida:
#define pino_triac 18 //4
#define pino_rele_exaust_vent 22 // 5
#define pino_rele_liga_desliga 15 // 6
#define pino_rele_dpdt_lampada 13 //7
//Variáveis:
int val_triac = 0;
int val_bruto_triac = 0;
boolean bot_diminui_presente = HIGH;
boolean bot_aumenta_presente = HIGH;
boolean bot_diminui_anterior = HIGH;
boolean bot_aumenta_anterior = HIGH;
int interruptor_lampada_atual = 0;
int interruptor_lampada_anterior = 0;
int estado_rele_lampada = 0;
int interruptor_sentido_atual = 1;
int interruptor_sentido_anterior = 1;
bool estado_sentido = false;
void setup() {
Serial.begin(115200);
pinMode(pino_interruptor_lampada, INPUT);
pinMode(pino_bot_diminui, INPUT_PULLUP);
pinMode(pino_bot_aumenta, INPUT_PULLUP);
pinMode(pino_interruptor_sentido, INPUT_PULLUP);
pinMode(pino_triac, OUTPUT);
pinMode(pino_rele_exaust_vent, OUTPUT);
pinMode(pino_rele_liga_desliga, OUTPUT);
pinMode(pino_rele_dpdt_lampada, OUTPUT);
}
void loop() {
// LÂMPADA ---------------------------------------------------------------------------------------------------
interruptor_lampada_atual = digitalRead(pino_interruptor_lampada);
if(interruptor_lampada_atual != interruptor_lampada_anterior) {
estado_rele_lampada = !estado_rele_lampada;
}
digitalWrite(pino_rele_dpdt_lampada, estado_rele_lampada);
interruptor_lampada_anterior = interruptor_lampada_atual;
// VENTILADOR ---------------------------------------------------------------------------------------------------
//Controle da velocidade e ligado/desligado:
bot_diminui_presente = digitalRead(pino_bot_diminui);
bot_aumenta_presente = digitalRead(pino_bot_aumenta);
if ((bot_aumenta_presente == LOW) && (bot_aumenta_anterior == HIGH) && (val_triac >= 0) && (val_triac <= 100))
{
val_bruto_triac = val_bruto_triac + 1;
delay(40);
}
bot_aumenta_presente = bot_aumenta_anterior;
if ((bot_diminui_presente == LOW) && (bot_diminui_anterior == HIGH) && (val_triac >= 0) && (val_triac <=100))
{
val_bruto_triac = val_bruto_triac - 1;
delay(40);
}
if (val_bruto_triac < 0)
{
val_bruto_triac = 0;
}
else if (val_bruto_triac > 100) {
val_bruto_triac = 100;
}
if (val_bruto_triac > 5) {
val_triac = val_bruto_triac;
digitalWrite(pino_rele_liga_desliga, 1);
}
if (val_bruto_triac <= 5) {
val_triac = 0;
digitalWrite(pino_rele_liga_desliga, 0);
}
bot_diminui_presente = bot_diminui_anterior;
int val_triac_map = map(val_triac, 0, 100, 0, 255);
analogWrite(pino_triac, val_triac_map);
Serial.println(val_triac);
//Controle do Sentido de Rotação (Exaust/Vent):
interruptor_sentido_atual = digitalRead(pino_interruptor_sentido);
if (interruptor_sentido_anterior == HIGH && interruptor_sentido_atual == LOW) {
estado_sentido = !estado_sentido; // Inverte o estado (toggle)
// Atualiza o relé: LOW ativa (muda para NO), HIGH desativa (fica no NC)
digitalWrite(pino_rele_exaust_vent, estado_sentido ? LOW : HIGH);
Serial.print("Novo modo: ");
Serial.println(estado_sentido ? "Ventilação (NO)" : "Exaustão (NC)");
delay(50); // debounce simples
}
interruptor_sentido_anterior = interruptor_sentido_atual;
}Estado
Lamp
Diminui/
/Aumenta
Velocidade Ventilador
Exaust/Vent
Ventilador
Exaust
-----------
Vent
VENTILADOR
F1
F2
Relé DPDT
Soquete
Lampada
ESP32c3
Brilho indica velocidade