Como receber sinal do controle de alarme e portão PPA com o módulo Wireless RF 433Mhz

Olá, amantes de robótica!

ACESSE ESSE OUTRO POST COM UM CÓDIGO SEM TRAVAMENTOS E ERROS DA RECEPÇÃO:
Como usar controle PPA (de alarme, portão eletrônico) com arduino (código sem erros e sem travamentos)

Futuramente, farei uma central de alarme e disponibilizarei o código e um tutorial aqui no site, mas, por agora, mostrarei como decodificar o controle remoto de 433Mhz e utilizar apenas um botão para ligar e desligar!



Veja o vídeo do controle e o receptor em funcionamento:







Vamos ao material que precisamos: 



Qtd     Itens:
1      -  Arduino UNO ou qualquer outra versão;
1      -  LED;
1      -  Controle de alarme ou portão, PPA, Tx de 433MHz (o meu é da marca genno);
1      -  Receptor RX 433Mhz;
3      -  Jumpers (Fios);
1      -  Fios de 17 cm para ser a antena do receptor.

Não sabe onde comprar as peças, confira esse post:  onde comprar arduino e componentes

Vamos à montagem:



Basta fazer as mesmas conexões da imagem abaixo:
(clique na imagem pra ampliá-la)

Atenção: para que o receptor receba o sinal normal à uma distancia de até aproximadamente 200 metros, é necessário que ele tenha antena, que é um fio de 17 cm, igual ao da foto abaixo.
Os dois pinos centrais do receptor são de dados (DATA), ou seja, tanto faz qual você usará no arduino.

Veja as fotos do projeto:














O mais importante, o código fonte:


Não sabe programar? Então acesse: Como programar em Arduíno, fazer robôs e projetos diversos
Se você é iniciante veja:Como enviar (upload) o programa pronto para a placa do arduino uno, mega entre outros

 /*   
  >>>>> Criando Robô Com Arduino <<<<<   
  ##### Robôs, Projetos e Tutoriais! #####  
  .:: Site principal: http://www.CriandoRoboComArduino.com/     
  .:: Site secundário: http://www.TestCriandoRoboComArduino.com/  
  ========== IMPORTANTE ==========   
  O código está livre para usar, citar, alterar e compartilhar,  
  desde que mantenha o site como referência.   
  Obrigado.  
  --------------------------------------------------------------------------------------------------  
  Projeto: Como receber sinal do controle de alarme e portão PPA com o módulo Wireless RF 433Mhz   
  ---------------------------------------------------------------------------------------------------  
 */   
 /*    
  ARDUINO DECODIFICADOR HT6P20B COM RESISTOR DE 2M2 NO OSC.    
  ESTE CÓDIGO NÃO USA TIMER, INTERRUPÇÃO EXTERNA E NEM PINO DEFINIDO DE ENTRADA.    
  ELE MEDE O TEMPO DO PILOT PERIOD E COMPARA SE ESTÁ DENTRO DA FAIXA DEFINIDA,    
  SE TIVER ELE PASSA PARA CODE PERIOD E FAZ AS MEDIDÇÕES DE TEMPO EM NIVEL ALTO    
  SE TIVER DENTRO DA FAIXA ACRECENTA BIT 1 OU 0 NA VARIAVEL _DATA CASO NÃO ZERA AS VARIÁVEIS E RE-INICIA    
  APOS RECEBER TODOS OS BITS ELE PEGA OS 4 BITS DO ANTE CODE E TESTA PARA SABER SE O CÓDIGO FOI RECEBIDO    
  CORRETAMENTE, CASO RECEBIDO CERTO ELE COLOCA A VARIAVEL ANTCODE EM 1.    
  CRIADO POR: JACQUES DANIEL MORESCO    
  DATA: 28/02/2012 USANDO ARDUINO 0022.    
  FONES:54 3324 2251 54 9206 7168    
  E-MAIL: ibisul@ibisul.com.br    
  Permitido o uso público, mas deve-se manter o nome do autor.    
  **** Modificado por Criando Robo Com Arduino *****    
  */    
  int x,startbit,ctr,dataok,t1,larpulso,larpulso1,larpulso2,larpulso3,larpulso4,bt1,bt2,antcode=0;    
  unsigned long _data=0; // DATA é o Código recebido do HT6p20 todos os 28 BITS onde, 22 do coodigo+2 dos botões+4 do anti-codigo;    
  unsigned long _dur,_dur1; // Duração do Pulso    
  byte  _pin; // PINO receber o sinal RF digital 2    
  int liga_desliga = 1; //variável para saber se o led/alarme está ligado ou desligado    
  int resultado = 0; //resultado do módulo (%) da divisão, se restar ele é 1, se não restar é 0    
  void setup(){    
  _pin=2;    
  Serial.begin(9600);    
  pinMode(2, INPUT);// pino 2 DATA do receptor Rx 433mhz    
  pinMode(13,OUTPUT); //led    
  }    
  void loop(){    
  digitalWrite(3, digitalRead(2)); //Pisca o LED conforme o valor da entrada digital, testar interferencias.    
  if (startbit==0)    
  {// Testa o tempo piloto até o Bit de inicio;    
  _dur = pulseIn(_pin, LOW);    
  if(_dur > 8000 && _dur < 12000 && startbit==0)    
  {    
   larpulso=_dur/23;    
   larpulso1=larpulso-50;    
   larpulso2=larpulso+50;    
   larpulso3=larpulso+larpulso-50;    
   larpulso4=larpulso+larpulso+50;    
   startbit=1;    
   _dur=0;    
   _data=0;    
   dataok=0;    
   ctr=0;    
  }    
  }    
  // Se o Bit de inicio OK ENTÃO Inicia a medição do tempo em Nivel ALTO dos sinais, e testa se o tempo está na faixa.    
  if (startbit==1 && dataok==0 && ctr < 28)    
  {    
   ++ctr;    
   _dur1 = pulseIn(_pin, HIGH);    
   if(_dur1 > larpulso1 && _dur1 < larpulso2) // Se a largura de pulso é entre 1/4000 e 1/3000 segundos    
   {    
   _data = (_data << 1) + 1; // anexar um * 1 * para a extremidade mais à direita do buffer    
   }    
   else if(_dur1 > larpulso3 && _dur1 < larpulso4) // Se a largura de pulso é entre 2/4000 e 2/3000 segundos    
   {    
   _data = (_data << 1); // anexar um * 0 * para a extremidade mais à direita do buffer    
   }    
   else    
   {    
   /* força finalização do laço */    
   startbit=0;    
   }    
  }    
  if (ctr==28){    
   if (bitRead(_data,0)==1)    
   {    
    if (bitRead(_data,1)==0)    
    {    
    if (bitRead(_data,2)==1)    
     {    
     if (bitRead(_data,3)==0)    
     {    
     antcode=1;    
     }    
     }    
    }    
   }    
   if (antcode==1)    
   {// Se foram recebidos todos os 28 Bits, o valor vai para a variavel _data e pode ser usada como exemplo abaixo.    
    dataok=1;    
    Serial.println(_data,DEC);//Alteração de binário (BIN) para decimal(DEC) para conseguir fazer a comparação    
    //Serial.println(_data,BIN); //Caso queira ver o código em binário e só retirar o comentário dessa linha    
    ctr=0;    
    startbit=0;    
    antcode=0;    
    delay(100);    
    //Comparação dos códigos    
   // Colocar código no botão ligar    
    if (_data==153611413){    
    resultado = liga_desliga % 2;//vê o resultado do módulo (resto da divisão)    
    if (resultado == 0) {//se da divisão não restar nada, ele ligará o led/alarme    
    digitalWrite(13, LOW);    
    }else{//se não, ele desliga    
    digitalWrite(13, HIGH);    
    }    
    liga_desliga++;    
    }    
   }//fim do decodificador    
  }//fim do if (ctr==28)}    
  }//fim do loop    
  /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::  
   >>>>> Acesse os sites: <<<<<  
   .:: Robôs, Projetos e Tutoriais  
     http://www.CriandoRoboComArduino.com/     
   .:: Testes dos robôs, noticias sobre robótica e muito mais  
     http://www.TestCriandoRoboComArduino.com/  
   >>>>> Inscreva-se nos canais no Youtube: <<<<<  
   .:: Vídeos dos robôs, projetos e tutoriais  
     Criando Robô Com Arduino  
     https://www.youtube.com/CriandoRoboComArduin  
   .:: Mostrando os testes dos robôs e projetos  
     Test Criando Robô Com Arduino  
     https://www.youtube.com/TestCriandoRoboComAr  
   :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/  

O código acima não é meu. Alterei para fazer comparações de códigos recebidos.

Pronto, qualquer duvida é só deixar nos comentários ou entrar em Contato 

Quer ajuda ou quer ajudar? Clique em Ajuda e veja como você pode ajudar ou ser ajudado.



27 comentários:

  1. Boa tarde, Você tem alguma dica pra esse código, pois quando se aperta seguidas vezes ele trava, quando se adiciona mais botões trava mais rapido ainda.

    ResponderExcluir
    Respostas
    1. Boa tarde Ciro, obrigado pelo comentário, irei verificar o código e corrigir esses problemas.
      Abraços

      Excluir
  2. Respostas
    1. Olá, Denisson, o código do controle já vem gravado de fabrica, não tem como alterar esse código.

      Excluir
    2. Tem como cria um novo Butão em uma protoboard e uma arduino pra testar ?

      Excluir
    3. Olá Dj Allex, tem sim, porem não se usa esse código e também tem que usar o emissor e o receptor do wirelles RF 433mhz.
      irei fazer um post sobre isso daqui um tempo.

      Excluir
    4. Ola cara não sei aonde estou errando estou usando esse seu código mais não aparece nada na serial monitor
      Estou tendo um probleminha em montar um código que arme e desarme um relé via rf433 mhz estou querendo testa um projeto no meu carro de ligar ele a distancia podes mim ajudar com os códigos

      Excluir
    5. Allex, provavelmente você teve estar ligando os fios errados ou o receptor ou o controle podem estar queimados.

      Excluir
    6. Não Eles Funciona direitinho e acho que e a minha programação e que não esta la essa coisas toda, pode fazer uma programação pra mim estudar ligando e desligando uma lampa via rf ?

      Excluir
    7. Estou tendo um probleminha em montar um código que arme e desarme um relé via rf433 mhz estou querendo testa um projeto no meu carro de ligar ele a distancia podes mim ajudar com os códigos

      Excluir
    8. Dj Allex, esse código esta pronto, é só vc colocar o rele na lampada e ligar na saída 13 do arduino, também de que alterar o código do controle na parte "//Comparação dos códigos ", certo?

      Excluir
    9. Vou tentar qualquer cosia te peço ajuda de novo cara valeu

      Excluir
    10. E como eu disse tentei mais nada eu testo os mesmo componente com outro códigos e funciona

      Excluir
    11. Certo, clique em contato e me envia seu email, assim fica melhor para nossa comunicação. abraço

      Excluir
    12. O problema do Dj Allex foi resolvido com um outro código fonte, irei tentar fazer um material com essa solução. pois o controle dele não é de ppa.

      Excluir
  3. tenho um codigo adicional se tiver interesse de troca para, incrementar a este seu que guarda as variaveis, _data na memoria Epron do arduino, fazendo assim toda a vez uma comparação, para que os usuarios possan cadastrar seus controles como forma de acesso etc... e ainda da opçao de leitura para caso queiram fazer um menu para cadastro de novos controles.

    ResponderExcluir
    Respostas
    1. Olá, Elitec. Gostaria da sua contribuição.
      Por favor clique no link: Entre em contato e envie uma mensagem com o código, assim que possível iremos atualizar o post e colocaremos seu nome neste post!
      Obrigado pela colaboração!

      Excluir
    2. Elitec como posso entrar em contato contigo?

      Excluir
    3. o amigo eu tenho interesse nesse codigo se vc tiver ele ainda filipepratesg12@gmail.com

      Excluir
    4. Também tenho interesse no código Elitec. Poderia me enviar por email?
      ecastelhano@hotmail.com

      Obrigado

      Excluir
    5. Eu também tenho interesse no código Elitec, poderia me enviar por email?
      ecastelhano@hotmail.com

      Obrigado

      Excluir
  4. ola gostaria de saber se você tem um código para um controle diferente de ppa como por ex:rossi.

    ResponderExcluir
    Respostas
    1. Olá, Ricardo.Se esse código não funcionou para esse controle, infelizmente não teremos.
      Um grande abraço

      Excluir
  5. Realmente, depois de algumas pressionadas trava tudo.

    ResponderExcluir
  6. qual a tensão que sai do led ? precisaria que saise pelo menos 10V

    ResponderExcluir

O seu comentário estará aguardando aprovação.