This is a simple tool I made up in OpenSCAD and printed on my Solidoodle 2 printer to solve a fairly common use case for electronics hobbyists. It's all available on Thingiverse.

As I mentioned in a previous post using correctly trimmed hookup wires is a great benefit both in terms of functionality (shorter hookup wires result in lower resistance and induced current) as well as asthetics (the breadboard looks a lot neater).

Inspired by the Resistor Lead Forming Tool found on Thingiverse I made this tool to simplify the process of making hookup wires of the appropriate length (I know of some people who can do this manually through years of experience and natural skill - unfortunately I am not one of them).

About the Tool

The ``` // Tool to help bend wires for breadboard hookup wire. // Copyright (c) 2012, Shane Gough (The Garage Lab) // Free for all use (public domain) //--------------------------------------------------------------------

// Parameters (all dimension in mm) SPACING = 2.54; // Pin spacing for breadboard GAP = 10; // Gap between each length NOTCH = 2; // Size of each notch (increase if you use larger gauge wire) HEIGHT = 4; // Height of the tool

// Range of wire lengths for this tool FIRSTNOTCH = 2; LASTNOTCH = 12;

// Calculate the width (from center) for a given 'skip' value function skip_width(skip) = SPACING + (((skip - 1) * SPACING) / 2);

// Generate the base plate // // The base plate is just triangular flat surface. I use a single large rectangle for // the base and then slice away two rectangles to give the wedge shape. module baseplate() { angle = atan((SPACING / 2) / GAP); platelength = (2 + LASTNOTCH - FIRSTNOTCH) * GAP; platewidth = 2 * (NOTCH + skipwidth(LASTNOTCH + 1)); platexlat = (2 * NOTCH) + (platewidth / 2) + skipwidth(FIRSTNOTCH + (LASTNOTCH - FIRSTNOTCH) / 2); translate(v = [ platelength / 2, 0, HEIGHT / 2 ]) { difference() { cube(size = [ platelength, platewidth, HEIGHT ], center = true); translate(v = [ 0, platexlat, 0 ]) { rotate(a = [ 0, 0, angle ]) { cube(size = [ platelength * 2, platewidth, HEIGHT ], center = true); } } translate(v = [ 0, -platexlat, 0 ]) { rotate(a = [ 0, 0, -angle ]) { cube(size = [ platelength * 2, plate_width, HEIGHT ], center = true); } } } } }

// Generate a single 'notch' // // This generates a set of objects to 'cut into' the base plate module notch(skip) { notchwidth = skipwidth(skip); translate(v = [ (skip - FIRSTNOTCH + 1) * GAP, 0, 0 ]) { union() { translate(v = [ 0, NOTCH + notchwidth, HEIGHT / 2 ]) { cube(size = [ NOTCH, NOTCH * 2, HEIGHT ], center = true); } translate(v = [ 0, -NOTCH - notchwidth, HEIGHT / 2 ]) { cube(size = [ NOTCH, NOTCH * 2, HEIGHT ], center = true); } translate(v = [ 0, 0, NOTCH + (HEIGHT - NOTCH) ]) { cube(size = [ NOTCH, 2 * (notchwidth + 2 * NOTCH), 2 * NOTCH ], center = true); } } } }

// Main program echo("Object width is ", 2 * (NOTCH + skipwidth(LASTNOTCH + 1)), "mm"); echo("Object length is ", (2 + LASTNOTCH - FIRSTNOTCH) * GAP, "mm"); echo("Object height is ", HEIGHT, "mm"); translate(v = [ -((2 + LASTNOTCH - FIRSTNOTCH) * GAP) / 2, 0, 0 ]) { difference() { baseplate(); for(skipval = [FIRSTNOTCH:LASTNOTCH]) { notch(skipval); } } } ``` is parametric so you can easily generate the exact type of tool that you want. The core parameters are at the top of the file:

 // Parameters (all dimension in mm)     SPACING = 2.54;  // Pin spacing for breadboard     GAP     = 10;    // Gap between each length     NOTCH   = 2;     // Size of each notch (increase if you use larger gauge wire)     HEIGHT  = 4;     // Height of the tool

The Concept

The SPACING parameter sets the distance between the holes - for breadboards this is 2.54mm (or 1/10th of an inch). The GAP parameter specifies the distance between each bending notch and NOTCH specifies the width and depth of the notch to place the wire in. HEIGHT is the total height (or thickness) of the tool. All of these parameters can be left at defaults, you may want to change NOTCH if you use a different gauge wire and perhaps the GAP parameter to fit the tool into your available print area.

The next set of parameters specifies the minimum and maximum lengths of the wires you can bend:

 // Range of wire lengths for this tool     FIRST_NOTCH = 2;     LAST_NOTCH = 12;

These values indicate the number of holes to skip - a value of 2 for example indicates that one end of the wire goes into hole 1, two holes are skipped and the other end of the wire goes into hole 4. The notches are generated with an interval of 1 - the values above will generate a tool with 11 notches in it (from 2 to 12 inclusive). Obviously the FIRSTNOTCH value must be less than the LASTNOTCH value.

Using the Tool

I use the tool as follows:

  1. Strip approximately 3mm of plastic from the end of the wire.
  2. Place the wire in the tool such that the edge of the plastic lines up with the horizontal edge of one of the notches.
  3. Bend the other end of the wire around the other side of the notch.
  4. Use wire cutters to trim the wire 3mm from the bend (with the default values this is about 1mm below the bottom edge of the tool).
  5. Strip approximately 3mm of plastic from the other end of the wire.

    The Reality

    You might want to adjust the parameters so that the height of the tool (minus the notch size) is the same dimension as the amount of plastic to be stripped. As it stands the tool works for me as it is but I may change my mind with increased usage.


One of the main things I learned from designing this tool (and then physically printing it) is that you can suffer from floating point precision issues when designing something in OpenSCAD. The notches in the tool are subtracted from the main tool shape using CSG (Constructive Solid Geometry). I originally designed this negative space to match the dimensions of the base shape I was subtracting from exactly - when I ran the resulting STL file through a slicer to generate the printable gcode file it decided that there was a very slim layer on top of some of the notches. The trick is to make sure the chunks you subtract from a solid object extend beyond the boundaries of the source object by a reasonable amount (basically I just doubled the size).

Another thing I learned was how important tuning your slicing software to match your printer is. Every printer is different (and I don't just mean differences between models and manufacturers - every single printer is different) and customising the profile for your printer makes a huge difference in output quality. I'm working on a good base (0.3mm resolution) profile in Slic3r for my Solidoodle 2 (this site has been essential in helping in this process). It is well worth the time going though calibration and tuning for your printer.

Finally, going from idea to implementation is significantly easier with a 3D printer. If I had to make a tool like this using standard woodworking for example I doubt I would have bothered. This sort of tool has such a limited audience that I don't think anyone would make a mass produced version of it either. However, here it is - it's made my life a bit easier and hopefully it will do the same for others - total cost (if you already have a 3D printer) is probably around 10c worth of plastic and 45 minutes of your time.

Now I can get back to building some electronics projects - once I get the PIC Tutorial to a stage where we are actually driving motors, servos and steppers I'll start describing some more interconnection components to make it easier to drive things in the real world.