Anatomy of a Scam: the tale of the £40 3D printer.


When i saw this, I thought “£40 for a 3d printer?  Including UPS shipping? This is too good to be true!”

Though thinking about it a bit more, I couldn’t think of any way they could get away with the money.  Aliexpress offers full buyer protection if you buy through alipay, and money is held in escrow.  So I bought a couple to see what the dealio is. If it does arrive and its shit, just the motors would cost more then £40 to buy, and I can definitely reuse them.  I figured going into this paranoid, I might just about be able to figure it out before they run away with my money.

This morning, I got shipping confirmation, with a china post shipping code. “Wow, maybe its not a scam?” I thought. Then I received this message:

hi. friend. Because you choose courier suspended. We send you the goods by China Post Air Parcel. Give you cause delays receive the package, so we give you $ 15 in compensation. You may submit disputes. A partial refund of $ 15 agreement. We give you a refund in a timely manner. Thank you

Ok, yeah, thats a bit odd.  This is the penny dropping.

The way AliExpress works, you can open a dispute on any order for either the full, or part of the purchase price.  If the seller agrees, the refund is paid out to you right away.  But if I open a dispute for the shipping, maybe I lose the ability to open a dispute for the remainder if the item doesn’t arrive? The FAQs were unclear, so I set off to AliExpress customer support:

If I open a dispute for a partial refund (for the shipping), can I then open another dispute later if the item does not arrive

No, if the dispute has been agreed the seller with partial refund, the remaining payment will be release to the seller automatically

With this, I highly suggest to please ask a full refund instead.

So there it is.  Beautiful in its simplicity.  You ask for a dispute for the shipping charges, get your £8 shipping back, and lose the ability to claim back your £32 for the rest the item when it doesnt arrive.  Since I have 40 days of purchase protection remaining, I’m going to hold off claiming a full refund for a couple of weeks, and I’ll update here if I turn out to be wrong and something does arrive!


Another message is being sent to those of us who have ignored the first message, or replied that the refund is not necessary:

Friends. Goods are in transit. Do not worry. We give you a refund of compensation today. Tomorrow no longer compensate, please submit the dispute in a timely manner, thank you

Ahh, a time limit! Best get the refund quick, otherwise they wont offer it anymore! I’ve received this second message, as have others. I’m guessing it wont be long until aliexpress close their account, so they’ve gotta try and get as much cash out asap.


Zombunny: Part One

A few years ago, I spent a fiver purchasing an v1 nabaztag ‘Internet Rabbit’ from someone on twitter. The nabaztag was one of the first ‘Internet of Things’ devices, released a decade ago, and was able to monitor your email, read weather reports and news headlines, and rotate its ears for some reason.

Unfortunately, the business of selling internet-connected tat wasn’t quite as evolved in the noughties as it is today, and the original manufacturer filed for bankruptcy in 2011. They were bought out and rebranded as ‘karotz’ soon after, which  has now also shut down.

There is lots of community support for the later generation nabaztags and karotzez, and there are 5 or 6 projects that give a self-hosted nabaztag server.

The problem is, my nabaztag is way too old to be properly supported by those servers, and its missing some of the cool hardware like RFID tags and cameras that the later models had. Since i’m always one to throw good money after bad, there’s one answer to this… BRAIN TRANSPLANT

  • Step one, figure out what I want the bunny to be able to do:
  • Record videos and timelapses for posting to youtube.
  • Stream a video + audio feed out to hangouts.
  • Monitor Twitter and my Email for interesting things.
  • Remind me about calendar appointments.
  • Work from battery power for a few hours.

All shit that my phone can do I know, but my phone isn’t even vaguely bunny shaped so it doesn’t count.

I chose to put a Raspberry Pi A+ into the bunny, as its fast enough to take care of the above, has the lovely camera module, and is pretty low power.

So, first to to see how much room i have within the nabaztag for parts. The answer is LOADS.

I plan on putting the pi in the area where the (massive!) PCMCIA network card used to sit, and making a replacement IO board that’ll mount where the original board sat, plugged directly into the pi’s GPIO. So I ripped out the old board and took some calipers to it to find where the mounting holes, and RGB LEDs sat:

Then translated that into an eagle PCB.  This one just has the ‘fixed position’ bits in place, though I still need to tweak the connectors a bit and add the pi connector.


The next step is to figure out the nabaztag connectors for power input, volume, speaker, ear rotation and feedback.  Join me in part two where i’ll be documenting that!

Setting up a self-healing SSH tunnel for Raspberry Pi using Debian.

I use quite a few raspberry pi’s in locations that dont have the ability for me do incoming SSH to update / reboot / maintain them.  This is how i set up a reverse SSH tunnel to them, allowing me to access them from anywhere with internet access!

If the site has a proxy, first you’ll need to install a proxy puncher to allow you to bypass it.

sudo http_proxy="http://proxy.ip.address:port" apt-get install corkscrew

Then install screen. Screen allows you to start a process running ‘detached’ from your current shell, so you dont have to be logged in to keep the tunnel up.

sudo apt-get install screen

Create a user for your ssh tunnel. You could just use the default pi user, but i prefer to use a dedicated tunnel user.

sudo adduser --system tunnel

Create tunnel config

sudo -u tunnel mkdir /home/tunnel/.ssh
sudo -u tunnel vim /home/tunnel/.ssh/config

Paste the following into the file. This forwards port 22 (ssh) and 80 (http) on the raspberry pi to ports 8022 and 8080 on your VPS.

ProxyCommand corkscrew 3128 %h %p
Host tunnel
        Hostname your.vps.hostname
        Remoteforward 8022 localhost:22
        Remoteforward 8080 localhost:80
        Port 443
        User tunnel
        ServerAliveInterval 10
        ServerAliveCountMax 3

NOTE: If you are not using a proxy, remove the corkscrew line and the port 443 line. The port 443 line above is only needed if you are behind a proxy and firewall that disallows port 22 outgoing. I have set up my SSH daemon on the VPS to listen to port 443 (the https port) as well as the normal 22 as this will manage to punch its way through most proxies.

The ServerAliveInterval and ServerAliveMax variables above basically say “send a packet across the tunnel every 10 seconds. If you don’t get anything back after 3 tries, close the tunnel”

The above config also assumes you have set up a tunnel user on the machine you are SSHing to. If not, either create a tunnel user the same way we did above, or change the user line in the config to the username you will be using on the VPS side.

Generate your RSA key and upload to the VPS

sudo -su tunnel
export HOME=/home/tunnel
ssh-copy-id tunnel

At this point, you should be able to SSH to tunnel without typing in any passwords etc.

$ ssh tunnel
Linux thinkl33t 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u2 i686

Set up our shell scripts to automatically start the tunnel.

sudo -su tunnel
mkdir /home/tunnel/bin
echo 'PATH="$HOME/bin:$PATH"' | tee /home/tunnel/.bashrc
echo '#!/bin/bash' | tee /home/tunnel/bin/
echo 'APPCHK=$(screen -ls | grep -c tunnel)' | tee -a /home/tunnel/bin/
echo 'if [ $APPCHK = "1" ]; then' | tee -a /home/tunnel/bin/
echo '    echo "Starting SSH tunnel"' | tee -a /home/tunnel/bin/
echo '    screen -mdS tunnel ssh -N tunnel' | tee -a /home/tunnel/bin/
echo 'fi' | tee -a /home/tunnel/bin/
echo 'exit' | tee -a /home/tunnel/bin/
chmod a+x /home/tunnel/bin/

The above script checks for an already open screen session with the name ‘tunnel’. If it doesn’t exist, it creates it. If it does exist it just ends. The screen session is launched in a detached state (in the background), and will automatically end when the SSH tunnel falls over.

Set up the crontab to automatically run our monitoring script once a minute

echo '*/1 * * * * /home/tunnel/bin/' | crontab

Your tunnel should come up shortly, woo!

To test it out, from your VPS, type

$ ssh localhost -p 8022
parag0n@localhost's password:
Linux thinkl33t 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u2 i686

Brill, you can now SSH in from your VPS… But by default SSH tunnel ports are only available from localhost, so you’d have to log into your VPS every time you wanted to get into the pi. So, lets edit the SSH config file on your local machine!

Host pi
        Hostname localhost
        Port 8022
        ProxyCommand ssh your.vps.hostname nc %h %p

This will allow you to type in

ssh pi

on your local machine, and will automatically ssh into your VPS, then SSH into localhost. Sorted.

A-Maze-Balls: A collaborative project for MakerFaires and beyond.


I’ve loved the concept behind the Blue Ball Machine ever since  first stumbling across it in 2005.  A large number of people made animated GIFs of a standard size, with a blue ball entering and exiting at a certain place and frame number.  Screenshot from 2015-01-19 17:14:53

When stacked together, the GIFs make a huge tapestry of moving balls, which is massively hypnotic.

I was wandering around Play Expo last year, and came across a stall selling spare parts for pinball machines, which is when inspiration struck.  What if we made the BBM… But MASSIVE?

The A-Maze-Balls Standard

Inspired by Model Railway buffs, The AMB Standard defines standard module sizes to be used when making an AMB module.  The ball must enter and exit at a certain place, but what happens in between is entirely up to the module’s maker.

Each module has a fall distance of 63mm between the entry and exit points, allowing us to build a ‘support staircase’ out of chunks of CLS timber, or MDF to support each module.  The entry hole is sized for a standard pinball.  The plates are 400mm wide, and 120mm tall.  There are 8mm mounting holes to connect modules together.



The plates are designed to be flipped around, and are used with the holes at the top for entry, and at the bottom for exit.  I suggest laser cutting them from 5mm plywood or acrylic.  Each module should be 480mm long, but the height and width aren’t constrained.  This version of the endplate is designed to be screwed onto the end of a module.

EndPlate DXF

Full Box


The amazebox is a full amazeballs module, designed to be cut on an A2 laser cutter.  It incorporates the correct fall distance, and is built with a tabbed construction that doesn’t need any fasteners to assemble, just Glue.

Full Box DXF


Some modules will need power made available to them for running lights, motors, electromagnets etc.  For this we’ve chosen a PC-style molex connector, using the standard PC pinout of +12V, GND, GND, +5V.  These connectors are available from farnell for 50p each.



I was sold on the concept of using pinballs as soon as I saw them on the stall.  They’re a standard size (1.06 inches), electrically conductive (this is necessary for the bumpers on pinball machines to work!), and will stick to magnets (so we can build a coilgun to fire them back up to the start!).  This combination allows us to do a lot of very cool things. If you need any for testing, they can be bought here for £1.20 each.

Module Assembly

Once a module is built, they can be stacked end-to-end, theoretically infinitely (assuming sufficient volumes of wood for the staircase).   The ball holes line up, and the units can be bolted together using M8 bolts.


Get Involved

I plan on setting up the first AMB run at UK MakerFaire, in April 2015.  I’m hoping to get people from all over the country involved.  If you’d like to bring a module, please contact me (email, @thinkl33t on twitter) and I’ll add you to the list.  This will be a 10-module stack, so first-come, first-serve!

What you do inside your unit is completely up to you, as long as the balls enter and exit in the right place, and at a sensible speed!

Module Makers

  1. Bob Clough


  • 2015-01-19 – Initial Module Specification
  • 2015-01-19 – Added Module Length

SmoothieWare Compatible Mainboards

I’m a big fan of the SmoothieWare project for driving 3D printers, CNC machines and Laser Cutters.  The code is clean, efficient, and the software actually designed in a modular and sensible fashion.  Compared to most 3d printer firmwares, which have accrued layers of cruft, its very readable and usable.

The only real issue is there isn’t a huge amount of hardware out there that’ll run the firmware.  This post is a compilation of the available boards as of January 2015, and my thoughts on each.  Prices will be in GBP, using Google’s conversion rate, and include the cheapest shipping rate to the UK.  I’ll only be counting items that are in stock and ready to order right now, not pre-order items.  If there are multiple options for connectors etc, i’ll choose the cheapest.


Photo from

Available from RobotSeed for £108 (€142) inc shipping for SmoothieBoard 5X, the SmoothieBoard is the big daddy of them all.  It has 5 onboard A4982 stepper drivers with digital current control, 6 endstop connectors, 4 thermistor inputs and 6 MOSFET outputs, which can drive 3 high current (hotend, heated bed) and 3 medium current (fans, lights, relay) devices.

The SmoothieBoard benefits from being the primary development platform for the SmoothieWare project, so will probably never become unsupported, and has a huge amount of IO, which means it’ll be able to support pretty much any stepper-based machine you want to throw at it.  The SmoothieBoard has the stepper drivers mounted directly on the mainboard, which is far better than pololu-style stepper drivers as favoured in the reprap world from a thermal point of view.

The SmoothieBoard supports ethernet networking, which is very nice functionally.  SmoothieWare supports gcode streaming over TCP, and has a rudimentary WebUI.

The downside is it is a bit expensive for running things like CNC machines, as you end up paying for a lot of features you wont use, and it is on the large side, which makes it not ideal for small delta machines.  There is provision for attaching external LCD controllers, the RepRapDiscount GLCD is the recommended unit, however it does need an additional adaptor PCB for truly plug-and-play assembly.

Price 7/10 (a bit expensive, but well featured)

Features 9.5/10 (some features need extra bits attaching, like the LCD adaptor PCB and 5V regulator).

Azteeg X5 Mini

Photo from


The X5 Mini is available from panucatt for £80 ($122) inc shipping.  It is a 3D printer focused board, featuring 1 High Current MOSFET and 2 medium current MOSFETs.  It boasts 4 onboard stepper drivers, this time DRV8825 types, which have 32x microstepping and can drive up to 2.5A stepper motors.  Input wise, it has connectors for 4 endstops, and has 2 thermistor inputs.

The X5 is significantly smaller than the smoothieboard, which will help with mounting.  For those of us coming from old-school reprap electronics, it is close in size to a sanguinololu.  Again, the RRD GLCD can be attached.  No PCB adaptors are available that I can find, but making up an adaptor cable is fairly simple.  There is no onboard networking provision.

Price: 7/10 (£20 cheaper than the smoothieboard, but you get a lot less for the saving)

Features: 6/10 (Only 1 Extruder, No network, LCD needs cable making)


Photo from


The new kid on the block, the AZSMZ Mini comes in at an astoundingly cheap £46 from AliExpress.  This increases to about £60 when you include 5 DRV8266 based stepper drivers.

Assuming we ignore the incomprehensible name for now, it has some interesting features.  The size is slightly bigger than the X5 mini.

It is the only SmoothieWare compatible board for sale right now that has removable stepper drivers, which a lot of people seem to like.  While this gives you the choice of which stepper drivers to use, it also means you’re limited on how much heat you can remove from the driver, decreasing your total motor current.  It has 5 slots for stepper drivers, using the standard pololu-style pinout.  As Pololu carriers are in use, there is no digital current control on this board.

There are 3 MOSFET outputs total, 1 High Current, and 2 Medium Current, Labelled Bed, Fan and Heat, along with 3 Thermistor inputs, allowing for dual extrusion.  I would have liked 1 more medium current output, as assuming you want to use dual extrusion, you can’t have a fan without adding an external MOSFET board.  Provision is made for 4 endstops, labelled X, Y Z and A.

Like the X5 Mini, there is no networking provision on the AZSMZ.

This board has a dedicated GLCD controller available, also from AliExpress for £19.  This LCD connects directly to the EXT2 and EXT3 ports, meaning connecting it is zero hassle.  Though it uses the same connectors, these controllers arent the same as the ones on the RRD GLCD, so if you really want a RRD you’ll have to make an adaptor.

As it is so new, a certain level of wariness may be good to adopt when it comes to the AZSMZ.  As far as i’m aware, nobody outside of china has them in-hand yet, and the reliability is yet to be tested.  From an EMI perspective, the position of the USB connector is a bit suspect, as the USB lines appear to pass through all the sources of noise on the entire board, Extruder PWM, Stepper Drivers and switching VReg!

Price: 9/10 (Though its yet to be seen if its cheap for a reason, and you need to include the cost of your stepper drivers!)

Features: 7/10 (The extra extruder and onboard LCD provision put it above the X5 mini, but the limited number of high current outputs is strange for a supposed dual-extrusion board, and the lack of digital current control is a pity)

Sunbeam 2.0

Photo from
Photo from

The Sunbeam 2.0 costs £101 (PLN 570) from shipped to the UK (assuming i’ve translated the website correctly!).  It is another general usage board, similar in concept to the SmoothieBoard, but with a few changes.

For external connection, there are two USB ports onboard, a native USB, and a “Debug” FTDI chip.  The debug port can be used for direct access to the microcontroller’s serial port, including for flashing bootloaders etc.  The Sunbeam also has Ethernet onboard, allowing the WebUI and Network Streaming to be used.

The stepper drivers change from the A4982 to the A4988.  The main difference is that the A4988 supports 8x microstepping, and the A4982 is in a slightly bigger package, so is theoretically easier to swap out if you do blow a driver up.  There are still 5 motors, allowing dual extrusion on a 3D printer, and there are still 3 High current outputs (Bed, E1, E2), and 3 Medium current outputs (labelled as Fan outputs).

Input wise, there are only 3 Thermistor inputs, and 3 Endstop inputs.  This is pretty much the minimum to run a dual extrusion 3D printer, I would have liked to have seen at least one more endstop input for bed probing.   An onboard switching regulator provides 5V for general power from the 12-24V supply power.

Like the AZSMZ, the Sunbeam has a connector intended for connecting a GLCD.  This addon is available from for £32 (PLN 179.99) including shipping, and plugs into a single ribbon connector on the board.

The only real issue I have personally with the sunbeam 2.0 is that the documentation is only available in polish, though connector pinouts etc are all labelled in English so connecting things up without the documentation should be no problem.

Price: 8/10 (Around the same price as the SmoothieBoard but you dont need to buy any adaptors or regulators for full functionality.)

Features: 10/10 (About as feature complete as you can get!)


I know these things usually end with a conclusion that tells you which board to buy, but with this subject depends hugely on what machine you’re building, and the features you want and need.

Personally, I’d get a sunbeam 2.0 for any project where it’d fit physically and fiscally, and drop to the AZSMZ where budget or space disallows.

Project: RoboButler 3000 – Part 3

The next thing on my ToDo list is to get the frame painted.  I begun this by using a flappy-disc angle grinder attachment to sand back all of the shipping grease, fingerprints, welding flux, and rust that had accrued on the frame over the past week.  These things are AMAZING, I used an entire one sanding back the frame, but its totally worth it.  As a side note, you have to remove the guard from your angle grinder to use these things effectively, make sure to put it back afterwards, and mind your fingers!

Once the frame was all shiny, I broke out the primer.  I used multi surface primer from wilko’s, its only a fiver a can, and one can was just enough to do 3 light coats on the entire robot.  I chose to use primer over just paint because I’ve had issues before with paint flaking off improperly prepared surfaces before, so I figured better safe than sorry.

I did 3 coats total of primer, leaving 2 hours between coats.  Then I left it overnight to dry and make sure the primer was properly set before moving onto the main paint.  For the colour coats, I chose a Royal Blue (again from wilko’s).  I applied 3-4 coats, with 4 hours between, then left it again to dry.

All I have left to do paint-wise now is apply clear-coat this week, then we can start drilling holes to mount things!

Project: RoboButler 3000 – Part 2

My task for this week is to finish off the frame, and get it cleaned and painted with something. The frame is mainly there to hold the motors, batteries, and a club maté crate.


Day one began with preparing a cut list, and using my Evolution RAGE saw to chop a LOAD of 20mm box section to size:

I then chucked together a quick mockup by balancing everthing on top of each other, to try and remember how it goes together.

My next step was technically to weld everything together. Unfortunately there was an issue here, I’d bought myself a No Gas MIG welder and all the PPE, but i’d never actually welded anything. I took an hour to chill in my lounge and watch YouTube videos on how to weld.

I did a few test welds on some leftover box section, and while my welding was crap, it seemed good enough to hold together when whacked with a hammer multiple times, so I figured time to go!

I welded together the 3 basic subframes, the top and bottom of the crate holding box, and the ‘spine’ that holds the batteries together.  The welds were getting better as I went along, which made me happy.

Next I put the ‘ribs’ down the middle of the bottom crate holder. As they’re only for the crate to rest on, they don’t have to be massively well welded, which is lucky because I completely failed at clamping them properly, so they’re a bit crap. Note to self: Buy more clamps.

I welded the spine to the outer edges of the base frame, and was in the process of filleting each rib to the spine when my welder cut out. Turns out these things only have a 20% duty cycle and it had overheated! I took it as a sign to pack up for the night, as I needed to acquire an angle grinder anyway to clean up the top welds before attaching the base frame to the top frame anyway.

On the plus side, the measurement for the club mate crate were correct, so it’ll fit!

The next day I added the uprights, and welded the base plate and top plate together.   I started by grinding flat the welds in the corners on the top and base plates, so I had a flat surface to weld the uprights to.  I then welded the 6 uprights to the top plate (as its far lighter), then welded that assembly to the base assembly.

I went round and cleaned up the welds all round, and started grinding the accessible ones back to make the joints as flat as possible.  Later I found out why my final welds were so crap.  I’d turned up the wire feed speed while testing, and forgotten to turn it down again later, so the wire was ‘stubbing’ and I was getting an irregular arc.  The joys of Flux-Core Arc Welding!

Plan for next weekend is to get the frame sanded back , cleaned off, and get the frame painted.

Project: RoboButler 3000 – Part 1

As our project for EMFCamp 2014 (August 29th – 31st near Bletchley), Jim and I have decided to build a robotic butler to bring us drinks and generally bounce around the field getting in the way.


I started off by spending some time CADing up a model using parts we have lying around, and also things bought from ebay:

  • Motors – Invacare Wheelchair Motors
  • Motor Control – Invacare Wheelchair Power Module
  • Wheels – 145/70-6 Quad Bike Wheels, 6″ Pneumatic Casters
  • Frame – 20mm Steel Box
  • Batteries – Hawker PC680 17Ah 12V lead acid batteries

My second task was making something to connect the wheels, which had a standard 6 bolt pattern (3 of which hold the wheel together), with the keyed shaft of our motors.  I decided to 3d print the connector, as it should be plenty strong enough.  I based my design on the existing wheel hub for the old 4-bolt wheelchair motors, and made it in openscad:

I printed this out using 50% infill, with black PLA on the Mendel90 3D printer at Hackspace Manchester, a 15 hour print!  I assembled the wheel units using M8 bolts for holding the wheels on, and used the existing M6 allen bolt for mounting the hub to the shaft:

I’m pretty happy with how they came out, they seem strong enough to hold everything together, and the bolts go far enough through to hopefully stop delamination.

Project – Lil’ Buggers

IMG_20140511_184445We like to do occasional workshops at the Hackspace, so when MadLab asked us to make something ‘bug themed’ for a workshop, we jumped on it.  The first thought we had was to make up some bug-shaped PCBs with a circuit to flash LEDs, and run a soldering workshop.  When we found out the workshop was a week away, we panicked a little, as that’s not really enough time to get PCBs manufactured at a sensible price.

We decided instead to make little laser cut bugs with LED eyes, as they can be made with easily available materials, and infinitely customised.

Step one was to choose a material.  Our first experiments were with acrylic.  I whipped up some designs for ‘joints’, which would friction fit onto the side or top of a ‘body’.  I attached these to a curved path in inkscape for the legs, and bug #0 was born!

IMG_20140511_151815 Bug #0 had a couple of issues, mainly due to the material choice.  Acrylic thicknesses can be a bit variable, the tolerance can be as wide as ±10%, and it is fairly brittle.  the combination of these two issues caused at least one broken leg (hence #0 having 5 legs!).

We decided to have a go at laser MDF instead.  Laser MDF is basically MDF made with a glue that is less harmful to people and laser cutters than regular MDF.  It has the advantage of being very dimensionally accurate (our 3.2mm MDF was measured at 3.21mm), and having a bit of bend before it breaks.

Bug #1


Bug #1 was born.  It assembled a lot easier than #0, and has cool looking scorched edges.   At this point I started designing some add-on parts to allow attendees to customise their bugs, including wings, tails, hairy legs, and mandibles.

The only issue with #1 was losing the wide range of colours available from acrylic.  However, I had a flash of inspiration, and gave a sheet of laser MDF a light coat of red spraypaint.   This dries fast, and gives an awesome splash of colour.



Bug #2 is alive!  This time sporting a lovely pair of wings and some antennae. #2 was done with just one side of the wood painted, which gives a cool effect. depending on what side of the bug you’re looking at.

Then things got a bit silly…

We now have a swarm of these delightful Lil’ Buggers invading the hackspace.  With a magnet and a dab of hotglue they’ll stick to anything metallic, and their LED eyes last for a couple of days on a coin cell.

We’ll be selling a kit soon with enough parts to make two of them through Inventory, and the Hackspace Website.


45 Minute Project – £4.10 XBMC Remote Receiver

I’m a big fan of XBMC, and have an Ouya running XBMC set up in my lounge, streaming from my NAS. I normally use XBMC remote on my phone for controlling it, but this gets annoying when the phone is on charge, or I’m using it for something else.

I noticed that the majority of my TV remote is completely unused when the TV is in HDMI mode, and had a bit of a lightbulb moment!

Almost none of these buttons are used!

I already had an Arduino Pro Micro (£3) lying about i’d bought for testing out as an upgrade path for the minimus based projects i’ve been playing with.  It is leonardo compatible, small, cheap and pretty easily available.  I added an IR Receiver (£1.10) to the weekly Hackspace Farnell order to complete the parts list.

The pinout of the IR receiver makes it very easy to connect to the pro micro, using the RAW (VUSB), GND, and A3 pins.  I just bent the OUT pin (pin 1) on the receiver to the left a bit as follows:


The body of the receiver fits perfectly behind the USB plug, flat against the voltage regulator.  I used the IRremote arduino library to grab data from the remote using the IRrecvDemo sketch and mushed some buttons:


My remote uses 0xFFFFFFFF as a ‘key repeat’ code, about every 200ms when the button is held down. I found that in practice I had to ignore the first of these, as it was repeating way too fast and doing double presses.

I tweaked the IRrecvDemo sample code, added in a bit of keyboard and came up with some working code:


int RECV_PIN = A3;

IRrecv irrecv(RECV_PIN);

decode_results results;

int key;
int count;

void setup()
  irrecv.enableIRIn(); // Start the receiver

void loop() {
  if (irrecv.decode(&results)) {
    switch (results.value)
      case 0x8B452AD: // up
        key = KEY_UP_ARROW;
        count = 0;
      case 0x8B410EF: // right
        key = KEY_RIGHT_ARROW;
        count = 0;
      case 0x8B4D22D: // down
        key = KEY_DOWN_ARROW;
        count = 0;
      case 0x8B4D02F: // left
        key = KEY_LEFT_ARROW;
        count = 0;
      case 0x8B4926D: // enter
        key = KEY_RETURN;
        count = 0;
      case 0x8B412ED: // red
        key = KEY_BACKSPACE;
        count = 0;
      case 0x8B4B24D: // green
        key = ' ';
        count = 0;
      case 0x8B44AB5: // yellow
        key = KEY_ESC;
        count = 0;
      case 0x8B450AF: // blue
        key = 's';
        count = 0;
      case 0xFFFFFFFF:
        key = -1;
    if ((key != -1) && (count!=1))  // if count = 1, it is the first key repeat, so ignore it.
    irrecv.resume(); // Receive the next value

Total cost £4.10, total time 45 minutes. Sorted!