Ou melhor dizendo - Tentando desvendar Controle Remoto RF.

Depois que consegui fazer funcionar o Analisador Lógico com o Arduino, tenho feito várias verificações que sempre quis fazer. Fiz uma análise de controle remoto usando a Luz infravermelha e agora estou fazendo uma análise mais apurada de controle remoto que usa Rádio-frequência RF).

Tutorial - Analisador Lógico com Arduino:

http://labdegaragem.com/profiles/blogs/tutorial-analisador-l-gico-c...

Decodificando Controle Remoto infravermelho:

http://labdegaragem.com/profiles/blogs/6223006:BlogPost:315534

Já li em vários Blogs do Lab de Garagem, que muitos desejam usar o Controle Remoto RF com o Arduino.

Para a minha decepção e acredito que  muitos se decepcionarão também, os controles remotos atuais são criptografados.Por isso, alguns já tentaram usar e falharam.

Para entender melhor, fiz uma análise do Controle Remoto do fabricante Rossi. (aciona a abertura e fechamento de portões de garagem). Esse controle usa o chip HCS201 da Microchip:

http://ww1.microchip.com/downloads/en/DeviceDoc/41098c.pdf

Possui dois botões (chaves) S0 e S1. A frequência da portadora é de 433,92 MHz. Usa uma pilha de 12V.

O link da Rossi portões, com os circuitos de controle de portões:

http://www.rossiportoes.com.br/produtos/120-central-de-comando.html

Lendo o data sheet do chip HCS201 da Microchip, percebi que a tecnologia usada é bem segura.

Ele é bem versátil - cada chip tem um número de série programável de 28 bits e uma chave de criptografia de 64 bits (acredito que é impossível descobri-la) . Essas informações são gravadas pelo fabricante do controle remoto (no caso a Rossi).

Cada transmissão tem um código diferente, por isso, se o circuito receptor não souber a chave criptográfica do fabricante, não haverá rotina de decodificação que permita identificar qual código foi transmitido. Fiz vários testes e comprovei ! Pressionei várias vezes o botão S1 e a cada momento o trem de pulsos era de um formato diferente.

Seria possível usar o controle remoto, desde que usasse um chip programado pelo desenvolvedor.

Assim a rotina de decodificação usaria a chave gravada no chip.

Vejam que interessante as várias telas capturadas usando o Analisador Lógico com o Arduíno.

Minhas medições foram no saída TX OUT do chip HCS201. Alimentei o controle remoto com 5V para não danificar o Arduino.

Essa captura foi feita pressionando o botão S1 - taxa de amostragem de 5 KHz :

Vejam que tem 12 pulsos de preambulo para sincronização :

Taxa de amostragem de 10 Khz.

Os 12 pulsos de preambulo usam a largura de pulso de 780 us:

(taxa de amostragem 50 KHz) 

Para decodificar os bits 0 e bit 1 :

Esse é o formato do Bit 0 : (taxa de amostragem 50 KHz) 

E esse é o formato do Bit 1 : (taxa de amostragem 50 KHz) 

Exibições: 87368

Responder esta

Respostas a este tópico

RESULTADO ACRESCENTANDO UM CÓDIGO NO LOOP APRESENTOU 1 ERRO
int a = 0;
for (int i = 0; i < 100; i++) {
a++;
a = a * a;
}

ou

randomSeed(analogRead(1));
int b = random(0, 2);
int a = 0;
for (int i = 0; i < b; i++) {
a++;
random(1500);
}

fiz várias alterações e por isso não tenho certeza de qual foi que gerou o resultado abaixo. De forma geral estava perdendo mais transmissões significando que estava com maior imprecisão.

Mas no teste abaixo ocorreu um erro num bit e depois o anti-code foi lido corretamente, resultando numa notificação errada (se estiver em modo de gravação iria gravar um código errado).

Address: 22D091 B1: 0 B2: 1
Address: 22D091 B1: 0 B2: 1
Address: 22D091 B1: 0 B2: 1
Address: 22D091 B1: 0 B2: 1
Address: 22D091 B1: 0 B2: 1
Address: 22D091 B1: 0 B2: 1
Address: 22D091 B1: 0 B2: 1
Address: 22D091 B1: 0 B2: 1
Address: 22D081 B1: 0 B2: 1
Address: 22D091 B1: 0 B2: 1
Address: 22D091 B1: 0 B2: 1
Address: 22D091 B1: 0 B2: 1
22D091 100010110100001001000101,9268
22D091 100010110100001001000101,9372
22D091 100010110100001001000101,9478
22D091 100010110100001001000101,9583
22D091 100010110100001001000101,9951
22D091 100010110100001001000101,10372
22D091 100010110100001001000101,10845
22D091 100010110100001001000101,11055
22D081 100010110100001000000101,11318    -> apenas 1 bit errado, mas o anti-code foi lido corretamente o que fez o programa interpretar como sensor válido
22D091 100010110100001001000101,10372
22D091 100010110100001001000101,10845
22D091 100010110100001001000101,11055
23D4B7 100011110101001011011101,18550    -> 4 bits errados, e o anti-code também veio errado
12

O último código lido foi desconsiderado pois o anti-code também foi errado.

É interessante notar que qualquer chamada ao delay(1) no loop irá fazer com que a rotina detecte um valor de address completamente diferente (com anti-code correto inclusive).

Interessante é que o erro é consistente neste caso, detecta sempre o mesmo código incorreto:

Address: 2C448C B1: 1 B2: 0
Address: 2C448C B1: 1 B2: 0
Address: 2C448C B1: 1 B2: 0
Address: 2C448C B1: 1 B2: 0
2C448C 101100010001001000110010,11431
2C448C 101100010001001000110010,11537
2D1646 101101000101100100011000,12059
2D1646 101101000101100100011000,12061
2D1646 101101000101100100011000,12063
2C448C 101100010001001000110010,12169
2C448C 101100010001001000110010,12905
7

Agora me ocorreu por que a última repetição enviada está sempre com os anti-code errados, eles simplesmente não devem ser enviados..

O chip deve enviar repetidamente o código até a alimentação ser cortada. Quando o reed switch é acionado, o circuito é energizado e alguma coisa deve cortar a alimentação no tempo necessário para enviar 40 vezes e um pouquinho. Isto é, não é o número de vezes de envio que é controlado, ao invés disso o controle é feito pelo tempo em que o circuito fica alimentado.

Clóvis , você já viu os nossos códigos usados no Alarme Arduino open source ?

Um código foi adaptado por mim e outro pelo Guilherme Spadaccia:

https://github.com/ArduinoFree/Central_de_alarme

https://github.com/ArduinoFree/Alarme-Arduino-Open-Source

Sobre interrupções:

http://labdegaragem.com/forum/topics/projeto-alarme-sem-fio-arduino...

Ha, os posts ficaram fora de ordem, esse último falando dos erros, é no código do Turcato original com algumas instruções a mais para gerar algum retardo na função loop().

A classe Ht6p20b.cpp que foi postada anteriormente até agora está funcionando normalmente. Não encontrei bug nessa classe AINDA;

Quanto a esses projetos ainda não tinha visto. Mas olhando por cima vi que esse código tem muita coisa a mais.

Quero o meu sistema mais enxuto (apenas com a lógica estritamente necessária e gostaria que fosse C++ para ter mais separação e organização do código) e com a maioria dos sensores funcionando com bateria de backup.

(segredo: o sistema vai rodar quase que por completo com ESP8266s espalhados - o arduino vai ser usado somente para receber o sinal dos sensores).

Se não conseguir fazer o sinal chegar do quarto do outro lado do apto, vou colocar um repetidor no meio do caminho (um pro mini com transmissor e receptor 433) alimentado por um powerbank. Mas antes disso vou tentar outras antenas e também estou pensando em encomendar um receptor super heterodine que dizem ser bem melhor.

Agora que sei como funciona o protocolo HT6P20B poderia fazer tudo em ESP8266 mas já comprei 2 arduinos pro mini (um para passar a detecção de intruso para o netbook e o outro como repetidor se necessário) e, como são mais baratos e eu não precisarei de Wifi neles, vou ficar com os arduinos nesses casos.

aqui ta em anexo o código com interrupt (SEM o modo DEBUG) que postei anteriormente caso queira testar (mudei o programa de testes para ficar mais fácil de ver o resultado).

Anexos

Clovis se deseja compartilhar o seu projeto, sugiro que crie um novo tópico esboçando a sua idéia, montagem e programas. 

Acho que muita gente vai se interessar. 

Pessoal, pergunta básica.

Se eu retirar o CI HCS201 do controle e montá-lo na protoboard, ligando o pino DATA a um transmissor de RF 433 Mhz, conseguirei transmitir e abrir/fechar o meu portão?

Estou querendo automatizar meu portão para abertura/fechamento através de um aplicativo, e como não é possível clonar o controle, pensei em pegar o controle, retirar o CI dele e montar em uma placa separada juntamente com o Arduino.

acho complicado você remover o chip.

acho muito mais fácil (nem vi o seu controle) e seguro você aproveitar o controle inteiro e simular o aperto no botão.

Concordo também com o Clovis. 

Monte um circuito para fechar o circuito do botão do controle. 

Fica mais fácil. 

Parabéns pelo ótimo trabalho!!

José Gustavo, você sabe como o HT6P20B envia sinal de bateria fraca para as centrais de alarmes?

Att. Leonardo Silva

Leonardo, tenho u sensor de ultra-som para movimento que tem um Microcontrolador PIC que monitora a tensão da Bateria. Quando a bateria esta fraca, o PIC aciona uma das portas do HT6P20B. 

Nesse outro sensor de porta , deve existir um circuito comparador de tensão que aciona uma das portas do HT6P20B.

http://labdegaragem.com/forum/topics/projeto-alarme-sem-fio-arduino...

Na verdade existe no mercado sensores sem fio com reedswitch, que enviam sinal de bateria baixo apos acionamento, mas eles não utilizam microcontrolador!!! somente o ht6p20, acredito que deve ser alguma alteração no circuito, de envie um pulso de botão "b" ou "c", por exemplo. Mas obrigado pela resposta.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço