Vous êtes sur la page 1sur 8

Biblioteca Remota Multi-Protocol infravermelho para o

Arduino
Nota para Arduino 1.0
Uma verso atualizada com 1,0 suporte est disponvel no github . As instrues de instalao
esto na parte inferior da pgina. Deixe-me saber se voc encontrar quaisquer problemas.
Voc quer controlar o seu Arduino com um controle remoto IR? Voc quer usar o seu Arduino
para controlar seu aparelho de som ou outros dispositivos? Esta biblioteca IR remoto permitelhe enviar e receber cdigos remotos IR em vrios protocolos. Ele suporta NEC, Sony SIRC,
Philips RC5, Philips RC6, e protocolos de matrias. Se voc quiser protocolos adicionais, eles
so simples de adicionar. A biblioteca pode at mesmo ser usado para gravar os cdigos de
seu controle remoto e re-transmitir-lhes, como um controle remoto universal mnima.

Para utilizar a biblioteca, baixar de github e siga as instrues de instalao no readme.

Como enviar
Esta biblioteca remoto infravermelho consiste em duas partes: IRsend transmite IR pacotes
remotos, enquanto IRrecv recebe e decodifica uma mensagem de IR. IRsend usa um LED
infravermelho ligado ao pino de sada 3. Para enviar uma mensagem, chamar o mtodo de
envio para o protocolo desejado com os dados para enviar e o nmero de bits a serem
enviadas. O examples/IRsendDemo esboo fornece um exemplo simples de como
enviar os cdigos:
#include <IRremote.h>
IRsend irsend;
void setup ()
{
Serial.begin (9600);
}
void loop () {
se (Serial.read ()! = -1) {
for (int i = 0; i <3; i ++) {
irsend.sendSony (0xa90, 12);
atraso (100);
}
}
}

// Cdigo de energia TV Sony

Este esboo envia um poder TV Sony on / off cdigo sempre que um personagem enviado
para a porta serial, permitindo que o Arduino para ligar a TV ligada ou desligada. (Note-se que
os cdigos da Sony deve ser enviado 3 vezes de acordo com o protocolo.)

Como receber
IRrecv usa um detector infravermelho conectado a qualquer pino de entrada digital.
O examples/IRrecvDemo esboo fornece um exemplo simples de como receber os
cdigos:
#include <IRremote.h>
int RECV_PIN = 11;
IRrecv irrecv (RECV_PIN);
decode_results resultados;
void setup ()
{
Serial.begin (9600);
irrecv.enableIRIn ();
}

// Iniciar o receptor

void loop () {
if (irrecv.decode (e resultados)) {
Serial.println (results.value, HEX);
irrecv.resume (); // Receba o prximo valor
}
}

O IRrecv classe realiza a decodificao, e inicializado


com enableIRIn() . A decode() mtodo chamado para ver se o cdigo foi
recebida; em caso afirmativo, ele retorna um valor diferente de zero e coloca os resultados
no decode_results estrutura. (Para mais informaes sobre esta estrutura, consulte
o examples/IRrecvDump esboo.) Uma vez que um cdigo foi decodificado,
o resume()mtodo deve ser chamado para voltar a receber cdigos. Note-se
que decode() no bloqueia; o esboo pode realizar outras operaes enquanto espera por
um cdigo, pois os cdigos so recebidos por uma rotina de interrupo.

Configurao de hardware
A biblioteca pode usar qualquer um dos sinais de entrada digitais para receber a entrada a
partir de um mdulo receptor de 38KHz. Ele foi testado com a Radio Shack 276-640 receptor
infravermelho eo PanasonicPNA4602 . Simplesmente poder fio ao pino 1, terra no pino 2, ea
sada pino 3 para um pino de entrada digital Arduino, por exemplo 11. Estes receptores
fornecer uma sada invertida nvel lgico filtrada e demodulado;voc no pode apenas usar um
fotodiodo ou fototransistor. Eu encontrei esses detectores tem bom alcance e trabalhar
facilmente em uma sala.

Para sada, ligar um LED IR e resistor apropriado para PWM sada pino 3. Certifique-se a
polaridade do LED correto, ou no vai iluminar - os longos positivo. Eu usei um LED NTE
3027 (porque isso o que foi muito til) e 100 ohm resistor; o intervalo de cerca de 15
metros. Por faixa adicional, voc pode ampliar a sada com um transistor.

Algumas informaes bsicas sobre cdigos de IR


Uma IR controle remoto funciona virando o LED on e off em um padro particular. No entanto,
para evitar quaisquer interferncias de fontes de IR, tais como luz do sol ou luzes, o LED no
est ligada de forma constante, mas ligado e desligado com uma frequncia de modulao
(normalmente 36, 38, ou 40 KHz). O momento em que um sinal modulado est a ser enviado
ser chamado uma marca, e quando o LED est desligado ser chamado um espao.
Cada tecla no controlo remoto tem um cdigo particular (tipicamente 12 a 32 bits) a ele
associado, e transmisses este cdigo quando a tecla pressionada. Se a tecla for
pressionada, o controle remoto geralmente transmite repetidamente o cdigo da chave. Para
um controle remoto NEC, um cdigo de repetio especial enviada como a chave est

pressionado, ao invs de enviar repetidamente o cdigo.Para a Philips RC5 ou RC6 controles


remotos, um pouco no cdigo alternado a cada vez que uma tecla pressionada; o receptor
usa esse bit de alternncia para determinar quando uma tecla pressionada para baixo pela
segunda vez.
Na extremidade de recepo, o detector de IR demodula o sinal e emite um sinal de nvel
lgico que indica se est a receber um sinal, ou no. O detector IR vai funcionar melhor
quando sua frequncia coincide com frequncia do remetente, mas na prtica isso no importa
muito.
A melhor fonte que eu encontrei para obter detalhes sobre os vrios tipos de cdigos de IR
base de conhecimento SB IR .

Manuseio cdigos matriasA biblioteca oferece suporte para envio e recebimento de matrias-duraes. Este destina-se
principalmente para a depurao, mas tambm pode ser usado para os protocolos a biblioteca
no executar ou para fornecer funcionalidade de controle remoto universal.
Os dados brutos para as medidas de IR recebidas a durao de vagas sucessivas e marcas
em 50us carrapatos. A primeira medida a lacuna, o espao antes de iniciada a
transmisso. A ltima medida a nota final.
Os dados brutos para o envio de IR detm a durao de marcas sucessivas e espaos em
microsegundos. O primeiro valor a primeira marca, e o ltimo valor a ltima marca.
Existem duas diferenas entre os tampes de matrias para o envio e para a recepo. Os
valores de buffer de envio so em microssegundos, enquanto a receber valores tampo esto
em 50 microssegundos carrapatos. O buffer de envio comea com a durao do primeiro sinal,
enquanto que a memria intermdia de recepo iniciada com a durao do intervalo de
espao antes da primeira marca. Os formatos so diferentes, porque eu considerava-o til para
a biblioteca para medir as lacunas entre as transmisses, mas no til para a biblioteca para
fornecer essas lacunas durante a transmisso. Para receber, 50us granularidade suficiente
para a decodificao e evita transbordamento das lacunas, enquanto para transmitir, 50us
granularidade mais de 10% de erro to granularidade 1us parecia melhor.

A obteno de cdigos para seu controle remoto


A maneira mais fcil de obter os cdigos para trabalhar com o seu dispositivo usar esta
biblioteca para decodificar e imprimir os cdigos de seu controle remoto existente.
Vrias bibliotecas de cdigos esto disponveis on-line, muitas vezes em formatos
proprietrios. O projeto de controle remoto Linux Infrared ( LIRC ), no entanto, tem um formato
aberto para descrever cdigos para muitos controles remotos. Note-se que mesmo se voc
no consegue encontrar cdigos para o seu modelo exato dispositivo, um determinado
fabricante geralmente usam os mesmos cdigos para vrios produtos.

Tenha em ateno que outras fontes podem ser inconsistentes em como eles lidam com estes
protocolos, por exemplo, a inverso da ordem, lanando 1 e 0 bits, fazendo start bits explcita,
caindo esquerda ou direita bits, etc. Em outras palavras, se os rendimentos irRemote
biblioteca de cdigos diferentes do que voc encontrar listados em outros lugares, essas
inconsistncias so provavelmente o porqu.

Detalhes da biblioteca recebe


A biblioteca IRrecv consiste de duas partes. Uma rotina de interrupo chamado a cada 50
microssegundos, mede o comprimento das marcas e espaos, e salva as duraes em um
buffer. O usurio chama uma rotina de decodificao para decodificar as medies em buffer
para o valor do cdigo que foi enviado (tipicamente 11-32 bits).
A biblioteca de decodificao tenta descodificar protocolos diferentes em sucesso, parando se
um bem-sucedido. Devolve uma estrutura que contm os dados em bruto, os dados
descodificados, o nmero de bits nos dados descodificados, e o protocolo utilizado para
descodificar os dados.
Para decodificao, a macro JOGO determinar se a marca ou o espao de tempo medido
aproximadamente igual ao tempo esperado.
O RC5 / 6 decodificao um pouco diferente dos outros porque os bits RC5 / 6 codificam com
marca + espao ou espao + marca, ao invs de por duraes de marcas e espaos. O
mtodo auxiliar getRClevel divide as duraes e recebe o nvel de marca / espao de um nico
intervalo de tempo.
Para transmisses repetidas (boto pressionado), o cdigo de decodificao ir devolver o
mesmo valor decodificado mais e mais. A excepo a NEC, que envia um cdigo especial de
repetio, em vez de repetir a transmisso do valor. Neste caso, a rotina de descodificao
retorna um valor especial REPETIO.
Em mais detalhe, o cdigo de interrupo do receptor chamado cada vez que os estouros
timer1, que est previsto para acontecer depois de 50 microssegundos. A cada interrupo, o
status de entrada verificada eo contador temporizador incrementado. Os tempos de
interrupo de rotina as duraes das marcas (que recebem um sinal modulado) e espaos
(qualquer sinal recebido), e registra as duraes em um buffer. O primeiro perodo o
comprimento do intervalo antes de iniciada a transmisso. Isto seguido por uma alternncia
de marca e espaciais medies. Todas as medidas esto em "tiques" de 50 microssegundos.
A rotina de interrupo implementada como uma mquina de estado. Comea em
STATE_IDLE, que aguarda o gap de acabar. Quando uma marca recebido, ele move-se para
que STATE_MARK vezes a durao da marca. Em seguida, ele alterna entre STATE_MARK e
STATE_SPACE para marcas do tempo e espaos. Quando um espao de tempo
suficientemente longo recebido, o estado muda-se para STATE_STOP, indicando uma
transmisso completo recebido. A rotina de interrupo continua a cronometrar o intervalo,
mas bloqueia neste estado.

O STATE_STOP usado aa bandeira para indicar para a rotina de decodificao que uma
transmisso completa est disponvel. Quando o processamento feito, o mtodo resume ()
define o estado de STATE_IDLE assim a rotina de interrupo pode comear a gravar a
prxima transmisso. H algumas coisas a serem observadas aqui. Gap tempo continua
durante STATE_STOP e STATE_IDLE assim uma medio precisa do tempo entre as
transmisses podem ser obtidas. Se resume () no chamado antes do incio da prxima
transmisso, a transmisso parcial ser descartado. A motivao por trs do stop / currculo
para garantir o buffer de recepo no substitudo, enquanto ele ainda est sendo
processado;depurao torna-se muito difcil, se o buffer est mudando constantemente.

Detalhes da biblioteca envio


O cdigo de transmisso direta. Para garantir frequncias de sada e ciclos de trabalho
preciso, eu uso o timer PWM, ao invs de atraso loops para modular a sada de LED com a
frequncia adequada. (Veja o meuArduino PWM Secrets artigo para obter mais detalhes sobre
os temporizadores PWM.) No nvel baixo, enableIROut configura o temporizador para a sada
PWM no pino 3 com a frequncia adequada. O mtodo de interrogao () envia um sinal de
ativar a sada PWM e retardar o tempo especificado. O mtodo de espao () envia um espao
desativando sada PWM e retardar o tempo especificado.
A biblioteca irRemote trata os diferentes protocolos como se segue:
NEC: 32 bits so transmitidos, bit mais significativo em primeiro lugar. ( detalhes do protocolo )
Sony: 12 ou mais bits so transmitidos, bit mais significativo em primeiro lugar. Tipicamente, 12
ou 20 bits so utilizados. Note-se que o protocolo oficial o bit menos significativo
primeiro. ( detalhes do protocolo ) para obter mais detalhes, eu escrevi um artigo que descreve
o protocolo Sony com muito mais detalhe:Compreender cdigos remotos Sony IR .
RC5: 12 ou mais bits so transmitidos bit mais significativo em primeiro lugar. A mensagem
comea com os dois bits de arranque, que no fazem parte dos valores de cdigo. ( detalhes
do protocolo )
RC6: 20 (tipicamente) bits so transmitidos, bit mais significativo em primeiro lugar. A
mensagem comea com um pulso lder, e um bit de incio, que no faz parte dos valores de
cdigo. O quarto bit transmitido de largura dupla, uma vez que o bit de reboque. ( detalhes
do protocolo )
Para a Sony e RC5 / 6, cada transmisso deve ser repetido trs vezes, conforme especificado
no protocolo.O cdigo de transmisso no implementa a bit RC5 / 6 alternncia; que at o
chamador.

A adio de novos protocolos


Os fabricantes tm implementado muitas mais protocolos que esta biblioteca suporta. A adio
de novos protocolos devem ser simples, se voc olhar para o cdigo da biblioteca
existente. Algumas dicas: ser mais fcil trabalhar com uma descrio do protocolo ao invs de

tentar inteiramente a engenharia reversa do protocolo. As duraes que voc recebe so


susceptveis de ser mais longo para marcas e mais curto para os espaos que o protocolo
sugere. fcil de ser off-by-one com o ltimo bit; o ltimo espao pode ser implcita.

Soluo De Problemas
Para torn-lo mais fcil de depurar problemas com a comunicao IR, tenho cdigo de
depurao opcional na biblioteca. Adicionar #define DEBUG para o incio do seu cdigo
para permitir a depurao de sada no console serial. Voc ter de apagar os .o arquivos e /
ou reiniciar o IDE para forar recompilao.
Problemas com a transmisso

Se o envio no est funcionando, primeiro verifique se o seu LED IR , na verdade, a


transmisso. IR geralmente vai aparecer em uma cmera cmera de vdeo ou telefone celular,
por isso esta uma maneira simples de verificar. Tente colocar o LED at o receptor; no
espere um monte de faixa a menos que voc amplificar a sada.
O prximo problema potencial se o receptor no entende o transmissor, por exemplo, se
voc est enviando os dados errados ou usando o protocolo errado. Se voc tem um controle
remoto, use esta biblioteca para verificar quais os dados que ele est enviando e qual o
protocolo que est usando.
Um osciloscpio ir proporcionar uma boa viso do que o Arduino ou um controle remoto est
transmitindo.Voc pode usar um fotodiodo IR para ver o que est sendo transmitido; conect-lo
diretamente ao osciloscpio e segure o transmissor at o fotodiodo. Se voc tiver um
osciloscpio, basta conectar o osciloscpio para o fotodiodo. Se voc no tem um osciloscpio,
voc pode usar um programa de osciloscpio placa de som como xoscope .
A Sony e RC5 / 6 protocolos especificar que as mensagens devem ser enviadas trs vezes. Eu
descobri que os receptores ir ignorar a mensagem se apenas enviou uma vez, mas vai
funcionar se ele enviado duas vezes. Para RC5 / 6, o bit de alternncia deve ser invertida
pelo cdigo de chamada em transmisses sucessivas, ou ento o receptor s pode responder
a um cdigo de uma vez.
Finalmente, pode haver problemas nesta biblioteca. Em particular, eu no tenho nada que
recebe RC5 / RC6, para que eles no foram testados.
Problemas com o recebimento

Se receptora no est funcionando, primeiro verifique se o Arduino , pelo menos, receber os


cdigos de matrias. O LED no pino 13 do Arduino piscar quando IR est sendo recebido. Se
no, ento provavelmente h um problema de hardware.
Se os cdigos esto sendo recebidos, mas no pode ser decodificado, certifique-se os cdigos
esto em um dos protocolos suportados. Se os cdigos devem ser descodificados se, mas no
so, alguns dos tempos medidos, provavelmente, no esto dentro da tolerncia de 20% dos

tempos esperados. Voc pode imprimir os valores mnimo e mximo esperado e comparar com
os valores medidos matrias.
O examples/IRrecvDump esboo vai despejar detalhes dos dados recebidos. O
mtodo de despejo despeja estas duraes mas converte-os em microssegundos, e usa a
conveno de prefixar uma medio de espao com um sinal de menos. Isso torna mais fcil
para manter a marca e medidas de espao em linha reta.
Sensores IR normalmente causam a marca a ser medido como mais que o esperado e o
espao para ser mais curto do que o esperado. O cdigo se estende marcas pela 100us para
explicar essa (o valor MARK_EXCESS). Voc pode precisar de ajustar os valores ou
tolerncias esperadas neste caso.
A biblioteca no suporta simultnea envio e recebimento de cdigos; transmissora ir desativar
o recebimento.

Aplicaes
Eu usei esta biblioteca para diversas aplicaes:

Controlar um sinal para pedestres com um controle remoto.

Dirijo a biblioteca para controles remotos arbitrrios .

Controlar meu aparelho de som atravs da web.

Eu usei esta biblioteca para implementar um "remoto universal" para gravar e cdigos
IR de reproduo.
Eu demonstro virando algo ligado e desligado via remota no meu fabricante de bolha
infravermelho projeto.
Utilizando a biblioteca para detectar rupturas IR feixe

Outros projetos que usam esta biblioteca

electrosthetics usado a biblioteca para controlar um receptor de home theater.


Arduino: Redefinindo a TV remoto - usando a biblioteca e um sensor de ultra-som para
controlar a TV por acenando sua mo.

Outros projetos Arduino IR


Eu fui inspirado por Construindo um controle remoto universal com um Arduino ; isso no faz
jus a ser um controle remoto universal, mas tem um monte de
informaes. O NECIRrcv biblioteca desde que o cdigo de tratamento de interrupo que eu
uso.

Vous aimerez peut-être aussi