Log
2024-11-08 Friday
2024-11-07 Thursday
At some point it dawned on me that IR remote controllers:
- are probably pretty simple devices with minimal finite-states
- has communication protocols that may or may not align with some industry standard
- are pretty easy to measure the signal
A first pass involved measuring it with an IR powermeter directly, with voltage queries, but the call-and-response rate is much too slow to do anything useful (likely on the order of 1ms). The photodiode itself (FDG-50) likely has a large enough bandwidth for me to perform a measurement, so that's what I did.
Attached the two-pin header into the probe points directly from the photodiode, then latched onto crocodile clips before measurement with an oscilloscope, using a 10MR shunt resistor and 1MR measurement impedance:
Some key facts (for the aircon remote):
- On-off keying is used
- Baudrate measured around 1.15kHz (clock frequency probably twice that, so 2.3kHz)
- Some internal modulation of the IR signal itself that is happening at 38kHz.
- 25kS/s sampling rate is sufficient to discriminate signals to a high accuracy
- The same signal is sent twice in succession.
- States are maintained in the remote control, e.g. ON and OFF signals are different in length.
Data is stored in lightstick/projects/_private/irremote
. A simple fixed clock calculation doesn't seem to work though, perhaps may need to do clock estimation on an interval instead...?
The remote control one is a little harder to understand, but is clearer once we zoom in a little. Some key facts:
- Sharp peaks correspond to visible light LED flashing (likely for user feedback)
- The flashing stops when button is released, or when a timeout occurs while the button is held.
- The signal itself is a discrete chunk spanning roughly 40ms, with the signal repeating for as long as the button is held down.
- The signal manifests as an AC coupling to the IR detector (I should have measured AC instead of the DC).
- Minimum sampling rate for high accuracy discrimination is around 5MS/s instead.
Also a quick search led me to this repository that supercharges an ESP32 for IR signal sending.
Update: Extracted the signal by manually applying a small adjustment to the clock frequency. Signal shown below: