Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
The whole point of the new guide tube block is to see if a larger ID tube will reduce the force required to pull the filament through it; long after Dan suggested simply using a larger tube, I got around to picking up a lifetime supply of 1/4 inch OD polyethylene tubing: 25 feet for $3. The ID is about 0.17 inch = 4.3 mm, large enough to let the 1.75 mm filament move smoothly, and the inside clearance provides a few millimeters of free motion so that retraction moves don’t require pushing the guide tube around.
The new filament guide + wire cover anchors the spool end of the tube:
M2 Larger Filament Guide – overview
On the other end, I blobbed a piece of 1/4 inch ID tubing to anchor the guide tube. It’s nicer than the twist of cardboard I used before, but nothing to get excited about:
As I hoped, the larger guide tube reduces the force required to pull the filament into the extruder under 1 pound. Most of that force comes from persuading the filament spool to drag-rotate around the plastic support arm, so some simple improvements should help there, as well. I foresee some bearings in its future.
Fine tuning of the tubing length is also in order, but that’ll require more printing sessions.
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
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
It fits just about the way you’d expect:
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();
The Makergear M2 comes with a plastic block that covers the X-min switch wiring and anchors the end of the filament guide. Because the guide wasn’t anchored to the block, bumping the guide tended to bend the filament where it exited the block. To prevent that, I hot-melt-glued the guide to the block, which really wasn’t particularly elegant. This picture shows the X-min switch relocated to contact the platform, with the slightly out of focus blob anchoring the guide off to the right:
M2 – Z-min switch at rear X gantry
Makergear provides STL files of the M2’s printable bits, including several versions of the wire cover block. This corresponds to the one on my M2, although the rounded edges don’t come through in the plastic very welll:
Stock M2 Wire Cover Filament Guide – solid model
Because STL files aren’t editable, I reverse-engineered the dimensions into an OpenSCAD model that I could use as the basis for a different guide. This is just the basic wire cover, minus the filament guide extension, plus a flat end that wraps around the edge of the chassis:
M2 Wire Cover – reverse engineered
The trick is to import the STL into OpenSCAD, then build a model that matches the key dimensions. Fortunately, Makergear used hard metric sizes for everything, so most of the numbers came out as integers or single-place decimals:
The shimmer indicates coincident surfaces; that’s ordinarily a Very Bad Thing, but in this case it shows that the dimensions match. The top of the holes have neat hexagonal patterns where my straight-sided PolyHoles extend through their chamfered circular holes:
Unlike my from-scratch OpenSCAD models, this one bristles with magic numbers that describe the dimensions of the M2 STL model. The basic shape comes from an extruded polygon matching the outside walls, another extruded polygon knocking out the wire channel, then cubes lopping off the top surfaces:
M2 Wire Cover Filament Guide – overlay – F12 view
The end result of all that thrashing around has a certain Soviet Concrete look to it:
M2 Wire Cover – OpenSCAD solid model
This version lacks the filament guide; I wanted to make sure all the protrusions and channels fit, which they sort of did:
M2 reverse engineered wire cover – installed
The next version will have slightly more clearance on the side and slightly less on the top; that’s easy to do now that I have an editable OpenSCAD model.
The OpenSCAD source code:
// Improved M2 filament guide and X-min switch wire guide
// Ed Nisley KE4ZNU - Oct 2013
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
Protrusion = 0.1;
HoleWindage = 0.2;
//- Sizes
PlateMinThick = 8.0; // basic thickness excluding wire guides
PlateLength = 5.0; // from side of frame beyond top wire guide
TopGuideLength = 7.0; // protrusion from plate
PlateThick = PlateMinThick + TopGuideLength;
echo(str("Total thickness: ",PlateThick));
//- 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,FrameOffset,0]) { // align neatly for later processing
if (true)
color("Green",0.3)
translate([-18,22,15])
rotate([-90,0,-90])
import("/mnt/bulkdata/Project Files/Thing-O-Matic/M2 Parts/Filament Guide/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");
}
}
}
//- Build it
ShowPegGrid();
BaseBlock();
As you can tell from the stock Makergear HBP, I printed it a while ago. It’s the full-length version of that classic, not the shortened Barbie Pistol for the Thing-O-Matic which has been fending off zombies for the last three years (unsuccessfully, from what I hear).
The finished product is a bit ungainly:
Nerf pistol – loaded
That’s not the proper Nerf dart for the thing, but it’s scavenged from tag sale debris and some day I’ll pick up a pack of the skinny ones.
All the pivot points and the sear spring are 3 mm black ABS filament, mostly for contrast. They’re glued in with dabs of Oatey clear PVC cement, the kind with tetrahydrofuran in addition to the usual hellish mix of acetone and MEK.
I bring it along to my show-n-tells, just so I can say I downloaded and printed a gun long before Defense Distributed made it trendy. Haven’t gotten into any trouble yet, but I’m sure some Zero Tolerance regime will bust my ass one of these days.
It was a big hit with the adolescent males at a Squidwrench event, for some reason. [grin]
After enduring my OpenSCAD solid modeling class, The Might Thor conjured up a solid model of a Thing he wanted and asked if it was buildable. I added a pair of hemispheres to round off the tops, thinned and widened the baseplate for better adhesion, and Fired the M2:
Double Helix – on platform
I thought the overhang was aggressive, but, while it’s not perfect, it’s not nearly as awful as I expected. Perhaps tinkering with a slightly lower extrusion temperature would help.
It’s far less blocky than the stuff I build!
The OpenSCAD model is his; you get to figure it out on your own. Hint: linear_extrude a pair of circles with a twist.
After the last annual inspection, the Nice Man told me that the rear shocks were rusted out and, although they still worked and he couldn’t fail the van, he wished he could. After 13 years and 88 k miles, yeah, they looked pretty grim:
Sienna OEM rear shocks – removed
The loose steel snippet came from the bottom of the outer shield; it had completely rusted off and dropped free around the lower mount. I suppose that was what got his attention.
Anyhow, the removal went astonishingly well:
Back the van out of the garage until the wheels line up with drop to the driveway apron
Pop inside dress covers over the struts
Remove top jam nuts, cushion, cups
Remove bottom bolt from wheel carrier (easily!)
Spritz penetrating on rubber bushing
Compress shock, twist until bushing slides free
And the installation was equally smooth:
Install shock on wheel carrier
Torque bottom bolt (29 ft·lb)
Aim strut at hole in body
Cut restraining wire, guide strut through hole
Install OEM bottom cup, new cushion & cup, new nylock nut
Tighten to same length as OEM nut
Install dress covers
The OEM cup fits snugly into the body hole to center the strut, so it seemed like a Good Idea to reuse it. Despite the rust stain inside the body, it was in reasonable condition.
You’re supposed to jack the van up while fiddling around underneath, but the driveway slopes down from the garage enough to provide access. I did chock the wheels, of course, but not jacking the van and putting it on stands looked like a major safety win right there.
The bottom view, which shows the effect of a dozen New York State winters on ordinary steel:
Sienna replacement rear shocks – bottom
The top view, which shows that the bushings did leak a bit of water over the last decade:
Sienna replacement rear shocks – top
Done!
I suppose, just for completeness, I should do the front shocks, but those aren’t nearly as easy and I’d have to start by buying a spring compressor.
The kitchen sink has a small faucet that used to connect directly to the well out back, but now delivers town water from a line bypassing the water softener. The large steel washer below the sink deck has been shedding rust for a while and finally disintegrated:
Kitchen faucet – rusted washer assembly
Well, this is a perfect application for plastic, not steel, so I conjured up a pair of disks:
Sink Base – Build
The large flat one goes below the sink deck in place of the steel washer and the smaller part of the stepped disk fits inside the deck opening to stabilize the faucet:
Sink Base – Show
The two dark rings bracketing the deck between the orange plastic disks represent a pair of gaskets / washers / seals cut from 1 mm rubber sheet with a straight razor toting compass:
Kitchen faucet – plastic disks and rubber deck washers
Just for fun, I used Slic3r’s Hilbert Curve top and bottom fill pattern. It produces a nice, grainy texture that feels appropriate for anything needing a non-slip grip (at least on the top, as the bottom surface is glass-smooth).
Everything stacks up thusly, with the top dark ring representing a rubber seal that came with the faucet:
Sink Base – Assemble
It looks about the same in real life, albeit minus all the colors:
Kitchen faucet – fitting stack
The black plastic and black rubber blend together and vanish amid all the chrome:
Kitchen faucet – assembled
Alas, when I turned the water on, Mary said “That doesn’t sound right…” at about the same time I discovered a fine mist under the sink. See if you can spot the problem:
Kitchen faucet – corroded copper tube
A shined-up view should make it obvious:
Kitchen faucet – corroded copper tube – pinhole
A trip to the precious metals aisle of the Big Box Home Repair Store produced a roll of 3/8 inch copper tubing, although I should have the stub end of that original roll somewhere in the heap. The fitting at the bottom of the faucet turned out to be completely non-standard and I had to re-use it with the new tubing, but it still sealed perfectly.
I hate plumbing jobs. That fix better last for another decade…