“CLONAGEM” DE CONTROLE REMOTO RF “Learning Code” (HT6P20B) com ARDUINO

Tags

, , , , , , ,

TÍTULO: CLONAGEM DE CONTROLE RF “LEARNING CODE” COM ARDUINO
CRIADO POR: AFONSO CELSO TURCATO
E-MAIL: acturcato (at) gmail.com
LICENÇA: GPL

REVISÕES:
00 – 14/01/2014 – Versão inicial

A ideia deste sketch é demonstrar como é possível de certa forma bem simples, efetuar a clonagem de um controle remoto RF 433.92 MHz que utiliza o chip HT6P20 para codificação (destes muito usados em portões eletrônicos e centrais de alarme).

Atualmente, existem várias “tecnologias de codificação” de sinais utilizadas nesses tipos de controle remotos. Dentre essas tantas, duas se destacam: a tecnologia “Rolling Code” ou “Hopping Code” e a tecnologia “Learning Code”.

A tecnologia “Rolling Code” é bem sofisticada e não digo que é impossível, mas é pouco provável de se conseguir clonar.
Ela utiliza um algoritmo de criptografia conhecido como KeeLoq da empresa Microchip.

Veja mais detalhes nos links abaixo:

http://en.wikipedia.org/wiki/Rolling_code

http://electronics.howstuffworks.com/gadgets/automotive/unlock-car-door-remote1.htm

http://www.seminariosartimar.com.br/mastersbrasil2011-pos/downloads/KLQ-MastersBrasil2011.pdf

 

Já a tecnologia “Learning Code” é bem mais simples.
Os dados enviados pelo controle NÃO são criptografados!
Eles são apenas codificados usando um protocolo simples e aberto disponibilizado pelo fabricante do chip HT6P20.
Datasheet do HT6P20: http://www.holtek.com.cn/PDF/consumer/HT6P20x2v110.pdf

Veja mais detalhes do protocolo no artigo:
https://acturcato.wordpress.com/2013/12/20/decodificador-para-o-encoder-ht6p20b-em-arduino/

Para descobrir qual destas tecnologias seu Portão Eletrônico (e/ou sua Central de Alarme) utiliza, vc pode consultar o manual destes equipamentos ou, uma forma bem mais simples, abrir o controle remoto q vc jah possui: se o chip encontrado dentro do controle for o HCSXXX, a tecnologia é a Rolling Code. Mas se o chip encontrado no controle for o HT6P20X, a tecnologia usada é a “Learning Code“.

Isto posto, o sketch apresentado abaixo utiliza um Arduino + Receptor RF 433,92 MHz + Transmissor RF 433,92 MHz + dois botões e um LED para receber o sinal emitido por um controle remoto RF (encoder HT6P20B), decodificá-lo, armazenar os dados decodificados na memória e retransmiti-los quando o botão for pressionado.

Continue reading

Advertisements

EMULATOR FOR HT6P20B ENCODER ON ARDUINO BOARD

Tags

, , , , ,

TITLE: EMULATOR FOR HT6P20B ENCODER ON ARDUINO BOARD
CREATED BY: AFONSO CELSO TURCATO
E-MAIL: acturcato (at) gmail.com
LICENSE: GPL

REVISION INDEX:
00 – 10-JAN-2014 – Initial release
01 – 13-JAN-2014 – Pin of RF Transmitter changed from 52 to 53 and others changes

The HT6P20B generates a code 28-bit, 22-bit for ADDRESS, 2-bit for DATA and 4-for “ANTI-CODE” (verification code).

The ADDRES is fixed for a given Encoder (each HT6P20 has a different address).
The DATA changes according to the pressed button.
ANTI-CODE is always the same: “0101″.

The complete code contains four main parts: PILOT, ADDRESS, DATA and ANTI-CODE:

– The PILOT is formed by 23 cycles of “0″ and one cycle of “1″;
– The ADDRESS consists of 22 bits (66 cycles);
– The DATA is formed by 2 bits (6 cycles).
– The ANTI-CODE consists of 4 bits (12 cycles). It is always “0101″.

See more details: DECODER FOR HT6P20B ENCODER ON ARDUINO BOARD

Main idea of this project is make ​​possible, through the Arduino, reproduce the operation of an RF remote with HT6P20B encoder (using Arduino + module RF transmitter 433.92 MHz).

Continue reading

Como acessar os dados em sites de informações climáticas no Arduino

Tags

, , , , ,

Neste post será mostrada uma forma bem simples de, através do Arduino, acessar informações sobre o clima (Temperatura Atual, Sensação térmica, Velocidade do Vento, Preciptação, Umidade Relativa do Ar…) em diversas localidades do mundo através do acesso a base de dados do site de informações climáticas Weather Underground.

O hardware a ser utilizado é um Arduino MEGA 2560 R3 + shield Ethernet W5100.

O site Weather Underground disponibiliza uma API para acesso as informações climáticas no formato XML ou JSON (neste exemplo utilizaremos JSON).

Existem vários planos de acesso às informações climáticas, inclusive um FREE (com algumas limitações sobre a quantidade de requisições por minuto e valor máximo de requisições).
Veja mais detalhes sobre os planos neste link.

Neste post utilizaremos o plano FREE. Para tanto, foi necessário criar uma KEY de acesso ao site conforme orientações encontradas no link acima.

Existem vários tipos/modalidades de informações disponibilizadas pelo site, tais como:
– Informações sobre Condições climáticas;
– Informações sobre Previsão do Tempo;
– Informações sobre Furacões;
– E muitas outras.

Neste post será mostrado um exemplo de acesso às informações sobre as “Condições Climáticas” de uma cidade brasileira. Mas o mesmo raciocínio pode ser utilizado para obter outros tipos de informações de diversas outras localidades (do mundo!).

Basicamente, o sketch desenvolvido foi baseado no exemplo oficial Web Client da biblioteca Ethernet.

Como funciona?

É feita uma conexão ao site do servidor (api.wunderground.com), onde são passados alguns dados para a consulta das informações.
Esses dados são formatados conforme as regras fornecidas pela API.
Veja neste link as possibilidades: API Docs.

A resposta do servidor (formato JSON) contém inúmeras informações. Essa resposta é então armazenada em uma variável string e passada como parâmetro para a função principal do programa: getValuesFromKey().

A função getValuesFromKey() recebe como parâmetros duas strings e retorna uma string com a informação solicitada.

A primeira string é a própria resposta do site previamente tratada na rotina loop(). Já a segunda string (denominada sKey) refere-se a informação que se deseja obter dentre as diversas contidas na resposta do servidor. Elas tem um formato bem definido estabelecido na Documentação da API (API Docs).

Exemplos de uso:
– Deseja-se obter a Temperatura Atual em graus ºC do local:
sKey = "temp_c";

– Deseja-se obter a Umidade Relativa no local:
sKey = "relative_humidity";

Assim, qualquer valor de qualquer variável disponível na resposta oriunda do servidor pode ser obtido através da função getValuesFromKey().

Com isso, pode-se fazer muita coisa. Como por exemplo: disponibilizar as informações sobre o clima em um display LCD. Acionar um LED/Relé caso a temperatura atual ou sensação térmica exceda um valor. Criar um Gadget que baseado na previsão do tempo para a próxima hora mude de cor conforme a previsão e etc. Aplicações não faltam!

Vejam no link abaixo o sketch completo:
ACT_WEATHER

OBS.: Tentei utilizar as bibliotecas aJson e restClient mas elas não funcionaram bem. Acredito que tenha sido pelo fato da resposta do servidor ser maior do que elas podem manipular. Caso alguém queira tentar e consiga, me avise!

USEM SEM MODERAÇÃO!!!

USO DE MEMÓRIA RAM (SRAM) NO ARDUINO

Tags

, ,

Segundo o site oficial do Arduino, cada modelo uC possui uma capacidade distinta de memória sendo que elas são divididas em três tipos:

– Memória FLASH: é a memória de programa, é onde o sketch fica armazenado. O BootLoader tb fica armazenado nesta área (não volátil);
– Memória RAM: é onde o sketch cria e manipula as variáveis quando está sendo executado (volátil);
– Memória EEPROM: é o espaço de memória que pode-se armazenar informações por longos períodos (não volátil).

Continue reading

DECODER FOR HT6P20B ENCODER ON ARDUINO BOARD (ENGLISH)

Tags

, , ,

TITLE: DECODER FOR HT6P20B ENCODER ON ARDUINO BOARD
CREATED BY: AFONSO CELSO TURCATO
E-MAIL: acturcato (at) gmail.com
LICENSE: GPL

REVISION INDEX:
00 – 20-DEC-2013 – Initial release
01 – 27-DEC-2013 – Fix the issue when an invalid code ANTI-CODE was received (thanks to Gilson Oguime @oguime)
02 – 10-JAN-2014 – Code optimization. Created a main function to return ADDRESS CODE and BUTTONS and decrease use of global variables
03 – 11-JAN-2014 – Code optimization again. Created a struct for controls and remove global variables
04 – 18-JUN-2014 – New code optimization. Variable lambda is Global. This make the code most compatible with others Arduinos boards (by Henrique Brancher Gravina)

The HT6P20B generates a code 28-bit, 22-bit for ADDRESS, 2-bit for DATA and 4-for “ANTI-CODE” (verification code).
The ADDRES is fixed for a given Encoder (each HT6P20 has a different address).
The DATA changes according to the pressed button.
ANTI-CODE is always the same: “0101”.

For HT6P20D model there are 20-bit for ADDRESS and 4-bit for DATA.
For HT6P20F model there are 19-bit for ADDRESS and 5-bit for DATA.
(see table in Datasheet for details)

Continue reading

DECODIFICADOR PARA O ENCODER HT6P20B COM ARDUINO

Tags

, , ,

TÍTULO: DECODIFICADOR PARA O ENCODER HT6P20B COM ARDUINO
CRIADO POR: AFONSO CELSO TURCATO
E-MAIL: acturcato (at) gmail.com
LICENÇA: GPL

REVISÕES:
00 – 20/12/2013 – Versão inicial
01 – 27/12/2013 – Correção do problema de travamento do código quando um ANTI-CODE inválido é recebido (agradecimento ao Gilson Oguime @oguime)
02 – 10/01/2014 – Otimização do código. Criação de uma função que retorna o ENDEREÇO e o BOTÃO pressionado, além da diminuição do uso de variáveis globais.
03 – 11-JAN-2014 – Nova otimização do código. Foi criada uma “struct” para os controles e removidas as variáveis globais
04 – 18-JUN-2014 – Nova otimização do código. Variável lambda foi declarada como Global para ficar “compatível” com o Arduino Nano (segundo orientação dada pelo Henrique Brancher Gravina)

O HT6P20B gera um código de 28 bits, sendo 22 bits de ENDEREÇO, 2 bits de DADOS e 4 bits de “ANTI-CODE” (código de verificação).

O ENDEREÇO é fixo para um mesmo CI, ou seja, sempre a mesma sequência de bits “0” e “1” (cada CI HT6P20 tem um ENDEREÇO diferente).
O DADO muda de acordo com o botão pressionado.
O ANTI-CODE é sempre o mesmo: “0101”

Para o modelo HT6P20D são 20 bits de ENDEREÇO e 4 bits de DADOS.
Para o modelo HT6P20F são 19 bits de ENDEREÇO e 5 bits de DADOS
(Veja tabela no Datasheet para maiores detalhes)

Continue reading