Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
At one point along the way, the Control Panel reported the ABP temperature as 1024 °C, which seemed excessive. A bit of poking around revealed this situation on the ABP connector:
Overheated and chafed ABP connector
The connector just barely clears the top of the X axis homing switch board and the loose wires tended to rub on the top of the cable connector. I’d been meaning to fix that for a while, but now I had a real reason.
A bit of soldering and some self-vulcanizing tape later:
Strain relief on ABP connector
Also: notice the discoloration on the connector shell surrounding the Black wire? That’s the contact leading back to the MOSFET from the platform heater: a single pin carrying far more than its rated current. The shell around the contact on the Red wire (which carries the same current) isn’t discolored, which suggests the Black connector is a bit loose / poorly crimped / whatever. It looked OK to me, so I left it alone.
While I had the cable on the bench, I added a set of those right-angle pins to eliminate the risk of loose wire ends getting into the wrong places.
The hose on our aging Samsung Quiet Jet (used to be a Quiet Storm, but I suspect they lost a trademark fight) vacuum cleaner has been a constant nuisance. Most recently, the end toward the handle began splitting:
Splitting vacuum hose
The fix consisted of a tight duct tape wrap, which has absolutely nothing to recommend it other than expediency.
When the same thing happened on the other end, I sealed it up and added a length of husky heatshrink tubing.
Strain relief on vacuum hose
The flared end isn’t particularly decorative, but it serves to reduce the strain on the hose. Alas, there’s no practical way to do the same thing on the handle end.
The replacement cost for the hose roughly equals a new vacuum, so when we run out of bags, this one gets harvested for the shop’s Parts Heap.
I tried using the Skeinforge Cool plugin in order to print the first layer at a higher temperature than the bulk of the object, with an eye toward improving the first layer’s adhesion to the build platform. Even with Reverse sucking back the filament before Cool begins, the nozzle dribbles little snots as it passes around the object’s perimeter:
Cool snots
The nozzle orbits at exactly the top of the just-extruded layer, so the least little bit of ooze from the nozzle sticks to the layer. The spacing between snots shows that the nozzle fills up on a regular basis, even with the Extruder motor turned off.
Running the extruder motor backwards for a bit would introduce an actual air bubble inside the nozzle, but then the plastic would ooze to the bottom, the air bubble would rise, and the nozzle would fart after starting the next layer. Not a desirable outcome.
These tweaks to the cool_start.gcode and cool_end.gcode routines lift the nozzle during the cooling orbit and lower it at the end:
Alas, Skeinforge inserts those files at every layer change, which means the nozzle jumps up-and-down at the same spot on every layer… and that introduces a major blemish at what used to be a minor seam.
Worse, if you’re building multiple copies of the same object, the G-Code file finishes a layer on the last object, does a little hop, returns to the first object, does a little hop, and then begins the cool-down orbit. Maybe that could be fixed by moving Cool after Multiply, but it’s starting to look like a hackfest instead of Just Working.
Even after printing nice calibration objects, real-world projects sometimes don’t come out quite right.
This set of fairing plates for my Esteemed Wife’s bike was a test case to see if the hole threads would stick together better than before. As it turned out, no, they didn’t:
Upper mount – hole separation
The Infill w/t=1.75 setting seems to be slightly too high (meaning Skeinforge thinks the threads occupy slightly more space than they actually do), so the top isn’t quite as nicely packed as it should be.
The threads around the holes aren’t sticking together at all. A closer look:
Hole details
The first layer of the upper-left and lower-right holes didn’t adhere to the ABS covering the aluminum plate and tangled with the remaining layers. In various combinations: the perimeter didn’t bond to the extra shells, those shells didn’t bond together, and the fill didn’t bond to the shells.
Parameters:
Infill overlap = 0.3
Infill solidity = 0.25
Infill w/t = 1.75
Feed = 40 mm/s
I could dial back the perimeter feed ratio a bit, but that won’t affect the infill-to-shell problem. Adhesion to the build plate depends critically on the initial height of the first layer and the speed of the nozzle across the plate; those I can adjust.
Another mechanical cause: slightly loose drive belts. That usually shows up as backlash causing oval circles, but for small circles a pair of loose belts might just produce a too-small circle. I’m about to take the whole XY stage apart for another purpose, so adjusting the belts will come naturally.
Those plates handle the upper mount points, but the fairing also attaches to each side of the front fork. A nice rounded oval mates the fairing to the bracket, with two foam pads adapting the flat plates to the curved fairing surface. This view shows the outside of the fairing:
Lower mount – front
The hole position requires a mirror-image pair of mounts that, mercifully, all fit on the build platform at once. The solid models look about like you’d expect:
Lower Bushings
Those little tabs on the inside edge of the bracket recess printed about as poorly as you’d expect, but they’re not really critical.
I printed a set of white plates for my bike, installed the new filament tensioner, and went full frontal Barbie for my favorite ladies. This view shows the inside of the fairing:
Lower mount – rear
Turns out my ladies don’t like pink any more than I do.
The OpenSCAD source:
// Clamp plates for Zzipper fairing on Tour Easy recumbents
// Ed Nisley - KE4ZNU - Mar 2011
// Build with...
// extrusion parameters matching the values below
// 4 outer shells
// 4 solid surfaces at top + bottom
include </home/ed/Thing-O-Matic/lib/MCAD/units.scad>
// Extrusion parameters for successful building
ThreadWidth = 0.55; // should match extrusion width
ThreadZ = 0.33; // should match extrusion thickness
HoleWindage = ThreadWidth; // enlarge hole dia by extrusion width
// Plate dimensions
Layer1X = 35; // against fairing surface
Layer1Y = 30;
Layer1Z = 2*ThreadZ;
HoleOffsetX = 5.0; // will be sign-flipped as needed
HoleOffsetY = -(Layer1Y/2 - 10.0);
Layer2Margin = 1.5; // uncovered edge
Layer2X = Layer1X - 2*Layer2Margin;
Layer2Y = Layer1Y - 2*Layer2Margin;
Layer2Z = 3*ThreadZ;
MountX = 16.3 + HoleWindage; // front fork mounting plate
MountHoleOffset = 13.0; // Y end to hole center
MountY = Layer1Y;
MountZ = 4*ThreadZ; // recess depth
MountCap = 3.0; // endcap arc height
MountR = (pow(MountCap,2) + 0.25*pow(MountX,2)) / (2*MountCap); // ... radius
Layer3Margin = 1.5;
Layer3X = Layer2X - 2*Layer3Margin;
Layer3Y = Layer2Y - 2*Layer3Margin;
Layer3Z = 3*ThreadZ;
PlateZ = Layer1Z + Layer2Z + Layer3Z;
HoleDia = 0.25 * inch; // these are 1/4-20 bolt holes
// Convenience settings
BuildOffsetX = 3.0 + Layer1X/2; // build X spacing between top & bottom plates
BuildOffsetY = 3.0 + Layer1Y/2; // ... Y
Protrusion = 0.1; // extend holes beyond surfaces for visibility
//---------------
// Create plate
module Plate() {
union() {
translate([0,0,Layer1Z/2])
scale([Layer1X,Layer1Y,1]) cylinder(r=0.5,h=Layer1Z,$fn=32,center=true);
translate([0,0,Layer1Z + Layer2Z/2])
scale([Layer2X,Layer2Y,1]) cylinder(r=0.5,h=Layer2Z,$fn=32,center=true);
translate([0,0,Layer1Z + Layer2Z + Layer3Z/2])
scale([Layer3X,Layer3Y,1]) cylinder(r=0.5,h=Layer3Z,$fn=32,center=true);
}
}
//---------------
// Create hole
module Hole(OffsetX,OffsetY) {
translate([OffsetX,OffsetY,PlateZ/2])
cylinder(r=(HoleDia + HoleWindage)/2,
h=(PlateZ + 2*Protrusion),
center=true,$fn=10);
}
//---------------
//-- Build the things...
// Right side
translate([BuildOffsetX,BuildOffsetY,0])
difference() {
Plate();
Hole(HoleOffsetX,HoleOffsetY);
}
translate([BuildOffsetX,-BuildOffsetY,0])
difference() {
Plate();
Hole(-HoleOffsetX,HoleOffsetY);
translate([-HoleOffsetX,(HoleOffsetY - MountY/2 + MountHoleOffset),(PlateZ - MountZ/2 + Protrusion/2)])
intersection() {
cube([MountX,MountY,(MountZ + Protrusion)],center=true);
translate([0,(MountY/2 - MountR),0]) cylinder(r=MountR,h=(MountZ + Protrusion),center=true);
}
}
// Left side
translate([-BuildOffsetX,BuildOffsetY,0])
difference() {
Plate();
Hole(-HoleOffsetX,HoleOffsetY);
}
translate([-BuildOffsetX,-BuildOffsetY,0])
difference() {
Plate();
Hole(HoleOffsetX,HoleOffsetY);
translate([HoleOffsetX,(HoleOffsetY - MountY/2 + MountHoleOffset),(PlateZ - MountZ/2 + Protrusion/2)])
intersection() {
cube([MountX,MountY,(MountZ + Protrusion)],center=true);
translate([0,(MountY/2 - MountR),0]) cylinder(r=MountR,h=(MountZ + Protrusion),center=true);
}
}
You can rub and you can rub, but you can’t shine shit.
Eks tells me that was one of his grandmother’s favorite sayings.
He introduced me to the concept of a “used-car polish”: high shine over deep scratches. Sometimes, that’s exactly what the job requires.
There’s also the notion of making a silk purse from a sow’s ear (attributed variously to Jonathan Swift and Anon), which someone actually did: render the ear down to a gel, extrude thread, loom cloth, and sew up a purse. Yes, it can be done, but there’s a practical limit in there somewhere.
Contrary to what you might think, this has nothing to do with a certain Thing-O-Matic. A bit of laparoscopic surgery on our front yard just revealed that our septic leach field has filled with gunk; it’s 56 years old and hadn’t been pumped for two decades before we bought the place. The next week or two should be interesting: I can do the diagnosis, but I can’t handle this repair.
After a few ranging shots, I printed coasterman’s calibration set. Much to my surprise, they came out very nicely… after the obligatory bit of tuning.
Everything printed at 40 mm/s, 0.33 mm layer thickness, 220 °C first layer / 210 °C all other layers, 120 °C aluminum platform. The first layer prints at 25% of normal speed/feed atop an aluminum plate covered with a thin layer of ABS. I’m still tweaking temperatures, first layer speeds, and ABS thickness on the plate.
All the pix have been contrast-stretched and lightly sharpened to bring out the detail. You’re going to start seeing a lot of Barbie style objects, because I want to use up that pink filament, OK?
The single-wall open box has an actual filament width of 0.55 mm, suggesting a w/t of 1.7. The Cool plugin throttled the speed down to 15 sec/layer and it’s just about perfect.
I simply didn’t believe the 50 mm tower would print until I saw it emerge intact. This is with 2 extra shells and 25% fill, at 15 sec/layer. The suck-in along the right edge comes from laying down the perimeter shell before doing the fill: that’s where the nozzle departs inward after finishing the perimeter. The distance to the fill was less than the Reversal threshold, so the stepper extruder didn’t reverse.
A few passes with the perimeter width/thickness tester resulted in a block that fits into the slot all eight ways with w/t=1.75 (with some orientations, mmm, much tighter than others, I’ll admit). The fill w/t=1.5 is obviously too low, because the top layer got overcrowded even with 25% fill on the internal layers.
The suck-out at the left corner shows where Reversal starts inhaling filament on alternate layers. This was with 35 rpm and 100 ms, which seems too aggressive. It’s not bad-looking, mind you; I touched up the sides of the block with a bit of sandpaper to smooth out the tallest ridges.
Calibration – Perimeter Width
The second classic 20 mm solid box looked good at w/t=1.75 and fill w/t=1.65, apart from the corner that pulled off the ABS and grew a tab that messed up half the layers. That’s what caused me to junk the ABP; about which, more later. The first one came out with the top looking a bit thin at fill w/t = 1.75.
Calibration – 20 mm solid box
The first hollow box just didn’t work at all, because setting w/t=1.75 built a single shell wall and the overhung top didn’t connect to the walls.
Calibration – 20 mm hollow box – failure
Changing to w/t=1.5 produced a reasonably good result, although the lid didn’t quite attach to the walls across the long diagonal. I always drop a scrap ball bearing inside to prove it’s hollow in there.
Calibration – 20 mm hollow box – success
The Oozebane tests looked great, even though I’m not using Oozebane: a stepper extruder pretty much eliminates the need for that plugin. The front one had a few strings at 85 ms / 75 ms, the back one was clean at 100 / 75, but the fill got strangely thin.
Calibration – Oozebane test
Skeinforge 39 handles bridge layers oddly: no extra shells, fill parallel to one axis, and I really didn’t have it set up right. The holes look OK, albeit with poor contact with the fill.
Calibration – Precision – top
The aggressive overhang didn’t work at all, but the 45 degree slope looks passable if you’re not too fussy. Small overhangs may be OK, but you really can’t do them without support material underneath.
Calibration – Precision – bottom
All in all, the combination of a stepper extruder, spring-loaded filament tensioner, and an ABS-coated aluminum platform seems to produce good results. Maybe I can finally start printing useful objects…
However, as we all know, cranking out good calibration cubes doesn’t guarantee anything else will print the same way…