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