Arduino IR Learning Remote Control
This project is an ATmega328P based learning remote control such as are used for multimedia and other electronic consumer devices. The design supports 15 programmable buttons (extendable) and should support most IR protocols by accurately copying the IR signal, that is the carrier frequency, carrier bursts and pauses, from existing remote control units.
It has been tested up to 100 kHz (CPU Clock rate 16 MHz) which well exceeds the requirements of most IR systems which are usually fixed in the range of 30kHz to 56kHz. It should also have sufficient capacity (around 700bits / 85bytes per capture) to handle even the very long IR code sequences used, for instance, by some air conditioners.
out of the box
It has a special feature in that it does not use one of the standard IR receiver modules, for example from the Vishay TSOP range, for initial signal processing but simply uses its IR emitter LED also as a receiver using its photo voltaic effect.
This imposes high resource requirements on microcontroller because it has to handle the signal at the carrier frequency level (i.e. not demodulated) and means that the standard Arduino libraries for IR signal processing cannot be used. It also means that some interesting programming techniques were required to process and compress the IR data in real time.
The specification of the device, including the user interface, is based on a low cost commercial learning IR Remote device, the Chunghop L181, but with improvements to the data stream capture capacity and number of stored code sequences. The project idea came from an Arduino forum thread [Ref 1] where the initiator provided some detailed analysis of this product, including a schematic diagram and selected eeprom dumps from it.
The device can also be operated in a “scope only” mode, where it dumps the raw received data, that is the IR carrier frequency and each mark and space in the IR data stream in units of microseconds, to the serial console for analysis and possible copying into another application.
It has been built as shield for a low power configuration Arduino Uno clone. The component count is small, so the design is amenable to significant miniaturisation.
I found the project a very valuable learning experience, especially in pushing a relatively low performance MCU to its limits, trying to match the specification of devices with Application Specific Integrated Circuits (ASICs) or special IR specific peripherals using just a general purpose 8bit microcontroller.
All code and schematics are provided to enable any interested readers to duplicate this project.
The documentation, including schematic, is in the attached PDF file: IR_Learning_Remote_Control_V1_01.pdf
All software is in the attached zip file: IrLearner_v1_01P.zip
IR_Learning_Remote_Control_V1_01.pdf (1.21 MB)
IrLearner_v1_01P.zip (21.5 KB)