Go Down

Topic: Problema ao decodificar controle remoto de A/C (Read 7767 times) previous topic - next topic

DiegoCarrilho

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.

Gustavo_Murta

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




bubulindo

E como ligaste o teu sensor?

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

DiegoCarrilho


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: [Select]

#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: [Select]

#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
  }
}

bubulindo

#4
Nov 04, 2013, 09:32 pm Last Edit: Nov 04, 2013, 09:37 pm by bubulindo Reason: 1
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: [Select]
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: [Select]
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.
This... is a hobby.

DiegoCarrilho


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: [Select]
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: [Select]
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.

DiegoCarrilho


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



bubulindo

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: [Select]
// Decoded value for NEC when a repeat code is received
#define REPEAT 0xffffffff


Será que o protocolo é o NEC?
This... is a hobby.

DiegoCarrilho


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: [Select]
// 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

bubulindo

This... is a hobby.

DiegoCarrilho


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.

LegendBR

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

lonG

DiegoCarrilho

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

murliky



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!

DiegoCarrilho


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.

Go Up