Problema com IR transmitter junto com RF - Automação Residencial

Então galera, eu estou fazendo um projeto de automação residencial como TCC do curso de SI, ele deve funcionar da seguinte forma: 

O problema que estou tendo é no Arduino 3 Uno, no qual esta conectado um transmissor IR, quando eu tendo enviar o sinal IR para a TV apos ter recebido um comando do Arduino 1 Mega informado qual o sinal a ser enviado, ele envia um sinal diferente do que esta no código fonte. 

Codigo Arduino 3 Uno:

#include <IRremote.h>
#include <IRremoteInt.h>
#include <VirtualWire.h>

byte message[VW_MAX_MESSAGE_LEN]; // Armazena as mensagens recebidas
byte msgLength = VW_MAX_MESSAGE_LEN; // Armazena o tamanho das mensagens
char MsgRf[10];
String sMsgRf;
IRsend irsend;
int turn = 1;

void setup() {
Serial.begin(9600);
vw_set_rx_pin(5);
vw_setup(2000);
vw_rx_start();
vw_set_tx_pin(8);
vw_setup(2000);

}

void loop() {
   sMsgRf = "";
   uint8_t message[VW_MAX_MESSAGE_LEN];
   uint8_t msgLength = VW_MAX_MESSAGE_LEN;

// Recebe Msg via RF do Arduino Principal
   if (vw_get_message(message, &msgLength)) {
      Serial.print("Recebido: ");
      for (int i = 0; i < msgLength; i++) {
         sMsgRf.concat(char(message[i]));
      }
   }

   if(sMsgRf == "TvL"){
      char Resposta[10] = "Tv Ligada";
      EnviaRF(Resposta);
      irsend.sendRC5(0x80c, 12);
   }
}

void EnviaRF (char *message){
   vw_send((uint8_t *)message, strlen(message));
   vw_wait_tx();
   }

Coloquei um outro Arduino para verificar qual o sinal enviado por esse com o transmissor IR, e o código recebido foi:

970EB328
Unknown encoding: 970EB328 (32 bits)

Porem se eu utilizar o código exemplo IRsendDemo fornecido pela biblioteca IRremote, ele envia o IR certinho e funciona na TV :(

alguém saberia o porque isto esta acontecendo? e como eu posso contornar esse problema :D

Exibições: 795

Responder esta

Respostas a este tópico

Qual TV ? Qual Protocolo IR ?

Descodificando Controle Remoto infravermelho:

http://labdegaragem.com/profiles/blogs/6223006:BlogPost:315534

Opa, blz? 

É uma TV da Philips de 42 pol agr o modelo exato eu n sei :(

o protocolo que me retornou foi RC5, usando o sketch IRrecvDump que vem junto a biblioteca IRremote

Correto , a TV Phillips usa o protocolo RC5. 

Mas não entendi a sua aplicação. Você deseja fazer um repetidor de Controle de IR ? 

Qual a comunicação usada entre os Arduinos?

Minha sugestão para testar o Controle remoto da Phillips:

http://forum.arduino.cc/index.php?topic=8170.0

Pois é eu me expressei mal ali em cima mesmo :)

A aplicação é o seguinte, o meu aplicativo Android ira se comunicar com o Arduino Mega via socket, esse arduino mega vai processar o dado recebido e através de um transmissor RF ira mandar para os demais arduino (dependendo do que ele recebeu), se o comando for por exemplo TvL (ligar a TV), ele ira enviar para o arduino uno, e este ira enviar o comando para a TV através de um transmissor IR.

Uma pergunta..

todos os demais comandos IR estão funcionando com este mesmo arduino?

Já tentei usar estas mesmas bibliotecas ao mesmo tempo e não consegui,..

uma alternativa pouco eleante, seria colocar mais um uno em paralelo a este, com comunicação serial por exemplo apenas com as bibliotecas IR. (eu falei que seria pouco elegante)

Radio - "UNO 3" - Serial - Novo Uno 4 - IR - TV 

Hmmm, é uma boa ideia... mas como você mesmo falou, fica meio deselegante, ainda mais para um TCC. Mas se eu não encontrar outra alternativa vai ter que ser assim mesmo :)

Você tentou igualzinho ao code do exemplo?? 

Lembre-se quando se aperta o botão do controle o mesmo código é enviado varias vezes enquanto estiver pressionado

for (int i = 0; i < 3; i++) {
irsend.sendRC5(0x80c, 12); // power code TV da Philips de 42 pol
delay(100);

yep, fiz um teste aqui e coloquei outro arduino com um receptor IR para ver o Uno estava mandando... e utilizando esse codigo ai retornou isso:

Unknown encoding: 530DB67C (32 bits)
Raw (24): -4150 1250 -1150 1250 -1150 2500 -1150 1250 -1200 1200 -1200 1200 -1150 1250 -1150 1250 -1150 1250 -2350 1200 -1200 2350 -1200 1200
530DB67C
Unknown encoding: 530DB67C (32 bits)
Raw (24): 2308 1250 -1200 1200 -1200 2400 -1200 1200 -1150 1200 -1200 1200 -1200 1200 -1200 1200 -1150 1250 -2350 1200 -1200 2400 -1150 1250
530DB67C
Unknown encoding: 530DB67C (32 bits)
Raw (24): 2358 1250 -1150 1200 -1200 2350 -1250 1150 -1250 1200 -1150 1250 -1150 1200 -1200 1200 -1200 1150 -2400 1250 -1150 2400 -1200 1150

Totalmente diferente do que deveria retorner :D. Acho que n tem como usar RF junto com IR send mesmo, pq se eu faço esse código ai sem a biblioteca VirtualWire ele funciona de boa :(

HUMMMMM... você procurou na net???

noInterrupts();    // <------  Use this ----------
vw_rx_stop();
vw_setup(0);
delay(500);

for (int i = 0; i < 3; i++) {
irsend.sendRC5(0x80c, 12); // power code TV da Philips de 42 pol
delay(100);

}

delay(500);
vw_rx_start();
interrupts();   

Depois fala se funcionou!!!

Deu certo Alexandre \o\ /o/ \o\ /o/  era conflito mesmo... 

Mt obrigado pela ajuda de vcs...

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço