Taxa de erro muito alta ao receber sinal infravermelho

Garagistas,

 

Estou com alguns problemas ao montar arduinos que recebem códigos infravermelhos. Os sinais tem uma taxa de erros de recebimento muito alta. Já montei outros projetos que recebem sinal razoavelmente bem, mas ainda apresentam taxa de erro média e sensibilidade média.

Não consigo entender como o receptor é tão pouco sensível ao receber um sinal. Os meus aparelhos da sala, basta apenas um reflexo do sinal do controle na parede por exemplo que já funciona, enquanto o arduino as vezes preciso me levantar e ter linha visada perfeita para funcionar, e quando funciona...

 

Para tentar descobrir a origem do problema, estou usando esse código super simplificado que indica o protocolo e o código recebido. Carreguei o sketch em um duemillanove e liguei um dos receptores, mas o resultado foi pior ainda... Não conseguiu decodificar nada, a não ser as repetições FFFFFFFF do protocolo NEC

 

Eis o código:

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


const int RECV_PIN = 6;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
  Serial.begin(9600);
  irrecv.enableIRIn(); // Start the receiver
  irrecv.blink13(true);
  Serial.println("init");
}

void loop() {
  if (irrecv.decode(&results)) {
    if (results.decode_type == NEC) {
      Serial.print("NEC: ");
    } else if (results.decode_type == SONY) {
      Serial.print("SONY: ");
    } else if (results.decode_type == RC5) {
      Serial.print("RC5: ");
    } else if (results.decode_type == RC6) {
      Serial.print("RC6: ");
    } else if (results.decode_type == UNKNOWN) {
      Serial.print("UNKNOWN: ");
    }
    Serial.println(results.value, HEX);
    irrecv.resume(); // Receive the next value
  }
}

 

O que recebo na serial é isso:

init
UNKNOWN: 6BA470EF
NEC: FFFFFFFF
UNKNOWN: 4CB0FADD
NEC: FFFFFFFF
UNKNOWN: 24AE7D4F
NEC: FFFFFFFF
NEC: FFFFFFFF
NEC: FFFFFFFF
UNKNOWN: C503CECF
UNKNOWN: 25AE7EE0
UNKNOWN: 71ED18FC
UNKNOWN: DCB07354
UNKNOWN: A57305FD
NEC: FFFFFFFF
NEC: FFFFFFFF
UNKNOWN: 892614D9
NEC: FFFFFFFF
NEC: FFFFFFFF
UNKNOWN: 61AEB848
NEC: FFFFFFFF
NEC: FFFFFFFF
UNKNOWN: 60CFF56D

 

O protocolo desse controle em particular é NEC em todas as teclas, muitos dos "UNKNOWN" eram a mesma tecla pressionada várias vezes, porém teve um código totalmente diferente e aparentemente desconhecido.
O controle remoto não tem defeitos, pois uso o mesmo controle em outro aparelho e funciona perfeitamente

Eu tenho o palpite de que o problema pode ser esse componente de recepção que uso. Se não me engano é o TSOP1738.

O curioso é que no passado os meus projetos funcionavam muito bem e ultimamente tem dado muitos problemas.
Segue imagem:

Grato

Exibições: 2616

Responder esta

Respostas a este tópico

Eu ia dizer exatamente pra vc tentar com outro receptor...

Olá arthur,
Como você está alimentando o arduino? Pelo porta usb mesmo? A pouco tempo eu estava fazendo testes com um receptor de IR, e o mesmo apresentava bastante interferência que eu não sabia de onde. Quando alimentei o arduino com uma fonte externa as interferências sumiram. Tenta isso e vê se consegue algum resultado...

Eu liguei agora uma fonte de 12V na entrada mas não mudou absolutamente nada. O curioso é que como esse código mostra qualquer coisa que recebe, ele me parece que detecta de fato com facilidade que houve uma transmissão infravermelha, até com um alcance e angulo muito superiores, mas o problema é que ele 99,9% das vezes erra o código mesmo nas melhores situações de recebimento. Vocês que tiverem projetos com receptores infravermelhos que funcionem bem, poderiam me mandar fotos ou modelos de receptores bons?

Em paralelo a isso, no passado eu tinha criado um tópico aqui sobre Capturar sinal "RAW" Infravermelho, apesar de várias respostas que tive, eu jamais consegui obter o resultado desejado (controles de ar-condicionado nunca funcionaram com o arduino). É bem provável que a origem do meu insucesso venha do receptor que eu uso, não é?

Pessoal, vocês poderiam dizer quais são os sensores infravermelhos que vocês usam?

Sempre usei desses comuns, pretinhos. :)

http://www.soldafria.com.br/receptor-infravermelho-irm2638-p-3402.html

Ou recebe o sinal, ou não recebe. Nunca vi receber sinal errado.

Abraços!

já olhou o datasheet do receptor? qual a modulação que ele aceita? no datasheet tambem pede pra usar um resistor mais um capacitor para minimizar interferencia. 

Aqui há uma explicação para o provavel ocorrido, arduino post.

O mesmo assunto aqui.

Bom dia Arthur,

Pela data vc já deve ter achado a solução. Mas caso contrário, observe se o ambiente que você está realizando o teste não está iluminado por lâmpada fluorescente ou PL. Elas podem interferir na medição, pois emitem, além do espectro de luz visível, infravermelho. 

Apague a luz na hora do teste e boa sorte!

 

Eu levei isso em consideração na época, fiz os testes de dia e de noite e sem luz também. Eu terminei substituindo o sensor e melhorou, acho que eu estava com alguns defeituosos. Mas eu ainda fico impressionado com a falta de sensibilidade do arduino de uma forma geral para infravermelho. Todos os meus projetos com infravermelho só conseguem captar os sinais corretamente quando o controle de fato está apontado para o sensor sem muita tolerância ângular, o que é diferente de qualquer aparelho comercial onde até quando você aponta para a parede ele enxerga o reflexo e ainda interpreta o sinal corretamente. Já tentei até colocar um filtro infravermelho que tirei de um controle antigo na frente do receptor mas não adiantou.

Pela foto do seu prototipo vi que o sensor estava muito longe da placa. Nos aparelhos comerciais o sensor sempre esta muito próximo ao CI receptor pois a captação de ruido aumenta com o comprimento da fiação, que funciona como antena.  Se o receptor só consegue ler com o sinal diretamente apontado, provavelmente precisa de um amplificador de sinal. Este tipo de problema pode ser visualizado com um osciloscopio.

Também coloque um capacitor de 100nF e um de 1uF mais próximo do sensor possível..

Pela idade deste tópico, creio que o autor já tenha solucionado o problema (ou desistido). Mas este problema me parece relacionado ao receptor: a biblioteca IRRemote é feita, originalmente, para trabalhar a 38kHz. Se o receptor não for o TSOP1838, a freqüência de operação será diferente (exemplo, TSOP1830 com 30kHz, ou TSOP1848, com 48kHz). Assim, haverão muitos erros de decodificação.

Eu estou experimentando alguns problemas com experiências em IR, tenho um projeto que se utiliza de diversos transmissores e um receptor, cada transmissor com um código diferente. Os transmissores são canhões de Infravermelho, extremamente fortes, alimentados com 12v e com 36 LEDs infravermelhos, mas mesmo assim em alguns ambientes o sistema fica instável demais.

Eu trabalho em uma sala com pé direito baixo (2,50m), com 8 lâmpadas de 40W fluorescentes a cada 9 m². Seria uma interferência absurda, e o Arduino tem muita dificuldade em codificação destes sinais, recebendo-os a menos de 2 metros somente. Em ambientes externos ou com pé direito mais alto, o funcionamento é mais satisfatório.

Daí vão dizer "ah, é isso, as lâmpadas estão interferindo". No entanto, no mesmo ambiente, há uma TV Sony posicionada na parede, ao alto, próxima de 4 destas lâmpadas, e o pequeno controle remoto dela funciona mesmo do outro lado da sala, a quase 10 metros de distância, e sem erros: apertou o botão, está feito.

Alguém explica?

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço