Controlling a Playmobil® crane over ssh

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.

Connecting an IR-LED and an IR-Sensor to the Raspberry Pi 2 Model B

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 stopmode2 -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.

Barchart for left turn on channel d
Barchart for left turn on channel d Barchart for left turn on channel D

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.

Here’s the final configuration file, for use with channel D, which I contributed to the LIRC project’s sourceforge repository of remotes.

Invoking commands

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.

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 ''
# 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 '' && unzip -o && rm
# Start the control script


With the aid of a Raspberry camera module and this guide to install the motion package as a web camera server, you can even watch your crane while it moves.