domingo, 15 de junho de 2014

Como identificar um controle RF433 ( 1/2)

Isso ai , estamos de volta (depois de um grande furacão que passou por aqui ) .
Hoje vou explicar como fazer a decodificação de um radio 433
esse mesmo que voce usa para ligar o alarme da sua casa ou abrir o seu portão eletrônico .
Por um acaso voce ja teve algum dia seu vizinho fechando o carro e abrindo o seu portão ?
Então chega de papo e vamos ao que interessa !

Voce vai precisar de :
1- Arduino
1-Receptor RF-433MHz
1-Protoboard
1-Emissor RF-433 ( Controle remoto de portão )
Alguns Jumpers


Vamos a ligação
Da esquerda para direita
Terminal 1- GND
Terminal 2 - Saida Digital
Terminal 3 - Saida Analogica
Terminal 4 - Vcc +5V
Terminal 5 - Vcc +5V
Terminal 6 e 7 - GND
Terminal 8 - Antena

Vamos as ligações
Terminal 1- GND
Terminal 2- Porta 2 do arduino
Terminal 3 - Sem ligação
Terminal 4- +5V
Terminal 8 - Um jumper para servir de antena





--

Vamos a programação  

int x,startbit, startbit1,ctr,dataok,t1,larpulso,larpulso1,larpulso2,larpulso3,larpulso4,bt1,bt2,antcode=0;
unsigned long _data, _data2=0; 
unsigned long _dur,_dur1;      
byte          _pinIn = 2;  


#define PPM_Pin 3 

void setup()
{
  Serial.begin(9600);
  Serial.println("Pronto par decodificar");

  pinMode(PPM_Pin, INPUT);
  pinMode(13, OUTPUT);
  digitalWrite(13, LOW);
  attachInterrupt(PPM_Pin - 2, read_ppm, CHANGE);

  TCCR1A = 0;  
  TCCR1B = 0;
  TCCR1B |= (1 << CS11);  
  
}

void loop()
{
  Serial.println("Conteudo _data2 - " + String(_data2,HEX));
  delay(500);
}

void read_ppm(){  
  static unsigned long counter;


  
  counter = TCNT1; 
  TCNT1 = 0;
   


  _dur = counter;


  if(_dur > 20000 && _dur < 24000 && startbit==0)
  {  
    digitalWrite(13,!digitalRead(13));
    larpulso=_dur/23;
    larpulso1=larpulso-100;
    larpulso2=larpulso+100;
    larpulso3=larpulso+larpulso-50;
    larpulso4=larpulso+larpulso+50;
    startbit=1;
        _dur=0;
       _data=0; 
      dataok=0;
         ctr=0;
  }
  
  if(startbit == 1)
  {
    startbit++;
  }else if (startbit==2 && dataok==0 && ctr < 28 && digitalRead(2) == HIGH) 
  {  
    ++ctr;    
    _dur1 = counter;

    if(_dur1 > larpulso1 && _dur1 < larpulso2)     
    {
    
      _data = (_data << 1) ;     
    }
    else if(_dur1 > larpulso3 && _dur1 < larpulso4)   
    {
     
      _data = (_data << 1) + 1;       
    }
    else
    {
    
      startbit=0;
    }
        
  }

if (ctr==28)
   { 
     if (bitRead(_data,0)==1 && bitRead(_data,1)==0 && bitRead(_data,2)==1 && bitRead(_data,3)==0)
     { 
       antcode=1;
     }  else { 
       ctr = 0;
       
     }

     if (antcode==1)
     {
           dataok=1;
          
           _data2 = _data;
           ctr=0;
           startbit=0;
           antcode=0;
         
      }
         
   }

}



Depois disso abra o monitor serial e aperte um botão em um controle .. irá aparecer o código hexadecimal que identifica o controle .





9 comentários:

  1. Impresionante amigo!!!...Para cuando el 2/2??...Mil gracias

    ResponderExcluir
  2. Por favor el dos de dos gracias desde España!!!

    ResponderExcluir
  3. O código funcionou perfeitamente...mas como enviar o HEXA decimal para abrir/fechar?

    ResponderExcluir
  4. tenho um problema, quando meu transmissor esta ligado na fonte sem mandar nenhum sinal apenas ligado na fonte ele interfere em outro sistemas,como o alarme do carro não funciona não abre o portão o alarme da casa tbm não vai, desligando o modulo tudo volta a funcionar o que pode ser

    ResponderExcluir
    Respostas
    1. Quanto o TX está ligado , ele fica transmitindo sinal aleatoriamente. O que interfere em outros sistemas que usam a mesma frequência , 433MHz , porque as centrais recebem todos os "códigos", elas apenas selecionam quais códigos são os dela e fazem o que são programadas

      Excluir
    2. Amigos acompanho esta discussão sobre o rf433, como fazer para que o transmissor rf433 não provoque interferência nos controles de carros proximo ?

      Excluir
  5. Boa noite colega.
    Tenho uma dúvida, o pino de dados do receptor é conectado no pino 2 ou 3 do arduino?
    Já tentei de várias vezes e não funcionou.

    ResponderExcluir
    Respostas
    1. Estou com essa dúvida pois no código esta #define PPM_Pin 3

      Excluir
    2. Pino de entrada de dados é o pino 2

      Excluir