Arduino e transmissores ou receptores codelearning

Kotch ,

acho que é mais ou menos isto que você esta procurando...

[]´s

Bruno Leite

brunosl:
Kotch ,
acho que é mais ou menos isto que você esta procurando...
Bruno Leite

Obrigado, mas não é rfid, eu quero usar um transmissor destes que abre portao de garagem que sao codificados atraves de code learning e fazer o arduino receber esta radio frequencia decodificar o codigo e acionar um rele.

Obrigado!
8)

fabiohbm007:
Code Learning seria a recepção do serial de um controle remoto e grava-lo na memoria o apaga-lo via um botao Learning contido no aparelho...
Os chips codificadores mais usados nos controles remotos de alarmes hoje
HT6P20 codigo fixo // pode ser copiado... :frowning: aqui o codigo para decodificar HT12E library - #26 by system - Networking, Protocols, and Devices - Arduino Forum

HCS??? codigo variavel// muda o codigo a cada transmissão//o codigo para decodficar é proprietário da Microchip e se você achar manda pra mim... :slight_smile:

Voce ja fez alguma experiencia com este codigo, funciona?
8)

Ele não está otimizado, mas funciona... A saída DATA do receptor deve ser ligado ao Pino Digital 2 (interrupt 0), cada vez que ele recebe um codigo valido, ele imprime na serial.

Funcionamento do "CodeLearning":
Você tem um arduino que "liga uma lâmpada";
Há um botão chamado Learning ligado ao arduino;
Inicialmente não há nenhum controle remoto salvo na memoria;
Pressione o botao Learning e o arduino gravará na EEPROM o proximo codigo recebido.
Cada vez que o arduino receber um codigo, ele compara com o codigo salvo, se igual alterna o estado da lampada;
Se o botao Learning for pressionado por mais de 7 seg, o arduino apaga o codigo salvo

É usado para cadastrar/apagar controles remotos da memoria sem ter que reprogramar o microcontrolador.
No arduino é bobeira porque você já faz o programa com apenas o seu controle.

fabiohbm007:
Ele não está otimizado, mas funciona...

Vou aproveitar o feriado pra fazer uns teste, obrigado Fabio!

fabiohbm007:
Há um botão chamado Learning ligado ao arduino;
Inicialmente não há nenhum controle remoto salvo na memoria;
Pressione o botao Learning e o arduino gravará na EEPROM o proximo codigo recebido.
Cada vez que o arduino receber um codigo, ele compara com o codigo salvo, se igual alterna o estado da lampada;
Se o botao Learning for pressionado por mais de 7 seg, o arduino apaga o codigo salvo

Mas em qual pino vai este botao Learning no arduino

Kotch:
Mas em qual pino vai este botao Learning no arduino

o codigo do cara é "proof of concept", recebe sinal valido e manda pra serial eternamente... ele não implementou mais nada...
o botao learning, você vai criar uma função... pode ser qualquer pushbutton em qualquer pino livre.

fabiohbm007:
Há um botão chamado Learning ligado ao arduino;
Inicialmente não há nenhum controle remoto salvo na memoria;
Pressione o botao Learning e o arduino gravará na EEPROM o proximo codigo recebido.
Cada vez que o arduino receber um codigo, ele compara com o codigo salvo, se igual alterna o estado da lampada;
Se o botao Learning for pressionado por mais de 7 seg, o arduino apaga o codigo salvo

aqui eu narrei a execução do sketch no arduino que simula o CodeLearning, faltou uma partezinha...

Há um botão chamado Learning ligado ao arduino;
Inicialmente não há nenhum controle remoto salvo na memoria;
Pressione o botao Learning e o arduino gravará na EEPROM o proximo codigo recebido.
Cada vez que o arduino receber um codigo, ele compara com o codigo salvo, se igual alterna o estado da lampada;
Se o botao Learning for pressionado por mais de 7 seg, o arduino apaga o codigo salvo
Fica eternamente comparando os codigos salvos com os codigos recebidos, se sim alterna o estado da lampada a cada codigo valido recebido.

Ok, entendi. 8)

Pois fiquei olhando o código :astonished: e não achei o "bendito" botão :smiley:

Vou montar a "trapizonga"!

[]´s

ARDUINO DECODIFICADOR HT6P20B COM RESISTOR DE 2M2 NO OSC.
ESTE CODIGO NAO USA TIMER, INTERRUPÇÃO EXTERNA E NEM PINO DEFINIDO DE ENTRADA.

mas onde vai este resistor?

:frowning:

muito instavel, so funciona proximo do receptor!
interessante, da pra clonar o codigo de transmissores!
$)
8)

Colegas,

elaborei o código abaixo para trabalhar como transmissor, no lugar do controle remotor, para receptores code learning. Fica interessante conhecer como gerar um código code learning:

/*
Transmissor que emula controle para receptor Code Learning padrão HT6P20B.
O código funciona com a maioria dos receptores code learning existentes no mercado.
O comprimento de onda foi configurado como 476 microsegundos.
De acordo com o datasheet do HT6P20, deve-se enviar um pilot code de tamanho igual a 24 comprimentos de onde sendo os 23 primeiros em nivel LOW e
1 em nivel HIGH.
Depois disso se enviam os 22 bits de dados e 4 bits que configuram o end code.
Um bit 1 é feito com o sinal em LOW por duraçao de 2 comprimentos de onda e um sinal HIGH com duração de 1 comprimento de onda.
Um bit 0 é feito com sinal em LOW por duração de 1 comprimento de onda e um sinal HIGH com duração de 2 comprimentos de onda.

CRIADO POR: Renzo Patrick de Lima Ribeiro
DATA: 10/05/2012
ARDUINO: Duemilanove (com ATMega 328)
CONTATO: 67 8401-8006
E-MAIL: renzo@oi.net.br
Permitido o uso público, mas deve-se manter o nome do autor.
*/

int larpulso = 476; //define tempo de 1 comprimento de onda em microsegundos
unsigned long _data=0; // SET de 28 bits que identificará o controle. Pode ser alterado como queira, desde que os 4 últimos não mudem

void setup()

{
Serial.begin(9600);
pinMode(2, INPUT); // foi colocado um botão ligado ao terra nesse pino
pinMode(3,OUTPUT); // essa porta vai no pino de dados do transmissor RF 433MHz
digitalWrite(2,HIGH); //RESISTOR PULL-UP
digitalWrite(3,HIGH); //coloca a saída do transmissor alta
}

void loop()

{
if (digitalRead(2)==LOW) {
//botão do meu controle da garagem (fiz a leitura com o código para recepção do colega JACQUES DANIEL MORESCO): 1001000011011011011110010101
for (int k=0;k<2;k++){ // esse laço simplesmente repete o envio do código para certificar que será entregue
char codigo[29] = "1001000011011011011110010101";
// envia o pilot code
Serial.println("transmitindo...");
digitalWrite(3,LOW);
delayMicroseconds(larpulso*23);
digitalWrite(3,HIGH);
delayMicroseconds(larpulso); //fim do pilot code

for (int i=0;i<28;i++){
Serial.print(bitRead(_data,i),BIN);
if (codigo == '1') {

  • bitWrite(_data, i, 1);*
  • digitalWrite(3,LOW);*
    _ delayMicroseconds(larpulso*2);_
  • digitalWrite(3,HIGH);*
  • delayMicroseconds(larpulso);*
  • } else {*
  • bitWrite(_data, i, 0);*
  • digitalWrite(3,LOW);*
  • delayMicroseconds(larpulso);*
  • digitalWrite(3,HIGH);*
    _ delayMicroseconds(larpulso*2);_
  • }*
  • }*
  • }*
  • Serial.println ();*
  • Serial.println("dados transmitidos.");*
  • }*
    }

Vou testar, obrigado!

Kotch:
ARDUINO DECODIFICADOR HT6P20B COM RESISTOR DE 2M2 NO OSC.
ESTE CODIGO NAO USA TIMER, INTERRUPÇÃO EXTERNA E NEM PINO DEFINIDO DE ENTRADA.

mas onde vai este resistor?

:frowning:

Ninguem ? :frowning:

Rosc é um resistor que é ligado ao circuito RC responsável por determinar a largura do pulso de codificação dos dados. Aqui um link para o pdf do ht6p20 http://www.cikaeletronica.com/Produtos/Data%20Sheet/6P20.PDF

Obrigado!

Amigos como descubro o codigo transmitido pelo controle remoto do meu portão? ele usa esse chip ht6p20. alguma idéia?

oh obrigado, maravilha, esse código para infravermelho funciona com receptor 433, vou testar posto aqui os resultados.

Pessoal,

Dá uma lida nesse tutorial sobre Controles Remotos com RF que eu fiz.

Tem um post com rotinas para decodificar e replicar o sinal com Arduino usando o encoder HT6P20.