Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.
Much to my astonishment, the ordinary adhesive tape holding the Sonicare Essence power toothbrush together lasted for a bit over a year. As the tape splits along the gap in the case, the coil driving the brush head begins vibrating inside its nest, making a truly horrendous racket.
The new fix looks a bit odd, but works fine:
Sonicare Essence – red tape
The tape comes from Mad Phil’s stash and is, I think, splicing tape for reel-to-reel 1/4 inch recording tape: it has zero stretch, infinite strength, and adhesive that’s obviously lasted forever. The inside of the spool says “NOPI Made in Germany”, which doesn’t lead anywhere useful, although the NOPI name does seem to appear in a tape context.
After a year, the replacement NiMH cells are doing fine, still operating about once a day for three weeks from a 24 hour charge.
This may not look like much, but it’s the first test of the p-MOSFET power switch that completely kills power to the Arduino Pro Mini board and the Hall Effect LED Blinky Light:
Power off – 30 mA load
The top trace is the base drive to the NPN transistor that holds the p-MOSFET on while the Arduino is running. When it’s time to shut off, the Arduino drops the base drive output, the MOSFET turns off, and the switched battery voltage in the bottom trace drops like a rock. The current is about 30 mA when the Arduino is running and immeasurably low when it’s off; the MOSFET spec says it’s less than 1 μA, which is fine with me.
The PCB has those components clustered in the upper left corner, with the Arduino Pro Mini perched on header pins to the right:
Hall LED PCB – power switch test
The test code is a crudely hacked version of the canonical Blink sketch that waits 5 s after it starts running, then pulls the plug:
// Modified from Arduino Blink example
// Drives external p-MOSFET power switch
// Ed Nisley - KE4ZNU - Sep 2013
int led = 13;
// HIGH to enable power supply
int PowerOn = 4;
// HIGH to light Status LED
int Status = 10;
unsigned long MillisThen;
void setup() {
pinMode(led, OUTPUT);
pinMode(PowerOn,OUTPUT);
digitalWrite(PowerOn,HIGH);
pinMode(Status,OUTPUT);
digitalWrite(Status,HIGH);
MillisThen = millis();
}
void loop() {
digitalWrite(led, HIGH);
delay(100);
digitalWrite(led, LOW);
delay(500);
if (((millis() - MillisThen) > 5000ul)) {
digitalWrite(Status,LOW);
delay(50);
digitalWrite(PowerOn,LOW);
digitalWrite(Status,HIGH);
}
}
It turns out that the Arduino runtime has a several-second delay after power comes up before the setup() routine starts running, so brief pulses from a vibration switch won’t last long enough to turn the thing on. That’s not a fatal flaw for now and, in fact, having to hold the power button in for a few seconds isn’t entirely a Bad Thing.
However, once the power turns on, a vibration switch could trigger an Arduino interrupt pin to reset a power-off timer. I’d be tempted to put the vibration switch in parallel with the button, with a pair of steering diodes that isolate the raw battery from the input pin.
This is, of course, a pure electronic implementation of a Useless Machine…
The brassboard PCB for the Hall effect blinky light is too bendy for the SMD parts to survive much debugging, particularly with all the wires hanging off the edges, so I whipped up a stiff mounting bracket that captures the whole thing, with a flange that fits in the work stand arms:
PCB Test Frame – solid model
I ran some self-tapping 4-40 hex-head screws into the holes while the plastic was still warm on the M2’s platform:
PCB stiffener with screws on M2 platform
Six screws seem excessive and I’ll probably wind up using just the middle two, but there’s no harm in having more holes and fittings than you really need.
The flange fits neatly into the board holder on the Electronics Workbench, above all the construction clutter:
PCB stiffener in board holder
The nice thing about having a 3D printer: when you need an object like this, a couple of hours later you have one!
The OpenSCAD source code, slightly improved based the results you see above:
// Test support frame for Hall Effect LED Blinky Light
// Ed Nisley KE4ZNU - Sept 2013
ClampFlange = true;
//- Extrusion parameters - must match reality!
ThreadThick = 0.25;
ThreadWidth = 0.40;
function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
Protrusion = 0.1;
HoleWindage = 0.2;
//- Screw sizes
inch = 25.4;
Tap4_40 = 0.089 * inch;
Clear4_40 = 0.110 * inch;
Head4_40 = 0.211 * inch;
Head4_40Thick = 0.065 * inch;
Nut4_40Dia = 0.228 * inch;
Nut4_40Thick = 0.086 * inch;
Washer4_40OD = 0.270 * inch;
Washer4_40ID = 0.123 * inch;
//- PCB sizes
PCBSize = [46.5,84.0,1.0];
PCBShelf = 2.0;
Clearance = 4*[ThreadWidth,ThreadWidth,0];
WallThick = IntegerMultiple(4.0,ThreadWidth);
FrameHeight = 5.0;
ScrewOffset = 0.0 + Clear4_40/2;
OAHeight = FrameHeight + Clearance[2] + PCBSize[2];
FlangeExtension = 3.0;
FlangeThick = IntegerMultiple(1.5,ThreadThick);
Flange = PCBSize
+ 2*[ScrewOffset,ScrewOffset,0]
+ 2*[Washer4_40OD,Washer4_40OD,0]
+ [2*FlangeExtension,2*FlangeExtension,(FlangeThick - PCBSize[2])]
;
echo("Flange: ",Flange);
NumSides = 4*5;
//- 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);
}
//- Build it
ShowPegGrid();
difference() {
union() { // body block and screw bosses
translate([0,0,OAHeight/2])
color("LightBlue")
cube(PCBSize + Clearance + [2*WallThick,2*WallThick,FrameHeight],center=true);
for (x=[-1,1], y=[-1,0,1]) {
translate([x*(PCBSize[0]/2 + ScrewOffset),
y*(PCBSize[1]/2 + ScrewOffset),
0])
color("Orchid") cylinder(r=Washer4_40OD,h=OAHeight,$fn=NumSides);
}
if (ClampFlange)
translate([0,0,Flange[2]/2])
color("SeaGreen") cube(Flange,center=true);
}
for (x=[-1,1], y=[-1,0,1]) { // screw holes and washer recesses
translate([x*(PCBSize[0]/2 + ScrewOffset),
y*(PCBSize[1]/2 + ScrewOffset),
-Protrusion])
rotate((x-1)*90)
PolyCyl(Tap4_40,(OAHeight + 2*Protrusion));
translate([x*(PCBSize[0]/2 + ScrewOffset),
y*(PCBSize[1]/2 + ScrewOffset),
OAHeight - PCBSize[2]])
PolyCyl(1.2*Washer4_40OD,(PCBSize[2] + Protrusion),NumSides);
}
translate([0,0,OAHeight/2]) // through hole below PCB
cube(PCBSize - 2*[PCBShelf,PCBShelf,0] + [0,0,2*OAHeight],center=true);
translate([0,0,(OAHeight - (PCBSize[2] + Clearance[2])/2 + Protrusion/2)]) // PCB pocket on top
cube(PCBSize + Clearance + [0,0,Protrusion],center=true);
}
The last of the silica gel from one bulk can went into a mesh bag:
Silica gel beads in mesh bag
That kept a batch of fresh-baked crackers crisp during several humid days. It started out at 110 g net = 112 g gross (with bag and ties), rose to 115 g after a day, then to 117 g by the time we were done with the crackers. That’s about 5 g of water = 4.5% by weight, so those charts say the humidity should be under 10 %RH, which agrees with the fading blue dot on the humidity indicator card I dropped in the can.
When the bag gets up to 130 g = 30 %RH, then it’ll be time for a recharge… or, more likely, a refill from one of the remaining three cans.
The big rectangle at the top will heatsink the main p-MOSFET power switch, which shouldn’t dissipate much power at all. The two lower rectangles heatsink the n-MOSFETs, although I think they may each require a stand-up metal tab to handle the dissipation during high-duty-cycle blinkiness.
The silver line around the edge is soldered copper foil tape connecting the top and bottom ground planes; a dozen or so additional Z wires will connect the planes at high current nodes. It’ll get a bunch of flying signal wires, too, because I’m not a fanatic gotta-embed-all-the-wires kind of guy on stuff like this.
The PCB is 30 mil FR4, which (once again, I make this mistake over and over again) seems a bit bendy for surface-mount parts; I must print a simple nest to stabilize the poor thing. Some of the drilled holes look white, because I hadn’t rinsed out the remains of the silver plating powder; the surfaces are a lot more silvery in person.
Before I etched the back side, I realized I’d made a classic layout blunder: the high-current return path from the center MOSFET flows around the Hall effect sensor near the center of the board. So I filled in the grid pour with a fat point black Sharpie to get more copper in that area:
Hall Effect Brassboard – added etch masking
I think it probably wouldn’t matter either way, but nothing exceeds like excess. FWIW, I use the grid pattern as a way to verify the end of the board etching: when all the holes in the ground pour come clear, all the traces are done, too.
The etched backside came out OK, although with a few etched squares sprinkled in the Sharpie masking:
Hall Effect Brassboard – bare back
The three leads for the Hall effect sensor are just to the right of the center, with the middle lead connected to the ground pour. Given the millivolt-level signals, this isn’t a good place for ground bounce…
It’s etched with ferric chloride, rubbed with a sponge, and took under ten minutes on each side. That’s less than the usual time, which suggests the PCB is plated with half-ounce copper (that’s 0.5 ounce / ft2), rather than the one-ounce copper on the other boards I’ve done recently; just one of the hazards of buying surplus PCB stock. Doesn’t really matter, as the peak currents will be under half an amp and now I know not to use this batch of raw board stock for high current circuits.
All in all, it looks good enough. Now, for some component soldering.
It’s always a good idea to open the barby lid before firing the burners: sometimes unexpected things appear:
Mouse nest in grill – foundation
The mouse being out and about at the time, I dumped the nest (which was just a foundation) over the patio railing into the flower garden, burned out the remainder at full throttle, and continued the mission.
A week later, the mouse had not only returned, but finished off a substantial nest in the same spot, topped with a jaunty bird feather. The entrance tunnel is on the right, opening into a comfy mouse-sized pocket inside:
Mouse nest in grill – finished
Once again, I dumped the nest over the railing, burned out the rest, and continued the mission.
As of three weeks later, the mouse hasn’t returned; I trust it found a hollow log somewhere out back.
As nearly as I can tell, the mouse climbed up a square steel leg, scampered through the grease catch pan, leaped up through the drain hole, wriggled through three layers of crossed bars, and then deposited a single mouthful of building material.
Four of these ferocious Parsley Worms were chowing down on a volunteer dill plant along the garden fence:
Parsley Worm Caterpillar on Dill
Amazingly, they turn into Black Swallowtail butterflies that sometimes visit the Butterfly Bush outside our living room window. Well, maybe not this one, but certainly some of its relatives.
We don’t hassle them; they have a fearsome threat display that apparently works wonders on their natural predators.