Pular para o conteúdo principal

Como usar controle PPA (de alarme, portão eletrônico) com arduino (código sem erros e sem travamentos)

Olá, amantes de robótica!
Estamos fazendo uma central de alarme e disponibilizarei o código e um tutorial aqui no site em breve, mas, por agora, mostrarei como decodificar o controle remoto de 433Mhz , esse código funciona 100%, sem erros e sem travamento, agradeço ao autor do código pela contribuição!



Veja o vídeo do controle 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;
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

 /*   
 TITLE:    DECODER FOR HT6P20B ENCODER  
 CREATED BY: AFONSO CELSO TURCATO  
 DATE:    18/JUN/2014  
 E-MAIL:   acturcato (at) gmail.com  
 LICENSE:   GPL  
 REV.:    04  
 Alterações: Criando Robô Com Arduino  
 http://www.criandorobocomarduino.com/  
 Site do criador do código:  
 http://acturcato.wordpress.com/2013/12/20/decodificador-para-o-encoder-ht6p20b-em-arduino/  
 */  
 const byte pinRF = 2; // Pin where RF Module is connected. If necessary, change this for your project  
 int lambda;   // on pulse clock width (if fosc = 2KHz than lambda = 500 us)  
 struct rfControl    //Struct for RF Remote Controls  
 {  
   unsigned long addr; //ADDRESS CODE  
   boolean btn1;    //BUTTON 1  
   boolean btn2;    //BUTTON 2  
 };  
 boolean ACT_HT6P20B_RX(struct rfControl &_rfControl){   
  static boolean startbit;   //checks if start bit was identified  
  static int counter;      //received bits counter: 22 of Address + 2 of Data + 4 of EndCode (Anti-Code)  
  static unsigned long buffer; //buffer for received data storage  
  int dur0, dur1; // pulses durations (auxiliary)  
  if (!startbit)  
  {// Check the PILOT CODE until START BIT;  
   dur0 = pulseIn(pinRF, LOW); //Check how long DOUT was "0" (ZERO) (refers to PILOT CODE)  
   //If time at "0" is between 9200 us (23 cycles of 400us) and 13800 us (23 cycles of 600 us).  
   if((dur0 > 9200) && (dur0 < 13800) && !startbit)  
   {    
    //calculate wave length - lambda  
    lambda = dur0 / 23;  
    //Reset variables  
    dur0 = 0;  
    buffer = 0;  
    counter = 0;  
    startbit = true;  
   }  
  }  
  //If Start Bit is OK, then starts measure os how long the signal is level "1" and check is value is into acceptable range.  
  if (startbit && counter < 28)  
  {  
   ++counter;  
   dur1 = pulseIn(pinRF, HIGH);  
   if((dur1 > 0.5 * lambda) && (dur1 < (1.5 * lambda))) //If pulse width at "1" is between "0.5 and 1.5 lambda", means that pulse is only one lambda, so the data é "1".  
   {  
    buffer = (buffer << 1) + 1;  // add "1" on data buffer  
   }  
   else if((dur1 > 1.5 * lambda) && (dur1 < (2.5 * lambda))) //If pulse width at "1" is between "1.5 and 2.5 lambda", means that pulse is two lambdas, so the data é "0".  
   {  
    buffer = (buffer << 1);    // add "0" on data buffer  
   }  
   else  
   {  
    //Reset the loop  
    startbit = false;  
   }  
  }  
  //Check if all 28 bits were received (22 of Address + 2 of Data + 4 of Anti-Code)  
  if (counter==28)   
  {   
   // Check if Anti-Code is OK (last 4 bits of buffer equal "0101")  
   if ((bitRead(buffer, 0) == 1) && (bitRead(buffer, 1) == 0) && (bitRead(buffer, 2) == 1) && (bitRead(buffer, 3) == 0))  
   {     
    counter = 0;  
    startbit = false;  
    //Get ADDRESS CODE from Buffer  
    _rfControl.addr = buffer >> 6;  
    //Get Buttons from Buffer  
     _rfControl.btn1 = bitRead(buffer,4);  
     _rfControl.btn2 = bitRead(buffer,5);  
    //Serial.print("Address: "); Serial.println(_rfControl.addr, HEX);  
    //Serial.print("Button1: "); Serial.println(_rfControl.btn1, BIN);  
    //Serial.print("Button2: "); Serial.println(_rfControl.btn2, BIN);  
    //Serial.println();  
    //If a valid data is received, return OK  
    return true;  
   }  
   else  
   {  
    //Reset the loop  
    startbit = false;  
   }  
  }  
  //If none valid data is received, return NULL and FALSE values   
  _rfControl.addr = NULL;  
  _rfControl.btn1 = NULL;  
  _rfControl.btn2 = NULL;   
  return false;  
 }  
 void setup(){    
  pinMode(pinRF, INPUT);  
  pinMode(13, OUTPUT);  
  Serial.begin(9600);  
 }  
 void loop(){  
  digitalWrite(13, digitalRead(pinRF)); //blink de onboard LED when receive something  
  struct rfControl rfControl_1;  //Set variable rfControl_1 as rfControl type  
  if(ACT_HT6P20B_RX(rfControl_1))  
  {  
   //If a valid data is received, print ADDRESS CODE and Buttons values    
   Serial.print("Address: "); Serial.println(rfControl_1.addr, HEX);  
   Serial.print("Button1: "); Serial.println(rfControl_1.btn1, BIN);  
   Serial.print("Button2: "); Serial.println(rfControl_1.btn2, BIN);  
   Serial.println();  
   //PEGUE O "ADDRESS" E COLOQUE NA FRENTE DELE "0x" para poder comparar  
   if (rfControl_1.addr == 0x249FB2){  
    if ((rfControl_1.btn1 == 1) && (rfControl_1.btn2 == 0)){//se botão 1 for pressionado  
      digitalWrite(13,HIGH);  
    }  
    if ((rfControl_1.btn1 == 0) && (rfControl_1.btn2 == 1)){//se botão 2 for pressionado  
      digitalWrite(13,LOW);  
    }  
    if ((rfControl_1.btn1 == 1) && (rfControl_1.btn2 == 1)){//se botão 3 for pressionado  
      digitalWrite(13,HIGH);  
      delay(1000);  
      digitalWrite(13,LOW);  
      delay(1000);  
    }  
   }  
  }  
 }  

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

Código fonte de controle ppa funcionando sem erros e travamentos.

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.



Comentários

  1. Mas como enviar o código recebido pelo arduino?

    ResponderExcluir
  2. Muito bom o seu projeto parabéns.
    Gostaria de alterar o código para abrir/fechar um portão de correr, usando 02 reles( um abre, outro fecha o portão); 02 fim de curso ( na confirmação do portão aberto ou fechado; barreira eletronica ( para pedestre).
    Como ficaria este código?
    Help...
    segue email: robertocarlosalvarenga@hotmail.com
    obrigado desde já

    ResponderExcluir
  3. Amigo, como faço para controlar um motor de 12 volts ou um motor de 220 volts com este projeto por sinal muito interessante?.

    ResponderExcluir
  4. boa noite, obrigado pelo projeto... fiz tudo certim meu led fica piscando e so para quando aperto e fico apertado. e qualquer controle que eu aperto faz esse efeito . queria salvar apenas um no maximo dois.

    ResponderExcluir
  5. Esta-me a dar erro "boolean ACT_HT6P20B_RX(struct rfControl &_rfControl){" o que e que eu posso fazer

    ResponderExcluir
  6. muito bom o código funciona certinho sem erros

    ResponderExcluir
  7. Hello, how the images for me are appearing normally on the computer. hugs

    ResponderExcluir

Postar um comentário

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

Postagens mais Vistas

CarAut v1. Criando um carrinho autônomo (robô) com Arduíno, parte 1/4 (componentes)

Olá, amantes de robótica! ROBÔ ATUALIZADO! MELHORADO O CODIGO FONTE! MELHORADO O DESEMPENHO! VIDEO DE MONTAGEM DO ROBÔ! ACESSE O NOVO TUTORIAL: SEUROBO.COM.BR Veja como ficou o novo robô: Aqui ensinaremos como fazer um carrinho autônomo (CarAut) com Arduíno e um LCD. O projeto não é difícil, entretanto, exige um pouco de tempo, criatividade e paciência. Neste site, farei os robôs, publicarei seus tutoriais e código fonte. Se possível, por favor, compartilhe com outras pessoas. Obrigado! Veja o vídeo do CarAut v1 em funcionamento: Vamos ao material que precisamos:  Qtd     Itens: 1      -  Arduino UNO ou qualquer outra versão; 1      -  Servo motor (HK15138 Standard Analog Servo 38g / 4.3kg / 0.17s); 1      -  Micro servo motor (HXT900 9g / 1.6kg / .12sec Micro Servo); 1      -  Display de LCD 18x2; 1      -  Sensor Ultrasonic HC SR04; 1      -  Speaker (som, buzzer de computador ); 1      -   Resistor 220 Ohms; 1      -  Potenciômetro

Como receber sinal de um controle remoto com infravermelho (TV, DVD, outros) com o arduino

Olá, amantes de robótica! Como ler o sensor de infra vermelho de controle remoto. Com o receptor infravermelho você poder receber o código do controle remoto da tv, dvd e outros. Neste post irei falar como receber os dados do controle. Veja o vídeo do receptor de infravermelho em funcionamento: Vamos ao material que precisamos:  Qtd     Itens: 1      -  Arduino UNO ou qualquer outra versão; 1      -  Receptor de infravermelho; 1      -  Controle remoto pode ser de tv, dvd, mp3; 1      -  Resistor 20 ohms (para usar no receptor); 1      -  Led vermelho; 1      -  Led verde; 1      -  Led Amarelo; 3      -  Resistor 200 ohms (para o led); 6      -  Jumpers (Fios). 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: Cuidado com o ligamento do infravermelho, porque você pode ligar errado e esquentá-lo

Como fazer um controle remoto de TV com arduino

Olá, amantes de robótica! Quer sacanear sua família trocando de canal com um controle feito de arduino? Então veja como faze-lo! Veja o vídeo do controle remoto com arduino em funcionamento: Vamos ao material que precisamos:  Qtd     Itens: 1      -  Arduino UNO ou qualquer outra versão; 1      -  LED Infravermelho; 1      -  LED verde ou vermelho; 6      -  Resistor 300 ohms; 4      -  Botões; 1      -  Protoboard; 1      -  Controle da TV que você quer "hackear"; 16     -  Jumpers (Fios). 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 : Agora pegue o controle normal da TV que você quer sabotar. Veja esse tutorial: Como receber sinal de um controle remoto com infravermelho (TV, DVD, outros) com o arduino Nesse outro tutorial você pegará o código das 4 teclas que iremos clonar. Após peg