Custom Articulated Joint

I'm building a robot which requires small, articulated joints. Unfortunately I couldn't buy any, so I made my own.

Similar projects worth following
I'm building a robot which requires many small articulated joints. Unfortunately these don't seem to exist (at least I couldn't buy any) so I decided to make my own.

Each joint consist of four pieces:

1. The 3D printed joint
2. A 3D printed gear/chain assembly to move the joint
3. A tiny motor to move the joint.
4. An Arduino-based pcb to control the joint.

Here's a short demo:
Version 1.3:
Version 1.2:
Version 1.1:
Version 1.0:

Arduino code:

3D design (v1.2):

Original design (v1.0):

STL files:




  • 1 × 6mm gear motor
  • 1 × DRV8837 motor driver
  • 1 × Atmega328P (32 MLF) Microprocessors, Microcontrollers, DSPs / ARM, RISC-Based Microcontrollers
  • 1 × 10uF 0603 Decoupling capacitor
  • 1 × 10K 0603 Pull-up resistor

View all 7 components

  • New joint assembled

    Tim Wilkinson10/06/2016 at 05:17 0 comments

    Printed out a new instance of the joint and added the electronics. Here's it running.

    The five sensors allows five positions of the actuator (the original electronics just allowed two). Because they're much closer together, I will probably see if I can support some sort of "micro step" to position the actuator between sensors. But that's for later - for now I'm very happy it all works.

  • Two sided PCBs

    Tim Wilkinson10/05/2016 at 18:28 0 comments

    This is probably the first two sided PCB I've ever worked with. The previous version had a couple of hall sensors on the back, but this one has five - so fully populated on both sides. And when I tried to solder this up, one side of the components fell off while I was assembling the second side. Arg!

    After some frustration with this, I had to fix the first side with a little glue, let it fix, then solder the second. This worked ...

    but it's rather messy. Notice the yellow ink (I melted a work mat onto the components while working this out). It's moments like this that I wonder if cheap PCBA is available somewhere.

    The board tests and flashes correctly; the next step is to embed it in a joint.

  • New PCBs (v1.2)

    Tim Wilkinson10/02/2016 at 23:43 0 comments

    This project's been a bit quiet while I waited for the new PCBs to turn up; and they did this week.

    This version has a few improvements over the original:

    • No pull-up resistor! Having a pull-up on reset annoyed me in the original design. This version attaches the reset pin to another input pin which, in software, will be set to input+pullup, so pulling up the reset. I left the pads in for the original resistor just in case this doesn't work. There's obvious a window between the board resetting and the pins being configured, but the nature of the gate transistors means this should be okay.
    • Extra decoupling. I added pads for an extra decoupling capacitor. I've not seen a need for it, but it does no harm to have them.
    • 5 hall-effect sensors. This board has pads for 5 hall effect sensors on the back; the original only had 2. This will give me finer control over the position of the actuator.

    I intend to print and solder up a new joint later this week.

  • Pinshape

    Tim Wilkinson09/19/2016 at 05:06 0 comments

    This evening I made a quick PinShape entry which makes it easier to get hold of the STL files (no OnShape account necessary). You can find it here:

  • Double joint

    Tim Wilkinson09/18/2016 at 00:39 2 comments

    Here's a quick photo and video of two joints connected together - mostly a test that one can life the weight of the other, and that the software network actually works as intended.


  • Version 1.2

    Tim Wilkinson09/11/2016 at 04:22 0 comments

    I continue to iterate on the joint design. One of the joys - possibly problems - with a 3D printer is how easy it is to experiment with a new design. This one moves the fulcrum closer to the top of the worm gear, reducing the high of the joint by 20% compared to the pervious version. I'm trying to make things compact so this is important to me. The joint in operation is here:

    I continue to be worried about the links between the rod, link and pivot. These are snap-fit "chain" like fittings. The FormLabs white resin version 1 was quite flexible which enabled these parts to be pushed together without any being deformed. This is less so of their version 2 resin and I'm not completely happy with the mechanically sound-ness of these as a result.

  • Version 1.1

    Tim Wilkinson09/08/2016 at 03:27 0 comments

    I've uploaded a video of version 1.1. This redesigned some of the internal push/pull mechanism to remove the elastic and chain. Instead I use a more solid rod with a small chain piece connecting it to the pivot. Works well as you can see below:

  • Jig

    Tim Wilkinson09/06/2016 at 00:23 0 comments

    For testing purposes, I have my control PCB wired up to a set of pin headers on a scrap of protoboard. With the final joint, these pcbs need to have minimal wiring, but still be programmable. I usually use a Tag Connect for such things, but in they case I don't have space even for its small footprint, so I had to build a custom jig.

    The photo above shows the completed jig. It was 3d printed so it matches the board connections perfectly, and then I used epoxied pogo pins to provide the electrical connection. All the programming pins are then attached to a standard AVR 6-pin ISP connector.

    The jig design can be found here:

  • Software: Networking

    Tim Wilkinson09/04/2016 at 05:52 3 comments

    The eventual robot is going to have *lots* of these joints. If I took a traditional servo approach, I'd need three wires per devices - power, ground and PWM. Assuming I bus the power and ground, that still leaves one wire per device for control; so with 30 devices that's 30 wires to thread and terminate on some eventual controller. I wanted something better.

    My first plan was be to implement these joints as 1-wire devices. That way I could bus the control wire between all the devices and have just a single control wire at the controller. Unfortunately, while there are some nice Arduino libraries to implemented 1-wire slaves, my boards only run at 8MHz (the internal clock rate) which isn't fast enough to make them work, or at least work reliably.

    Fortunately I had a fallback plan. I'm old enough to remember the Cambridge Ring - not some kind of upper class network of students spying for Russia - but an early networking protocol. Leaving aside the specific implementation details, it was essentially a ring of serial lines where each transmitter was connected to the next receiver (the last being connected back to the first). Messages are passed round the ring until they reach the destination.

    So I build a ring network which works on a similar principles. Each Arduino TX is connected to the next Arduino RX, and then messages are encoded and sent around the network. To operate any given device a message is send along the network to the desired target where it is executed. The result is a large network of devices (~250) with just two wires and usable by anything with a serial line.

    The RingNet is IOS level 3/4 - ordered, reliable delivered at least once, datagrams (Update 9/5/16 - originally the network was unreliable, but fix that today).

    The networking code is here:

  • Elastic-less

    Tim Wilkinson09/02/2016 at 05:52 0 comments

    Currently testing a new design version which does away with the elastic and replaces some of the chain with a fixed "rod". Some quick tests without the elastic look promising.

View all 13 project logs

Enjoy this project?



Kris wrote 09/12/2016 at 19:33 point

Cool design. Perhaps I'm missing something, but could the design be simplified by mounting the D shaft of the motor rigidly to the Top, then mount (press-fit or glue) the motor into the Worm?

  Are you sure? yes | no

Tim Wilkinson wrote 09/12/2016 at 21:17 point

Could you possible draw this? The worm rotates around the motor which is fixed to the outer casing of the actuator, so I don't quite see how this works - but I'm terribly at converting words into a visual.

  Are you sure? yes | no

Kris wrote 09/12/2016 at 21:36 point

I found my mistake, I forgot about the wires connecting to the motor (doh).

  Are you sure? yes | no

Jenny Pabon wrote 09/08/2016 at 16:48 point

Hi Tim, We liked your project because we have a similar idea in our, but our micro-linear actuator is working with just 5V. so I don't know if you want to check it out and we would like to know what do you think about

  Are you sure? yes | no

Tim Wilkinson wrote 09/08/2016 at 23:45 point

This is very cool! I'm still trying to get my head around the final design of your linear actuator; any chance you could add a post breaking that out (or point me at it if I missed it)?

  Are you sure? yes | no

deʃhipu wrote 09/04/2016 at 09:35 point

Really nice! It reminds me of this project: 

  Are you sure? yes | no

christopher.r.barry wrote 09/03/2016 at 16:59 point

Wonderfully compact and minimal design, but yeah, as has been mentioned, push/pull somehow would be stronger and less prone to flex. One minimal nitpic is your use of the word 'bolt' to refer to the part that's actually the 'nut'. An option I was thinking about was to make the worm thread recess into it's cylinder, rather than stand off it like a typical bolt thread. With the threads inset, and with two simultaneous sets, (a left hand and a right hand) then two push/pull rods opposite the inset threaded worm would have attached partial ( e.g. half circular) nuts one with left hand, and one with right hand threads extended out rather than inset. These half-nuts would ride against the flat cylinder of the worm, but as the worm turned clockwise, one nut/push/pull rod would go up, and the other would go down. These nuts would also ride against and be held in position by the outer sleeve. This would allow the same cylindrical footprint, but provide a stronger push/pull result. Hope that makes sense. Hard to write a description of a complex mechanism. :)

One question though, is what is your plan for cable management in the final design?

Great work though Tim. You've obviously put in a lot of thought on this.


  Are you sure? yes | no

Tim Wilkinson wrote 09/03/2016 at 17:21 point

Bolt == Nut ... damn and blast it! I get that wrong all the time and I don't know why (makes looking for the right thing on Amazon annoying every single time I do that). I'll will go fix that - thanks.

  Are you sure? yes | no

Tim Wilkinson wrote 09/04/2016 at 06:02 point

Regarding your proposed mechanism ... er ... don't suppose you want to draw it do you? Thanks.

  Are you sure? yes | no

christopher.r.barry wrote 09/04/2016 at 13:34 point

Well, I was going to sign up for Onshape because it's very slick, and extraordinarily performant for a webapp, but the EULA was too onerous for my taste, so I bailed from joining them. So that's out. I can quickly hand draw the idea on my whiteboard and post a photo of that for you though. It's pretty simple, and will require only a few modifications to your excellent design.

I went and looked up the motors - wow I hadn't realized they were only 6mm dia! Very cool!

  Are you sure? yes | no

christopher.r.barry wrote 09/04/2016 at 15:17 point

Quick whiteboard hackup, but I think you'll get the picture. I integrated the nut/push/pull components into a single molded PP part for simpler assembly, however that required a stacked pivot ass'y w/ a (partially) geared hub. The stack would index to each other to lock together.  Ideally the whole thing snaps together without any adhesives, and parts are all mirrors when possible.

  Are you sure? yes | no

Tim Wilkinson wrote 09/12/2016 at 21:19 point

@christopher.r.barry apologies, never did reply to your whiteboard drawing, which I much appreciated ... though was ultimately rather intimated by. For the moment at least I'm going to stick with the single rod design and try to stiffen things up by using an external pivot to join the various rods, links and pivots together. Hoping this will have less play than the snap-fit version.

  Are you sure? yes | no

Idris wrote 09/13/2016 at 16:33 point

I think he's talking about something like this

The crucial difference is that the worm gear (green) has two threads on it in opposite directions and the slider is split in two. Each slider engages with a different thread so that as the worm turns each slider moves in an opposite direction. The chain (long red loop) then goes up and around the pivot to actuate the joint.

  Are you sure? yes | no

christopher.r.barry wrote 09/13/2016 at 18:03 point

@Idris That is exactly how my design modification works, thanks for hacking up an animation of it. In my drawing however, the part that wraps around the knuckle is a rack gear, and the knuckle is the pinion. @Tim Wilkinson Don't be intimidated! It's basically your design with push/pull. The forces applied against the mechanism will always use the rack in tension, which is it's strongest direction to resist load. This can allow smaller and lighter parts for a similar load capability. Overbuilding a push rod to resist buckling is, IMHO, not the right direction to go in. If, on the other hand, you do not wish to rotate the board to the side of the ass'y , and this is the primary reasoning, then I can accept that.

  Are you sure? yes | no

Idris wrote 09/13/2016 at 18:14 point

@christopher.r.barry The red "chain" was supposed to represent a rack and pinion but my cad skills don't extend to animating a flexible rack with teeth. I was thinking, as you've alluded to in your sketch, that the two sliders and rack could be printed as one part then bent around the pinion though that would require the second "knuckle" to be separable for assembly.

  Are you sure? yes | no

christopher.r.barry wrote 09/13/2016 at 18:29 point


You mean you were thinking this

 "I integrated the nut/push/pull components into a single molded PP part for simpler assembly, however that required a stacked pivot ass'y w/ a (partially) geared hub." 

from several comments up?

  Are you sure? yes | no

David H Haffner Sr wrote 09/02/2016 at 21:34 point

Bravo ! necessity is always the mother of invention!

  Are you sure? yes | no

Astaxanthin wrote 09/01/2016 at 20:28 point

Nice concept, congrats!

  Are you sure? yes | no

Thomas S. wrote 09/01/2016 at 19:15 point

Brilliant design! Can't you add a second link on the opposite side to solve the problem that the link flexes while pushing?

  Are you sure? yes | no

Tim Wilkinson wrote 09/02/2016 at 05:06 point

In an earlier iteration I tried to do something like this. Basically you need one chain to pull while the other pushes (and vice versa). The only way I could think to do the was with nylon line rather than chains since one would have to be looped underneath so they moved in opposite directions as the worm moved the nut. I burned out a few motors trying to get that to work and eventually abandoned the approach (the nylon was tricky to work with).

I'm still refining the OnShape design to try to eliminate the elastic.

  Are you sure? yes | no

Tim Wilkinson wrote 09/01/2016 at 05:18 point

I just added the pcbs to github - the current version is here -

I'll be adding to the writeup of they project over the next few days with more information.

  Are you sure? yes | no

Boris van Galvin wrote 09/01/2016 at 04:20 point

I am interested in what the PCB is, and how you set it up to track the rotations of the motor. was it a custom one? is there a circut diagram?

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates