One of my sons recently received this fine, Infrared (IR) remote controlled crane model as a gift. Would it be possible to rebuild the IR remote control with a Raspberry Pi?
Catching the signal
To build the IR-Transmitter I used the well-known LIRC library and this small IR receiver sensor from Adafruit. For emitting back the IR I just recycled an IR-Diode from an old JVC remote control unit and directly attached it to one of the GPIO ports the Raspberry Pi.
To set up LIRC, test the sensor, record the IR signal and emit the code I mainly followed this excellent blog post about setting up LIRC by Alex Bain. I worked through all the relevant steps and finally got a working solution.
Gettin’ the codez
The Playmobil crane remote control seems to use none of the standard protocols like NEC or MD-5. It also has a long sequence, as the output of the raw recording shows.
sudo /etc/init.d/lirc stop mode2 -d /dev/lirc0
The “Left Turn” button, when using channel “D”, gives:
space 4656873 pulse 5722 space 452 pulse 942 space 473 pulse 947 space 474 pulse 949 space 937 pulse 485 space 964 pulse 459 space 938 pulse 484 space 911 pulse 511 space 473 pulse 959 space 464 pulse 950 space 471 pulse 951 space 471 pulse 952 space 469 pulse 953 space 116727 pulse 5721 space 471 pulse 953 space 469 pulse 952 space 443 pulse 980 ...
A quick analysis using a spreadsheet and a bar chart shows some interesting features. See below. The y-axis shows the numbers from the raw output as values.
There are 13 blocks, of which the later 12 are similar. A test showed that the signal consists of a first, single action code, followed by a repeated stop or terminating code. The clock seems to be at a value of about 473, which is the average duration for a pulse of basic width.
Getting a working lircd.conf file
Now the tricky part was creating the lircd.conf file with the irrecord application. The tool resorted to record what it calls a raw format. By following the on-screen instructions, I managed to get a working file, however, only with the action codes for each direction. I then manually created a stop code and added that to the end of the file.
With the correctly configured and running LIRC service, I now can control the crane using the simple LIRC irsend program.
irsend SEND_ONCE "playmobil" MOVE_LEFT
for a left turn, for example.
When sending the stop command right after the action command, the moves are a little shorter:
irsend SEND_ONCE "playmobil" MOVE_LEFT KEY_STOP
Build your own
Here’s the complete, minimum guide to rebuild the control (sending part only) for yourself.
- Set the crane’s remote channel switch to position D.
- Wire up the IR emitter diode between physical pin 15 (WiringPi Pin 3, BCM 22) and Ground.
- Get the Raspberry Pi connected via ssh and follow the instructions in Paragraph “Setting up LIRC on the RaspberryPi” from Alex Bain’s Blog about setting up LIRC on the Raspberry Pi.
- Run the following script. This will download and install the configuration file, for use with channel D, plus a simple controller bash script that you can use to control the crane with your keyboard.
# Stop lirc to free up /dev/lirc0 sudo /etc/init.d/lirc stop # Get the configuration file from sourceforge wget -qO- -O large-crane.lircd.conf 'https://sourceforge.net/p/lirc-remotes/code/ci/c1a9403dec74d2b3d90ff507d63a1cd7d8aa6a3b/tree/remotes/playmobil/large-crane.lircd.conf?format=raw' # Make a backup of the original lircd.conf file sudo mv /etc/lirc/lircd.conf /etc/lirc/lircd_original.conf # Copy over your new configuration file sudo cp large-crane.lircd.conf /etc/lirc/lircd.conf # Start up lirc again sudo /etc/init.d/lirc start # Show the available codes irsend LIST "playmobil" "" # Get the bash control script for easy keyboard control wget -qO- -O tmp.zip 'https://qrys.ch/wp-content/uploads/2016/01/cranecontrol.sh_.zip' && unzip -o tmp.zip && rm tmp.zip # Start the control script bash cranecontrol.sh