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.

Tag: Improvements

Making the world a better place, one piece at a time

  • Devilspie2: Lua Scripts

    Prompted by that suggestion, here’s the current collection of Devilspie2 scripts (in ~/.config/devilspie2/) that make my dual-monitor setup (left: 2560×1440 landscape, right: 1050×1680 portrait) usable with a single X session in Xubuntu 12.10. The window manager understands about the monitor layout, so maximizing a window will fill whatever monitor it’s currently occupying.

    acroread.lua — maximized on portrait

    if (get_window_name()=="Adobe Reader") then
          unmaximize();
          set_window_geometry(0,0,1000,100);
          set_window_geometry(2561,0,1000,100);
          maximize();
    end
    

    chromium.lua — right half of landscape

    if (get_application_name()=="Chromium" and get_window_name() ~= "Print") then
       set_window_geometry(1400,0,1150,1200);
       maximize_vertically();
    end
    

    debugging.lua — handy with –debug option

    debug_print("Window Name: " .. get_window_name());
    debug_print("Application name: " .. get_application_name());
    

    digikam.lua — right half of landscape, force large Search dialog, dammit

    if (get_application_name() == "Digikam") then
    	debug_print("DigiKam conditional - top");
    	if (get_window_name() == "Advanced Search") then
    		debug_print("Digikam - Adv Search");
    		set_window_geometry(750,100,1000,1300);
    	else
    		debug_print("Main DigiKam window");
    		set_window_geometry(0,0,1400,1000);
    		maximize_vertically();
    	end
    end
    

    firefox.lua — left half of landscape, enlarge dialogs

    if (get_application_name()=="Firefox") then
    	debug_print("FF conditional - top");
    	if (get_window_name() == "Print") then
    		set_window_position(700,350);
    	elseif (0 == string.find(get_window_name(),"Password")) then
    		set_window_position(0,0);
    		maximize_vertically();
    	end
    end
    

    gimp.lua — force Gutenprint dialog to the top, dammit

    if (get_application_name() == "GNU Image Manipulation Program") then
    	debug_print("GIMP conditional - top");
    	if (string.find(get_window_name(),"Print")) then
    		debug_print("GIMP - GutenPrint")
    		set_window_position(700,350);
    		make_always_on_top();
    	else
    		debug_print("GIMP - Main window");
    	end
    end
    

    passwords.lua — put password dialogs in mid-screen

    if (get_window_name()=="Password Required") then
    	debug_print("Password");
    	set_window_position(700,350);
    end
    

    pronterface.lua — force to middle-ish of Desktop 2

    if (get_window_name()=="Printer Interface") then
       set_window_workspace(2);
       set_window_position(1200,750);
    end
    

    slic3r.lua — force to right side of Desktop 2

    if (get_window_name()=="Slic3r") then
       set_window_workspace(2);
       set_window_geometry(1600,0,700,700);
    end
    

    terminal.lua — maximized on portrait

    if (get_window_name()=="Terminal") then
       set_window_position(2561,0);
       maximize();
    end
    

    thunderbird.lua — left half of landscape, force big dialogs

    if (get_application_name() == "Thunderbird") then
    	debug_print("TBird conditional - top");
    	if (1 == string.find(get_window_name(),"Print")) then
    		debug_print("TBird - print...");
    		set_window_position(700,350);
    	elseif (string.find(get_window_name(),"Sending") or
    			string.find(get_window_name(),"Confirm") or
    			string.find(get_window_name(),"Processing")) then
    		debug_print("TBird - generic dialog");
    		set_window_position(200,600);
    	elseif (string.find(get_window_name(),"Write:")) then
    		debug_print("TBird - writing");
    		set_window_geometry(1300,0,900,600);
    		maximize_vertically();
    	elseif (0 == string.find(get_window_name(),"Password")) then
    		debug_print("Main TBird window?");
    		debug_print(" name: ",get_window_name());
    		set_window_geometry(0,0,1300,1200);
    		maximize_vertically();
    	end
    end
    
  • Improved M2 Heated Build Platform: First Light

    Although the M2’s heated build platform works well enough, somebody who knows what he’s doing (you know who you are: thanks!) sent me an improved version. It’s a PCB heater, laid out to compensate for the usual edge cooling, firmly attached to a tempered glass plate with genuine 3M thermally conductive tape:

    Improved M2 HBP - test setup
    Improved M2 HBP – test setup

    They designed the heater around the 30 VDC power supply used in their other equipment. Although I had high moderate hopes that a boost power supply would convert the 24 V supply I already had for the stepper driver bricks into the 30 V for the heater, it was not to be. So there’s a 36 V 9.7 A 350 W supply arcing around the planet that (I think) should work better: adjust the voltage down as far as it’ll go, soak up another few volts in the solid-state relay, and Things Should Be Close Enough to 30 V. One can buy a genuine 30 V supply, but it costs surprisingly more than either 24 V or 36 V supplies on the surplus / eBay market and won’t really provide the proper voltage without upward tweaking anyway.

    I replaced their standard 0.156 inch square terminals with Anderson Powerpoles, soldered a length of shielded cable to the 100 kΩ thermistor pads, and gimmicked up a connection to the 24 V supply; it delivered 23.7 V at the PCB terminals. The thermistor is 100 kΩ at 25 °C and 11.4 kΩ at 77 °C. The PCB heater is 5.9 Ω at 25 °C and 7.3 Ω at 77 °C; it dissipates 77 W at 77 °C (no, that’s not a typo).

    The ultimate temperature looks to be about 90 °C with a 24 V supply, which isn’t quite enough for ABS (which I’m not using in the M2 right now, but probably will eventually). The time constant, assuming the 1-e-1 point is 66 °C, works out to about 9 minutes; it’ll be up to final temperature in half an hour. Those numbers aren’t quite as accurate as one might wish, because the heater power drops as the temperature rises and the copper resistance increases.

    A 30 V supply would dissipate 120 W at 77 °C and rumor has it that the ultimate temperature is around 125 °C, which would be fine for ABS. Goosing the power a bit would produce more heat, but I’v been running the Thing-O-Matic at 110 °C and that’s good enough. More power, of course, gets it to the temperature setpoint faster, which is probably a Very Good Thing.

    Obviously, you need PWM to control the temperature; given a 9 minute time constant, a bang-bang controller will work perfectly well.

    The original data, including the thermistor resistance after I got my act together, plus a cute little temperature-vs-time graph:

    Improved M2 HBP - 24 V supply
    Improved M2 HBP – 24 V supply

    The colored flyspecks are part of the paper; I salvaged a stack of fancy menu cards from a trash can and padded them up as geek scratch paper.

  • Basement Safe: Foam Door Seal

    A bit of rummaging in the Big Box o’ Weatherstripping produced the stub end of a spool bearing 1/4 x 1/8 foam tape that exactly fills the gap between the Basement Safe’s door and liner:

    Basement Safe - Foam door seal - latch side
    Basement Safe – Foam door seal – latch side

    The hinge side of the door has tape between the door liner and the safe wall, because that closes in compression rather than shear:

    Basement Safe - Foam door seal - hinge side
    Basement Safe – Foam door seal – hinge side

    There should be a big bump in the humidity record marking that installation, but I don’t expect any immediate difference. If the silica gel lasts more than two months, I’ll consider it a win.

  • Public Facilities Maintenance: Progress

    A day or so after kvetching about that informal DCRT vehicle entrance to the head planner developing the Dutchess County Master Plan for bicycle & pedestrian facilities, this appeared:

    DCRT Overocker Crossing - block on informal entrance
    DCRT Overocker Crossing – block on informal entrance

    Notice the blue electrical junction box on the right? That can’t possibly be a Good Thing… but, so far, it doesn’t seem to bother anybody enough to repair it.

    Those missing ADA strips at Grand have been swept out, converting them into rough-bottomed trenches across the trail. At least they’re not quite so slip-prone, even if they’re still a tripping hazard.

  • Air-gapped Ferrite Toroid Data

    For an upcoming Circuit Cellar column on Hall effect current sensing, I slit another pair of toroids:

    Slitting FT37 ferrite toroid
    Slitting FT37 ferrite toroid

    Then wound them with grossly excessive amounts of wire (the up-armored core on the right appeared earlier):

    Slit Ferrite Toroid current sensors
    Slit Ferrite Toroid current sensors

    The smaller toroid is an FT37-43 that barely covers the active area of an SS49-style Hall effect sensor, but experience with the FT50 toroid suggests that’ll be entirely enough:

    slit FT37 toroid trial fit to SS48-style Hall effect sensor
    slit FT37 toroid trial fit to SS48-style Hall effect sensor

    Data on the uncut toroids:

    Property FT50-61 FT37-43
    Outer diameter (OD) – inch 0.50 0.375
    Inner diameter (ID) – inch 0.281 0.187
    Length – inch 0.188 0.125
    Cross section area – cm2 0.133 0.133
    Mean path length (MPL) – cm 3.02 2.15
    Volume – cm3 0.401 0.163
    Relative Permeability (μr ) 125 850
    Saturation flux G @ 10 Oe 2350 2750
    Inductance factor (AL) – nH/turn2 68.0 420

    Those overstuffed windings improved the sensitivity, but increased the winding resistance far beyond what’s reasonable.

    Data on the slit toroids:

    Toroid ID FT50-61 FT37-43 FT50-61
    Measured air gap – cm 0.15 0.15 0.17
    Winding data
    Turns 120 80 25
    Wire gauge – AWG 28 32 26
    Winding resistance – mΩ 530 920 100
    Predicted B field – G/A 872 660 163
    Hall effect sensor @ 1.9 mV/G
    Predicted output – mV/mA 1.7 1.3 0.31
    Actual output – mV/mA 1.9 1.9 0.37
    Actual/predicted ratio – % +12 +46 +19

    The last few lines in that table show the transimpedance (transresistance, really, but …) based on the winding current to Hall sensor output voltage ratio (in either mV/mA or V/A, both dimensionally equivalent to ohms), which is why the toroid’s internal magnetic flux doesn’t matter as long as it’s well below saturation.

    Gnawing the 80 turn winding off the FT37-43 toroid and rewinding it with 15 turns of 24 AWG wire dropped the winding resistance to 23 mΩ and the transimpedance to 0.36 mV/mA:

    FT37-43 with 15 turns 24 AWG - Hall sensor
    FT37-43 with 15 turns 24 AWG – Hall sensor

    However, applying a voltage gain of about 28 (after removing the sensor’s VCC/2 bias) will produce a 0-to-5 V output from 500 mA input, which seems reasonable.

  • Precision Wrench Rebuild

    Decades ago, one jaw on my little 1/4 inch wrench that fits 4-40 nuts broke off. I brazed it back on, fully aware that one day it would break off again, because brazing isn’t really a suitable repair technique for a wrench, even one labeled as “Precision” in that time-honored manner of all low-cost tools.

    Time passes, I’m tightening screws against 4-40 nuts, and the jaw gives way:

    Precision wrench - broken jaw
    Precision wrench – broken jaw

    So I sawed off a strip of bedframe steel that fit the nuts better than the original stamped steel, did a bit of hand filing, and came up with a reasonable replacement:

    Precision wrench - detail
    Precision wrench – detail

    I rammed it into the handle, just as they’d done with the original stamped steel shape:

    Precision wrench - rebuilt
    Precision wrench – rebuilt

    That should last approximately forever…

  • Water Heater Anode Rod Access Done Right

    For reasons I won’t go into, I just installed another water heater. This one, nominally a GE that’s made by Rheem, has a perfectly aligned anode rod access port. This view shows the insulation filling the port, after removing the plastic cap:

    GE Water Heater Anode Rod - as shipped
    GE Water Heater Anode Rod – as shipped

    A bit of excavation reveals the top of the rod:

    GE Water Heater Anode Rod - excavated
    GE Water Heater Anode Rod – excavated

    And the 1-1/16 six-point socket fits exactly through the port and mates perfectly with the rod:

    GE Water Heater Anode Rod - socket in place
    GE Water Heater Anode Rod – socket in place

    Unlike the never-sufficiently-to-be-damned Whirlpool, no metalwork is required.

    Oh, and they have a very nice drain valve at the bottom, with wide opening that shouldn’t clog with the slightest trace of sediment:

    GE Water Heater Anode Rod - drain valve
    GE Water Heater Anode Rod – drain valve

    Overall, it looks like a definite win.