Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
The print failed when the nozzle snagged one of the tines, which instantly jammed up against the bottom of the heater block and stalled the platform motion with a horrible crunch. Surprisingly, the motors didn’t lose all that many steps, but you can see extruded thread drooling off the top layers.
The 0.25 mm layer thickness contributes to the problem: any distortion while the plastic cools produces blobs on the top or poor adhesion, depending on whether the just-printed layer moves up or down.
This was with infill = 60 mm/s, perimeter = 20 mm/s, and moves = 250 mm/s.
That speed difference produces crap quality objects, because the high speed infill produces ragged edges that a single perimeter thread can’t convert into a smooth surface. Two perimeter threads work fine, but the top surface looks ragged from the mechanical wobbles induced at every direction reversal.
The root cause: my heavily modified Thing-O-Matic has too much moving mass and not enough rigidity, of course. Time to back off the speed for better results…
Having suffered flat tires due to the tire liner chafing the tube, I’ve been running the Tour Easy without a rear tire liner since last year. Worked fine, up until the steering went mushy on a recent ride:
Brown glass chip – in tire
Ever notice how a rear flat means you can’t steer and a front flat means you can’t pedal? Works that way on our recumbents, too. Weird.
The chip probably came from a beer bottle tossed out a car window, those being the canonical source of brown glass on the road. That razor edge punched right through the Kevlar belt in the Schwalbe Marathon tire and just barely penetrated the tube:
Brown glass chip – detail
Fortunately, I discovered all that in a nice grassy area, patched the tube, fired a pair of CO2 capsules into the thing, and rode another 20 miles around the block on a lovely day. Unfortunately, I managed to pinch the tube while installing it, producing a very slow leak that flatted the tire by the next morning.
While repairing that flat in the comfort & convenience of the Basement Laboratory Repair Wing, I installed a tire liner with two strips of silicone tape over the ends to see if that reduces the abrasion:
Silicone tape on tire liner
Silicone tape doesn’t adhere to anything other than itself, so I added two duct tape snippets to hold them in position while I buttoned up the tire. And, yes, I left the transparent plastic cover tape in place, in the hope that it can’t do any harm.
Perhaps the inevitable slow leak will produce a flat in the garage, not on the road…
New this year at the Trinity College Firefighting Home Robot Contest will be a Checkout Table, where teams can verify that their robot meets some initial specifications (Section 2.5 of The Rules). The overall size should be the easiest spec to check; I just glued up a pair of suitable Bounding Boxes:
Trinity Robot Contest – bounding boxes
Robowaiter robots must fit in the smaller cube, which is 30 cm on a side. Firefighting robots must fit in the larger box, with wheeled / treaded robots inside the 31 x 31 x 27 cm outline and walkers within the larger 46 x 31 x 27 volume.
Next step: fluorescent orange paint over a white shot coat to kill the lettering.
… look like they ought to fit some sort of tubing and, indeed, a bit of rummaging produced a hank of suitable thick-walled plastic stuff. Heating one end until it went clear and floppy, then jamming it over a syringe’s Luer fitting produced a workable flushing tool:
Syringe with tubing to fit R380
I folded a tissue, laid it over the sponges and wipers at the printhead park position, then pushed the ink tank carrier over the tissue to absorb the spray. Squirting three syringes full of 10% ethanol through the head cleaned out a few of the blocked jets, but didn’t produce a complete fix.
Next up: homebrew window cleaner, diluted about 1:3 to knock back the ammonia concentration.
I dropped that lens cap and the sheet-metal disk popped out; evidently the acrylic caulk doesn’t really count as an adhesive. Cleaned out the residue, ran a thin layer of urethane adhesive around the rim, and applied some clamps:
Re-clamping the cover
Cleaned out the inevitable urethane bubbles that emerge from even the most minute opening and it’s all good.
A few months after shaking off the previous fruit fly infestation, the worm compost bin has succumbed to another species of fruit fly that’s probably Drosophila melanogaster: much larger, breeds faster, and seems far more tenacious. Even though they’re completely innocuous, Something Must Be Done, but alas there are no insecticides suitable for a worm bin that produces vegetable garden compost. That reduces the situation to the Siege of Stalingrad: cut off their supplies and let them fight it out.
It seems that fruit flies and their progeny die slightly faster than worms; after three or six weeks without feeding, the flies will should be history and the worms will be eating the dead. Temperatures in the Basement Laboratory Vermiculture Wing will remain in the 60 °F range for the next month or two, so the fly egg-to-adult time will be longer than the usual eight days and this may not work as well as we’d like.
Assuming that succeeds, however, we’ll be freezing all the kitchen scraps that go into the bin to kill off the fruit fly eggs that arrive here from around the world. There seems no way to get fruits without fruit fly eggs, even with non-organic produce. Organic stuff, well, it’s worse than that.
I conjured up a Fruit Fly Escape trap that should I hope will lure flies out of the bin to their death, while keeping the worms inside.This won’t help much with the current extreme infestation, but may help dry the bin’s upper layer and, when we get the population knocked down, should exterminate the more adventurous survivors. Obviously, we’re breeding for stay-at-home fruit flies and, given their rapid-prototyping life cycle, they may evolve into tiny couch potatoes.
Anyhow.
Flies like heat and light, while worms vastly prefer cool and dark, so the general idea is to drill a hole in the bin lid, fit a long tube over it, put an LED ring light at the base, and run a flypaper spiral up the tube to a vent cap near the top. The first picture gives an overview, although it’s tough to see the vertical tube against the clutter: it’s clear with two red spirals, having started life as some weird-ass holiday decoration for the previous owners of our house.
Anyhow, the more interesting plastic bits look like this:
Fly Escape – solid model
The top ring is the vent cap, with a hole in the middle for a string supporting the sticky tape strip. The middle ring holds three sections of LED strip light that dissipate about 2 W from a 12 V wall wart; that’s enough heat around the tube to produce a slight upward draft. The riser tube at the bottom has an angled rim that compensates for the bin lid angle and holds the long tube vertical. The ring around the riser has a matching angle.
They fit into the lid thusly:
Fly Escape – Riser trial fit
Two beads of hot-melt glue, top and bottom, hold them in place and make an air- / worm- / fly-tight seal.
The inner tube holds the fly paper container and has a slight inward taper toward the top to wedge it in place:
Fly Escape – solid model – bottom
A similar view from inside the actual lid:
Fly Escape – Riser trial fit – bottom
That was the first pass at the dimensions; the tube walls didn’t quite join because I forgot to force the number of polygonal sides to be equal. It’s deliberately thin to make the walls springy, but everything must be Just Right to get both no fill and no space between the two perimeter threads.
The riser and LED ring, combined with festive spiral stripes along the tube and some silicone tape sealing the tubes together, produce a cheery nuclear glow that’s enhanced by the victims mired in the adjacent flypaper strips. A third strip runs up the middle of the tube:
Fly Escape in action
The vent cap on the top of the tube has a small hole in the middle to hold the string supporting the flypaper spiral exactly in the middle of the tube. This view is upside-down from the mounted orientation :
Fly Escape – Vent Cap
The alert reader will notice a red top plug in place of the vent cap in the first picture. This whole project happened over the course of a frantic afternoon, evening, and morning, with progressive product improvements along the way. For example, it turns out that some flies went pedestrian and walked up the inside of the tube, so there’s now a circle of screening inside that nice vented cap.
Having a 3D printer to hammer out custom plastic widgetry on a short schedule = win.
The OpenSCAD source code:
// Worm bin fly escape
// Ed Nisley KE4ZNU - March 2012
Layout = "Show"; // Build.. Show Riser Ring Cap
//- Extrusion parameters - must match reality!
ThreadThick = 0.25;
ThreadWidth = 2.0 * ThreadThick;
HoleFinagle = 0.3;
HoleFudge = 1.00;
function HoleAdjust(Diameter) = HoleFudge*Diameter + HoleFinagle;
Protrusion = 0.1; // make holes end cleanly
//-- Dimensions
RiserID = 47.0; // ID = transparent riser tube OD
RiserOD = 51.0; // OD = hole in lid (matches hole saw OD)
RiserHeight = 50.0; // wall height from lid
RiserSides = 4*8; // for consistency & symmetry
RiserBaseHeight = IntegerMultiple(5.0,ThreadThick); // stop ring height
RiserBaseID = RiserID - 2*1.0; // stop ring ID
LipOD = 59.0; // OD of lip mounted on lid around tube
LipAngle = 3.0; // angle for lip to make tube vertical
LipMinThick = IntegerMultiple(3.0,ThreadThick); // min lip thickness
LipAngleThick = LipOD*tan(LipAngle); // angled section thickness
LipThick = LipMinThick + LipAngleThick; // total lip thickness
RingClearance = 0.5; // space between ring and tube
TrapID = 23.0; // sticky tape container OD
TrapIDTaper = 2.0; // taper to hold container in place
TrapHeight = 45.0; // ... height
TrapWallThickness = 2*ThreadWidth;
TrapSides = 4*4;
TrapFlanges = 3; // number of support flanges
TrapFlangeThick = IntegerMultiple(3.5,ThreadWidth);
LEDThick = 2.5; // LED strip thickness
LEDWidth = 11.0; // ... width
LEDWireOD = 3.0; // power cable dia
LightID = RiserID + 2*LEDThick; // ID of LED collar
LightOD = LightID + 2*4*ThreadWidth; // ... OD
LightFlangeThick = IntegerMultiple(2.0,ThreadThick);
CapID = RiserID;
CapRingID = CapID - 2*1.5;
CapOD = CapID + 2*4*ThreadWidth;
CapBaseHeight = RiserBaseHeight;
CapHeight = 10.0 + CapBaseHeight;
CapSides = RiserSides;
CapFlanges = 3;
CapFlangeThick = TrapFlangeThick;
CapGuideID = 3.0;
CapGuideOD = CapGuideID + 6*ThreadWidth;
//-- Sticky tape container holder
module TrapMount() {
ODBot = TrapID + 2*TrapWallThickness;
ODTop = TrapID - TrapIDTaper + 2*TrapWallThickness;
difference() {
union() {
cylinder(r1=ODBot/2,r2=ODTop/2,h=TrapHeight,$fn=TrapSides);
for (i=[0:TrapFlanges-1])
rotate(i*(360/TrapFlanges) + 90) // align leg with thick side
translate([RiserOD/4,0,RiserBaseHeight/2])
cube([(RiserOD/2 - 4*Protrusion),TrapFlangeThick,RiserBaseHeight],center=true);
}
translate([0,0,-Protrusion])
cylinder(r1=HoleAdjust(TrapID)/2,
r2=HoleAdjust(TrapID - TrapIDTaper)/2,
h=(TrapHeight + 2*Protrusion),
$fn=TrapSides);
}
}
//-- Riser tube
module RiserTube() {
TotalHeight = RiserHeight + RiserBaseHeight;
difference() {
cylinder(r=RiserOD/2,h=TotalHeight,$fn=RiserSides);
translate([0,0,RiserBaseHeight])
PolyCyl(RiserID,TotalHeight,RiserSides);
translate([0,0,-Protrusion])
cylinder(r=RiserBaseID/2,h=TotalHeight,$fn=RiserSides);
}
}
//-- Angled lip around ring
// aligned with flat side downward at Z=0
module LipRing(Clearance = 0.0) {
difference() {
cylinder(r=LipOD/2,h=LipThick);
translate([0,0,-Protrusion])
cylinder(r=(RiserOD/2 + Clearance),
h=(LipThick + 2*Protrusion),
$fn=RiserSides);
rotate([LipAngle,0,0])
translate([-LipOD,-LipOD,(LipMinThick + LipOD/2*tan(LipAngle))])
cube([2*LipOD,2*LipOD,LipAngleThick],center=false);
}
}
//-- Collar to hold LED strip light
module LEDCollar() {
difference() {
PolyCyl(LightOD,(LEDWidth + LightFlangeThick));
translate([0,0,LightFlangeThick])
PolyCyl(LightID,(LEDWidth + Protrusion));
translate([0,0,-Protrusion])
PolyCyl(RiserID,(LightFlangeThick + 2*Protrusion));
translate([0,0,(LightFlangeThick + LEDWidth/2)])
rotate([0,90,90])
PolyCyl(LEDWireOD,LightOD);
}
}
//-- Cap to hold trap string and vent the tube
module VentCap() {
union() {
difference() {
cylinder(r=CapOD/2,h=CapHeight,$fn=CapSides);
translate([0,0,-Protrusion])
cylinder(r=CapRingID/2,h=(CapHeight +2*Protrusion),$fn=CapSides);
translate([0,0,CapBaseHeight])
cylinder(r=CapID/2,h=CapHeight,$fn=CapSides);
}
difference() {
union() {
for (i=[0:TrapFlanges-1])
rotate(i*(360/CapFlanges))
translate([CapOD/4,0,CapBaseHeight/2])
cube([(CapOD/2 - 4*Protrusion),CapFlangeThick,CapBaseHeight],center=true);
cylinder(r=CapGuideOD,h=CapBaseHeight);
}
translate([0,0,-Protrusion])
PolyCyl(CapGuideID,CapHeight);
}
}
}
//-- Handy routines
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
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 + HoleFinagle)/2,h=Height,$fn=Sides);
}
//-- Put peg grid on build surface
module ShowPegGrid(Space = 10.0,Size = 1.0) {
Range = floor(50 / Space);
for (x=[-Range:Range])
for (y=[-Range:Range])
translate([x*Space,y*Space,Size/2])
%cube(Size,center=true);
for (z=[1:10])
translate([0,0,z*Space])
%cube(Size,center=true);
}
//- Build it
ShowPegGrid();
if (Layout == "Ring")
LipRing();
if (Layout == "Riser")
RiserTube();
if (Layout == "Cap")
VentCap();
if (Layout == "Show") {
color("SkyBlue") {
TrapMount();
RiserTube();
LipRing();
}
color("Salmon")
translate([0,0,2*LipThick])
rotate([180,0,0])
LipRing(RingClearance);
color("Chocolate")
translate([0,0,(1.25*RiserHeight)])
LEDCollar();
color("Sienna")
translate([0,0,2*RiserHeight])
rotate([180,0,0])
VentCap();
}
if (Layout == "Build1") {
TrapMount();
RiserTube();
LipRing();
}
if (Layout == "Build2") {
LipRing(RingClearance);
}
if (Layout == "Build3") {
LEDCollar();
}
if (Layout == "Build4") {
VentCap();
}
So the Epson R380’s magenta printhead has clogged and cleaning it doesn’t have any effect. I figured I’d pop the printhead out, rinse off the crud, and see if that improved the situation. Turns out, you can’t get there from here…
The first step is removing the printer side panels, which involves sliding a steel strip into the not-really-vent slots along the side to release the catches as described there. This picture shows what’s going on inside:
R380 side panel locking tab release
You must hit that slot in the catch with the strip, so the strip must be no wider than 15 mm = 5/8 inch and tapering the end would certainly help. After I removed the panels, I broke those latch tabs off; the panel has locating tabs that align the edges, so the latch tabs just keep you out.
In any rational printer, accessing the printhead for cleaning would be trivially easy. Epson has a different attitude: KEEP OUT!
My original idea was to release the rod upon which the ink tank carrier slides, then pull the whole thing out, but it turns out the rod is also a shaft that transmits rotary motion from one side of the printer to the other, plus a mechanism to raise and lower the printhead over the cleaning station (and, perhaps, the DVD carrier that I’ve never used). A vast assortment of gears, clips, encoder wheels, and doodads affixed to each end convinced me not to go that route right now.
The left side includes an impossibly delicate rotary encoder disk blocking the end of the shaft:
R380 left side mechanism
Prying the spring out of the shaft notch allows it to slide to the right until another spring clip slams up against the inside of the frame on the right side. That clip may be pry-able, but it’s carefully arranged so as to be maximally inconvenient to reach.
R380 right side interior
The ring holding the gear in place must be removable, somehow or another, even without an obvious hole or tab:
R380 right side mechanism
With that encoder wheel blocking the left end of the rod, I gave up.
Then I tried to dismantle enough of the ink tank carrier to release the printhead. The first step removed the tank carrier’s two side panels, both of which use pull-out clips to prevent them from sliding. A view of the removed panels shows the tabs:
R380 Ink Tank Carrier side panels latches
The outside panel requires jamming a small screwdriver behind that tab at an awkward angle, then the panel slides downward:
R380 Ink Tank Carrier – right side cover
You can release the inside panel with a fingernail near the top of the (unmarked, but obvious) tab outlined in white on the far right side, then slide upward:
R380 Ink Tank carrier – interior
The magenta circles mark three screws that secure the printhead plate to the carrier, but it won’t do you any good. The two rear screws require a narrow-shaft Philips #1 driver and you cannot get the screws out through the holes; I managed to get them back in place, but don’t loosen them until you figure out how to remove the assembly holding the electrical contacts for the ink tanks.
That assembly, marked by the six color panels, slides vertically into the rear wall of the carrier and seems to have a latch on the rear wall of the tank carrier. Of course, you can’t access the latch without dismantling the damn printer.
So I put everything back together again and the printer works no worse than it did before. I’m considering connecting a syringe with length of tubing to the magenta inlet port, then forcing a toxic mix of water, alcohol, and detergent through the printhead: