Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
The burner in our oven failed in December 2006, probably because the charred remains of an insect produced a hotspot:
Burned Oven Tube Overview
That replacement burner came with its own igniter that failed after 8.5 years, with symptoms of slow oven ignition and the occasional smell of propane.
In normal operation, the igniter element glows yellow-hot for a minute or so before the valve opens, gas flows over the igniter, there’s a muffled whoomf, and the oven begins heating. The igniter remains powered as long as the oven is on, emitting a baleful yellow glare through the slots in the oven’s lower cover.
It consists of a ceramic base holding a stout resistance heater that apparently suffers from increasing resistance as it ages, reducing the current to the point where it won’t activate the gas valve.
I didn’t know that, either, but Google sees all, knows all, and tells most.
The gas valve label says it requires 3.3 to 3.6 A from the heater to turn on the gas:
Kenmore range oven gas valve – data plate
But the old heater was good for barely 2.6 A (there’s a bit of parallax in this view):
Kenmore range oven gas valve – weak igniter current
Igniters range from $18 to upwards of $60 on Amazon, so I picked the cheapest one, waited two days, installed it, and measured 3.5 A at First Light, down to a bit over 3.0 A at running temperature. That’s on the low side of the valve’s spec, but it seems happier with an extra half amp.
We’ll see how long this igniter lasts; maybe next time I’ll double my spend…
It doesn’t have my patter, but you’ve already seen most of the pictures and stories here, tagged Tax Dollars Asleep and can probably fill in the blanks.
To quote from the PDCTC Master Plan linked above:
The Plan establishes the following vision: In Dutchess County, walking and bicycling will be part of daily life, providing safe and convenient transportation and recreation.
Chekkitout:
Rt 376 SB 2015-08-25 – North of Maloney – 2Spring Rd 2015-08-01 – EB – grate rear view
Mary says it was one of my more impassioned presentations…
A gallery of SuperFormula plots, resized / contrast stretched / ruthlessly compressed (clicky for more dots):
SuperFormula Plot – 01
SuperFormula Plot – 02
SuperFormula Plot – 03
SuperFormula Plot – 04
SuperFormula Plot – 05
SuperFormula Plot – 06
SuperFormula Plot – 07
SuperFormula Plot – 08
SuperFormula Plot – 09
SuperFormula Plot – 10
SuperFormula Plot – 11
SuperFormula Plot – 12
SuperFormula Plot – 13
SuperFormula Plot – 14
SuperFormula Plot – 15
The gray one at the middle-bottom suffered from that specular reflection; the automagic contrast stretch couldn’t boost the paper with those burned pixels in the way.
Those sheets all have similar plots on the back, some plots used refilled pens that occasionally bled through the paper, others have obviouslybad / dry pens, and you’ll spot abrupt color changes where I swapped out a defunct pen on the fly, but they should give you an idea of the variations.
The more recent plots have a legend in the right bottom corner with coefficients and timestamps:
SuperFormula Plot – legend detail
Limiting the pen speed to 10 cm/s (down from the default 38.1 cm/s = 15.00 inch/s) affects only the outermost segments of the spikes; down near the dense center, the 9600 b/s serial data rate limits the plotting speed. Plotting slowly helps old pens with low flow rates draw reasonably dense lines.
Each plot takes an hour, which should suffice for most dog-and-pony events.
I fill a trio of Python lists with useful coefficient values, then choose random elements for each plot: a single value of m determines the number of points for all six traces, then six pairs of values set n1 and n2=n3. The lists are heavily weighted to produce spiky traces, rather than smooth ovals, so the “random” list selections aren’t uniformly distributed across the full numeric range of the values.
Because the coefficient lists contain fixed values, the program can produce only a finite number of different plots, but I’m not expecting to see any duplicates. You can work out the possibilities by yourself.
The modified Chiplotle demo code bears little resemblance to the original:
from chiplotle import *
from math import *
from datetime import *
import random
def superformula_polar(a, b, m, n1, n2, n3, phi):
''' Computes the position of the point on a
superformula curve.
Superformula has first been proposed by Johan Gielis
and is a generalization of superellipse.
see: http://en.wikipedia.org/wiki/Superformula
Tweaked to return polar coordinates
'''
t1 = cos(m * phi / 4.0) / a
t1 = abs(t1)
t1 = pow(t1, n2)
t2 = sin(m * phi / 4.0) / b
t2 = abs(t2)
t2 = pow(t2, n3)
t3 = -1 / float(n1)
r = pow(t1 + t2, t3)
if abs(r) == 0:
return (0,0)
else:
# return (r * cos(phi), r * sin(phi))
return (r,phi)
def supershape(width, height, m, n1, n2, n3,
point_count=10*1000, percentage=1.0, a=1.0, b=1.0, travel=None):
'''Supershape, generated using the superformula first proposed
by Johan Gielis.
- `points_count` is the total number of points to compute.
- `travel` is the length of the outline drawn in radians.
3.1416 * 2 is a complete cycle.
'''
travel = travel or (10*2*pi)
## compute points...
phis = [i * travel / point_count
for i in range(1 + int(point_count * percentage))]
points = [superformula_polar(a, b, m, n1, n2, n3, x) for x in phis]
## scale and transpose...
path = [ ]
for r, a in points:
x = width * r * cos(a)
y = height * r * sin(a)
path.append(Coordinate(x, y))
return Path(path)
## RUN DEMO CODE
if __name__ == '__main__':
paperx = 8000
papery = 5000
tscale = 0.45
numpens = 6
m_list = [n/10.0 for n in [11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59]]; # prime/10 = number of spikes
n1_list = [n/100.0 for n in range(15,75,1) + range(80,120,5) + range(120,200,10)] # ring-ness 0.1 to 2.0, higher is larger diameter
n2_list = [n/100.0 for n in range(10,50,1) + range(55,100,5) + range(110,200,10)] # spike-ness 0.1 to 2.0, lower means spiky points
paramlist = [[n1,n2] for n1 in random.sample(n1_list,numpens) for n2 in random.sample(n2_list,numpens)]
if not False:
plt=instantiate_plotters()[0]
plt.write('IN;')
# plt.write(chr(27) + '.H200:') # set hardware handshake block size
plt.set_origin_center()
plt.write(hpgl.SI(tscale*0.285,tscale*0.375)) # scale based on B size characters
plt.write(hpgl.VS(10)) # slow speed for those abrupt spikes
pen = 1
plt.select_pen(pen)
plt.write(hpgl.PA([(paperx - 3000,-(papery - 600))]))
plt.write(hpgl.LB("Started " + str(datetime.today())))
m = random.choice(m_list)
for n1, n2 in zip(random.sample(n1_list,numpens),random.sample(n2_list,numpens)):
n3 = n2
print "m: ", m, " n1: ", n1, " n2=n3: ", n2
plt.write(hpgl.PA([(paperx - 3000,-(papery - 500 + 100*(pen - 1)))]))
plt.select_pen(pen)
plt.write(hpgl.LB("Pen " + str(pen) + ": m=" + str(m) + " n1=" + str(n1) + " n2=n3=" + str(n2)))
e = supershape(paperx, papery, m, n1, n2, n3)
plt.write(e)
if pen < numpens:
pen += 1
else:
pen = 1
pen = 1
plt.select_pen(pen)
plt.write(hpgl.PA([(paperx - 3000,-(papery - 500 + 100*numpens))]))
plt.write(hpgl.LB("Ended " + str(datetime.today())))
plt.select_pen(0)
else:
e = supershape(paperx, papery, 1.9, 0.8, 3, 3)
io.view(e)
It turns out that the ceramic-tip plotter pens don’t come apart at the top of the flange as I expected. Instead, there’s a snug-fitting plug with a tapered top and an invisible joint at the end of the body tube:
HP7475A Plotter – ceramic pen – disassembled
Refilling a pair of defunct black ceramic pens didn’t bring them back to life: an ample supply of fresh black ink never made it from the fluff to the nib. Soaking the nibs + fiber shafts in 10% ethanol for a day created an unappetizing black vodka shot that did nothing to get the ink where it needed to be.
The right time to refill those pens would have been, oh, probably a decade or two ago…
The Squidwrench Power Wheels Racer needed a mounting bracket for its DC motor, so Matt handed me a precut steel slab and some drawings. I did a manual layout to get a feel for the sizes:
Motor Mount – dye layout
Yes, it’s slightly rhomboid & irregular on the sides; it’ll be welded to a U-channel. The front edge is the straightest and I scribed a perpendicular datum line over on the right, from which to measure the motor center point.
But then, realizing I’d have to mill the central hole anyway, I did what I should have done from the beginning and lined it up on the Sherline:
Motor Mount – Sherline laser centering
With the part zeroed at the center, everything has polar coordinates. The bolt holes are #10 on a 50 mm BCD, which is G0 @25^[45+90*i]. Rather than writing & debugging a program, I did it all by feeding manual instructions into the interpreter; the i gets typed as 0, 1, 2, and 3 by clicking on a previous command, backspacing, and retyping, which is both faster and easier than it sounds. The holes are drill cycles: G81 Z-7 R1 F30
This being steel on a Sherline, the rule of thumb that says you can drill at 100x the drill diameter (in inch/min or mm/min, as appropriate) at 3000 RPM gets derated by at least factor of 10. I settled on 30 mm/min for a #10 drill (0.194 inch = 4.9 mm → 500 mm/min = hogwash) after trying the first hole at 50 mm/min:
Motor Mount – bolt holes
The least horrible way to cut out the hole for the motor mounting boss involved chain drilling to excavate the most steel with the least effort. These center drill points are at G0 @14 ^[15*i] with i in [0..23]:
Motor Mount – chain center drilling
I drilled every even hole #27, then every odd hole #28, both at 50 mm/min, to get a thin web:
Motor Mount – chain drilled
Then helix-mill downward with a 1/8 inch end mill at 1 mm per pass:
Motor Mount – helix milling
That started at 14 mm from the origin to match the hole circle: G3 I-14 F100 Z-1
Then I switched to a 3/8 inch = 9.5 mm end mill to bring the hole up to size, ending with G3 I-12.75 F300
Motor Mount – center hole milled
A trial fit showed the hole was slightly off-round, probably due to a few mils of backlash in both axes, and slightly too small, because that’s how I wanted it. Flipped back-to-front, reclamped, recentered, ran the cutter around at 12.75 mm to clear the ovalness, then crept out to 12.8 mm, and it was all good:
Motor Mount – test fit
That’s an easy fit with maybe 0.1 mm = 4 mil radial play around the boss. Better than that, I cannot do.
Lacquer thinner stripped the layout dye and it’s ready for welding:
Motor Mount – with motor
Reminders for next time…
The drill feed on a rigid machine with plenty of spindle power is 100 x (drill dia) @ 3000 RPM. On the Sherline, in steel, 10 x dia is optimistic. Aluminum feeds run higher, but don’t get stupid.
Re-centering to the accuracy required for this job is a matter of noting the coordinates where the cutter kisses the perimeter across a diameter along each axis, adding the coordinates, dividing by two, moving to that position, and zeroing the origin. Do that in X, Y, X, and Y and it’s good enough. You could automate that with a touch probe, of course. Hand-turning the spindle with the cutter in place to feel it kiss the workpiece is fine, but use the same cutting edge on both sides of the diameter.
Figure the chain drill diameter thusly:
Pick a reasonable drill diameter; #10 is about as large as you want on a Sherline
Drill circle dia = final milled hole diameter – drill dia – 2 mm, round down to lower integer
# holes = π x DCD / drill dia, rounded down to lower integer
Hole angle = 360 / # holes
Hole radius = DCD / 2
Wisely is it written that a man with a CNC milling machine has many friends.
The blotches on the legend in the lower left corner show that a refilled plotter pen can accumulate a droplet of ink around its nib, which should come as no surprise. I wiped off the excess immediately after refilling each pen, let the assortment sit for a few hours to (presumably) let the new ink reach the nib, and wiped them off before inserting them in the plotter’s pen carousel. All I can say is that I used up a bunch of paper towels in the process…
A closer look at the plot shows Pretty Good If You Ask Me results:
CMYK Refilled Pens – plot detail
The two blue-ish pens have less flow than the others, resulting in dotted lines that should be continuous. As nearly as I can tell, that’s a function of how much OEM ink has solidified in the fiber nib and, most likely, the fiber rod that draws ink from the sponge reservoir inside the body.
And, of course, the colors produced by adding CMY printer ink to the surviving OEM ink aren’t found in any catalog. I’m also blithely ignoring the difference between the inks inside plotter pens intended for paper and those for overhead transparencies; at this late date, that’s defined to Not Matter.
The Dutchess Rail Trail sits atop a pipeline carrying water from the treatment plant in the City of Poughkeepsie to the GlobalFoundries (neé IBM East Fishkill) complex. For good engineering reasons, the mid-line pumping station (equipment yard visible to our left) in Page Industrial Park sits directly athwart the pipe, which forced an abrupt S-curve on a relatively steep slope into the rail trail layout.
T=0.000 s — The lead cyclist just cut in front of her companion and isn’t leaning into the turn, at which point Mary and I both realize this isn’t going to end well:
Road Rash 2015-08-15 – 131
T=0.750 s — Newton grabs control of her bike and he’s not gonna let go:
Road Rash 2015-08-15 – 176
T=1.633 s — The rear wheel locks as she passes Mary, she’s far off-center and falling to her left, the bike has gone inertial, and it’s obvious we’re about to arrive at the same place at the same time:
Road Rash 2015-08-15 – 229
T=2.100 s — Collision Alarm! I’m veering off the pavement, which is the only reason we didn’t have an offset frontal collision:
Road Rash 2015-08-15 – 257
T=2.333 s — Impact! I’m stopped and balanced on the bike, with my left foot out of the pedal cleat and heading for the ground. She’s sliding past me, pivoting around her bike’s left pedal skidding on the asphalt:
Road Rash 2015-08-15 – 271
She ended up sprawled atop her bike, facing up the slope, with the front wheel just beside the rear wheel of my bike; her foot or some part of her bike whacked my left-side underseat bag in passing, but there was no bike-on-bike collision. No injuries for her, other than perhaps a bit of road rash, but only by sheer raw good fortune.
Reviewing the video shows she lost control at the transition from the trail to the downward S-curve, a few seconds before the first picture here and about five seconds before she stopped sliding past my bike, but the problem wasn’t obvious until the scene in the first picture. Mary never had a chance to react and, with less than two seconds until the not-quite-collision, my gross-motor reaction time just barely got me out of the way.