- Descrição: O Módulo Sensor Infravermelho Reflexivo de Obstáculo KY-032 funciona através…
Arduino – Controle de Lâmpada através de RF e Interruptor
Nesta prática você vai aprender a utilizar com Arduino o Controle Remoto RF e o Receptor RF. O resultado final desta prática será o controle de uma lâmpada através do Controle Remoto RF e do Interruptor Three Way (paralelo).
Antes de prosseguir, recomendo que você leia e execute a prática Utilizando o Controle Remoto RF e Receptor RF. Na prática, passei informações detalhadas sobre o controle remoto rf e o receptor rf e que serão importantes você saber para continuar.
Na prática anterior relacionada ao controle remoto rf e o receptor rf, fizemos o controle de quatro LEDs através do pressionamento dos botões no transmissor rf. Não foi utilizado nenhuma plataforma embarcada para trabalhar em conjunto com nosso KIT RF (transmissor em formato de controle remoto e o receptor).
O uso de RF em conjunto com o Arduino nos permite implementar projetos bem interessantes. Nos passos abaixo, vamos implementar o controle de uma lâmpada através do controle remoto RF e do interruptor paralelo. A lâmpada será conectada ao módulo relé 5V que consequentemente vai estar conectado ao Arduino. Vale ressaltar que com o controle remoto rf utilizado nesta prática é possível controlar até quatro lâmpadas ou quatro circuitos de lâmpadas.
Ao utilizar o interruptor paralelo, será necessário o uso do sensor de tensão ac para que seja possível capturar o estado atual da lâmpada e informar ao Arduino. Se o controle da lâmpada fosse feito apenas pelo controle remoto rf não seria necessário o sensor de tensão ac, pois todo controle estaria em cima do Arduino. Para um projeto de automação residencial em que vá utilizar um sistema microcontrolado para acionamento da iluminação, o ideal é que se tenha um controle manual independente do sistema, pois se por ventura o sistema ficar inoperante, você poderá fazer o controle da iluminação através do meio externo. Esta é uma das vantagens em se usar interruptor paralelo no seu projeto de automação de iluminação, pois você poderá controlar a iluminação mesmo que o sistema esteja offline.
Para que o relé seja acionado através do transmissor rf, será necessário conectar o receptor rf ao Arduino.
Há no mercado opção do KIT com frequência de 315 MHz e 433 MHz. Para esta prática utilizei o KIT de 433 MHz, mas se já possui o de 315 MHz, poderá utilizá-lo sem nenhum problema.
Abaixo está a lista dos itens necessários. Alguns dos itens você pode adquirir em lojas de elétrica:
– Arduino Uno R3 com Cabo USB A/B
– KIT Controle Remoto (Transmissor RF) e Receptor RF 433MHz ou KIT Controle Remoto (Transmissor RF) e Receptor RF 315MHz
– Módulo Relé 5V de 1 Canal
– Chave Gangorra KCD1-102 Preta 3T (Three Way)
– Sensor (Detector) de Tensão AC 127V / 220V
– LED
– Resistor de 220Ω
– Cabo Jumper Macho-macho
– Cabo Jumper Macho-fêmea
– Protoboard
– Fonte Ajustável 3.3V / 5V para Protoboard MB102
– Fonte DC 12V 1A Bivolt Chaveada
– Antena Helicoidal de 2dBi para RF 433MHz ou Antena Helicoidal de 2dBi para RF 315MHz (Opcional)
– Cabos com Garra Jacaré (Opcional)
– Lâmpada
– Receptáculo (boquilha)
– Cabo paralelo de 1,5mm ou 2,5mm
– Tomada (Rede alternada de 127V)
A antena helicoidal aumenta o alcance de recepção da placa, mas fica a seu critério utilizá-la.
Se ainda não codificou seu controle remoto rf e o receptor rf, leia e execute a postagem Utilizando o Controle Remoto RF e Receptor RF para continuar.
Utilizei a Chave Gangorra 3T nesta prática, contudo você pode utilizar qualquer interruptor three way.
Abaixo está o esquema de ligação que você deve montar:
ATENÇÃO: MUITO CUIDADO AO EXECUTAR PRÁTICAS QUE ENVOLVAM TENSÃO / CORRENTE ALTERNADA! FAÇA TODAS AS LIGAÇÕES COM O CIRCUITO COMPLETAMENTE DESLIGADO E ANTES DE FAZER OS TESTES VERIFIQUE CADA UMA DAS LIGAÇÕES PARA ELIMINAR A POSSIBILIDADE DE CURTO ENTRE FASE / NEUTRO OU FASE / FASE.
(Clique na imagem para ampliar)
Utilizei uma fonte ajustável para protoboard padrão MB102 para alimentar o receptor rf, o módulo relé 5V e o sensor de tensão ac. Alimentei a mesma com uma fonte DC de 12V 1A e na saída ela gera 3.3V / 5V e uma corrente máxima de 700mA. Basta acoplar a fonte ajustável na extremidade da protoboard e as linhas laterais passam a ter 3.3V ou 5V. Note que a fonte possui jumpers que definem qual a tensão de saída nas linhas laterais da protoboard:
Um outro ponto importante ao utilizar a fonte ajustável, é ficar atento ao lado da protoboard em que vai conectá-la, pois dependendo do lado, o VCC (+) e o GND (-) vão ficar invertidos e isso pode danificar os componentes e o receptor. Caso não possua a fonte ajustável para protoboard, você pode utilizar uma fonte de 5VDC de pelo menos 500mA.
Terminado o esquema de ligação, faça a conferência e se tudo estiver OK ligue o circuito a rede AC para ser alimentado e o Arduino ao computador através do cabo USB.
Será necessário instalar uma biblioteca na IDE do Arduino para em seguida carregar o código. A biblioteca que vamos instalar é a SimpleTimer. Com esta biblioteca o Arduino pode executar um trecho do código em um determinado intervalo de tempo sem que haja interrupção. Comumente é utilizado a função ‘delay’ para definir o tempo de execução de um trecho do código, contudo, ao usar esta função o código vai ficar parado até que o tempo definido seja executado. No código que vamos utilizar para esta prática, será necessário definir um tempo de execução para a função que vai verificar se o botão do controle remoto foi pressionado. Caso não seja usado um tempo para execução da função, a lâmpada não será controlada corretamente, pois ao pressionar o botão o relé poderá ser acionado mais de uma vez. Além disso, a função garante que não seja necessário manter o botão do controle remoto rf pressionado para que a lâmpada se mantenha acesa.
Se você não sabe como fazer a instalação de bibliotecas na IDE, acesse o link abaixo e em seguida retorne para continuar:
Arduino – Importando bibliotecas para a IDE
Faça o download da biblioteca SimpleTimer e em seguida faça a instalação da mesma na IDE do Arduino.
O código para testes está abaixo, basta copiar o mesmo, colar na IDE, salvar e carregar:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
#include <SimpleTimer.h> //INCLUSÃO DE BIBLIOTECA SimpleTimer timer; //OBJETO DO TIPO SimpleTimer const int pinoD0 = 7; //PINO DIGITAL UTILIZADO PARA CONECTAR A SAÍDA DO RECEPTOR RF const int sensorTensao = A2; //PINO ANALÓGICO UTILIZADO PELO SENSOR DE TENSÃO AC const int pinoRele = 3; //PINO DIGITAL UTILIZADO PELO MÓDULO RELÉ String statusLamp = "DESLIGADA"; //VARIÁVEL PARA CONTROLE DE STATUS MOSTRADO NO MONITOR SERIAL int estadoRele = LOW; //ESTADO INICIAL DO RELÉ (DESLIGADO) int estadoBotao = LOW; //ESTADO INICIAL DO BOTÃO D0 (DESLIGADO) void setup(){ Serial.begin(9600); //INICIALIZA A SERIAL pinMode(pinoD0, INPUT); //DEFINE A PORTA COMO ENTRADA pinMode(sensorTensao, INPUT); //DEFINE A PORTA COMO ENTRADA pinMode(pinoRele, OUTPUT); //DEFINE A PORTA COMO SAÍDA digitalWrite(pinoRele, estadoRele); //MÓDULO RELÉ INICIA DESLIGADO (estadoRele = LOW) timer.setInterval(100L, verificaBotaoControle); //DEFINE O INTERVALO DE 100 MILISSEGUNDOS(100L = 100 MILISSEGUNDOS) //PARA EXECUÇÃO DA FUNÇÃO verificaBotaoControle() } //FUNÇÃO QUE VERIFICA O PRESSIONAMENTO DO BOTÃO 'A' DO TRANSMISSOR RF (CONTROLE REMOTO) void verificaBotaoControle(){ if (digitalRead(pinoD0) == HIGH) { //SE LEITURA DO BOTÃO FOR IGUAL A HIGH, FAZ if (estadoBotao != HIGH) { //SE O ESTADO DO BOTÃO FOR DIFERENTE DE HIGH, OU SEJA, SE FOR IGUAL A LOW, FAZ estadoRele = !estadoRele; //VARIÁVEL RECEBE O ESTADO ATUAL INVERTIDO (ESTADO ATUAL = LOW, LOGO, RECEBE HIGH) digitalWrite(pinoRele, estadoRele); //MUDA O ESTADO DA PORTA EM QUE O RELÉ ESTÁ CONECTADO } estadoBotao = HIGH; //ESTADO DO BOTÃO RECEBE HIGH }else{ //SENÃO, FAZ estadoBotao =LOW; //ESTADO DO BOTÃO RECEBE LOW } } //FUNÇÃO RESPONSÁVEL POR VERIFICAR SE A LÂMPADA ESTÁ ACESA OU APAGADA void verificaStatusLamp(){ for (int i = 0; i < 100; i++){ //PARA "i" IGUAL A 0, ENQUANTO "i" MENOR QUE 100, INCREMENTA "i" if(analogRead(sensorTensao) > 70){ //SE LEITURA FOR MAIOR QUE 70, FAZ statusLamp = "LIGADA"; //VARIÁVEL RECEBE O TEXTO }else{ //SENÃO statusLamp = "DESLIGADA"; //VARIÁVEL RECEBE O TEXTO } } } void loop(){ verificaBotaoControle(); //CHAMA A FUNÇÃO RESPONSÁVEL POR VERIFICAR SE O BOTÃO 'A' DO CONTROLE REMOTO FOI PRESSIONADO verificaStatusLamp();//CHAMA A FUNÇÃO RESPONSÁVEL POR VERIFICAR SE A LÂMPADA ESTÁ ACESA OU APAGADA Serial.print("LAMPADA: "); //IMPRIME O TEXTO NO MONITOR SERIAL Serial.println(statusLamp); //IMPRIME O TEXTO NO MONITOR SERIAL } |
Leia os comentários do código para entender qual a finalidade cada linha.
Após o carregamento do código abra o monitor serial na IDE do Arduino e veja que a informação de “LAMPADA DESLIGADA” ou “LAMPADA LIGADA” está sendo mostrada. Pressione e solte o botão ‘A’ do controle remoto e veja que a lâmpada vai alterar o estado (ligada / desligada) e no monitor serial a informação vai atualizar. Quando o botão ‘A’ é clicado, a saída D0 do receptor RF que está conectado ao pino digital 7 passa a ter nível lógico 1 e isso faz com que o estado do módulo relé seja alterado de acordo com o nosso código e consequentemente a lâmpada irá acender ou apagar. Note que o LED conectado ao pino VT do receptor RF vai acender sempre que pressionarmos algum botão do controle remoto, pois ele indica que a transmissão é válida para qualquer um dos botões, contudo, apenas o botão ‘A’ é que irá fazer o controle da lâmpada.
Agora pressione o interruptor paralelo e veja que a lâmpada vai mudar de estado e a informação na serial vai atualizar.
Independente se o controle da lâmpada está sendo feito via controle remoto rf ou interruptor paralelo, o estado atual da mesma será apresentado no monitor serial, pois o sensor de tensão ac está ligado em paralelo com o circuito para detectar a presença de tensão, mais precisamente no retorno que sai do módulo relé para a lâmpada e no neutro.
Você vai notar que a informação na serial leva pelo menos 1 segundo para atualizar sempre que o estado da lâmpada muda. Isto ocorre, pois no código foi definido ‘if(analogRead(sensorTensao) > 70){‘, logo, a leitura no pino analógico deve atingir um valor maior que 70 para acusar lâmpada ligada e um valor menor que 70 para acusar lâmpada desligada. Se alterarmos o 70 para um valor menor, a informação de lâmpada ligada irá atualizar com mais rapidez, contudo a informação de lâmpada desligada vai levar um tempo maior para atualizar no monitor serial. Portanto, faça testes com outros valores e veja qual irá retornar a informação com mais rapidez.
No vídeo abaixo você pode ver o resultado desta prática:
No controle remoto ainda restam três botões que você pode programar para controlar mais lâmpadas ou definir outras funções.
Gostou deste tutorial? Então deixa seu comentário, dúvida ou sugestão aí embaixo!
Loja online: https://www.masterwalkershop.com.br
Fan page no Facebook: https://www.facebook.com/masterwalkershop
Nos ajude a espalhar conhecimento clicando no botão de compartilhar (f Like) que está mais abaixo.
Obrigado e até a próxima!
Seu feedback é muito importante! Que tal dar uma nota para esta postagem?! Faça sua avaliação aqui embaixo.
Postagem anterior: Utilizando o Controle Remoto RF e Receptor RF
Próxima postagem: Arduino – Utilizando a Matriz de LED 5mm 8X8
Olá amigo! Estou tentando reproduzir, porém não está funcionando a parte do receptor RF. No desenho de conexão entre os componentes, o receptor está conectado na protoboard usando cabo jumper macho-fêmea?
Porém no seu vídeo, o receptor parece estar conectado direto na protoboard, nesse caso, em qual fileira da protoboard você conectou? E como ficou o esquema dos jumpers para funcionar?
Agradeço desde já, e parabéns pelo trabalho!
Olá Daniel.
Agradeço pelo comentário!
O esquema de ligação mostrado no tutorial é o mesmo usado em vídeo.
Independente se o Receptor RF está na protoboard, soldado diretamente no terminais ou cabos jumpers ligados ao terminais do mesmo, o esquema de ligação deve ser feito conforme o tutorial.
estou com um problema com esse sensor. tudo esta funcionando mas a distancia do controle para receptor é extremamente baixa, se eu afastar o controle 10 cm, o sensor não recebe mais o comando.
se puder me ajudar eu agradeço muito.
Boa noite,
Parabéns por essa postagem !
Existe esse kit completo para venda ?
Olá Filipe.
Temos sim, mas o de 433MHz está fora de estoque no momento:
https://www.masterwalkershop.com.br/kit-controle-remoto-transmissor-rf-e-receptor-rf-433mhz
https://www.masterwalkershop.com.br/kit-controle-remoto-transmissor-rf-e-receptor-rf-315mhz
Olá!
Estou fazendo um projeto sobre domótica e vou usar Arduino.
Para acionar lâmpadas tanto pelo interruptor (manualmente) ou via Arduino (remotamente), forçosamente, o interruptor da lâmpada a ser acionada tem que ser paralelo, ou seja, de três contatos? e se sim, então para realizar esta ação através do Arduino, é impossível com interruptores simples, correto?
Olá Wagner.
Se você deseja obter o estado atual da lâmpada, terá que usar interruptor paralelo (three way) ou interruptor pulsador. Abaixo você pode ver a vantagem e desvantagem de cada um deles.
Interruptor paralelo:
Vantagem: supondo que o Arduino dê um problema (desligue ou não aceite os comandos da interface virtual) e você queira controlar a lâmpada, ainda será possível, pois o interruptor three way não depende do Arduino para que suas ações sejam executadas.
Desvantagem: exige um componente auxiliar (Sensor de Tensão AC 127V / 220V) para verificar o estado atual da lâmpada.
Interruptor pulsador:
Vantagem: possibilita que cenas pré-definidas no código sejam executadas de acordo com os cliques no pulsador. Exemplo: se pressionar o interruptor pulsador duas vezes seguidas um conjunto de lâmpadas é aceso ou se pressionar 3 vezes acende uma lâmpada por 30 segundos. Além disso, o mesmo NÃO exige um componente auxiliar para verificar o estado atual da lâmpada, visto que o interruptor fica conectado diretamente ao Arduino.
Desvantagem: quando se utiliza interruptor pulsador o controle fica todo em cima da plataforma microcontrolada / embarcada, logo, se o Arduino desligar ou travar, você perde o controle sobre a lâmpada, pois depende que o Arduino interprete o pressionamento do interruptor para em seguida executar a ação.
OLA SEU VIDEIOS SAO MUITO PEQUENOS MAS SAO OS MELHORES EM RESULTADO NAO PARE E DIVULQUE MAS
Olá Marcelo.
Agradeço as considerações.
Os vídeos são curtos, pois o intuito deles é demonstrar o resultado final da prática.
As informações sobre as peças utilizadas, detalhes sobre elas, esquema de ligação e explicação sobre o funcionamento, fica tudo disponível na postagem aqui no blog.
Fica ligado que vem muita postagem bacana por aí!
Olá,
Parabéns pelo blog,
Então esse sensor terá que ter em todos os circuitos para que possa ser detectada a tensão, no caso de uso de interruptor.
Olá Cidney.
Obrigado pelo reconhecimento!
Se apenas um interruptor paralelo estiver controlando um circuito de lâmpadas, poderá utilizar apenas um sensor de tensão ac para capturar o estado atual deste circuito. Caso tenha um interruptor paralelo controlando cada uma das lâmpadas, deverá utilizar um sensor de tensão ac por interruptor.