Baixe o app para aproveitar ainda mais
Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
/* Projeto automação residencial por controle de voz e acendimento de lâmpadas por batedor de PALMAS. 1 PALMA ACENDE, 2´PALMAS APAGAM Autor: Renã Barros Ferreira 11/11/2019 */ //Uma observação que faco aos amigos e que eu usei um Arduino Mega devido o numero grande de portas logicas que podem ser usdas, // entretanto sera necessario o uso de bastante cabinhos para ligação e esteticamente nao fica muio legal, mas funciona perfeitmante. // Uma super dica que deixo a todos que usarão este código e que usem a placa Arduino NODE MCU, pois esta ja vem com wifi onboard e // melhora bastantea parte estetica, entretanto pode dar alguns erros de sinal como nao recohecimento de voz ou ate mesmo vc ter que // ficar repetindo varias vezes a mesma coisa para receber o comando e ainda uma demora quando ele recebe, da sinal de executado mais // nao aconteceu nada no equipamento, mais nao se preocupem, que geralmente e sempre devido problemas de perca de sinal da rede wifi. // outro detalhe importante e sempre ter um microfone de alta potencia, pois o microfone comum ou do notebook e necessario ter q gritar // as vezes para q ele ouça seu comando.Uma ultima super dica, e que essa programaçao foi usada com o Programa Kripitoniano Jarvis, I.O.T // ou Dark Edition que so estao disponiveis em versão paga. Entretanto se tiverem alguma outra plataforma de uso ou quiserem usar e controlar // vias dispositivos arduino como processador de voz, placas de som tbm funciona perfeitamente. // Aproveitem e comaprtilhem seus codigos, mãos a obra. // DEFINIÇÃO DE SAÍDA DAS PORTAS LÓGICAS DOS RELÉS E LED´s #define RELE1 30 #define RELE2 33 #define RELE3 34 #define RELE4 37 #define RELE5 38 #define RELE6 53 #define RELE7 50 #define RELE8 49 #define RELE9 46 #define RELE10 45 #define RELE16 42 #define RELE11 29 #define RELE12 26 #define RELE13 25 #define RELE14 22 #define RELE15 21 #define led1 0 #define led2 1 #define led3 2 #define led4 3 #define led12 4 #define led5 5 #define led6 6 #define led7 7 #define led8 8 #define led9 9 #define led10 10 #define led11 11 // Comandos relacionados ao Sensor de som String comando; #define led 17 //Define led como sendo o pino 17 #define micro 19 //Define micro como sendo o pino 19 bool valor=false; //Variavel para leitura do microfone // Variaveis para ajudar na captação do bater de palmas bool estagio1=false; bool estagio2=false; bool estagio3=false; // Variaveis para fazer a função do tempo limite da onda em alta e baixa int a; int b; /* Fase de controle dos reles de acionamento das lampadas ou componetes que desejamos ser ligados*/ void setup() { pinMode(led, OUTPUT); //Configura LED como saída pinMode(micro, INPUT); //Configura o microfone como entrada digitalWrite(led, LOW); //Começa com o LED apagado Serial.begin(9600); //Definição de portas dos relés que serao acionados e suas condições iniciais pinMode(RELE1,OUTPUT); pinMode(RELE2,OUTPUT); pinMode(RELE3,OUTPUT); pinMode(RELE4,OUTPUT); pinMode(RELE5,OUTPUT); pinMode(RELE6,OUTPUT); pinMode(RELE7,OUTPUT); pinMode(RELE8,OUTPUT); pinMode(RELE9,OUTPUT); pinMode(RELE10,OUTPUT); pinMode(led1, OUTPUT); pinMode(led2, OUTPUT); pinMode(led3, OUTPUT); pinMode(led4, OUTPUT); pinMode(led5, OUTPUT); pinMode(led6, OUTPUT); pinMode(led7, OUTPUT); pinMode(led8, OUTPUT); pinMode(led9, OUTPUT); pinMode(led10, OUTPUT); pinMode(led11, OUTPUT); pinMode(led12, OUTPUT); pinMode(RELE11,OUTPUT); pinMode(RELE12,OUTPUT); pinMode(RELE13,OUTPUT); pinMode(RELE14,OUTPUT); pinMode(RELE15,OUTPUT); pinMode(RELE16,OUTPUT); digitalWrite(led1, LOW); digitalWrite(led2, LOW); digitalWrite(led3, LOW); digitalWrite(led4, LOW); digitalWrite(led5, LOW); digitalWrite(led6, LOW); digitalWrite(led7, LOW); digitalWrite(led8, LOW); digitalWrite(led9, LOW); digitalWrite(led10, LOW); digitalWrite(led11, LOW); digitalWrite(led12, LOW); digitalWrite(RELE1, LOW); digitalWrite(RELE2, LOW); digitalWrite(RELE3, LOW); digitalWrite(RELE4, LOW); digitalWrite(RELE5, LOW); digitalWrite(RELE6, LOW); digitalWrite(RELE7, LOW); digitalWrite(RELE8, LOW); digitalWrite(RELE9, LOW); digitalWrite(RELE10, LOW); digitalWrite(RELE11, LOW); digitalWrite(RELE12, LOW); digitalWrite(RELE13, LOW); digitalWrite(RELE14, LOW); digitalWrite(RELE15, LOW); digitalWrite(RELE16, LOW); } void loop() { // àrea sensor de palmas valor = digitalRead(micro);//Le o pino digital // Teste do primeiro bater de palmas if(valor==true && estagio1 == false){ //Primeiro testa se o pino esta em alta estagio1=true; //Ativa uma variavel auxiliar a=0; //Volta o temporizador para 0 } // Agora testa se o pino que estava em alta abaixou if(valor==false && estagio1 == true && estagio2==false){ estagio2=true; //Ativa a segunda variavel auxiliar a=0; } // Testa se o tempo em alta da primeira onda ultrapassou 200ms if(estagio1==true && estagio2==false){ // Essa parte adiciona + 1 à variavel 'a' enquanto a onda esta em nivel alto; se a onda continuar em nivel alto por 200ms, o programa volta pro inicio delay(1); a++; if(a>200){ estagio1=false; //Manda o programa voltar pra etapa 0 } } // Testa se o tempo em alta da primeira onda ultrapassou 700ms if(estagio2==true){ // Essa parte adiciona + 1 a variavel 'a' enquanto a onda esta em nivel baixo (etapa 2 true e etapa 3 false); se a onda continuar em nivel baixo por 200ms, o programa volta pro inciio if(estagio3 == false){ delay(1); a++; if(a>700){ estagio1=false; //Manda o programa voltar pra etapa 0 estagio2=false; } } // Se a variavel 'a' chegar no minimo a 70ms (tempo em baixa) o programa pode começar a verificação da segunda onda // Esse tempo de 70us serve para o programa nao confundir vibrações que ocorrem em intervalos de tempo muito pequenos if(a>70){ //Teste do segundo bater de palmas if(valor==true && estagio2 == true && estagio3 == false){ //Testa se o pino foi pra alta (observe que o estagio2== true é redundante, mas vou manter para facilitar o entendimento) estagio3=true; //Ativa a terceira variavel auxiliar b=0;//Volta o temporizador b para 0 } // Agora testa se o pino que estava em alta abaixou (neste caso testa se ocorreu o bater de palmas duas vezes if(valor==false && estagio3 == true){ digitalWrite(led, !digitalRead(led));//Inverte o sinal do LED estagio1=false; //Volta o programa voltar pra etapa 0 estagio2=false; estagio3=false; delay(1000); //Cria um delay ate a proxima amostragem para nao misturar os dados } // Testa se o tempo em alta da segunda onda ultrapassou 200ms if(estagio3==true){ // Esta parte adiciona + 1 a variavel 'b' enquanto a onda (segunda) esta em nivel alto; se a onda continuar em nivel alto por 200ms, o programa volta pro inicio delay(1); b++; if(b>200){ estagio1=false; // Se sim, manda o programa voltar pra etapa 0 estagio2=false; estagio3=false; } } } } delayMicroseconds(1/44100*1000000);//Delay de 44Khz (frequencia comum para gravação de audio) { } // Inicia área de controle por voz while(Serial.available()){ delay(10); char c = Serial.read(); comando += c; } if(comando.length()>0) // Controlando os reles dispostos e definindo função especifica para cada um destes. // RELÉ 1 Circuito de ar Ccondicionado 01 { if(comando=="a" || comando=="t") { digitalWrite(RELE1,HIGH); digitalWrite(led1,HIGH); } else if(comando=="A" || comando=="T") { digitalWrite(RELE1,LOW); digitalWrite(led1,LOW); } // RELÉ 2 Circuito de Lâmpada conjunta do terraço if(comando=="b" || comando=="t") { digitalWrite(RELE2,HIGH); digitalWrite(led2,HIGH); } else if(comando=="B" || comando=="T") { digitalWrite(RELE2,LOW); digitalWrite(led2,LOW); } //RELÉ 3 Circuito de Interruptor manual if(comando=="c" || comando=="t") { digitalWrite(RELE3,HIGH); digitalWrite(led3,HIGH); } else if(comando=="C" || comando=="T") { digitalWrite(RELE3,LOW); digitalWrite(led3,LOW); } //RELÉ 4 Circuito de Lâmpada do qrto 1 if(comando=="d" || comando=="t") { digitalWrite(RELE4,HIGH); digitalWrite(led4,HIGH); } else if(comando=="D" || comando=="T") { digitalWrite(RELE4,LOW); digitalWrite(led4,LOW); } //RELÉ 5 Circuito do Refletor do Terraço if(comando=="e" || comando=="t") { digitalWrite(RELE5,HIGH); digitalWrite(led5,HIGH); } else if(comando=="E" || comando=="T") { digitalWrite(RELE5,LOW); digitalWrite(led5,LOW); } //RELÉ 6 Circuito de ar Condicionado 2 if(comando=="f" || comando=="t") { digitalWrite(RELE6,HIGH); digitalWrite(led6,HIGH); } else if(comando=="F" || comando=="T") { digitalWrite(RELE6,LOW); digitalWrite(led6,LOW); } //RELÉ 7 Circuito de Iluminação de enfeite SPOT if(comando=="g" || comando=="t") { digitalWrite(RELE7,HIGH); digitalWrite(led7,HIGH); } else if(comando=="G" || comando=="T") { digitalWrite(RELE7,LOW); digitalWrite(led7,LOW); } //RELÉ 8 if(comando=="h" || comando=="t") { digitalWrite(RELE8,HIGH); digitalWrite(led8,HIGH); } else if(comando=="H" || comando=="T") { digitalWrite(RELE8,LOW); digitalWrite(led8,LOW); } //RELÉ 9 Câmera de segurança if(comando=="i" || comando=="t") { digitalWrite(RELE9,HIGH); digitalWrite(led9,HIGH); } else if(comando=="I" || comando=="T") { digitalWrite(RELE9,LOW); digitalWrite(led9,LOW); } //RELÉ 10 Circuito de Tomadas if(comando=="j" || comando=="t") { digitalWrite(RELE10,HIGH); digitalWrite(led10,HIGH); } else if(comando=="J" || comando=="T") { digitalWrite(RELE10,LOW); digitalWrite(led10,LOW); } // RELÉ 11 if(comando=="l" || comando=="t") { digitalWrite(RELE11,HIGH); digitalWrite(led11,HIGH); } else if(comando=="L" || comando=="T") { digitalWrite(RELE11,LOW); digitalWrite(led11,LOW); } // RELÉ 12 if(comando=="m" || comando=="t") { digitalWrite(RELE12,HIGH); digitalWrite(led12,HIGH); } else if(comando=="M" || comando=="T") { digitalWrite(RELE12,LOW); digitalWrite(led12,LOW); } // RELÉ 13 if(comando=="n" || comando=="t") { digitalWrite(RELE13,HIGH); } else if(comando=="N" || comando=="T") { digitalWrite(RELE13,LOW); } // RELÉ 14 if(comando=="o" || comando=="t") { digitalWrite(RELE14,HIGH); } else if(comando=="O" || comando=="T") { digitalWrite(RELE14,LOW); } // RELÉ 15 Fitas de led do modo de festa do Jarvis if(comando=="p") { digitalWrite(RELE15,HIGH); } else if(comando=="P") { digitalWrite(RELE15,LOW); } // RELÉ 16 Circuito de Lâmpada da Sala if(comando=="q" || comando=="t") { digitalWrite(RELE16,HIGH); } else if(comando=="Q" || comando=="T") { digitalWrite(RELE16,LOW); } } comando=""; }
Compartilhar