Controle Lâmpadas, ventiladores e outros dispositivos com o controle remoto da sua TV + Luz de Emergência

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