// // // PHPH.com.br - Codificação de sinais de controles remotos RF 433MHz de um portão eletrônico e alarme residencial
All for Joomla All for Webmasters

Codificação de sinais de controles remotos RF 433MHz de um portão eletrônico e alarme residencial

Neste estudo, analisaremos a codificação de sinais emitidos por controles remotos (portões eletrônicos, alarme residencial, entre outros) RF 433 MHz, por meio de um receptor RF de baixo custo de frequência nominal de 433MHz e modulação ASK, por meio de um osciloscópio digital de 300MHz e dois analisadores lógicos USB.

Caso queira entender melhor o sinal RF modulado em ASK/OOK tipicamente emitido por transmissores de RF 433 MHz de baixo custo aplicado em controles remotos, acesse o respectivo artigo, clicando aqui.

Para um orçamento para desenvolvimento de algum sistema eletrônico ou computacional para interpretação, armazenamento ou reprodução de códigos de controle remoto, entre em contato, clicando aqui.

Transmissão e recepção de dados

Conforme já demonstrado neste site, o atraso de tempo entre os dados enviados pelo transmissor RF e o gerador RF é pequeno e esses sinais podem ser visualizados por meio de um osciloscópio. Na figura abaixo, o sinal amarelo (canal 1) consiste na entrada de dados (bits) no módulo emissor e foi gerado por meio de um Arduino Uno, o sinal em rosa (canal 2) é o sinal ASK destinado à antena do módulo emissor e é exibido para referência e o sinal azul ciano (canal 3) é o sinal de saída do receptor RF que foi recebido. 

SDS00012

SDS00012

Neste experimento, utilizaremos um receptor RF de frequência 433MHz para obtermos o sinal de dados a partir do sinal emitido pelos controles remotos do portão eletrônico e alarme residencial para analisarmos a codificação desses sinais. A antena utilizada consistirá meramente em um fio de cobre conectado ao protoboard. O sinal referente aos dados obtidos será analisado por um analisador de espectro para facilitar a visualização de dados, mas qualquer sistema embarcado poderia desenvolver essa tarefa uma vez que se trata de um sinal TTL de baixa frequência.

Influência da tensão de alimentação do módulo receptor RF 433 MHz sob a saída digital de dados

Na primeira tentativa de conexão do módulo receptor RF, sem clicarmos nos botões do controle remoto que desejamos analisar, nos supreendemos com a saída de dados digital referente a bits aleatórios, que se interrompiam apenas no início da transmissão RF, mas logo retornavam, conforme as imagens abaixo (analisadores lógicos e osciloscópios). Por não ter frequência fixa, descartamos a existência de pulsos de sincronização entre emissor e o receptor.

Pela visualização do sinal no osciloscópio (sinal amarelo, canal 1), descartamos ainda a possibilidade de ruídos de RF causarem essa saída aleatória de pulsos uma vez que estávamos visualizando o próprio sinal digital TTL e constatamos a existência de diversos pulsos espúrios com nível de tensão fora das especificações de um sinal TTL (clique nas imagens para expandi-las):

burst fonte 5v

burst fonte 5v

burst2 fonte 5v

burst2 fonte 5v

SDS00001

SDS00001

Como já estávamos alimentando o sistema por meio de uma fonte de precisão programável da Rigol, descartamos ruídos na fonte de alimentação como causa do problema e alteramos o nível de tensão da alimentação para cima ou para baixo. Ao reduzir a tensão de alimentação para 4V, o sinal de saída se estabilizou um pouco mais mas ainda gerando transições aleatórias.

Esse inconveniente não inviabilizaria a análise desejada porque esse ruído se interrompe após o início da captação de alguma transmissão, mas dificultaria um pouco a utilização do trigger nas transições de borda nos analisadores lógicos.

Conforme já vislumbrado em outras páginas deste site, considerando o design da placa PCB desses receptores de RF, os componentes utilizados, assim como a ausência de blindagem, é imprescindível a utilização de algum método de verificação e validação de dados e constatação de erros.

Codificador HT6P20 (24 bits)

Na tentativa de facilitar a análise da codificação do sinal transmitido pelo controle remoto JFL de um portão eletrônico, decidimos fazê-lo diretamente no sinal TTL gerado pelo codificador do próprio emissor antes de analisar o sinal TTL recebido no módulo receptor RF. No presente caso, constatamos que o codificador utilizado foi o tradicional chip HT6P20B, que é um codificador programável por uma única vez (One Time Programmable), sendo que seu código consiste em 4 bits de controle e mais 24 bits de dados. 

O codificador HT6P20 basicamente codifica 24 bits de informação e depois o transmite de maneira serial após o disparo. O mesmo necessita tão somente um oscilador (pode ser utilizado o sinal de clock obtido do próprio chip) e um sinal digital de controle de disparo/ativação. Conforme o datasheet do fabricante, uma palavra completa codificada consiste na seguinte configuração:

word ht6p20

word ht6p20

O code line (código de linha) utilizado nesse codificador para representar o bit "0" ou bit "1" não é muito comum em outros sistemas digitais e consiste apenas na variação do comprimento do pulso de nível alto, sendo os pulsos de maior comprimento representando o bit "0" e o pulso de menor comprimento o bit "1".

Perceba que a código de uma palavra abaixo obtido por meio de um analisador lógico representa a cadeia de bits "1 10111001011101011101 1110 0101", sendo os quatro últimos bits o "anti-código", os quatro bits D3-D0 "1110" os bits de dados em si e o restante os 20 bits de código de endereço, sendo o primeiro bit apenas o bit após o período piloto de silêncio (DOUT em nível baixo):

pacote comprimento pulso ON USBee

pacote comprimento pulso ON USBee

Por oportuno, neste momento, é importante destacar que a largura de ambos os pulsos depende da frequência do sinal oscilador do chip, que usualmente não tem muita precisão e é obtido por meio da conexão de um resistor acima de 1M ohm entre a saída de clock de 3kHz gerado pelo próprio CI e o pino de entrada OSC2, o que pode culminar em determinada variação do comprimento desses pulsos.

Controle remoto de um portão eletrônico JFL

Realizada as considerações acima, retornamos à decodificação de alguns sinais provenientes de dispositivos RF 433 MHz por meio de um receptor RF comum. Para o controle remoto de um portão eletrônico da marca JFL, obtemos as formas de onda abaixo por meio de dois analisadores lógicos que representam o código "1 10111001011101011101 1110 0101" já discutido acima.

Com o botão sendo pressionado, medimos a distância entre os códigos das palavras em 11,7 ms (clique nas imagens para expandi-las):

pacotes clique distancia saleae

pacotes clique distancia saleae

pacotes clique distancia usbee

pacotes clique distancia usbee

Para o bit "0", de maior comprimento, mensuramos a largura de pulso de 1,04 ms:

pacote comprimento pulso ON USBee

pacote comprimento pulso ON USBee

pacote comprimento pulso ON

pacote comprimento pulso ON

Ainda, para o bit "1", que possui o menor comprimento, mensuramos a largura do pulso em 0,53 ms:

pacote comprimento pulso OFF USBee

pacote comprimento pulso OFF USBee

pacote comprimento pulso OFF

pacote comprimento pulso OFF

Ainda, esse controle possui três botões e, ao clicá-los, como era de se esperar, os bits referentes ao endereço continuaram idênticos, com variação apenas nos bits D3-D0 ("1110", "1101" e "1111" de cima para baixo):

botoes diferentes usbee2

Controle remoto de um sistema de alarme residencial

Para o controle remoto de um sistema de alarme residencial da marca Codigus, obtemos as formas de onda abaixo por meio de um analisador lógico que representam o código "1 10000010000010101100 0011 0101" já discutido acima, sendo o conjunto "0101" de valor fixo e referente à parcela anti-código, "0011" à parcela de dados e "10000010000010101100" ao endereço do dispositivo.

uma palavra usbee

Com o botão sendo pressionado, medimos a distância entre os códigos das palavras em 11,05 ms, muito semelhante ao caso supramencionado:

distancia entre palavras usbee

Para o bit "0", que possui o maior comprimento, mensuramos o largura de pulso de 1,14 ms e para o bit "1", cerca de 0,6ms. Ainda, no espaçamento entre dois bits "0", encontramos 0,393ms. Portanto, valores muito próximos aos já encontrados:

comprimento bits usbee

comprimento bits usbee

Como os demais casos, esse controle possui três botões e, ao clicá-los, como era de se esperar, os bits referentes ao endereço continuaram idênticos, com variação apenas nos bits D3-D0 ("0001", "0011" e "0010" de cima para baixo):

cliques botoes usbee

Codificador EV1527 (24 bits)

Em controles remotos de baixo custo, em especial de fabricação chinesa, outro codificador OTP muito utilizado é o modelo EV1527 e variantes, sendo seu frame também composto por um preâmbulo, 20 bits de código (C0-C19) e 4 bits de dados (D0-D3). A principal diferença é que o bit "1" é representando por um pulso de comprimento maior e o "0" com um pulso menor e, além disso, não temos os quatro bits "anti-código" como o codificador HT6P20. Como o preâmbulo consiste em um pulso "0" seguido de um período de 31 ciclos de clock em nível baixo, é difícil distinguir entre o término de uma palavra e o ínicio da próxima.

Para um controle remoto de apenas um botão de controle de iluminação, encontramos a palavra "0 01110101100111010101 0000", sendo os bits de dados "0000":

uma palavra ev1527

Acerca da temporização, encontramos a seguinte distância entre palavras (6,875ms) e as larguras de pulsos 0,668ms para o bit "1" e 0,222ms para o bit "0". Portanto, temos quase metade da distância entre palavras do codificador HT6P20:

largura pulsos distancia palavras ev1527

largura pulsos distancia palavras ev1527

 

Codificador LP801B

Por fim, estudamos o codificador LP801B da empresa chinesa Land-Hop, para infra-vermelho ou RF, cujo datasheet só está disponível em chinês, o que dificultou bastante a análise, mas que é demonstrado neste artigo pois apresente uma forma de codificação pouco usual em relação aos demais codificadores. Seu frame é composto por até 12 símbolos de endereços de três estados (A0 a A5 ou A0 até A11 opcionalmente) e 6 bits de dados (D5-D0).

A principal diferença no código de linha é que há três símbolos definidos: "0", "1" ou "f", conforme imagem abaixo. Para os bits de dados, os mesmos são utilizamos apenas os estados "0" ou "1".

codificacao tres simbolos

Para um controle remoto de apenas um botão de controle de lâmpadas, encontramos a palavra "11111f 101000", sendo os bits de dados "101000" e o último pulso de sincronização:

palavra tecla A

Acerca da temporização, encontramos a distância temporal de 7,675ms entre palavras e comprimentos de pulsos de 0,743ms  e 0,248ms: 

comprimentos distancia pulsos

comprimentos distancia pulsos

Como os demais casos, esse controle possui três botões e, ao clicá-los, como era de se esperar, os bits referentes ao endereço continuaram idênticos ("11111f"), com variação apenas nos bits D5-D0 ("101000", "100100" e "100010" de cima para baixo, sendo o ultimo pulso de sincronização):

palavras teclas diferentes

2 comentários

  • Luiz Fernando Minato
    Luiz Fernando Minato Sábado, 28 Abril 2018 00:17 Link do comentário

    Olá, novamente estou escrevendo após realizar alguns testes com o tempo de pulso da codificação ev1527.
    Estou utilizando o código ev1527 para acionar um relé comprado da China, e após fazer alguns testes no Arduino com o tempo de pulso notei uma estranha "gama" de comprimentos de pulsos aceito por este relé RF.
    O teste foi feito com um potenciômetro para mudar o valor analógico na porta A0 e depois multiplicar o valor obtido na porta analógica através da variação do potenciômetro pelo comprimento aproximado de onda mostrada neste artigo, o qual é tempo=222us.

    Exemplo:
    Para o "Preamble" utilizei 5V por 1 x valor potenciômetro e 0V 31 x valor potenciômetro.
    Para o bit 0 utilizei 5V por 1 x valor potenciômetro e 0V 3 x valor potenciômetro.
    Para o bit 1 utilizei 5V por 3 x valor potenciômetro e 0V 1 x valor potenciômetro.

    O problema é que o relé aceitou o timer mínimo de 115us, e o máximo de 528us, ou seja, uma janela de 410us. Estranho não?

    E o mais estranho é que depois do valor máximo de tempo que seria 528us, ele voltou a aceitar os pulsos com comprimento de timer mínimo entre 645us até 781us, ou seja, outra janela de 136us.

    Apenas o tempo de 1us até 114us, de 529us até 644us, e acima de 782us ele não aceitou atracar o relé.

    Aguardo comentários sobre o caso.

    Obrigado!

  • Luiz Fernando Minato
    Luiz Fernando Minato Sexta, 27 Abril 2018 01:23 Link do comentário

    Olá amigo,

    Testando a codificação ev1527, notei que com o tempo dos pulsos informado, funciona somente se a transmissão da sequencia dos pulsos for maior ou igual a 3, ou seja, tenho que mandar a sequencia de pulsos 3 vezes para que o módulo de relé reconheça o controle, se eu enviar somente 1 sequencia de pulsos ele não reconhece.
    Caso possa explicar o porque disso, ficarei grato!

    Muito obrigado pelo post, me ajudou imensamente!

Deixe um comentário

Certifique-se de preencher os campos indicados com (*). Não é permitido código HTML.