The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

The New Hotness

  • HP 7475A Plotter: Pen Refilling Station

    A place to store your vials of blended inkjet juice, plus a workstation for the plotter pen you’re refilling and that ink vial up front:

    HP7475A Plotter Pen Refilling Station
    HP7475A Plotter Pen Refilling Station

    The two pen holders accommodate ordinary fiber-tip pens and ceramic-tip pens. The slot along the front lets you keep track of the ink level, not that there’s much danger of running dry at 0.05 ml per refill from a vial holding 1 ml of blended ink. The big flange makes it harder for me to knock the damn thing over; avoiding an ink spill, even when you have a towel underneath, is a Good Thing.

    The Slic3r tool path preview shows off the Hilbert Curve top & bottom infill:

    Plotter Pen Refill Vial Holder - Slic3r preview
    Plotter Pen Refill Vial Holder – Slic3r preview

    The OpenSCAD source code:

    // HP7475A Plotter Pen Refill Station
    // Ed Nisley KE4ZNU - August 2015
    
    //- Extrusion parameters - must match reality!
    
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    
    Protrusion = 0.1;
    
    HoleWindage = 0.2;
    
    module PolyCyl(Dia,Height,ForceSides=0) {			// based on nophead's polyholes
    
      Sides = (ForceSides != 0) ? ForceSides : (ceil(Dia) + 2);
    
      FixDia = Dia / cos(180/Sides);
    
      cylinder(r=(FixDia + HoleWindage)/2,
               h=Height,
    	   $fn=Sides);
    }
    
    
    //------
    // Dimensions
    
    WallThick = 6*ThreadWidth;
    BaseThick = IntegerMultiple(1.0,ThreadThick);
    
    VialOD = 8.0;
    VialOC = VialOD + WallThick;
    
    VialArray = [4,4];			// number of vials in each direction
    
    PenOD = [14.7,11.7];			// regular fiber pen body, ceramic *cap* dia
    NumPens = len(PenOD);			// really works for just two pens...
    PenLength = 38;
    FlangeOD = 18;
    
    echo(str("Max pen OD: ",max(PenOD)));
    echo(str("Number of pens: ",len(PenOD)));
    
    Holder = [(VialOC*VialArray[0] + WallThick),(VialOC*VialArray[1] + 2*FlangeOD + WallThick),(3*VialOD + BaseThick)];
    HolderRound = 5.0;
    
    //- Build it
    
    	difference() {
    
    		union() {
    			hull() {
    				for (i=[-1,1], j=[-1,1]) {
    					translate([i*(Holder[0]/2 - HolderRound),j*(Holder[1]/2 - HolderRound),0])
    						cylinder(r=HolderRound,h=Holder[2],$fn=8*4);
    				}
    			}
    			
    			hull() {
    				for (i=[-1,1], j=[-1,1]) {
    					translate([i*Holder[1]/2,j*(Holder[1]/2 - HolderRound),0])
    						cylinder(r=HolderRound,h=BaseThick,$fn=8*4);
    				}
    			}
    			
    			for (i=[0:len(PenOD) - 1])
    				translate([(i*Holder[0]/2 - Holder[0]/4),-Holder[1]/4,BaseThick]) {		// spacing is a total hack
    					rotate(180/12)
    						cylinder(d=FlangeOD,h=PenLength,$fn=3*4);
    				}
    		}
    		
    		for (i=[0:VialArray[0] - 1] , j=[0:VialArray[1] - 1]) {
    			vx = i*VialOC - (VialOC*(VialArray[0] - 1)/2);
    			vy = j*VialOC - (VialOC*(VialArray[1] - 1)/2) + FlangeOD;
    			translate([vx,vy,BaseThick])
    				rotate(180/8)
    					PolyCyl(VialOD,Holder[2],8);
    		}
    		
    		translate([0,(VialOD/2 - Holder[1]/2),BaseThick])
    			rotate(180/8)
    				PolyCyl(VialOD,Holder[2],8);										// edges along open side => snug fit
    		
    		for (i=[0:len(PenOD) - 1])
    			translate([(i*Holder[0]/2 - Holder[0]/4),-Holder[1]/4,BaseThick]) {		// spacing is a total hack
    				rotate(180/12)
    					PolyCyl(PenOD[i],(PenLength + Protrusion),3*4);
    			}
    		
    	}
    

    Mostly because I can…