Você provavelmente já saiu do seu quarto ou qualquer outro cômodo e esqueceu a luz acesa, ou até mesmo já precisou que ela estivesse acesa por estar com as mãos ocupadas ao voltar do mercado. Este tutorial foi desenvolvido pensado na comodidade, por isso vamos colocar em prática um projeto com aplicação prática no nosso dia a dia.
Estamos falando de um sensor que permite que a iluminação de um cômodo atue de forma automática e inteligente. Basicamente este dispositivo conta a quantidade de pessoas em um cômodo para que controle as luzes ou o que sua imaginação permitir. Como não é controlado por tempo, nos permite ficar por longos períodos no ambiente sem que fiquemos no escuro, o que é muito útil.
Ao final deste tutorial você terá acesso ao código fonte utilizado…
Para fazer este projeto, iremos precisar dos seguintes materiais:
Nosso projeto funcionará da seguinte forma:
Montando os componentes na protoboard:
Antes de mais nada, com o cabo USB do Arduino desconectado, ligue os jumpers da porta 5V e GND do Arduino na protoboard como na figura abaixo.
Observe que há jumpers conectando as duas extremidades de alimentação da protoboard.
Inicie o circuito conectando o transistor e o resistor de 330 OHM. O coletor do transistor é ligado ao 5V e sua base em um terminal do resistor, o segundo terminal do resistor é ligado a porta digital 6 do Arduino.
Conecte o led emissor de luz infravermelha ao circuito, de modo que seu terminal negativo esteja no GND, seu terminal positivo em um dos terminais do resistor de 270 OHM.
Vamos aos sensores!!!
Observando-os de frente, com os leds apontados para cima, os pinos dos sensores são respectivamente da esquerda para direita SINAL (out/D1), GND (G) e VCC. Conecte os pinos de VCC juntamente ao terminal sem conexões do resistor do passo anterior. Após feito isso, conecte o negativo no GND e os pinos de sinal nas portas digitais 3 e 4 do Arduino. O terminal emissor do transistor é ligado aos terminais positivos dos sensores e do led, como mostrado abaixo.
Conecte os terminais das extremidades do potenciômetro no VCC e GND (neste caso a polaridade não interfere), o terminal central deve ser ligado à porta analógica A1 do Arduino.
O terminal negativo do led deve ser conectado ao GND, seu terminal positivo conectado ao resistor de 330 OHM, e este por sua vez na porta digital 2 do Arduino. Ao final do projeto, você pode substituir o led e o resistor 330 OHM por um módulo relé. Lembrando que o módulo relé se liga com nível lógico 0.
Conecte o LDR em paralelo com o capacitor eletrolítico, de modo que o terminal positivo do capacitor seja ligado ao VCC e o negativo ao resistor de 10K OHM, juntamente na porta analógica A0 do Arduino. O próximo terminal do resistor de ver ligado ao GND.
O pushbutton será ligado ao VCC e ao resistor de 10K OHM, juntamente na porta digital 5 do Arduino. Repare que ele tem quatro terminais, dois deles estão em curto, se necessário, utilize um multímetro na função de continuidade para descobrir quais destes terminais estão em curto. O segundo terminal do resistor deve ser conectado ao GND.
Confira abaixo o circuito montado em uma protoboard, já com o Arduino conectado ao computador.
Se o seu circuito se encontra parecido com este, significa que finalizamos a parte da montagem, sendo assim, vamos à programação!!!
O código para a programação se encontra disponível aqui, mas recomendo fortemente que você leia a explicação atentamente para que você consiga criar sua própria aplicação.
/* DEFINIÇÃO DE PINOS */ #define pinLamp 2 //PORTA LED OU RELÉ #define pinSenE 3 // PORTA SENSOR DE ENTRADA #define pinSenS 4 // PORTA SENSOR DE SAÍDA #define pinBotao 5 // PORTA INTERRUPTOR OU PUSHBUTTON #define pinControle 6 // PORTA PARA CHAVEAMENTO DO TRANSISTOR #define pinLDR A0 // PORTA DE SINAL DO LDR #define pinPot A1 // PORTA DE AJUSTE DO POTENCIÔMETRO /* VARIÁVEIS GLOBAIS */ int luz = 0; // VARIÁVEL QUE CONTROLA A SENSIBILIDADE int valorLDR = 0; // VARIÁVEL QUE CONTROLA O VALOR DO LDR int pessoas = 0; // CONTROLA A QUANTIDADE DE PESSOAS NO AMBIENTE boolean botaoAcionado = false; boolean estadoBotao = false; boolean estAntBotao = false; boolean estadoE = false; boolean estAntE = false; boolean estadoS = false; boolean estAntS = false; boolean estadoLamp = false; void setup() { /* DEFINIÇÃO DE ENTRADAS E SAÍDAS */ pinMode(pinSenE, INPUT); pinMode(pinSenS, INPUT); pinMode(pinBotao, INPUT); pinMode(pinLamp, OUTPUT); pinMode(pinControle, OUTPUT); /* INICIA O MONITOR SERIAL */ Serial.begin(9600); } // FUNÇÃO QUE REALIZA A LEITURA DOS SENSORES void leituraSensores() { Serial.print("LDR "); Serial.print (valorLDR); Serial.print(" LUZ "); Serial.print (luz); Serial.print(" Sensor saída "); Serial.print(estadoS); Serial.print(" Sensor entrada "); Serial.print(estadoE); estadoE = digitalRead(pinSenE); estadoS = digitalRead(pinSenS); if (estadoE == false && estAntE == true) { if (estadoS == false) { pessoas++; } } estAntE = estadoE; // ESTADO ANTERIOR É IGUALADO AO ESTADO ATUAL if (estadoS == false && estAntS == true) { if (estadoE == false) { pessoas--; if (pessoas < 0) { pessoas = 0; } } } estAntS = estadoS; // ESTADO ANTERIOR É IGUALADO AO ESTADO ATUAL Serial.print(" pessoas "); Serial.println(pessoas); } // FUNÇÃO PARA ACIONAMENTO DA LÂMPADA void lampada() { if ( pessoas >= 1) { estadoLamp = true; } else if ( pessoas == 0) { estadoLamp = false; } // digitalWrite(pinLamp, !estadoLamp); digitalWrite(pinLamp, estadoLamp); } // REALIZA LEITURA DO LDR void leituraLDR() { valorLDR = analogRead(pinLDR); } void loop() { // INÍCIO DO LOOP // LÊ ESTADOS INICIAIS DOS SENSORES luz = analogRead(pinPot); // FUNÇÕES DOS SENSORES leituraLDR(); leituraSensores(); lampada(); digitalWrite(pinControle, HIGH); // VERIFICA AJUSTE PARA DIA OU NOITE while (valorLDR > luz && estadoLamp == false) { digitalWrite(pinControle, LOW); Serial.println(valorLDR); estadoBotao = digitalRead(pinBotao); // SE O BOTÃO É PRESSIONADO INVERTE ESTADO DA LÂMPADA if ( estadoBotao && !estAntBotao) { delay(50); if ( pessoas >= 1) { pessoas = 0; } else { pessoas = 1; } } estAntBotao = estadoBotao; lampada(); delay(100); luz = analogRead(pinPot); leituraLDR(); } // LÊ ESTADO DO BOTÃO CASO ESTEJA A NOITE estadoBotao = digitalRead(pinBotao); if ( estadoBotao && !estAntBotao) { delay(50); if ( pessoas >= 1) { pessoas = 0; } else { pessoas = 1; } } estAntBotao = estadoBotao; delay(10); } // FINAL DO LOOP
No primeiro momento do código definimos as portas de entrada, saída e declarar todas as variáveis.
Observe que as variáveis “luz”, “valorLDR” e “pessoas” são do tipo int, pois utilizaremos dados numéricos para as leituras e cálculos. As variáveis booleanas serão apenas para indicar os estados “ ligado” e “desligado”, mas também poderiam ser usadas variáveis do tipo int representadas por 1 e 0.
Após definirmos as portas e declararmos as variáveis, vamos ao setup.
Neste passo vamos configurar o modo das portas, como entrada ou saída, e também iniciaremos o monitor serial, através dele realizaremos os testes.
Neste passo serão criadas três funções que nos auxiliarão no desenvolvimento, elas serão chamadas para execução ao decorrer do loop.
A primeira realiza a leitura dos dois sensores reflexivos e após isso, compara em cada um deles seu estado atual com seu estado anterior. Ou seja:
Se o estado atual do sensor de entrada for diferente do estado anterior, e após isso o sensor de saída for acionado, significa que alguém entrou no cômodo, somando 1 ao número de pessoas no ambiente. O mesmo ocorre com o sensor de saída, porém, subtraindo 1 ao número de pessoas no ambiente. Se por algum motivo o número de pessoas for menor que 0, ele se iguala a 0 novamente, para que o número de pessoas não fique negativo.
A segunda controla o estado da lâmpada de acordo com a quantidade de pessoas. Note que o estado da lâmpada é escrito no pino de saída, caso seja utilizado um módulo relé, a expressão “digitalWrite(pinLamp, estadoLamp);” deve ser substituída pela função comentada, já que a maioria dos módulos relé são acionados com nível lógico 0.
A última função realiza apenas a leitura do LDR, não seria necessário criar uma função para isso, foi criada apenas com o intuito de facilitar a chamada da leitura.
O Loop é a função responsável por executar infinitamente tudo que estiver dentro dele, incluindo as outras funções, quando chamadas. Ele está dividido em três partes.
A primeira é responsável por fazer a leitura dos sensores e chamar para execução as funções.
A segunda parte é responsável pelo controle da luminosidade do ambiente e do pushbotton, caso estiver com luminosidade alta. Lembrando que o ajuste da luminosidade é feito através do trimpot.
Enquanto o valor de leitura do LDR for maior que o ajuste de luminosidade do trimpot, e, a lâmpada estiver desligada, ou seja, estiver de dia, os sensores são desligados fazendo com que a iluminação responda apenas através do pushbutton.
Nesta última parte da nossa programação, é efetuada apenas a leitura do pushbutton caso a luz ambiente esteja baixa e os sensores ligados. Isso faz com que o pushbutton inverta o estado da lâmpada.
Observe a imagem para realização dos próximos passos:
Para realizar os ajustes dos sensores, carregue o código no seu Arduino, e com o monitor serial aberto execute os seguintes passos:
Acabamos de desenvolver uma aplicação simples com diversas funções. O funcionamento se dá basicamente por passar em frente ao sensor, fazendo com que ele conte as pessoas em um dado ambiente e controle uma lâmpada ou qualquer outra carga de acordo com esses dados.
O Arduino serve de protótipo para vários projetos de várias dimensões. Este dispositivo é uma prova que você pode projetar o que quiser!!!
Esperamos que você tenha entendido e conseguido montar nosso projeto.
Chegamos ao final, se toda montagem e programação ocorreu bem, deve funcionar como no vídeo abaixo:
Gostou do projeto e também construiu o seu? Avalie o post. Fez adaptações e conseguiu resultados melhores ainda? Tire uma foto e nos marque no Instagram @Eletrogate.
Caso tenha ficado com dúvida ou tenha uma sugestão, use a parte dos comentários aqui embaixo.
Tenha a Metodologia Eletrogate na sua Escola! Conheça nosso Programa de Robótica Educacional.
|
A Eletrogate é uma loja virtual de componentes eletrônicos do Brasil e possui diversos produtos relacionados à Arduino, Automação, Robótica e Eletrônica em geral.
Tenha a Metodologia Eletrogate dentro da sua Escola! Conheça nosso Programa de Robótica nas Escolas!