Neste projeto vamos construir um controlador com temporizador para vários dispositivos usando o controle remoto comum de uma televisão e também funciona como uma luz de emergência.
Materiais:
- Arduino pró mini
- Módulo Rele
- Leitor de IR (Infra Vermelho)
- Fios/Jumpers
- Fonte de alimentação
- Tomadas
Para Comprar
Arduino Pró Mini
https://shopee.com.br/arduino-Pro-Mini-Atmega-modelo-2-ref-010-ardu%C3%ADno-i.258729162.6653637657?position=8
Módulo Rele
https://produto.mercadolivre.com.br/MLB-1344333609-modulo-rele-4-canais-5v-c-optoacopladores-arduino-automaco-_JM
Receptor Infravermelho
https://produto.mercadolivre.com.br/MLB-1808402529-2x-modulo-sensor-receptor-infravermelho-ky-022-para-arduino-_JM
Códigos usados no vídeo
//Vermelho 2 = Abajur
//Verde 5 = Foto
//Amarelo 8 = umidificador
//Azul 0 = Ventilador // RELE Extra
//Desliga tudo disp -
#include <IRremote.h>
int RECV_PIN = 10;
IRrecv irrecv(RECV_PIN);
decode_results results;
const int qtdSaidas = 4;
const int saida[qtdSaidas] = {A0, 11, 12, 13}; //{13,12,11,A0};
int estadoSaida[qtdSaidas] = {1, 1, 1, 0};
const int entradaFonte = A1;
int valorFonte = 0;
int horas=5; // quantas horas ficará ligado
unsigned long tempoBase = 3600000; // 1h
unsigned long tempoAtual = 0; // 21600000 = 6h
unsigned long tempoMaximo[qtdSaidas]; // = tempoBase; //horas*3600000; // 3600000 = 1h
unsigned long tempoAnterior[qtdSaidas]; //=0; // 21600000 = 6h
void setup()
{
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
for (int x = 0 ; x < qtdSaidas - 1 ; x++) {
pinMode(saida[x], OUTPUT); // define como saída
digitalWrite(saida[x], HIGH); //desliga a saída
}
digitalWrite(saida[3], LOW); // Rele Extra
delay(1000);
Serial.println(" ### Iniciando ### ");
}
void loop() {
delay(200);
leituraIR();
// ########### LUZ de EMERGENCIA
valorFonte=0;
for (int x=0; x<=5 ; x++){
valorFonte=valorFonte+analogRead(entradaFonte);
delay(50);
}
valorFonte=valorFonte/5;
Serial.print(" ||Fonte =");
Serial.println(valorFonte);
if (valorFonte <= 100) {
int estadoEmergencia0 = LOW;
int estadoEmergencia1 = LOW;
while (valorFonte <= 100) {
if (irrecv.decode(&results)) {
if (results.value == 0xFF18E7 || results.value == 0x800F7402 || results.value == 0x800FF402 || results.value == 0xDAEA83EC || results.value == 0xFB0042BD) { //vermelho
Serial.println("Pressionado Vermelho 2 = Abajur ");
estadoEmergencia0 = !estadoEmergencia0;
}
if (results.value == 0xFF38C7 || results.value == 0x800F7405 || results.value == 0x800FF405 || results.value == 0x2BAFCEEC || results.value == 0xFB0002FD ) { //verde
Serial.println("Pressionado Verde 5 = Foto ");
estadoEmergencia1 = !estadoEmergencia1;
}
if (results.value == 0xFFE01F || results.value == 0x800F744F || results.value == 0x800FF44F || results.value == 0xE51B354E || results.value == 0xFB00A857 ) { //tecla parar disp
Serial.println("Pressionado Desliga tudo disp - ");
estadoEmergencia0 = HIGH;
estadoEmergencia1 = HIGH;
}
irrecv.resume(); // Receive the next value
}
Serial.print(" ###### Acionando Luz de emergencia ");
digitalWrite(saida[0], estadoEmergencia0); //desliga ou liga a saída na falta de energia
digitalWrite(saida[1], estadoEmergencia1); //desliga ou liga a saída na falta de energia
digitalWrite(saida[2], HIGH); //DESliga se faltar energia
digitalWrite(saida[3], LOW); //DESliga se faltar energia RELE Extra
valorFonte=0;
for (int x=0; x<=5 ; x++){
valorFonte=valorFonte+analogRead(entradaFonte);
delay(50);
}
valorFonte=valorFonte/5;
Serial.print(" || Fonte =");
Serial.println(valorFonte);
// delay(200);
}// while
} //if da luz de emergencia
// ########## Aciona Saidas
tempoAtual = millis();
//while(tempoAtual-tempoAnterior < tempoMaximo){
for (int x = 0 ; x < qtdSaidas - 1 ; x++) {
if (tempoAtual - tempoAnterior[x] > tempoMaximo[x]) {
estadoSaida[x] = HIGH; // Desliga a saída x
}
} //for ? ligado
if (tempoAtual - tempoAnterior[3] > tempoMaximo[3]) {
estadoSaida[3] = LOW; // Desliga a saída do RELE Extra
}
for (int x = 0 ; x < qtdSaidas ; x++) {
digitalWrite(saida[x], estadoSaida[x]); //desliga ou liga a saída
Serial.print(" ||Saida ");
Serial.print(saida[x]);
Serial.print("=");
Serial.print(estadoSaida[x]);
}
// delay(300);
irrecv.resume(); // Receive the next value
} //loop
void leituraIR() {
if (irrecv.decode(&results)) {
Serial.print("Valor Recebido por IR . . . ");
Serial.println(results.value, HEX);
// Controle IR do KIT // XBOX 1 // XBOX 2 //Controle TV // Controle Conversor Digital
if (results.value == 0xFF18E7 || results.value == 0x800F7402 || results.value == 0x800FF402 || results.value == 0xDAEA83EC || results.value == 0xFB0042BD) { //vermelho
Serial.println("Pressionado Vermelho 2 = Abajur ");
estadoSaida[0] = !estadoSaida[0]; tempoMaximo[0] = horas * tempoBase; tempoAnterior[0] = millis(); // liga Saida 0 = Abajur
}
if (results.value == 0xFF38C7 || results.value == 0x800F7405 || results.value == 0x800FF405 || results.value == 0x2BAFCEEC || results.value == 0xFB0002FD ) { //verde
Serial.println("Pressionado Verde 5 = Foto ");
estadoSaida[1] = !estadoSaida[1]; tempoMaximo[1] = horas * tempoBase; tempoAnterior[1] = millis(); // liga Saida 1 = FOTO
}
if (results.value == 0xFF4AB5 || results.value == 0x800F7408 || results.value == 0x800FF408 || results.value == 0xB5210DA6 || results.value == 0xFB0000FF ) { //tecla Amarela
Serial.println("Pressionado Amarelo 8 ");
estadoSaida[2] = !estadoSaida[2]; tempoMaximo[2] = horas * tempoBase; tempoAnterior[2] = millis(); // liga Saida 2 = Umidificador
}
if (results.value == 0xFF6897 || results.value == 0x800F7400 || results.value == 0x800FF400 || results.value == 0x71A1FE88 || results.value == 0xFB00C03F) { //tecla Azul
Serial.println("Pressionado Azul 0 ");
estadoSaida[3] = !estadoSaida[3]; tempoMaximo[3] = horas * tempoBase; tempoAnterior[3] = millis(); // liga Saida 3 = Ventilador
}
if (results.value == 0xFFE01F || results.value == 0x800F744F || results.value == 0x800FF44F || results.value == 0xE51B354E || results.value == 0xFB00A857 ) { //tecla parar disp
Serial.println("Pressionado Desliga tudo disp - ");
for (int x = 0 ; x < qtdSaidas - 1 ; x++) {
estadoSaida[x] = HIGH; // DESLIGA TUDO
}
estadoSaida[3] = LOW; // DESLIGA TUDO RELE EXTRA
}
irrecv.resume(); // Receive the next value
} // if do IR
} // leitura IR
#IR #infravermelho #controleremoto #temporizado #DIY #maker #microcontrolador #façavocemesmo #tcc #sugestãoTCC #Projeto #arduino
—
Curta, compartilhe e inscreva-se para ficar atualizado com os nossos conteúdos!
Para saber mais sobre o Canal Projeto Bacana:
E-mail: contato@projetobacana.com.br
Site: https://www.projetobacana.com.br/
Facebook: https://www.facebook.com/projetobacana.com.br
Instagram: https://www.instagram.com/projetobacana.com.br/
Youtube: https://www.youtube.com/channel/UC0e1bfaL0-gnAP2KQA5vxqQ