Pages: [1] 2   Go Down
Author Topic: Problema ao decodificar controle remoto de A/C  (Read 4484 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Boa noite, sou novo no fórum, porem tenho Arduíno como hobby a algum tempo.

Estou com um problema ao decodificar um controle remoto de Ar Condicionado da marca Rheen ZH/JT-01, tentei inclusive usando os exemplos da library IRRemote porem sempre retorna FFFFFFFF. tentei então usar o exemplo aqui do forum, capturando o Raw. Obtive o seguinte:

unsigned int raw[194] = {550,1550,550,1650,550,1650,500,1650,500,1650,550,1600,600,1650,500,1650,500,600,550,600,500,600,550,650,450,650,450,600,500,600,550,600,500,1700,450,1650,550,1650,550,1600,500,1650,600,1600,550,1600,600,1600,500,600,550,600,550,600,450,600,550,600,500,600,550,600,550,550,500,1650,550,1650,550,1600,550,1650,500,1650,550,1600,600,1600,550,1650,500,600,550,600,450,650,550,600,500,600,500,600,550,600,500,600,500,1600,600,1600,550,600,500,1650,550,1600,600,1600,500,1700,500,1650,550,600,500,600,550,1600,550,600,500,600,550,600,500,600,500,600,550,600,450,1650,600,1600,550,600,500,1650,550,1600,550,1650,500,1650,550,1650,550,600,450,650,500,1650,550,600,450,650,550,550,500,650,500,600,550,1600,550,600,500,1650,550,600,450,1650,600,600,500,600,500,1650,550,600,500,1650,500,600,550,1600,550,600,550,1600,550,1650,500,};

e estou enviando assim:
irsend.sendRaw(raw,194,38);

porem... continua sem funcionar. Se alguém tiver alguma dica, agradeço antecipadamente.
Logged

Belo Horizonte - Brasil
Offline Offline
Newbie
*
Karma: 1
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Diego, esse analisador Lógico com Arduino poderá ajudá-lo.
http://forum.arduino.cc//index.php?topic=197055.0

Veja essa aplicação com sensores de infra-vermelho:
http://letsmakerobots.com/node/31422



Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3219
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

E como ligaste o teu sensor?

Que arduino estás a usar? 194 integers pode ser demais para alguns arduinos.
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Diego, esse analisador Lógico com Arduino poderá ajudá-lo.
http://forum.arduino.cc//index.php?topic=197055.0

Veja essa aplicação com sensores de infra-vermelho:
http://letsmakerobots.com/node/31422



Valeu pela dica Gustavo_Murta, assim que chegar em casa vou analisar e posto o resultado. Todos meu outros aparelhos estão funcionando normalmente com esta biblioteca exemplo: TV, Som e Receptor SKY, somente os A/C que estão com esse problema.


@ bubulindo

Tive que modificar o RAWBUF da biblioteca IRRemote de 100 para 200 pois meu controle tem um protocolo muito grande.

IRRemote.h
Code:
#define USECPERTICK 50
#define RAWBUF 200

#define MARK_EXCESS 100

#endif

@ bubulindo
Estou usando o Arduíno mega e o array consegui com este sketch:

Code:
#include <IRremote.h>

int RECV_PIN = 11;
IRrecv irrecv(RECV_PIN);
decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
}

int c = 1;

void dump(decode_results *results) {
  int count = results->rawlen;
  Serial.println(c);
  c++;
  Serial.println("For IR Scope: ");
  for (int i = 1; i < count; i++) {
   
if ((i % 2) == 1) {
  Serial.print("+");
  Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else {
  Serial.print(-(int)results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(" ");
  }
  Serial.println("");
  Serial.println("For Arduino sketch: ");
  Serial.print("unsigned int raw[");
  Serial.print(count, DEC);
  Serial.print("] = {");
  for (int i = 1; i < count; i++) {
   
if ((i % 2) == 1) {
  Serial.print(results->rawbuf[i]*USECPERTICK, DEC);
}
else {
  Serial.print((int)results->rawbuf[i]*USECPERTICK, DEC);
}
Serial.print(",");
  }
  Serial.print("};");
  Serial.println("");
  Serial.print("irsend.sendRaw(raw,");
  Serial.print(count, DEC);
  Serial.print(",38);");
  Serial.println("");
  Serial.println("");
}

void loop() {
  if (irrecv.decode(&results)) {
dump(&results);
irrecv.resume(); // Receive the next value
  }
}
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3219
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

200 integers para um comando? Não parece um pouco exagerado?

Tens a certeza acerca dos 38kHz? Isto porque a tua função de decode assume que o comando está a funcionar em 38kHz...

Code:
Serial.print(",38);");

Parece-me extremamente improvável que seja isto... mas nunca se sabe.
A outra coisa que pode estar mal é o hardware... como ligaste o hardware? Tens um osciloscópio ou analisador para ver isso? Ligaste o led emissor onde? Em que pino?

Usaste a função
Code:
enableIROut(int khz);
?


Nota também que, no Arduino Mega, o LED emissor tem de estar ligado no pino 9 (OC2B). No Uno e parecidos é que é no pino 3 como é referido no site da biblioteca.
« Last Edit: November 04, 2013, 03:37:29 pm by bubulindo » Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

200 integers para um comando? Não parece um pouco exagerado?

Tens a certeza acerca dos 38kHz? Isto porque a tua função de decode assume que o comando está a funcionar em 38kHz...

Code:
Serial.print(",38);");

Parece-me extremamente improvável que seja isto... mas nunca se sabe.
A outra coisa que pode estar mal é o hardware... como ligaste o hardware? Tens um osciloscópio ou analisador para ver isso? Ligaste o led emissor onde? Em que pino?

Usaste a função
Code:
enableIROut(int khz);
?


Nota também que, no Arduino Mega, o LED emissor tem de estar ligado no pino 9 (OC2B). No Uno e parecidos é que é no pino 3 como é referido no site da biblioteca.

Com relação ao pino e ao hardware, esta tudo certo, pois consigo controlar a TV, Decodificar SKY e Som.

Já falando do RAWBUF LENGTH, na página do IRRemote, já existe uma atualização falando sobre o tamanho do RAWBUF.

Acredito que o problema seja outro, estou preparando a dica do amigo Gustavo_Murta, para analisar o comando. O engraçado é que tenho 5 aparelhos de A/C em casa, 3 de marcas diferentes e não consigo controlar nenhum. Já os outros eletrodomésticos controlo perfeitamente.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E como ligaste o teu sensor?

Que arduino estás a usar? 194 integers pode ser demais para alguns arduinos.

Quando uso o sketch exemplo do IRRemote obtenho a array abaixo, o incomum é que fica "FFFFFFFF"

IRRecvdDump

A/C Rheem
FFFFFFFF (0 bits)
Raw (194): -7300 550 -1650 550 -1600 550 -1650 500 -1650 550 -1650 500 -1650 550 -1650 500 -1650 550 -600 500 -600 550 -600 500 -600 550 -550 500 -650 500 -600 550 -600 500 -1650 550 -1600 550 -1650 550 -1600 550 -1650 550 -1600 550 -1650 550 -1600 550 -600 550 -600 500 -550 550 -650 450 -600 550 -550 550 -600 550 -600 500 -1650 500 -650 450 -1700 500 -1650 550 -1650 500 -1650 550 -1650 500 -1700 500 -600 500 -1650 550 -600 500 -600 550 -600 500 -550 600 -550 500 -650 500 -1600 550 -600 550 -600 500 -1650 550 -1600 550 -1650 550 -1600 550 -1650 550 -600 500 -1650 550 -1600 550 -600 550 -550 500 -600 550 -600 550 -600 500 -600 500 -1650 550 -1650 550 -600 450 -1700 500 -1650 500 -1700 500 -1650 500 -1650 600 -600 450 -600 550 -1600 550 -600 550 -600 500 -600 500 -600 500 -650 500 -1650 550 -600 500 -1650 550 -600 500 -1650 550 -600 500 -600 500 -1650 500 -650 500 -1650 550 -600 500 -1600 600 -600 500 -1600 600 -1600 550

A/C Midea
3BC3AD86
Unknown encoding: 3BC3AD86 (32 bits)
Raw (100): -19532 4350 -4350 500 -1600 550 -550 550 -1600 550 -1550 650 -450 550 -500 550 -1600 550 -550 550 -500 550 -1650 500 -550 550 -550 500 -1600 550 -1600 550 -550 550 -1600 600 -500 500 -550 550 -1600 500 -1600 550 -1600 550 -1600 550 -1650 500 -1600 600 -1550 550 -1600 550 -550 500 -550 550 -500 550 -550 550 -550 500 -550 550 -550 600 -500 500 -1600 550 -550 500 -550 550 -550 500 -550 550 -500 550 -1600 550 -1600 550 -550 550 -1600 550 -1550 550 -1600 550 -1600 550 -1600 550


Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3219
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Certamente que não é isto... mas no primeiro exemplo que colocaste, tinhas valores positivos... aqui tens valores negativos.

Esse 0xfffff está definido no código:

Code:
// Decoded value for NEC when a repeat code is received
#define REPEAT 0xffffffff

Será que o protocolo é o NEC?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Certamente que não é isto... mas no primeiro exemplo que colocaste, tinhas valores positivos... aqui tens valores negativos.

Esse 0xfffff está definido no código:

Code:
// Decoded value for NEC when a repeat code is received
#define REPEAT 0xffffffff

Será que o protocolo é o NEC?

Caros amigos, finalmente consegui. Mudei o "_GAP" de 5000 para 50000.

Obtive o código :

unsigned int raw[198] = {6050,7350,500,1650,550,1600,550,1650,500,1650,600,1600,550,1600,550,1650,500,1650,550,600,550,600,500,600,500,600,500,600,500,650,500,600,500,600,550,1650,500,1650,550,1600,550,1650,550,1600,550,1650,550,1650,500,1650,500,650,450,650,500,600,550,600,500,600,550,550,550,600,500,600,550,1600,550,1600,550,1650,500,1650,600,1600,550,1600,550,1650,500,1650,550,600,550,600,500,600,550,550,500,650,450,650,500,600,550,550,550,1650,500,1650,550,600,500,1650,550,1600,550,1650,500,1650,550,1650,550,600,500,600,500,1650,550,600,500,600,550,550,550,600,500,600,500,1650,550,600,500,1650,550,1600,550,1650,500,650,450,1700,550,1600,550,600,500,1650,550,600,500,600,550,600,500,1600,550,600,550,600,500,600,500,1650,550,600,500,1650,500,600,550,1650,500,600,500,650,500,1650,500,650,450,1650,600,550,500,1650,550,600,550,1600,550,1600,550,7300,550,};
irsend.sendRaw(raw,198,38);

O motivo do código ser grande é que o A/C envia todas as informações a cada vez que você pressiona o botão, Velocidade, temperatura, modo e outros mais.

Agradeço a todos pela ajuda.

@bubulindo
@Gustavo_Murta
Logged

'round the world...
Offline Offline
Faraday Member
**
Karma: 42
Posts: 3219
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

E isso funciona agora para ambos os AC?
Logged

Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E isso funciona agora para ambos os AC?


Este código é o de ligar o da sala, mas capturei o dos quartos também, e funcionam perfeitamente.
Logged

Aracaju, SE, Brasil
Offline Offline
Sr. Member
****
Karma: 4
Posts: 323
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Agora é decifrar o código para poder mandar comandos para controlar a temperatura, funções, direção do vento... smiley
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 37
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

DiegoCarrilho

vc so modificar o valor do _GAP? tem alguma diferença entre o mega e o uno?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 4
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

E isso funciona agora para ambos os AC?


Este código é o de ligar o da sala, mas capturei o dos quartos também, e funcionam perfeitamente.

Ola Diego, percebi que você conseguiu resolver seu problema com a leitura do controle do ar condicionado, e eu estou querendo começar a fazer algo com o arduino na mesma ideia que a sua, tem como me falar o que você usou para fazer o projeto, como você fez para capturar os codigos do infra?

Obrigado pela atenção!
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 9
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

DiegoCarrilho

vc so modificar o valor do _GAP? tem alguma diferença entre o mega e o uno?

no próprio sketch existe um comentário do autor falando sobre o _GAP, portanto acredito que deve funcionar tanto para o UNO como para o MEGA.

Como o controle do A/C envia sempre todos os parâmetros, o Arduíno não conseguia receber o código raw por completo.
Logged

Pages: [1] 2   Go Up
Jump to: