Buscar

Trabalho_de_Conclus_o_de_Curso

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=""; 
 }

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Continue navegando