My design flow these days; aka: making a air-pump bit holder clip

I tend to make handy little things quite often, I thought my latest effort may make a good little write-up.

I recently found a really nifty battery-powered and rechargeable air-pump at a local thrift store for… this came with a extension tube ending in a normal car tyre fitting, and four little ‘tips’ for airbeds, balls and a Schrader valve adapter (my bikes use these) in a paper bag that was already falling apart :open_mouth: .

So I made the following little fitting:

It holds the spare tips, clips onto the extension hose, and has a ‘spanner’ for helping get stubborn valve caps and tips unscrewed.

I made two spares for friends with the same type of pump. You can also see two rejected prototypes.

This is printed from PC-ABS, hard to print well (stringing!!) but very tough and stable. I suspect it would not last long if made from PLA, the clips would rapidly lose their power and break on such a small part. But with the PC-ABS it feels, strength and toughness wise, much more like a injection moulded part than a print.

Sliced in PrusaSlicer with adaptive layers and ‘avoid crossing perimeters’ on to control the worst of the stringing, part cooling needs to be almost off for this material to maximise layer adhesion, I also use a ‘shield’ made of card around the printbed in lieu of a proper enclosure.

Bed adhesion and release of the PC-ABS on my new-ish Garolite (G10–FR4) bed + hairspray + 100C is superb; I’ve only ever got this material to print on (and divot) glass before, it also destroyed a PEI sheet by adhering too well :frowning:

Here is the SCAD I used: It was adapted from a previous project and came out slightly janky as a result.
// tyre pump tips holder

$fn=120;

wall = 2.4;
tall = 8;
rad = 8;
inner = 7;
// hole is: [x,y,diameter,angle]
holes = [[48,0,9,0],
         [12,0,7.6,90],
         [24,0,7.6,90],
         [36,0,7.6,90],
         [48,0,7.6,90]];


difference() {
  linear_extrude(height=tall,convexity=10) {
    difference() {
      union() {
        for (a=holes) {
          translate([a[0],a[1]])
          rotate(a[3])
          clip(dia=a[2]);
        }
        hull() {
          circle(d=inner);
          translate([48,0])
          circle(d=inner);
        }
        circle(d=14);
      }
      hull() {
        translate([10,0])
        circle(d=rad/2);
        translate([48,0])
        circle(d=rad/2);
      }
    }
  }
  *#cylinder(d1=8,d2=10.5,h=tall,$fn=90); // Alignment aid
  for (a=[0:24:90]) {
    rotate(a)
    cylinder(d1=9.5,d2=12.5,h=tall,$fn=4);
  }
  for (a=holes) {
    translate([a[0],a[1]])
    rotate(a[3]) {
      translate([rad,0,0])
      cylinder(d1=a[2]+wall/2,d2=a[2],h=wall/2);
      translate([rad,0,tall-(wall/2)])
      cylinder(d1=a[2],d2=a[2]+wall/2,h=wall/2);
    }
  }
  translate([26.8,-3,tall/2])
  rotate([90,0,0])
  linear_extrude(height=2,convexity=10) {
    text("easytarget.org",size=4.7,halign="center",valign="center");
  }
}

module clip(dia=10) {
  difference() {
    hull() {
      translate([rad,0])
      circle(d=dia+wall);
      circle(d=inner);
    }
    translate([rad,0])
    circle(d=dia);
    translate([rad+dia/2,0])
    square([dia,dia-0.4],center=true);
  }
}

And the STL.
line-module-clip.stl (78.0 KB)

3 Likes