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)
Tags:
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).
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.
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.
Bem-vindo a
Laboratorio de Garagem (arduino, eletrônica, robotica, hacking)
© 2024 Criado por Marcelo Rodrigues. Ativado por