[RESOLVIDO]Controle de alarme sendo lido por Arduino

Olá pessoal,

Gostaria de saber se isso é possível e se existe algum controle de alarme baratinho no mercado que mande uma identificação e selecione botão 1, botão 2 ou botão 3.

Por exemplo quando apertasse o botão 1 mandaria por Arduino:

01/1 (controle 01 botão 1)

13/3 (controle 13 botão 3)

20/2 (controle 20 botão 2)

Consegui ser claro?

Exibições: 6208

Responder esta

Respostas a este tópico

Achei esses controles no MercadoLivre baseados no CI HT6P20B:

LINK REMOVIDO POR VIOLAÇÕES AOS TERMOS DE SERVIÇO


Mas não sei como fazer o recepector

http://emguide.wordpress.com/2012/12/10/15/

Talvez isso te ajude um pouco.. =)

Muito legal esse material, desde que eu criei o tópico já fiz bastante pesquisas e agora to somente com uma duvida específica. 

Os controles vendidos no MercadoLivre baseados no CI HT6P20B já veem de fabrica com um ID escrito no chip que na teoria não pode ser modificado. Eu preciso saber se é garantido que todo controle tenha um ID diferente e se cada botão ira mandar um id diferente também, porque eu preciso de 3 botões.

Eu gostaria de saber se eu posso modificar os ID desses controles vendidos no MercadoLivre baseados no CI HT6P20B para que a STRING que ele mande tenham a informação ID/BOTÃO facilmente vista já que se forem ID randômicos eu terei que apertar todos os botões de todos os controles para poder fazer uma tabela, estou pensando em adquirir 20 controles x 3 botãos = 60 botões apertados.

O Labgaragem bloqueou o link do Mercado Livre, mas segue a imagem do controle que eu quero adquirir:

Hoje existem no mercado 3 tipos de controle:

- Esses, baseados em Holtek HT6P que tem um codigo unico predefinido por tecla. Os ultimos bits definem a tecla, entao vc pode ignorar os 2 ultimos bits se for de ate 3 botoes e decorar o resto;

- Os de corte de trilha, baseado no Holtek HT12D. Esse integrado é obsoleto, mas vc ainda encontra. Nele vc configura o codigo ligando ou nao pinos no GND. Acho que esse vai te atender melhor.

- Os RollingCode, que sao como os primeiros só que com criptografia (só te custa mais caro, pro ladrão é o mesmo preço pra clonar e vc só consegue decodificar usando um integrado tb caro.) 

Existe pouco codigo pra isso pq envolve segurança.Ninguem quer que as tecnicas de codificaçao, decodificação e automaticamente clonagem e arrombamento caiam em mãos erradas.

Consegui aqui por pra funcionar com o código: 

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2,3);

void setup() {

 Serial.begin(9600);

 mySerial.begin(1200); // Software Serial port initialization by 1200 bps
 mySerial.setTimeout(10000); // Set time out 10 sec
 mySerial.flush();

}

void loop()
{

 if(mySerial.available()) // If Software Serial detect any data in it's buffer
 Serial.print(mySerial.read());
}

Ao ligar ele printa no Serial Monitor caracteres aleatórios de 0 a 9, mesmo sem enviar nenhum RF (o que já me faz achar estranho, imaginei que apareceriam caracteres qualquer da tabela ASCII, deve ser alguma peculiaridade do print do Arduino). 

Ao pressionar o botão do RF, percebi que existia um padrão de 31 números (3122841675801434216558141020817) que se repetiam, mas algumas vezes quando eu repetia o teste não conseguia mais achar esse padrão. Esse é o problema, será que estou usando o baudrate certo? O problema é como eu vou achar o baudrate do meu controle?

Estou em posse de dois receivers, o RXTCH10 de 433,9 (do teste citado) e o RR3 de 433,9.

Chaurais do Clube do Hardware:

O HT6P20B gera um código de 24 bits, sendo 22 bits de endereço e 2 bits de dado. O Endereço é fixo, ou seja, sempre a mesma sequencia de bits 0s e 1s. O dado muda de acordo com o botão pressionado. Se nenhum botão for pressionado teremos D0=0 e D1=1. Outras combinações são: D0=1 e D1=0, D0=0 e D1=1, D0=1 e D1=1. Portanto temos 3 combinações válidas e portanto poderemos ter até 3 botões no controle remoto.
Os bits do endereço e do dado são transmitidos utilizando-se 3 ciclos de clock interno do HT6P20B. Se ligarmos um resistor de 2M2 nos pinos 4 e 5 do HT6P20B, teremos um clock interno de 2KHz e portanto um ciclo de clock de 500us. Assim cada bit será transmitido em 1500us.
Para sabermos se o bit transmitido é 0 ou 1, devemos analisar o segundo ciclo do bit. O primeiro ciclo de cada bit será sempre 0; o segundo será 1 se o bit transmitido for 0 (ZERO) ou será 0 se o bit transmitido for 1 (UM). O terceiro ciclo será sempre 1. Veja a figura para entender melhor.
O código completo compreende 3 partes principais: Piloto, Endereço/Dado e Anti-Código.
O Piloto é formado por 23 ciclos 0 e um ciclo 1.
O Endereço é formado por 22 bits ou 66 ciclos e o Dado por 2 bits ou 6 ciclos.
O Anti_Código é formado por 4 bits (sempre 0101) ou 12 ciclos. Esta parte do código é ignorada pela rotina que te enviei.
Na figura você poderá visualisar melhor o que foi exposto sobre o código completo.
A função da rotina então é identificar o período piloto e depois ler cada bit de endereço e dado.
Para identificar o período piloto, lemos a saída do módulo receptor e contamos quanto tempo ela fica em 0.
Para considerar as variações que o código pode sofrer, consideramos um ciclo de clock interno de 400us a 600us. Então o intervalo de 23 ciclos em nível 0 deve ficar entre 9,2ms a 13,8ms. Se for maior que 13,8ms é porque não estamos recebendo nenhum código e assim devemos sair da rotina.
Após estes 23 ciclos em nível 0, teremos 1 ciclo em nível 1, no nosso caso um intervalo entre 400us a 600us.
Se isto ocorrer, então detectamos o período Piloto. Agora devemos ler os bits que seguem o Piloto. O próximo ciclo será 0 (primeiro ciclo de um bit); aguardamos o tempo de um ciclo + metade de um ciclo. Vamos estar situados então no segundo ciclo do bit. Como temos 24 bits (endereço + dado), vamos utilizar 3 bytes para salvar o código (Dado0, Dado1 e Dado2). Se o segundo ciclo do bit for 0, deslocamos um bit dos 3 bytes que salvam o código, junto com o bit CARRY=0 e fazemos o bit0 de Dado0 = 1; caso contrário só deslocamos com o bit CARRY=0. Aguardamos o término do bit (terceiro ciclo) e lemos o próximo bit, até completar 24 bits. Assim Dado2 terá os bits de endereço de A0 a A7, Dado1 terá os bits de endereço de A8 a A16 e Dado0 terá os bits de endereço de A17 a A21 e os bits de dado D1 e D0, tudo nesta ordem, pois os bits iniciam logo após o sinal piloto, sendo transmitidos de A0 a A21 e depois D1 e D0.

Pelo visto não é tão trivial recuperar essa informação no RX, não basta somente acha um baud rate e usar Serial.read()... alguém que tenha mais informações sobre leituras de RF poderia me dar uma ajuda?

A melhor ajuda é pegar um osciloscópio + datasheet do CI e decodificar o controle a unha, funciona em 100% dos casos..

Como eu sempre faço questão de voltar com a solução do meu problema, segue o link do código (que não é meu) que lê a informação mandada pelo controle de alarme/portão baseado no CI HT6P20B.

Dropbox: https://www.dropbox.com/s/5jf34olfjmkc2zj/RF_HT6P20B.zip

4shared: http://www.4shared.com/get/jrZlRAW3/RF_HT6P20B.html

Créditos: Dene http://www.youtube.com/watch?&v=h66mGCWNzvA

Bom dia Amigo.

O código original é meu, gostaria que o nome do autor fosse mantido.

Do modo que o pessoal vem usando, está ficando chato e sem respeito a comunidade.

Favor observar as fontes.

Atenciosamente

Jacques Moresco

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço