Como para: Receptor de Controle Remoto USB
Agora que ouvimos mp3s, além de visualizar xvids ou x264s, um computador é o centro de diversão em pelo menos um espaço de muitas casas. A menos que você tenha um HTPC especial, no entanto, você provavelmente está preso usando o teclado para pausar, modificam o volume, bem como o avanço rápido através de Mythbusters incômodo recapitular. O controle remoto do PC recebe variedade de projetos de porta serial antigos (que tem um?) Para dispositivos USB não suportados por software proeminente. Neste how-to nós estilamos um receptor infravermelho USB que imita um protocolo típico suportado por software para Windows, Linux, bem como Mac. Temos um guia completo para o protocolo Plus Schematics, bem como uma lista de peças.
Visão geral do projeto
Controles remotos transmitem dados em um feixe infravermelho modulado. Um receptor infravermelho IC separa o feixe modulado em um fluxo limpo de 0s, bem como 1s. O fluxo de dados é decodificado por um microcontrolador, bem como enviado para um computador em uma conexão USB. O software processa os códigos, bem como acionadores de ações no computador.
Fundo
Receptores infravermelhos de computador
O estilo mais antigo do receptor de infravermelho do PC usa um receptor IC para alternar um pino de porta serial, tipicamente DCD. Este estilo provavelmente originou-se na Usenet, assim como ainda é o mais proeminente na web: engadget, instructables, etc. Estes não são verdadeiros dispositivos seriais, pois não enviam dados para o PC. Em vez disso, um programa de programa de computador pulsa na porta serial, bem como desmodula o sinal. Este é um design muito fácil, no entanto, depende do acesso direto do ganho de interrupção para, bem como precisão de tempo que não é mais oferecido no Windows. Os usuários do Linux ou Mac podem tentar este receptor, se você ainda tiver uma porta serial. Não conseguimos que esse tipo de receptor funcionasse com a porta serial em um PC contemporâneo do Windows XP, bem como não espere o tempo preciso para transferir através de um conversor serial USB->.
Alguns receptores infravermelhos muito mais avançados são dispositivos de porta seriais verdadeiros que determinam ou decodificam sinais infravermelhos antes de enviar dados para o computador. O UIR / IRMAN, bem como o UIR2 integrar uma imagem tradicional 16f84, no entanto, não fornece firmware e / ou código-fonte. Esses dispositivos devem trabalhar em um computador contemporâneo, através de um conversor serial USB-> se necessário. O USBINTY, bem como o USBirboy, os dispositivos USB nativos, no entanto, falta amplo suporte.
Software do receptor
Independentemente do tipo de receptor, o computador precisa de um programa para ouvir comandos remotos de entrada, bem como convertê-los em ações no computador. O Linux, assim como os usuários do Mac, o LIRC, que suporta muitos tipos diferentes do receptor. Os usuários do Windows são um pouco menos afortunados. WinLirc é uma porta do Windows abandonada de LIRC para facilitar os receptores de porta serial baseados em interrupções; WinLirc foi desenvolvido pela última vez em 2003. A viga foi originalmente um utilitário de automação de PC freeware, no entanto, acabou sendo dispendioso bloatware com um teste de 30 dias. Felizmente, a última versão do freeware da viga (3.2.9b) ainda é oferecida para download.
Trabalhando com protocolos remotos de IR
Decodificação de sinais de IR.
Controles remotos que codificam comandos no espaçamento ou no tempo de um Pulso de Provedor de 38kHz, [San Bergmans] tem uma explicação dos princípios envolvidos. Um receptor infravermelho IC separa o fluxo de dados da transportadora. Nossa tarefa é decodificar o fluxo de dados com um microcontrolador. Existem dezenas de protocolos de controle remoto, no entanto, o RC5 de Phillips é generalizado, bem como normalmente usado por amadores.
O RC5 é fluxo de 14 bits de comprimento igual de 1,778ms por bit. Um pulso durante a primeira metade do tempo do bits representa 0, um pulso na segunda metade representa 1. Este plano é chamado de codificação de Manchester.
Utilizamos um analisador lógico para dar uma olhada na saída de um controle remoto WIntv da Gopauge, um remoto RC5 conhecido. O diagrama mostra duas prensas do botão 1, bem como duas prensas do botão 2; Observe que a saída é invertida, bem como a codificação do Manchester é para trás a partir da descrição acima.
Os primeiros dois times dos dois bits são iniciados, seguidos por um bit de alternância. O bit de alternância inversa cada vez que um botão é pressionado para que o receptor possa informar a diferença entre uma espera, bem como uma prensa repetida. Os próximos 5 bits são o endereço (0b11110 = 0x1e), seguido pelo comando (0b000001 = 0x01, 0b000010 = 0x02). Uma extensão compatível com o RC5 usa o segundo start bit como bit de comando 7.
Representando códigos remotos para o computador
Olhando para projetos anteriores, vimos três métodos gerais de comunicar comandos remotos para um computador:
Os receptores específicos do protocolo decodificam um protocolo, bem como enviar comandos decodificados reais para o PC
Um muito mais tipo geral de receptor passa o tempo, bem como o espaçamento de cada pulso, bem como envia a forma de onda completa para o PC para análise.
Alguns receptores produzem um hash distinto para um sinal, no entanto, não incluem dados suficientes para recriar completamente a forma de onda.
Enquanto nossa preferência é para o método General Hash, nosso único remoto usa RC5 comowell as it was a lot more fascinating to develop an RC5 particular decoder. We explain modifications for a a lot more general version in the firmware section.
Computer interface protocol
We didn’t want to write our own receiver software or driver, so we looked for an existing, well recognized communication protocol to imitate. The UIR/IRMAN/IRA/CTInfra/Hollywood+ type receiver is supported by Girder as well as LIRC, as well as uses a easy serial protocol with handshake:
The gadget is initialized by the DTS as well as DTR pins of the serial port. We don’t have these as well as don’t care.
The computer sends “IR”, with an optional delay. The gadget replies “OK”. We’ll just send “OK” on every “R”
Remote control codes are sent as a distinct six byte hash. We’ll decode an RC5 signal as well as send the actual values, however a generic hash might be used instead.
This protocol is for a serial port device, however our USB receiver will appear as a virtual serial port as well as the program won’t understand the difference.
Hardware.
Click right here for a full size schematic (png). Our receiver is based on a USB enabled picture 18F2455 microcontroller, the smaller, less expensive version of the 18F2550. The 18F household is programmable with the hobbyist preferred JDM-style programmers if a diode is used to decrease VPP to a risk-free level. The picture gets one decoupling capacitor (C1), as well as a diode (D1) as well as resistor(R1) on the ICSP programming header. We exposed the serial port on a pin header for debugging or a mixed USB/serial port version using a MAX RS232 transceiver IC.
The USB peripheral requires a 20MHz outside clock (Q1, C5,6), as well as a .220uF capacitor. We faked the capacitor using 2 x .1uF decoupling capacitors (C2,3). A 3mm LED (LED1) as well as a 330ohm present limiting resistor (R2) show USB connection status.
We used a TSOP-1738 infrared receiver IC which calls for a 4.7uF decoupling capacitor (C4). If you can’t discover this specific IC, any type of receiver noted right here ought to work. The TSOP-1738 output is the inverse of the received signal, it pulls to ground when a pulse is detected, so a pull-up resistor (R3) holds the pin high when no signal is present. check if you use a different receiver, you may requirement to use a pull-down resistor as well as reverse the Manchester decoding routine in the firmware.
The circuit draws power from the USB bus, so we don’t requirement an extra power supply.
Lista de peças
Click right here for a full size placement diagram (png). The PCB style is 100% through-hole as well as single sided. The schematic as well as PCB were made with Cadsoft Eagle, freeware versions are offered for many platforms. All the files are included in the job archive (zip).
Papel
Descrição
Ic1.
PIC 18F2455
–
28 pin .300 socket
C1,2,3
0.1uF capacitor
C4
4.7uF capacitor
C5,6
27pF capacitor (15pF may be better)
D1
1N4181 diode
Q1.
20MHz crystal
R1,3
10K ohm resistor
R2.
330 ohm resistor
TSOP
TSOP1738 (obsolete, try TSOP1138)
USB
USB ‘B’ plug, female
SER
.1″ pin header
ICSP
.1″ pin header
Firmware.
The firmware is written in C using Microchip’s complimentary presentation C18 compiler. Firmware as well as source are included in the job archive (zip).
We used version 2.3 of Microchip’s USB stack to produce a USB serial port using the default chauffeurs already offered on many systems. The USB stack has easy functions to enumerate the USB gadget as well as transfer data between gadget as well as host. It only took a few pin changes to get the CDC presentation working on our custom-made hardware.
Our implementation of the UIR/IRMAN/IRA/CTInfra/Hollywood+ protocol simply responds to the letter ‘R’ with ‘OK’. This ought to satisfy the handshake requirements of any type of implementation of this protocol.
We chose to specifically decode RC5 (and RC5x) since it’s a widely used protocol, as well as the only type of remote we have to work with. many of the decoding is done in the interrupt handler:
The very first signal modification triggers an interrupt that starts a 889us (one-half bit period) timer.
On each timer interrupt, one-half of a Manchester coded bit is sampled.
Every other interrupt the measurements are compared, as well as the bit value is calculated to be 0, 1, or an error. Errors reset the decoding routing.
At the end of each transmission the address as well as command bytes are decoded, as well as sent to the host with 4 buffer bytes(0). We discard the toggle bit since it would confuse the PC software into thinking every other press was a distinct code. We append the second start bit to the command bit for RC5x compliance; this just adds 0x40 to non RC5x remote codes.
A a lot more general version can be made by removing the Manchester coding step (3), as well as sending 48 sample bits (all 6 bytes) to the computer.
Installing the USB infrared receiver
Most operating systems already have chauffeurs that support aGadget de porta serial virtual como o receptor. O Windows XP possui os drivers necessários, no entanto, precisa de assistência de dados .inf para associá-los adequadamente ao nosso dispositivo.
O Windows mostrará a nova caixa de diálogo de hardware na primeira vez que você conectará no receptor. Selecione para usar um motorista feito sob encomenda, bem como aponte para os dados .inf incluídos no Arquivo de Job (ZIP). Isso liga o gadget a um motorista já incluído no Windows, bem como adiciona o receptor como uma porta COM. Você pode verificar o número da porta COM no painel de controle.
O Mac, assim como os usuários do Linux, podem usar o receptor com LIRC, no entanto, os usuários do Windows serão enfrentados com a opção da viga antiga, freeware ou a nova versão de 30 dias de avaliação. Utilizamos a versão freeware da viga, no entanto espero que vocês que vocês possam sugerir uma grande e open source alternam que nós esquecemos.
Independentemente do software de controle do lado do computador que você usa, configure-o para um receptor UIR / IRMAN / IRA / CTINFRA / Hollywood +, bem como entrar na porta COM ou endereço serial atribuído a ele. Nosso receptor é igualmente compatível com qualquer tipo de opções de protocolos, como ‘virar rápido’, bem como ‘skip uir init check’, que encurta ou se livrar do aperto de mão “IR” -> “OK”. Agora teste o receptor, bem como adicione um controle remoto de acordo com a documentação do seu software.
Interface terminal manual, bem como depuração
Se você tiver um problema com o receptor, ou você está curioso, tente interface de um terminal serial. Nós realmente gostamos do terminal serial em Hercules. Defina a porta COM direita, no entanto, a velocidade, bem como as configurações são ignoradas pelo driver de porta serial USB.
Um financiamento ‘r’ vai oportunamente o receptor para responder ‘OK’. Os códigos RC5 são devolvidos como bytes brutos, portanto, certifique-se de definir seu terminal para mostrar valores hexadecimais em vez de traduzê-lo como texto ASCII. O primeiro byte é o byte de endereço RC5 (0x1e), seguido pelo byte de comando (0x41), bem como depois quatro buffer 0s para aderir ao protocolo UIR / IRMAN. A imagem mostra o aperto de mão, bem como a saída de uma impressora curta nos botões 1,2, bem como 3.
Um utilitário de cortesia chamado Portmon Logs COM portuária atividade para revisão. Isso é útil para espionar os protocolos existentes do receptor, bem como depurar a interação do nosso hardware feito sob encomenda, bem como software fechado / proprietário. A imagem mostra a viga enviando a string de inicialização ‘IR’ (0x49,0x52), bem como o receptor Responder ‘OK’ (0x4f, 0x4b).
Levando mais longe
Nosso receptor compatível com RC5x segue um protocolo de interface amplamente utilizado. Há uma tonelada de possibilidades para recursos extras em um receptor infravermelho de código aberto:
Apoie todos os controles remotos através de um gerador de hash genérico, como o hardware original do UIR / Irman.
Adicione decodificadores de protocolo extra remoto, como RC6.
Suporta vários protocolos de interface configuráveis.
Implemente a porta serial I / O.
Armazene as opções de configuração no EEPROM, incluindo protocolo, modo de interface, opções de tempo, porta serial, etc.