Controle sua Árvore de Natal – Faça um Temporizador com Iluminação automática

Neste vídeo vamos criar um temporizador automático para controlar sua árvore de Natal e iluminação interna e Externa da sua casa ou apartamento!

No mercado tem para venda temporizador mecânico ou digital, mas ele não são precisos e atrasam quando falta energia, neste projeto isso não acontece, porque mesmo se acabar a energia no meio da noite, no dia seguinte ele funcionará normalmente conforme planejado.

Esse projeto pode ser adaptado para controlar mais saídas, use sua criatividade!

Apresentação: Júlio Vansan Gonçalves

Materiais:

  • Arduino pró mini
  • Módulo Rele
  • Fios/Jumpers
  • Fonte de alimentação
  • Tomadas

Link códigos usados no vídeo

/* *************************
 *  Projeto Bacana - 12/2021
 *  www.projetobacana.com.br
 *  Júlio Vansan Gonçalves
 *  
 *  Controle de iluminação de Natal
 */

const int saidaArvore= 4; // preto
const int saidaJanela=5; //vermelho
const int btAciona=8;
const int btDesliga=7;
const int BtArvore=9;
const int ledStatus=13;
const int ledS1=10; 
const int ledS2=11; 
const int ledS3=12; 

int estadoArvore=1;
int contadorAciona=0;
int estadoBtArvore=0;
int estadoBtArvoreAnterior=1;
int estadoBtAciona=0;
int estadoBtAcionaAnterior=1;
int estadoBtDesliga=0;
int estadoBtDesligaAnterior=1;
int estadoSaida=0;
//int horas=8;
unsigned long tempoBase=3600000;
unsigned long tempoMaximo= tempoBase; //horas*3600000; // 3600000 =  1h
unsigned long tempoAtual=0; // 21600000 = 6h
unsigned long tempoAnterior=0; // 21600000 = 6h

const int LDR=A3;
int valorLDR=0;

void ligaArvore(int contadorAciona);
void desligaArvore();



void setup() {
  Serial.begin(9600);
  pinMode(saidaArvore,OUTPUT);
  pinMode(saidaJanela,OUTPUT);
  pinMode(ledS1,OUTPUT);
  pinMode(ledS2,OUTPUT);
  pinMode(ledS3,OUTPUT);
  pinMode(ledStatus,OUTPUT);
  pinMode(btAciona,INPUT_PULLUP);
  pinMode(btDesliga,INPUT_PULLUP);
  pinMode(BtArvore,INPUT_PULLUP);
  delay(1000);
  estadoBtAciona=digitalRead(btAciona); //zerando o Status dos botões
  estadoBtAcionaAnterior=estadoBtAciona; //zerando o Status dos botões
 
  estadoBtDesliga=digitalRead(btDesliga); //zerando o Status dos botões
  estadoBtDesligaAnterior=estadoBtDesliga; //zerando o Status dos botões
  
  estadoBtArvore=digitalRead(BtArvore); //zerando o Status dos botões
  estadoBtArvoreAnterior=estadoBtArvore;
  
  digitalWrite(saidaArvore,!LOW);
  digitalWrite(saidaJanela,!LOW);
}

void loop() {
  delay(500);
  valorLDR=analogRead(LDR);
  estadoBtAciona=digitalRead(btAciona);
  estadoBtDesliga=digitalRead(btDesliga);
  estadoBtArvore=digitalRead(BtArvore); 
  Serial.print("LDR = ");Serial.print(valorLDR);Serial.print("   ||BT Manual = ");Serial.print(estadoBtArvore);Serial.print("   ||BT Aciona = ");Serial.print(estadoBtAciona);Serial.print("   ||BTDesliga = ");Serial.println(estadoBtDesliga);

  digitalWrite(ledStatus,HIGH);
  delay(100);
  digitalWrite(ledStatus,LOW);  
  delay(100);
  
 if (valorLDR <500){
      Serial.println("Ligando pelo LDR");
      ligaArvore(6);
 } // if ldr

  
if (estadoBtAciona!=estadoBtAcionaAnterior){
    estadoBtAcionaAnterior=estadoBtAciona;
       
    Serial.println("Mudanca de estado BT LIGA");
    ligaArvore(2);
  }

} // loop

void ligaArvore(int contadorAciona){
      Serial.println("### LIGANDO ###");
    
      digitalWrite(saidaJanela,!HIGH);  // Ligando a Janela  
      tempoMaximo=contadorAciona*tempoBase;
      tempoAnterior=millis();
      tempoAtual=millis();
      estadoBtDesliga=digitalRead(btDesliga);
      estadoBtDesligaAnterior=estadoBtDesliga;
      estadoBtAciona=digitalRead(btAciona); //zerando o Status dos botões
      estadoBtAcionaAnterior=estadoBtAciona; //zerando o Status dos botões
      estadoBtArvore=digitalRead(BtArvore); //zerando o Status dos botões
      estadoBtArvoreAnterior=estadoBtArvore;
      estadoArvore=1;
      
      while(tempoAtual-tempoAnterior < tempoMaximo){
          tempoAtual=millis();
          //delay(1000);
          digitalWrite(ledStatus,!HIGH);
          delay(500);
          digitalWrite(ledStatus,!LOW);  
          delay(500);

          Serial.print(tempoMaximo);
          Serial.print("    ### _-_-_ ON _-_-_ ###    ");
          Serial.println(tempoMaximo- (tempoAtual-tempoAnterior));
          estadoBtDesliga=digitalRead(btDesliga);
          estadoBtAciona=digitalRead(btAciona); 
          estadoBtArvore=digitalRead(BtArvore); 


      estadoBtArvore=digitalRead(BtArvore); //zerando o Status dos botões
     
      if (estadoBtArvore!=estadoBtArvoreAnterior){
          estadoBtArvoreAnterior=estadoBtArvore;
          Serial.println("Mudanca de estado Bt Arvore");
          estadoArvore=!estadoArvore;
      } // if estado Arvore
          
          digitalWrite(saidaArvore,!estadoArvore);
     
                
      if (estadoBtDesliga!=estadoBtDesligaAnterior){
          estadoBtDesligaAnterior=estadoBtDesliga;
          Serial.println("Mudanca de estado BT Desliga");
          break;
        } //if desliga

      if (estadoBtAciona!=estadoBtAcionaAnterior){
          estadoBtAcionaAnterior=estadoBtAciona;
          
          if(contadorAciona<6)
              contadorAciona+=2;
          else
              contadorAciona=2;  
      tempoMaximo=contadorAciona*tempoBase;
      } // if aumenta tempo

// ############## Controle de tempo ##############
      if (tempoMaximo- (tempoAtual-tempoAnterior) >= 5*tempoBase){
          digitalWrite(ledS1,HIGH);
          digitalWrite(ledS2,HIGH);
          digitalWrite(ledS3,HIGH);
      }
      
    if ((tempoMaximo- (tempoAtual-tempoAnterior) > 2*tempoBase) && (tempoMaximo- (tempoAtual-tempoAnterior) < 3*tempoBase)){
          digitalWrite(ledS1,HIGH);
          digitalWrite(ledS2,HIGH);
          digitalWrite(ledS3,LOW);

      }

       if ((tempoMaximo- (tempoAtual-tempoAnterior) >= 1*tempoBase) && (tempoMaximo- (tempoAtual-tempoAnterior) <= 2*tempoBase)){
          digitalWrite(ledS1,HIGH);
          digitalWrite(ledS2,LOW);
          digitalWrite(ledS3,LOW);

      }

      if ((tempoMaximo- (tempoAtual-tempoAnterior) < 1*tempoBase)){
          digitalWrite(ledS1,HIGH);
          delay (200);
          digitalWrite(ledS1,LOW);
     //     delay (200);
          digitalWrite(ledS2,LOW);
          digitalWrite(ledS3,LOW);

      }
      
        
      } // while
      desligaArvore();
}

void desligaArvore(){
      Serial.println("### DESLIGANDO ###");
      digitalWrite(ledStatus,HIGH);
      digitalWrite(saidaArvore,!LOW);
      digitalWrite(saidaJanela,!LOW);    
      digitalWrite(ledS1,LOW);
      digitalWrite(ledS2,LOW);
      digitalWrite(ledS3,LOW);
      //contadorAciona=0; 
      tempoAnterior=millis();
      tempoAtual=millis();

      contadorAciona=6;  
      tempoMaximo=contadorAciona*tempoBase;
      while(tempoAtual-tempoAnterior < tempoMaximo){
          estadoBtDesliga=digitalRead(btDesliga); //zerando o Status dos botões
          estadoBtDesligaAnterior=estadoBtDesliga; //zerando o Status dos botões
          tempoAtual=millis();
          delay(1000);
          Serial.print(tempoMaximo);
          Serial.print("    ### _-_-_ OFF _-_-_ ###    ");
          Serial.println(tempoAtual-tempoAnterior);

          estadoBtAciona=digitalRead(btAciona);     
                     
          if (estadoBtAciona!=estadoBtAcionaAnterior){
              estadoBtAcionaAnterior=estadoBtAciona;
                 
              Serial.println("Mudanca de estado BT LIGA no Desliga");
              ligaArvore(2);
            }
           
      } 



      

}

#NATAL #temporizador #iluminação #automação #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