The Smell of Molten Projects in the Morning

Ed Nisley's Blog: Shop notes, electronics, firmware, machinery, 3D printing, laser cuttery, and curiosities. Contents: 100% human thinking, 0% AI slop.

Category: Electronics Workbench

Electrical & Electronic gadgets

  • Kenmore Model 158 Sewing Machine: LED Strip Lights

    Given a few hanks of the 3528 double-density LED strip lights shown at the top of this picture:

    Various LED strip lights
    Various LED strip lights

    And the solid models for the mounts:

    Strip Light Mount - build layout
    Strip Light Mount – build layout

    Then fast-forwarding through the tedious parts:

    • An hour of 3D printing
    • Cut & stick LEDs to the mounts
    • Peel “waterproof” coating to reveal contact pads
    • Solder pretty cable with silver plating on the braid (it’s probably mil-spec Teflon dielectric RG-174 coaxial cable) to the LEDs
    • Conjure a coax power connector and wall wart
    • Apply foam squares to mounts
    • Affix to sewing machine

    The front LEDs have a jaunty angle along the bottom of the plastic panel:

    Kenmore Model 158 Sewing Machine - LED Lights - front
    Kenmore Model 158 Sewing Machine – LED Lights – front

    You can see why I want cool-white LEDs, rather than these warm-white ones, to match the daylight from the window to the right. The wash of orange light from the incandescent bulb inside the end bell has got to go, too.

    The rear LEDs over the arm may be slightly too close to the opening:

    Kenmore Model 158 Sewing Machine - LED Lights - rear
    Kenmore Model 158 Sewing Machine – LED Lights – rear

    The single-segment strip on the side provides a bit more light for the needle across the opening:

    Kenmore Model 158 Sewing Machine - LED Lights - rear detail
    Kenmore Model 158 Sewing Machine – LED Lights – rear detail

    Now, I’ll grant you that the strips of of black Gorilla Tape aren’t particularly attractive, but the intent here is to find out whether the LEDs produce enough light, don’t snag the quilt, and generally meet requirements.

    We shall see…

  • Frank-O-Squid Configuration

    My old Thing-O-Matic has new life as the Frank-O-Squid at Squidwrench Galactic HQ, with all the original Makerbot electronics replaced by an Azteeg X3 controller. Over the last several weeks I’ve coaxed it into doing most of the right things at the proper speeds & feeds, so we can now move on to actually making stuff:

    Frank-o-Squid in action
    Frank-o-Squid in action

    The warping on that little digital caliper thumbwheel holder show that I don’t have the tiny-object slowdown settings quite correct, but it’s getting close.

    The Marlin firmware is on GitHub. I intended to set it up so that pulling changes from upstream Marlin would be easy, but totally blundered something along the way. I’ll eventually plug the changes from Configuration.h, Configuration_adv.h, and pins.h into a clean branch and start over, but, for now, we’re slowly diverging from consensus reality.

    Although the platform still has the Z-min switch over on the right edge, neither the firmware nor Slic3r pay any attention to it. A stub in the startup G-Code sequence does a head fake toward the switch, but doesn’t actually probe it.

    I scrapped the original craptastic Makerbot ATX power supply and replaced it with Makergear’s huge 12 V laptop brick that powered the original M2 platform, so the thermal switches on the extruder no longer do anything useful; it’s running bare, pretty much like all other 3D printers.

    The Slic3r configuration exports thusly:

    # generated by Slic3r 1.0.0RC1 on Mon Mar  3 07:48:29 2014
    avoid_crossing_perimeters = 0
    bed_size = 105,120
    bed_temperature = 100
    bottom_solid_layers = 3
    bridge_acceleration = 0
    bridge_fan_speed = 100
    bridge_flow_ratio = 1
    bridge_speed = 40
    brim_width = 1.0
    complete_objects = 0
    cooling = 1
    default_acceleration = 0
    disable_fan_first_layers = 1000
    duplicate = 1
    duplicate_distance = 6
    duplicate_grid = 1,1
    end_gcode = ;---- end.gcode starts ----\n; TOM 286 - Al plates + Geared extruder\n; Ed Nisley - KE4ZNU - January 2014\n; Marlin with tweaks for Azteeg X3 with thermocouple\n;- inhale filament blob\nG91\nG1 E-5 F900\nG90\n;- turn off heaters\nM104 S0         ; extruder head\nM140 S0         ; HBP\n;- move to eject position\nG0 Z115 F1000   ; home Z to get nozzle away from object\n;G92 Z115      ; reset Z\nG1 X0 F6000     ; center X axis\nG1 Y35          ; move Y stage forward\n;---- end.gcode ends ----
    external_perimeter_speed = 50%
    external_perimeters_first = 0
    extra_perimeters = 1
    extruder_clearance_height = 20
    extruder_clearance_radius = 20
    extruder_offset = 0x0
    extrusion_axis = E
    extrusion_multiplier = 0.95
    extrusion_width = 0.50
    fan_always_on = 0
    fan_below_layer_time = 1
    filament_diameter = 2.95
    fill_angle = 45
    fill_density = 0.15
    fill_pattern = honeycomb
    first_layer_acceleration = 0
    first_layer_bed_temperature = 100
    first_layer_extrusion_width = 0.50
    first_layer_height = 0.25
    first_layer_speed = 10
    first_layer_temperature = 210
    g0 = 0
    gap_fill_speed = 30
    gcode_arcs = 0
    gcode_comments = 0
    gcode_flavor = reprap
    infill_acceleration = 0
    infill_every_layers = 2
    infill_extruder = 1
    infill_extrusion_width = 0.50
    infill_first = 1
    infill_only_where_needed = 1
    infill_speed = 50
    layer_gcode =
    layer_height = 0.25
    max_fan_speed = 100
    min_fan_speed = 35
    min_print_speed = 10
    min_skirt_length = 3
    notes =
    nozzle_diameter = 0.4
    only_retract_when_crossing_perimeters = 1
    ooze_prevention = 0
    output_filename_format = [input_filename_base].gcode
    overhangs = 1
    perimeter_acceleration = 0
    perimeter_extruder = 1
    perimeter_extrusion_width = 0.50
    perimeter_speed = 30
    perimeters = 1
    post_process =
    print_center = 0,0
    raft_layers = 0
    randomize_start = 1
    resolution = 0.05
    retract_before_travel = 0.0
    retract_layer_change = 0
    retract_length = 0.75
    retract_length_toolchange = 10
    retract_lift = 0
    retract_restart_extra = 0
    retract_restart_extra_toolchange = 0
    retract_speed = 30
    rotate = 0
    scale = 1
    skirt_distance = 2
    skirt_height = 1
    skirts = 1
    slowdown_below_layer_time = 30
    small_perimeter_speed = 50%
    solid_fill_pattern = rectilinear
    solid_infill_below_area = 5
    solid_infill_every_layers = 0
    solid_infill_extrusion_width = 0.50
    solid_infill_speed = 150%
    spiral_vase = 0
    standby_temperature_delta = -5
    start_gcode = ;---- start.gcode begins ----\n; TOM 286 - Al plates + Geared extruder + Zmin platform sense\n; Ed Nisley - KE4ZNU - January 2014\n; Marlin with tweaks for Azteeg X3 with thermocouple\n;\n; Set initial conditions\nG21                 ; set units to mm\nG90                 ; set positioning to absolute\n;----------\n; Begin heating\nM104 S[first_layer_temperature]         ; extruder head\nM140 S[first_layer_bed_temperature]	; start bed heating\n;----------\n; Home axes\nG28 X0 Y0 Z0\nG92 X-53.5 Y-58.5 Z114.5\n;----------\n; Initial nozzle wipe to clear snot for Z touchoff\nG1 X0 Y0 Z3.0 F1000     ; pause at center to build confidence\nG4 P1000\nG1 Z10                  ; ensure clearance\nG1 X39 Y-58.0 F1000    ; move to front, avoid wiper blade\nG1 X55                  ; to wipe station\nG1 Z6.0                 ; to wipe level\nM116                    ; wait for temperature settling\nG1 Y-45 F500            ; slowly wipe nozzle\n;-----------------------------------------------\n; Z platform height touchoff\n; Make sure the XY position is actually over the switch!\n; Home Z downward to platform switch\n; Compensate for 0.05 mm backlash in G92: make it 0.05 too low\nG1 X56.0 Y8.2 F5000\nG1 Z4.0 F1000     ; get over build platform switch\n;G1 Z0 F50                    ; home downward very slowly\n;G92 Z1.45                    ; set Z-min switch height\nG1 Z6.0 F1000                ; back off switch to wipe level\n;-----------------------------------------------\n; Prime extruder to stabilize initial pressure\nG1 X55 Y-45 F5000   ; set up for wipe from rear\nG1 Y-58.0 F500      ; wipe to front\nG91                 ; use incremental motion for extrusion\nG1 F100               ; set decent rate\nG1 E10              ; extrude enough to get good pressure\nG1 F2000            ; set for fast retract\nG1 E-1.0            ; retract\nG90                 ; back to absolute motion\nG1 Y-45 F1000       ; wipe nozzle to rear\n;----------\n; Set up for Skirt start in right front corner\n; Compensate for Z backlash: move upward from zero point\nG1 X40 Y-40 F5000\nG1 Z0.0 F1000     ; kiss platform\nG1 Z0.2 F1000       ; take up Z backlash to less than thread height\n;G92 E1.0            ; preset to avoid huge un-Reversal blob\n;G1 X0 Y0\n;---- start.gcode ends ----
    start_perimeters_at_concave_points = 1
    start_perimeters_at_non_overhang = 1
    support_material = 0
    support_material_angle = 0
    support_material_enforce_layers = 0
    support_material_extruder = 1
    support_material_extrusion_width = 0.50
    support_material_interface_extruder = 1
    support_material_interface_layers = 3
    support_material_interface_spacing = 0
    support_material_pattern = honeycomb
    support_material_spacing = 2.5
    support_material_speed = 60
    support_material_threshold = 0
    temperature = 210
    thin_walls = 1
    threads = 2
    toolchange_gcode =
    top_infill_extrusion_width = 0.50
    top_solid_infill_speed = 50%
    top_solid_layers = 3
    travel_speed = 150
    use_firmware_retraction = 0
    use_relative_e_distances = 0
    vibration_limit = 0
    wipe = 0
    z_offset = 0
    

    All of that should become three TOM286 - Default sub-profiles.

    The Pronterface configuration looks like this:

    set port /dev/ttyUSB0
    set monitor True
    set last_bed_temperature 100.0
    set last_temperature 210.0
    set baudrate 115200
    set temperature_abs 210
    set xy_feedrate 5000
    set z_feedrate 1000
    set build_dimensions 110.00x120.00x117.00+0.00+0.00+0.00+0.00+0.00+0.00
    set extruders 1
    set slic3rintegration True
    set tempgauges True
    set preview_extrusion_width 0.4
    set e_feedrate 100
    set last_extrusion 3
    set last_file_path /home/ed/Documents/Thing-O-Matic/Calibration/Thread Thickness
    set recentfiles ["/home/ed/Documents/Thing-O-Matic/Calibration/Thread Thickness/Caliper Thumbwheel Holder.gcode", "/home/ed/Documents/Thing-O-Matic/Calibration/Thread Thickness/Thinwall Open Box.gcode", "/home/ed/Documents/Thing-O-Matic/Calibration/Thread Thickness/Platform Level.gcode", "/home/ed/Documents/Thing-O-Matic/Calibration/Circle Diameter Calibration/Small Circle Cal - M2 0.2 mm.gcode", "/home/ed/Documents/Thing-O-Matic/Calibration/Circle Diameter Calibration/Small Circle Cal - TOM.gcode"]
    

    As you can see, it’s all running from a directory on my old laptop. The next step involves migrating everything to a dedicated PC next to the printer, so nobody else need worry about this stuff…

  • Sewing Machine Lights: LED Strip Mount Solid Models

    Mary’s Sears Kenmore Model 158 sewing machine arm has a flat rear surface and a plastic plate on the front, so double-sided adhesive foam tape can hold a straight mount in place; we rejected putting strips under the arm to avoid snagging on the quilts as they pass by. So, with LEDs in hand, these are the mounts…

    LED strip lights must have strain relief for their wires, as our Larval Engineer discovered the hard way on her longboard ground lighting project, and I wanted nice endcaps to avoid snagging on the fabric, so the general idea was a quarter-round rod with smooth endcaps and a hole to secure the wire. Some experiments showed that the acrylic (?) LED encapsulation directed the light downward, thus eliminating the need for a shade.

    So, something like this will do for a first pass:

    LED Strip Light Mount - bottom view
    LED Strip Light Mount – bottom view

    The overall dimensions for the LED mounts:

    • Length: N x 25 mm, plus endcap radii
    • Front-to-back width: 10 mm to allow for strip variation and 1 mm protection
    • Top-to-bottom height: 12 mm to fit double-sided foam sticky squares
    • Wire channels: 3 mm diameter or square cross-section

    If there’s not enough light, I think a double-wide mount with two parallel LED strips would work.

    After a bit of screwing around with additive endcaps that produced catastrophically non-manifold solid models, I figured out the proper subtractive way to build the mounts: the endcaps actually define the overall shape of the mount.

    Start by placing a pair of spheroids, with radii matching the strip dimensions, so that their outer poles match the desired overall length:

    Strip Light Mount - end cap spheroids - whole
    Strip Light Mount – end cap spheroids – whole

    The north/south poles must face outward, so that the equal-angle facets along the equators match up with what will become the mount body: rotate the spheroids 90° around the Y axis. The centers lie at the ends of the LED segments; the model shown here has a single 25 mm segment.

    Then hack off three quadrants:

    Strip Light Mount - end cap spheroids
    Strip Light Mount – end cap spheroids

    That leaves two orange-segment shapes that define the endcaps:

    Strip Light Mount - end caps - shaped
    Strip Light Mount – end caps – shaped

    Here’s the key step that took me far too long to figure out. Shrinkwrapping the endcaps with the hull() function finesses the problem of matching the body facets to the endcap facets:

    Strip Light Mount - end caps - hull
    Strip Light Mount – end caps – hull

    Model the wire channels as positive volumes that will be subtracted from the mount. The Channels layout shows both channels separated by a short distance:

    Strip Light Mount - positive wire channels
    Strip Light Mount – positive wire channels

    The horizontal hexagons started as squares, but that looked hideous on the rounded endcaps.

    Seen from the bottom, the mount starts like this:

    Strip Light Mount - no wiring channels
    Strip Light Mount – no wiring channels

    Position and subtract a wire channel:

    Strip Light Mount - visible wire channel
    Strip Light Mount – visible wire channel

    Which leaves the final solid model as a single, manifold object:

    Strip Light Mount - complete
    Strip Light Mount – complete

    The module generating the mount takes three parameters: the number of LED segments and two string variables that determine whether to punch a channel in each endcap. Instantiate the module three times with suitable parameters to get a trio of LED mounts, all laid out for 3D printing:

    Strip Light Mount - build layout
    Strip Light Mount – build layout

    They built just exactly like those models would suggest; the M2 produces dependable results.

    The OpenSCAD source code:

    // LED Strip Lighting Brackets for Kenmore Model 158 Sewing Machine
    // Ed Nisley - KE4ZNU - February 2014
    
    Layout = "Strip";			// Build Show Channels Strip
    
    //- Extrusion parameters must match reality!
    //  Print with 2 shells and 3 solid layers
    
    ThreadThick = 0.20;
    ThreadWidth = 0.40;
    
    HoleWindage = 0.2;			// extra clearance
    
    Protrusion = 0.1;			// make holes end cleanly
    
    AlignPinOD = 1.70;			// assembly alignment pins: filament dia
    
    inch = 25.4;
    
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    
    //----------------------
    // Dimensions
    
    Segment = [25.0,10.0,3.0];		//  size of each LED segment
    
    WireChannel = 3.0;				// wire routing channel
    
    StripHeight = 12.0;				// sticky tape width
    StripSides = 8*4;
    
    DefaultLayout = [1,"Wire","NoWire"];
    
    EndCap = [(2*WireChannel + 1.0),Segment[1],StripHeight];	// radii of end cap spheroid
    EndCapSides = StripSides;
    
    CapSpace = 2.0;						// build spacing for endcaps
    BuildSpace = 1.5*Segment[1];		// spacing between objects on platform
    
    //----------------------
    // Useful routines
    
    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);
    }
    
    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);
    
    }
    
    //-- The negative space used to thread wires into the endcap
    
    module MakeWireChannel(Which = "Left") {
    
    	HalfSpace = EndCap[0] * ((Which == "Left") ? 1 : -1);
    
    	render(convexity=2)
    	translate([0,EndCap[1]/3,0])
    		intersection() {
    			union() {
    				cube([2*WireChannel,WireChannel,EndCap[2]],center=true);
    				translate([-2*EndCap[0],0,EndCap[2]/2])
    					rotate([0,90,0]) rotate(180/6)
    						PolyCyl(WireChannel,4*EndCap[0],6);
    			}
    			translate([HalfSpace,0,(EndCap[2] - Protrusion)]) {
    				cube(2*EndCap,center=true);
    			}
    		}
    }
    
    //-- The whole strip, minus wiring channels
    
    module MakeStrip(Layout = DefaultLayout) {
    
    	BarLength = Layout[0] * Segment[0];				// central bar length
    
    	hull()
    		difference() {
    			for (x = [-1,1])						// endcaps as spheroids
    				translate([x*BarLength/2,0,0])
    					resize(2*EndCap) rotate([0,90,0]) sphere(1.0,$fn=EndCapSides);
    			translate([0,0,-EndCap[2]])
    				cube([2*BarLength,3*EndCap[1],2*EndCap[2]],center=true);
    			translate([0,-EndCap[1],0])
    				cube([2*BarLength,2*EndCap[1],3*EndCap[2]],center=true);
    		}
    
    }
    
    //-- Cut wiring channels out of strip
    
    module MakeMount(Layout = DefaultLayout) {
    
    	BarLength = Layout[0] * Segment[0];
    
    	difference() {
    		MakeStrip(Layout);
    		if (Layout[1] == "Wire")
    			translate([BarLength/2,0,0])
    				MakeWireChannel("Left");
    		if (Layout[2] == "Wire")
    			translate([-BarLength/2,0,0])
    				MakeWireChannel("Right");
    	}
    }
    
    //- Build it
    
    ShowPegGrid();
    
    if (Layout == "Channels") {
    	translate([ EndCap[0],0,0]) MakeWireChannel("Left");
    	translate([-EndCap[0],0,0]) MakeWireChannel("Right");
    }
    
    if (Layout == "Strip") {
    	MakeStrip(DefaultLayout);
    }
    
    if (Layout == "Show") {
    	MakeMount(DefaultLayout);
    }
    
    if (Layout == "Build") {
    
    	translate([0,BuildSpace,0]) MakeMount([1,"Wire","Wire"]);		// rear left side, vertical
    	translate([0,0,0]) MakeMount([5,"Wire","NoWire"]);				// rear top, across arm
    	translate([0,-BuildSpace,0]) MakeMount([6,"NoWire","Wire"]);	// front top, across arm
    }
    

    The original design doodles, which bear a vague resemblance to the final mounts:

    LED Strip Light Mounts - Original Design Sketches
    LED Strip Light Mounts – Original Design Sketches

    The little snood coming out of the top would hide a wire going through a hole drilled in the capital-S of “Sears” on the front panel, but I came to my senses long before implementing that idea…

  • Sewing Machine Lights: LED Strips

    Mary wants more light on her free-motion quilting, right where the needle meets the fabric. I proposed LED strip lights on the machine arm, in addition to rebooting the end cap lamp into the current millennium, which requires:

    • No snagging on a bulky quilt shoved through the machine
    • Not completely butt-ugly
    • Reasonably durable

    I picked up reels of cool-white and warm-white waterproof LED strips (12 V, 3528-size chips, 5 m, 600 LED, 25 mm segments) from the usual eBay supplier, who promptly charged for both and shipped only the warm-white reel. Cool-white LEDs will be a better color match to daylight from the window and the little Ottlite she uses for detail work, but I ran some prototypes while we wait for the replacement.

    The Chinese New Year really comes in handy as an excuse for screwing things up and not responding for a week or two. ‘Nuff said.

    They’re similar to the RGB LEDs from a while ago, with even gummier “waterproof” encapsulation. I got double-density 600 LED strips to put more light emitters across the arm:

    Various LED strip lights
    Various LED strip lights

    The smaller 3528 SMD LEDs (vs. 5050 chips in the others) allow a narrower strip and the double-density layout means each three-LED segment is half as long long. The as-measured dimensions work out to:

    • 25.0 mm segment length
    • 8.2 mm strip width
    • 2.5 mm thickness

    The sealant thickness varies considerably, so I’d allow 3.0 mm for that in case it mattered. It slobbers over the edge of the strip here and there; allowing at least 9.0 mm would be wise.

    The SMD resistor in each segment is 150 Ω. A 5 segment length drew 85 mA @ 12 V = 17 mA/segment. Boosting the voltage to 12.8 V got the current to the expected 100 mA = 20 mA/segment.

    The LEDs are noticeably less bright than the 5050 LEDs, even at 20 mA/segment, but I think they’ll suffice for the task.

  • Casio EX-Z850 Backup Battery Replacement

    When our Larval Engineer repaired the Casio EX-Z850 camera’s buttons, we noticed that the memory backup battery was on its last legs:

    EX-Z850 internal battery corrosion
    EX-Z850 internal battery corrosion

    The camera has returned home, where I’ll put it to good use on the microscope, but I’m the type of guy who swaps batteries every now and again, soooo that needs fixing. Wikipedia says the battery isn’t replaceable, but you can’t believe everything you read on Wikipedia, right?

    Removing the camera’s front cover (stick the screws to a length of masking tape!) reveals the backup battery hasn’t magically healed itself:

    Casio EX-Z850 backup battery - corrosion
    Casio EX-Z850 backup battery – corrosion

    The main battery applies 3.2 V with the top terminal negative; it’s marked to help me remember that fact.

    I snipped both legs of the top contact bracket, which promptly fell off, and then pushed the battery off its bottom contact. The condition of those two pads suggests a pair of cold solder joints (clicky for more dots):

    Casio EX-Z850 backup battery - contact pads
    Casio EX-Z850 backup battery – contact pads

    I wanted to replace it with a polyacene supercap, but there’s just not enough room in there. The biggest cap that fit was a 33 μF 16 V SMD electrolytic cap, so I soldered one in place:

    Casio EX-Z850 backup battery - capacitor replacement
    Casio EX-Z850 backup battery – capacitor replacement

    I had to flip the camera around to get the soldering iron in between the cap and what looks to be an intrusion monitoring switch just to its left. No lie, that shiny metal thing seems to be a tab that presses against the front cover; it could be a static discharge / grounding point, but the base looks more complex than that.

    Now, a capacitor isn’t a battery, but memory backup doesn’t require much of a battery, either. I guesstimated the memory (or whatever) would draw a few microamps, at most, giving me a few seconds, at least, to swap batteries. A quick measurement shows that I’ll have plenty of time:

    Casio EX-X850 backup capacitor - voltage vs time
    Casio EX-X850 backup capacitor – voltage vs time

    The camera started up fine after that adventure, so the memory stays valid with the backup voltage down around 1 V.

    The cap measured 34 μF, so a voltage decline of 24 mV/s works out to:

    IC = C (dV/dT) = 34 μF x 24 mV/s = 820 nA

    So, at least at room temperature, the memory draws less than a microamp.

    I love it when a plan comes together!

    With any luck, that capacitor should outlast the rest of the camera. It’ll definitely outlast a lithium battery, even if I could find one to fit in that spot.

    I did those measurements by sampling the capacitor, rather than holding the meter probes in place, because the 300 nA of current drawn by a 10 MΩ input resistance would cause a pretty large measurement error…

  • Radio Shack Sound Level Meter: Switch Repair

    My trusty Radio Shack Sound Level Meter recently began misbehaving: switching to the most sensitive two ranges (-60 and -70 dB) caused it to turn off. Finessing the switch got it back in operation, so I completed the mission (a string quartet in Vassar’s Skinner Recital Hall topped out around 90 dB) and laid it out for repair:

    Radio Shack Sound Level Meter - PCB solder side
    Radio Shack Sound Level Meter – PCB solder side

    After cleaning the already pristine gold-plated (!) contact pads and putting it back together, the switch failed the same way.

    A bit more poking & prodding revealed that slightly loosening the upper case screw (in the boss just left of the switch pads) made it work perfectly.

    Ah-ha!

    Come to find out that the rear case presses on the PCB to hold it in place, which moves it slightly toward the front of the case. The switch rotor, being firmly attached to the stem in the middle of the pads, doesn’t move, which suggested that the bifurcated spring contacts on the rotor had take a bit of a set.

    Un-bending them very, very gently to add a millimeter of springiness solved the problem.

    A piano solo topped out in the high 80s…

    Update: Another meter owner shows how to cure the problem, rather than treat the symptom:

    I found your older note about the switch problem on the digital R.S. SLM to be helpful, in that mine had a similar problem, but only on the 60 dB scale, not both the 60 and 70 dB scales. Your diagnosis about the back putting pressure on the board seems to be right on. However, for me, re-bending the switch contacts didn’t help.

    What did fix it was filing ~2mm off the back case boss around the upper screw hole. That was the source of the pressure on the board. 1 mm didn’t quite fix it, but 2mm off did.

  • Kenmore Model 158 Speed Control: Carbon Disk Replacement

    The speed control pedal on Mary’s sewing machine once again started racing away from a dead stop, which we now know means more disks inside the carbon pile rheostat have disintegrated. It looked pretty much the same as when I took it apart in 2009:

    Rheostat graphite wafers and contacts
    Rheostat graphite wafers and contacts

    This time, it had one cracked wafer and several thin ones, reducing the length of the stacks so much that the pedal exerted very little force (thus, not starting the motor) before the shorting contacts caused a runaway.

    Back then, I’d machined two brass disks to fill the empty space:

    Rheostat with brass spacer button
    Rheostat with brass spacer button

    A rough measurement showed I’d have to double their thickness to about 7 mm each, but it seemed like replacing high-resistance carbon with low-resistance brass wasn’t a Good Idea, at least when taken to an extreme. Not knowing what would count as an extreme in this situation, I decided to replace the brass disks with graphite cylinders sized to fill up the empty space.

    The Little Box o’ Machinable Graphite produced a small bar, from which I sliced a square with jeweler’s pull saw:

    Machineable Graphic - rough-sawn slab
    Machineable Graphic – rough-sawn slab

    Cutting that in half, then one of the bars in half, produced a pair of cubes:

    Machineable Graphic - cubes
    Machineable Graphic – cubes

    I tried sanding off the corners:

    Machineable Graphic - sanded cube
    Machineable Graphic – sanded cube

    After it became painfully obvious that process would take just slightly less than forever, I deployed the Dremel sanding drum:

    Machineable Graphic - cylinders
    Machineable Graphic – cylinders

    Much to my surprise, the shop vacuum didn’t quite inhale the cloth, I didn’t drop either of the cylinders into its gaping maw or sand away my fingertips, and the cylinders emerged more-or-less good looking. I sanded the faces reasonably smooth and parallel, removed a few high spots left by the Dremel, and the cylinders slid neatly into the holes in the ceramic rheostat.

    I felt a definite kinship with those guys in the rackets (not squash, as I once knew) court under the stadium seats…

    I put the cylinders at the end of the stacks, against the graphite buttons (shown in the top picture), and left the disks to settle themselves against the brass contacts. In retrospect, I should have put the cylinders against the brass, so that the inevitable erosion will chew on the (relatively) easily replaced bulk cylinders.

    Each graphite cylinder displaced six disks, so now I have some spares for next time. I’m certain that the graphite has lower resistance than the equivalent length of disks, but it’s probably higher than the same length of brass. I was not going to slice those cylinders into disks.

    After vigorous and repeated handwashing with gritty cleaner after leaving the Basement Laboratory Workshop, the pedal assembly went back together smoothly and, once again, operates the way it should: controllable smooth low speeds, crazy-fast high speeds, and a steady transition between the two. Mary has resumed quilting up a storm.

    That shop vacuum may never forgive me, but it totally eliminated all the carbon dust from the work area. The filter started out coated with a generous layer of dust and crud, so I’m pretty sure it collected most of the very fine dust, too.

    I briefly considered using the lathe, but came to my senses.

    The cheap way to do AC motor speed control involves a triac chopping the sine wave, so as to produce all manner of hash above and beyond the usual motor commutation noise. It occurs to me that the sewing machine has a universal motor that would run just as happily on 120 V DC as it does on AC, so a cheap 120 V DC supply (around 2 A should suffice) from the usual eBay supplier and a high voltage MOSFET on a generous heatsink would work even better. One might even get by with just a full-wave rectifier bridge and pulsating DC.

    The rheostat doesn’t dissipate more than a few watts, I think, so thermal management should not pose a serious problem.

    The motor rating says it’s good for 1 A, which means the power should be less than a few tens of watts. Some resistance and current measurements are in order.

    You can actually buy replacement pedals, but what’s the fun in that?