Skip to main content

2 crawly 2 creepy

We believe it was Einstein that once famously observed this particular theory of relativity; that every horror film requires a - relatively (and scientifically) speaking - smellier sequel.  Therefore, when the previous incarnation doesn't quite meet people's expectations, it should be in everyone's interest to further obliterate its legacy with yet more momentous muck and manure.  This is the only way (apparently) to maintain nature's delicate equilibrium between winner and stinker.  After all, for this, the great man won the Nobel Prize.

Of course, what we're talking about here isn't Jeepers Creepers, or I Know What You Did Last Summer.  Simply put, Rosie disappointed in her last outing.  We promised you "crawly creepy", and instead, we got "a slightly bizarre demonstration of a robot pretending to crawl across an anonymous hotel room floor.  Badly." (which incidentally isn't a great film title).  No, definitely not Halloween.  More Mr. Bean.

But everything / everyone / every wannabe robot deserves a second chance to out-stink outshine the original.  Unfortunately for everyone, however, through no fault of our own, this reincarnation ends up being a little too creepy this side of Halloween.

Apologies in advance to all STEM educationalists; this is perhaps one blog post too far for your budding school curriculum!

You don't want to be the tool without the tooling:

  • A Raspberry Pi 3, running Raspbian OS
  • As before. Yes, you will need your very own 3D-printed humanoid, equipped with servos, and a servo controller of some description. We did eventually come to upgrade our servos in this episode, as you'll read about later.
  • We'll be back again using our 3D printer; this time to print out a "scary" mask
  • All fearsome mechanical things require bright red LED eyes.   And slightly less scary Resistors (we used 330Ω).
  • We try desperately to make the mask look "realistic" using sandpaper, primer, acrylic paint and some varnish (the last one, we actually forgot to buy).  Oh yes, and we also used bristles from a brush for the facial hair.  Quite clearly, the highlight of our achievement.
  • You could go the extra mile and give your creation a costume.  We became quite lazy by this point (a similar pattern that emerges across our posts), and gave it something that resembles a... erm... cape.  That's ok, because - it turns out - capes are quite creepy.
  • Some sticky tape to attach loose stuff together... Gorilla Tape will do.

Chequered history:

Building Rosie 2.0 - naturally - assumes that there is a Rosie 1.0.  For that reason, casting your eyes over the organised chaos that was Rosie and Rosie Patrol is highly recommended.

Having said that, most of the material here is based on what was attempted using Mr. Ted-E U, and more recently, Crawly Creepy.

Bit by byte:

  • Get Rosie 2.0 all ready.  Again.  Maybe it's best not to have any kids nearby this time.
  • 3D print a scary mask found on the internet.  Thigiverse is a good bet.
  • Solder resistors to the LEDs, and cable them up to the GPIO pins of the Pi
  • Dress the robot with the appropriate attire
  • Make the resulting thing crawl (again), preferably to eerie music.  We tried to use Tubular Bells from The Exorcist... and found out that it is copyrighted for use on YouTube... Thanks Mike Oldfield.

You ain't seen nothing yet:

The mission here is to try and re-use Rosie 2.0's basic frame to make a monster that can crawl across the floor. We ought to take this a little more seriously than usual, and go all out with the dramatic effect.

To this end, we'll print off and paint a scary mask, and attach some red LEDs to it.  Then we'll beef up the servos we have, and attempt to get the robot to crawl across the floor.

Erm... all in the name of science (or so we keep telling ourselves).


First of all, all creepy things have a hideous face, or wear a mask (which incidentally looks like a hideous face)... according to the laws of scary movies at least.  You may have noticed that we abandoned the big, clunky "box head" of Rosie's pretty early on.  The advantage is that we can now - more easily - attach random stuff to the head via the rather anonymous-looking rear face plate.  A supposedly scary mask is no exception.

Now, we need some inspiration.

What if there was this thing that roamed around uninvited while you sleep, study, work, and harvested all the things that you think, write and say, with the specific aim to brainwash you.  All while their masters huddle together in a now abandoned office (something about bankruptcy?), discussing how best to engineer you into thinking what they want you to think.  Nope, we're not talking about LinkedIn Influencers.  And besides, this plot is too far-fetched, and quite frankly, a little too scary to ever be real.  Instead, we'll simply resort to calling our prototype Cambridge Troublitica, as apparently, Raspberry Pi are based in Cambridge, and in this instance, it will be used solely to create the illusion of some impending trouble (if by trouble, we mean making a Raspberry Pi-powered robot crawl using Python, while wearing a 3D-printed mask).

Firstly, for the mask itself, we turned to a trusted source of printable models... Thingiverse.  And we stumbled upon this mask that looks adequately scary.

Thanks Killonious (Peter Snyder) for this great design.  It's even got a convenient gap for its mouth, which could quite easily be used in the future to carry a concealed Pi Camera for some top-notch snooping.  If you like his work, you can support him on Patreon.

We want the mask printed in a decent size, so we've sliced this demon horizontally at its forehead using our 3D print software (FlashPrint).  This way, we can exceed our build volume when the pieces are amateurishly glued together (amateurish - because we don't quite manage to conceal the parting).  We also don't need the full depth of the mask, so it's been truncated in height as well, and the bottom half discarded.  The model itself is pretty complex with lots of overhang, so the 3D print will be spewed out of the printer with a raft and support.  In other words, it's not going to look very pretty immediately after being printed, and we'll have to use our pliers and palette knife to remove all the excess demon fat.

What? 12 hours to print? Yes, that's unfortunately how long we had to wait for this happy chap's expression to materialise on the build plate of our FlashForge Finder.  And once it did, we still had to spend a good 10 minutes removing all the supports and raft from the rather large heap of white PLA.

But once all this is done, it starts to resemble something that perhaps we ought to start to think about running away from, rather than patting it on its head.

Now, unlike all the Rosie parts we've printed to date, we would also like to put some effort for once into making this mask look half presentable.  The "fresh white PLA" look just isn't going to cut it this time.

From reading various articles about this online, like this one, we think this is what we need to do:
  • Drill a few holes so that we can attach the mask to Rosie's head.  Ours are 2mm holes, drilled 90mm apart at the eyeline.
  • Glue the bits together
  • Use coarse sandpaper to try and smooth the 3D print
  • Spray on some primer
  • Use less coarse sandpaper to smooth the print once again
  • Repeat the primer and sandpaper-ing (using a finer grade each time), until you're basically bored
  • Paint the model using acrylic paint.  Repeatedly re-paint to get the colour thick.
  • Coat with varnish (this is a step we didn't actually complete... due to the fact that we went shopping for some varnish, and ended up getting something totally not varnish).  We may decide to revisit this step at some point.
Here is the rather convoluted journey we took to "improve" the look of the mask.  And there's bit of random improvisation at the end... where we used the bristles from a cheap paint brush, together with superglue, to manufacture fake facial hair.  If anyone's looking for some subpar hair implant work - we're available for booking.

Don't worry about the cables protruding out from the mask in the last picture.  Actually, please do.  As we might as well talk about *them* now.

All naughty robots have red LED eyes; yet another one of Einstein's super-clever observations that have shaped robotics ever since.

We won't be using Rosie's LED dot matrix display here.  It just doesn't have that necessary scare factor.  Better - we thought - might simply be two red LEDs.

There's plenty available online about how to light up simple LEDs using the Pi, Python and GPIO pins - such as this excellent tutorial from the The Pi Hut.  There are several golden rules when doing this:
  • Always use a resistor in series with the LED, otherwise, you will damage your Pi by drawing too much current
  • The longer leg of the LED needs to be connected to positive voltage (i.e. Pi's GPIO pin which provides a "high" signal of 3.3V), and shorter one to the Ground (0V)
We soldered a 330Ω resistor to one leg of the LED, and attached some Dupont connectors to the end of the resistor and the remaining leg.  Remember Ohm's Law?

V (Voltage) = I (Current) × R (Resistance)

...which can also be shuffled around to be:

V (Voltage) / R (Resistance) = I (Current)

As the GPIO "high" signal of the Pi dishes out 3.3V, using a 330Ω resistor should mean that - in theory - we'll be drawing only 0.01A (10mA) of current from each GPIO pin.  This should be enough to power the LEDs, but also stay within the limits of the Raspberry Pi which are detailed in the FAQs.

The GPIO pins can draw 50mA safely (note that that means 50mA distributed across all the pins: an individual GPIO pin can only safely draw 16mA)

Next up, this is how we cabled the LEDs - although you're free to chose any combination of GPIO and Ground (0V) pins.

37 (BCM 26)LED Right +
39 (Ground - 0V)LED Right -
36 (BCM 16)LED Left +
34 (Ground - 0V)LED Left -

Don't forget to check this excellent resource at if you are unsure about the pins.

There really isn't much else to this; so let's launch straight into IPython and run a few commands.


We should be familiar with all of these commands.  All we're doing here is setting up GPIO pins 16 and 26 to be used as standard GPIO outputs, and address them using the BCM numbering.  Then we set them high to send out our 3.3V signals to both the LEDs.

import RPi.GPIO as GPIO
GPIO.setup(26, GPIO.OUT)
GPIO.setup(16, GPIO.OUT)
GPIO.output(26, GPIO.HIGH)
GPIO.output(16, GPIO.HIGH)

Yep, that's it.  Sorry.

Hopefully we've managed to turn both LEDs on... and feel gravely disappointed that there wasn't much else involved.

Clearly, setting GPIO.LOW will allow you to turn them off.  You could also flash them in a loop with time.sleep().

GPIO.output(26, GPIO.LOW)
GPIO.output(16, GPIO.LOW)

This bit of code clearly needs to be embedded into a larger Python application at a later point. But - for now - we've proven that we can control the LEDs in the mask's eyes.  And we don't plan to do any more with this.

We finally attach the LEDs to a 3D-printed bar that runs across the back of the mask.  Our 2mm holes happen to be drilled 90mm apart, so all we did here was print out a crude piece with holes that fitted these dimensions.

And that's about it for the mask.  You could quite happily power the LEDs off a battery, and hang this up on the door at Halloween time if you don't want to bother with the extra robotics stuff.  As it happens, our blog is still called Rosie the Red Robot, and so we're unable to use that excuse.

It's now time to try and address another failure of the previous episode: motion.  We established pretty early on that Rosie would not be going anywhere, anytime quick.  And it was all down to torque (or the lack of).  We discussed several ways to overcome this.  But in the end, we procured additional horsepower in the form of some beefier servos.

The particular servos we targetted on eBay were the HS-645MG, its digital sibling HS-5645MG and HS-5625MG.  As you can see below, these have significantly more torque than the HS-311s and HS-422s we were playing with... hence officially stamped with the "oh yeah, this is what we're talking about" quality rating.

These are still "standard size" HiTEC servos.  So thankfully, it's a like for like replacement without the need to modify any of our servo brackets.  And we continue to use an Adafruit PWM / servo HAT and its PCA9685 chip that specialises in handling PWM signals, and send it instructions via Pi's I2C serial protocol.  We're close to exceeding 16 channels (i.e. servos) with the two additional neck motors...

Armed with a dozen of these servos, we might reach another unfortunate milestone... one in which we're unable to draw sufficient current from our 5V / 10A mains power supply.  However, we'll cross that bridge when it comes... Clearly, when Rosie 2.0 eventually moves onto some form of batteries, this might become an enormous issue.

Here are the various schematics for the servos.

So what does this all give us?  Something that looks a little like this, as it happens.  Now, we don't often congratulate ourselves for making something that meets our objectives (because most of the time we fall short!), but here's something that looks unnervingly spookier than we anticipated.

And now for the moment we've been waiting for.  Let's re-run the crawling routine once again, using Python, to see what happens.  Notice the perturbing cape that Rosie (oh sorry, Cambridge Troublitica) is now wearing.  It transpires that it's perfectly suited to conceal all the robotics that make up her body, together with the USB battery pack and the mains adaptor.

You'll see that we didn't make many changes to the crawling motion from before (we probably should have), but the improved power of the servos allow the limbs to overcome gravity and friction better.  With further tuning of the servo positions, it should be possible to make the crawling action smoother - and faster.

The music is Papua New Guinea by The Future Sound of London.

And this is exactly where we'll leave this little detour... as quite frankly, this might be one sequel that managed to better the original.  Moreover, it's actually getting quite creepy.  Maybe, we'll wheel it out again at Halloween.  After all, this should teach the kids not to trick or treat.

Doing the devil's work(out):

We did eventually atone for our mistake, and purchased a clear acrylic varnish to coat over the paint with.  We went for the "gloss" effect, and as a result, ended up with a monster that looks like it is on its way back home to a hellish afterlife, after a particularly gruelling session at the gym where the Lucozade was on tap.

More importantly, the varnish does also play a crucial role in protecting the painted finish, with a super thick, hard layer of hydrocarbon solvents produced from oil.  If you want less sheen, "satin" or "matt" finishes should also be available from your brand.

Here's a little noddy reminder to ourselves for the future (i.e. thinners are not varnish).  Although we can't promise that we won't walk out of the shop again with something that we were totally not intending to get.

All these chemical products are quite clearly not good for your health.  Always follow the instructions that come with the product, and take the precautions that are prescribed.  For example, do not touch, inhale or ingest thinners, varnish, primer, glue or paint.  Instead, invest in the appropriate precautions - such as gloves, mask and protective eyewear - and carry out the work in a well ventilated area, which is likely to mean outside.

Sorry kids - other than possibly the acrylic paint - these things are strictly off limits.

Go and see the doc:

Here's the "oni" mask on Thingiverse that we're using:
The actual "thing" we made can be found on Thingiverse here:
The Pi Hut has an excellent tutorial on how to work with LEDs with the Pi.  It's important to read one of these as you can end up frying your Pi.
Yes, we know there are other servo manufacturers, but we do (rightly or wrongly) appear to be hooked on those made by HiTEC.
We're continuing to use the Adafruit 16-channel PWM / Servo HAT, for which the documentation is here:
There are detailed instructions on how to paint your 3D-printed PLA model here (which we tried to follow):



LoRa-Wan Kenobi

In the regurgitated words of Michael Bublé: It's a new dawn .  It's a new day .  It's a new Star Wars film .  For me .  And I'm (George Lucas, and I'm) feeling good .  Unfortunately for Canadian Mike, the Grammy that year was won by the novelty disco classic with the famous refrain: We love IoT, even in Planet Tatooine * . *Not true. Clearly, the Star Wars producers didn't sincerely mean the last Jedi the previous time around.  Return of the Jedi, released during the decade that spearheaded cultural renaissance 2.0 with the mullet and hair-metal , was less economic with the truth.  Either way, we're going to take inspiration from the impressive longevity of the money-spinning space-opera and reboot our franchise with some Jedi mind tricks.  Except this particular flick doesn't require an ever-growing cast of unrecognisable characters, unless ASCII or UTF counts.  In place of an ensemble gathering of Hollywood stars and starlets, we will b

Battle of BLEtain

The trolling . The doxing . An army of perplexing emojis. And endless links to the same - supposedly funny - viral video of a cat confusing a reflection from a dangling key for a golden hamster, while taking part in the mice bucket challenge. Has social media really been this immense force for good? Has it actually contributed significantly to the continued enlightenment of the human (or feline) race? In order to answer these poignant existential questions about the role of prominent platforms such as Critter, StinkedIn and Binterest, employing exceptional scientific rigour equal to that demonstrated by Theranos , we're going to set up a ground-breaking experiment using the Bluetooth Low Energy feature of MicroPython v1.12, and two ESP32 development boards with inexplicable hatred for one another.  And let them hurl quintessentially British expressions (others call them abuse) at each other like two Wiltshire residents who have had their internet access curbed by the co

Hard grapht

You would all be forgiven for assuming that bar , pie and queue line are favourite pastimes of the British .  Yet, in fact – yes, we did learn this back in GCSE maths – they are also mechanisms through which meaningless, mundane data of suspect origin can be given a Gok Wan -grade makeover, with the prime objective of padding out biblical 187-page PowerPoint presentations and 871-page Word reports (*other Microsoft productivity tools are available).  In other words, documents that nobody has the intention of ever reading.  But it becomes apparent over the years; this is perhaps the one skill which serves you well for a lifetime in certain careers.  In sales.  Consultancy.  Politics.  Or any other profession in which the only known entry requirement is the ability to chat loudly over a whizzy graph of dubious quality and value, preferably while frantically waving your arms around. Nevertheless, we are acutely conscious of the fact that we have spent an inordinate amount