Articles Code About


USBRemote board

USBRemote is a USB infrared remote receiver designed to work with your computer, and is compatible with any infrared remote that uses the NEC protocol for transmission. The hardware and software is open source, as well as heavily documented, making it easy to build your own and understand exactly how it works.

It is the successor of the avremote project.


The hardware for USBRemote is basic and uses a very low amount of required components:

  1. 1 Atmel AVR ATMega328P MCU
  2. 1 infrared receiver/diode
  3. 1 20MHz crystal oscillator
  4. 2 68 Ohm resistors
  5. 1 2.2K Ohm resistor
  6. 2 3.6V zener diodes
  7. Misc. wiring
  8. USB cable

For complete information on the hardware, please see the schematic below, or see Github.

usbremote schematic


The firmware for USBRemote is written in C, and uses a custom library for NEC decoding, and uses the V-USB library to implement USB in software. Some AVR MCU's have hardware support for USB, but the ATMega328P does not and V-USB is a good solution. Data transfers between the device and PC are done using USB interrupt-in, which is designed for sporadic transferring of small amounts of data, where the bus is responsible for polling the device.

The host software is built using libusb, and allows for easy handling of devices and data transmission. It is written in C and currently runs on POSIX compatible systems, but can very easily be adapted to run on other systems such as Windows.

For more information and the source, please see the Github page, or contact me.

Source on Github