Makergear M2: Improved X-Min Wire Cover and Filament Guide Anchor

With the reverse-engineered wire cover model in hand, a bit of tinkering extends one side into a relentlessly rectangular block with a hole for the filament guide tube:

M2 Wire Cover Filament Guide - overview
M2 Wire Cover Filament Guide – overview

Because the block sits somewhat to the rear of the spool, I added a conical entrance to help ease the filament around the corner into the tube. The hole fits the larger 1/4 inch tube that I’m trying out, with a stop equal to the tube’s 0.17 inch ID just before the conical section, as shown in this cross-section view:

M2 Wire Cover Filament Guide - guide tube section
M2 Wire Cover Filament Guide – guide tube section

It fits just about the way you’d expect:

M2 Larger Filament Guide - rear view
M2 Larger Filament Guide – rear view

The perspective makes the guide tube look more angled than it really is; most of that curve is toward the front, so it’s considerably foreshortened in this view.

The metal bar with the cross pin sticking up in front is a bar clamp that holds an oak strip across the back of the bench to keep the M2 from walking away.

The OpenSCAD source code:

// Improved M2 filament guide and X-min switch wire guide
// Ed Nisley KE4ZNU - Oct 2013

Layout = "Build";				// Build Section

//- Useful Stuff

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

Protrusion = 0.1;

HoleWindage = 0.2;

//- Sizes

PlateMinThick = 8.0;				// basic thickness excluding wire guides
PlateLength = 55.0;					// from side of frame beyond top wire guide

TopGuideLength = 7.0;				// protrusion from plate

PlateThick = PlateMinThick + TopGuideLength;

echo(str("Total thickness: ",PlateThick));

GuideTubeOD = 6.3;					// max diameter!
GuideTubeID = 4.3;					// max diameter!
GuideTubeOffset = 45.0;				// centerline from edge of frame

//- Adjust hole diameter to make the size come out right

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);
}

//- Put peg grid on build surface

module ShowPegGrid(Space = 10.0,Size = 1.0) {

  RangeX = floor(100 / Space);
  RangeY = floor(125 / Space);

	for (x=[-RangeX:RangeX])
	  for (y=[-RangeY:RangeY])
		translate([x*Space,y*Space,Size/2])
		  %cube(Size,center=true);

}

//- Define basic block shape
//  Mostly reverse engineered from
//    https://github.com/MakerGear/M2/blob/master/Printed%20Parts/STL/M2%20X%20Endstop%20Wire%20Cover%20with%20Filament%20Guide.stl
//	Hence all the magic numbers...

module BaseBlock() {

SideGuideLength = 4.0;				// protrusion = even with frame interior
ChannelDepth = 4.5;					// wiring channel
FrameOffset = 28;

	translate([18,28,0]) {			// align neatly for later processing

		if (true)
			color("Green",0.2)
				translate([-18,22,15])
					rotate([-90,0,-90])
						import("file:///mnt/bulkdata/Project%20Files/Thing-O-Matic/M2%20Parts/Filament%20Guide/M2+X+Endstop+Wire+Cover+with+Filament+Guide.stl",
								convexity=10);

		difference() {
			linear_extrude(height=PlateThick,convexity=5)		// main block
				polygon(points=[[0,0],[0,22],[12,22],[12,7.5],[22,7.5],
								[22,-(PlateLength + FrameOffset)],[-18,-(PlateLength + FrameOffset)],
								[-18,0]
						]);

			for (i=[-1,0])
				translate([17,((i*15.0)+ 1.05),-Protrusion])
					rotate(180/6) {
						PolyCyl(3.1,(PlateMinThick + 2*Protrusion),6);		// screw holes
						PolyCyl(5.7,(3.0 + Protrusion),6);					//  ... countersink
					}

			translate([0,0,(PlateMinThick - ChannelDepth)])		// wire channel
				linear_extrude(height=15,convexity=5)
					polygon(points=[[2,-5],[2,19],[10,19],[10,-22],[-15,-22],[-15,-5]
							]);

			translate([-10,14,PlateMinThick])				// M2 frame
				rotate(-90)
					cube([42,35,10],center=false);

			translate([-5,5,(PlateMinThick + SideGuideLength)])	// shorten side guide
				cube([20,20,10],center="false");
		}
	}
}

//- Complete object

module GuideCover() {

	difference() {
		BaseBlock();

		translate([50,-GuideTubeOffset,PlateThick/2])
			rotate([0,-90,0])
				rotate(180/6)
					PolyCyl(GuideTubeID,60,6);

		translate([25,-GuideTubeOffset,PlateThick/2])
			rotate([0,-90,0])
				rotate(180/6)
					PolyCyl(GuideTubeOD,60,6);

		translate([41,-GuideTubeOffset,PlateThick/2])
			rotate([0,-90,0])
				rotate(180/6)
					cylinder(r1= 0.5*PlateThick,r2=GuideTubeID/2,h=8,$fn=12);
	}
}

//- Build it

ShowPegGrid();

if (Layout == "Section")
	difference() {
		GuideCover();
		translate([2*100/3,-GuideTubeOffset,-PlateThick])
			rotate(180)
				cube([100,PlateLength,3*PlateThick]);
	}

if (Layout == "Build")
	GuideCover();