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

  • Aceco FC1002 Battery Re-replacement

    Aceco FC1002 Battery Re-replacement

    My old Aceco FC1002 frequency meter stopped working without being plugged into the charger. It runs from a quartet of NiMH cells taped into a tray I made seven years ago:

    Aceco FC1002 - hacked battery
    Aceco FC1002 – hacked battery

    One of the cells was completely dead and the other three will blink LEDs for the rest of their lives.

    The Eneloops have trickled down from the DSC-H5 and still seem perfectly fine for ordinary use.

    The faceplate bears the scars of its cracked acrylic (?) coating, so I pushed it out, traced the outline on a flat piece of polypropylene clamshell packaging, cut it out, and stuck it in place with tapeless sticky:

    Aceco FC1002 - polypropylene faceplate
    Aceco FC1002 – polypropylene faceplate

    That removes the branding, but IMO improves the appearance.

    It should continue working for another half decade or so!

  • MakerBeam Swarf Cleanout

    MakerBeam Swarf Cleanout

    Playing with Evaluating a recently arrived MakerBeam Starter Kit revealed swarf snarls in the tapped end holes. After giving up on a needle-nose tweezer, a compressed air blow gun expelled the mess from a handful of short beams:

    Makerbeam - internal swarf A
    Makerbeam – internal swarf A

    A scrap of acoustic foam backstopped the rest of the assortment:

    Makerbeam - internal swarf B
    Makerbeam – internal swarf B

    Which doesn’t account for the scattering of swarf and oil blown elsewhere in the Basement Shop.

    Perhaps a bad day in the MakerBeam factory?

    Protip: wear eye protection when using compressed air!

  • Tour Easy: Rear Fender Bracket Installed

    Tour Easy: Rear Fender Bracket Installed

    A rainy day finally produced an opportunity to install the rear fender bracket on my bike:

    Tour Easy Rear Fender Bracket - improved
    Tour Easy Rear Fender Bracket – improved

    It’s actually another iteration, tweaked to hold the fender snugly against the bracket, because it’s tucked in a location where I can’t measure anything.

    The brake noodle isn’t connected yet, but it has plenty of room in front of the fender block.

  • Bafang Programming Adapter: More Cable Colors

    Bafang Programming Adapter: More Cable Colors

    In the process of installing a Bafang BBS02 mid-drive motor on a friend’s diamond-frame bike, I discovered, once again, how little anybody cares about the colors inside cables:

    Bafang Display Extension Cable - internal colors
    Bafang Display Extension Cable – internal colors

    The cheerful rainbow on the right is the stub end of the Bafang display extension cable I built into the previous adapter.

    The new cable on the left seemed like it might match the canonical colors:

    Bafang BBS02 display cable pinout
    Bafang BBS02 display cable pinout

    It comes heartbreakingly close:

    Bafang Display Cable - extension colors
    Bafang Display Cable – extension colors

    Brown and Orange connect as the naive user might expect, which does reduce the likelihood of incinerating the motor controller / USB adapter / laptop by connecting the 48 V battery directly to the logic-level electronics.

    However, White wasn’t on the original menu, Green is now TXD, and Black has become, comfortingly, GND.

    Verily, it is written: Hell hath no fury like that of an unjustified assumption.

    This socket connector has a watertight shell making it extremely difficult to mate and unmate with the pin connector on the bike. Watertightness being unnecessary, a little razor-knife action seems in order:

    Bafang Display Extension Cable - shroud trimming
    Bafang Display Extension Cable – shroud trimming

    Visually, they’re both green-ish, but sometimes the Pixel camera accentuates any differences.

  • NYS DOT Motivation: Death

    NYS DOT Motivation: Death

    We have just started rolling from Overocker Road and the traffic signal on Burnett Blvd at Rt 55 (on the far left) has just turned green for the single car on the sensor loop:

    Burnett Blvd Rt 55 - 2021-05-23 - 0 s
    Burnett Blvd Rt 55 – 2021-05-23 – 0 s

    Much to our surprise, 17 s later the signal is still green:

    Burnett Blvd Rt 55 - 2021-05-23 - 17 s
    Burnett Blvd Rt 55 – 2021-05-23 – 17 s

    As usual, the unmarked sensor loop doesn’t detect bicycles and the control doesn’t take our clearing time into account, so the signal turns yellow 5 s later (after 22 s from turning green) while we’re still in the intersection:

    Burnett Blvd Rt 55 - 2021-05-23 - 22 s
    Burnett Blvd Rt 55 – 2021-05-23 – 22 sBurnett Blvd Rt 55 – 2021-05-23 – 22 s

    After another 6 s, though, we’re through the intersection and lined up on the right side of Rt 55, just as the Rt 55 signal turns green:

    Burnett Blvd Rt 55 - 2021-05-23 - 28 s
    Burnett Blvd Rt 55 – 2021-05-23 – 28 s

    Note that the Burnett Blvd signal remained green for 22 s, much longer than in bygone years, and the green-to-green time is now 28 s. We got through the intersection without any difficulty, although the green-to-red clearance time remains scanty.

    Those of long memory may recall my writeup of the timing in early November last year. That was with many cars triggering the sensor loops, so the timings from a trip last July with a single truck-and-trailer tripping the sensor may be more relevant. Or take your pick from other timings done during the last six years; there’s plenty of data to show something’s new and different.

    Mary recently discovered a reason why NYS DOT may have suddenly changed the signal timing at the Burnett intersection after all those years:

    During the incident, a black Nissan Titan, driven by a 51-year-old male resident of Lagrangeville, collided with a bicycle, ridden by a 58-year-old male resident of Poughkeepsie, in the area of the crosswalk on the southeast portion of the intersection, said the Town of Poughkeepsie Police.

    The bicyclist sustained serious injuries and was transported to MidHudson Regional Hospital.

    https://dailyvoice.com/new-york/putnam/police-fire/bicyclist-seriously-injured-after-crash-with-vehicle-in-area/798453/

    The crosswalk mentioned in the article appears in the last picture.

    The cyclist died of his injuries shortly after that article went live.

    Mary knew him. He was one of the gardeners near her plot in the Vassar Community Garden who lived in the apartments a few hundred yards from that intersection, didn’t own a car, and, for years, rode through that intersection to the grocery store at the far end of Burnett Blvd (across another of DOT’s intersections). Everyone knew him as a nice, considerate guy.

    When DOT tells you “Clearance times are determined based on speed, intersection dimensions, grade, and reaction time and cannot be adjusted” they don’t add “Because not enough people have died to get our attention.”

    Death is the only thing that will convince NYS DOT’s engineers to change the signal timing at an intersection.

    As far as I can tell, all of the other intersections along our usual routes still have the same inadequate clearance times. Evidently, the bicyclist death toll isn’t high enough to get their attention and evidence here doesn’t matter there, because motor vehicle traffic cannot be delayed, even for a few seconds, merely to protect the most vulnerable “users” of their facilities.

    We’ve been bicycling all our adult lives and haven’t been killed yet, despite NYS DOT’s complete lack of attention. Our experiences justify my cynicism and bitterness.

    I eventually figured out why no NYS DOT staffer will accompany me on bike trips along their “safe for all users” roads. If they did, they’d be unable to deny knowing how hazardous their engineering designs & maintenance practices are in real life, should the question come up in a court of law.

    If you think that’s not the case, then let’s go riding together …

    Road design, build quality, and attention to details matter, even though drivers and, yes, cyclists share some of the blame.

  • Sticky Trap Screen Frames

    Sticky Trap Screen Frames

    The objective being to reduce the number of onion maggots in Mary’s Vassar Farm plot without chemical agents, I conjured sticky trap screen frames from the vasty digital deep:

    Sticky Trap - first production run
    Sticky Trap – first production run

    Each one contains half a sheet of yellow sticky plastic, which is easy enough to cut before peeling off the protective covering sheets. The cage is half-inch galvanized hardware cloth snipped with hardened diagonal cutters. A bead of acrylic adhesive around the base holds the cage in place

    Although you can deploy sticky sheets without cages, they tend to attract and affix beneficial critters: butterflies, small birds, furry critters, toads, gardeners, and the like. We don’t know how effective the cages will be, but they seemed better than nothing.

    They mount on ski poles cut in half:

    Sticky Trap - ski pole installed
    Sticky Trap – ski pole installed

    And on fence posts around the perimeter:

    Sticky Trap - angle bracket installed
    Sticky Trap – angle bracket installed

    To my untrained eye, some of those doomed critters are, indeed, onion maggot flies. The rest seem to be gnats and other nuisances, so IMO we’re applying population pressure in the right direction.

    Each base-and-cap frame takes about three hours to print, so I did them one at a time over the course of a few days while applying continuous product improvement.

    The sheets rest on small V blocks intended to keep them centered within the cage:

    Sticky Sheet Cage - angle bracket - solid model
    Sticky Sheet Cage – angle bracket – solid model

    The ski pole attachment must build with the cap on top, but it bridges well enough for the purpose:

    Sticky Sheet Cage - ski pole - solid model
    Sticky Sheet Cage – ski pole – solid model

    The overhanging hooks on the blocks (just barely) engage the grid to keep the lid in place, while remaining short enough to not droop too badly. You could probably delete the hooks from the bottom plate, but they align the cage while the adhesive cures.

    The sheets tend to bend in the middle, so I’ll stick a thin slat or two vertically to keep them straight.

    The OpenSCAD source code as a GitHub Gist:

    // Sticky Sheet Cage
    // Ed Nisley KE4ZNU May 2021
    Layout = "Build"; // [Build, Show, Cap, Attachment]
    Bracket = "Ski"; // [Angle, Ski, Post]
    //- Extrusion parameters must match reality!
    /* [Hidden] */
    ThreadThick = 0.25;
    ThreadWidth = 0.40;
    HoleWindage = 0.2;
    Protrusion = 0.1; // make holes end cleanly
    inch = 25.4;
    ID = 0;
    OD = 1;
    LENGTH = 2;
    function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);
    //———————-
    // Dimensions
    Sheet = [1,100,150]; // sticky sheet
    Grid = 0.5*inch;
    Cage = [2*Grid + 5.0, 8*Grid + 5.0, 12*Grid + 2.0]; // grid wire cage bent around sheet
    CageRad = 2.5; // wire bending radius
    CageThick = 2.0; // grid thickness
    WallThick = 3.0; // min wall and bottom thickness
    Recess = 5.0; // inset to capture cage edge
    Plate = [Cage.x,Cage.y,Recess] + [2*WallThick,2*WallThick,WallThick];
    PlateRad = 5.0;
    SkiPole = [20.0,20.0 + 2*WallThick,50];
    AnglePlate = [30,30,50];
    ScrewClear = 5.0;
    BuildGap = 5.0;
    //———————-
    // 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);
    }
    //———————-
    // Pieces
    module Cap() {
    union() {
    difference() {
    hull()
    for (i=[-1,1], j=[-1,1])
    translate([i*(Plate.x/2 – PlateRad),j*(Plate.y/2 – PlateRad),0])
    cylinder(r=PlateRad,h=Plate.z,$fn=12);
    translate([0,0,Plate.z – Recess])
    hull()
    for (i=[-1,1], j=[-1,1])
    translate([i*(Cage.x/2 – CageRad),j*(Cage.y/2 – CageRad),0])
    cylinder(r=CageRad,h=Plate.z,$fn=12);
    }
    difference() {
    Strut = Cage.x – 2*CageThick;
    Latch = [Cage.x,WallThick,0.75*Plate.z];
    union() {
    for (j=[-1,1])
    translate([0,j*2.5*Grid,Plate.z])
    cube([Strut,WallThick,2*Plate.z],center=true);
    for (j=[-1,1])
    translate([0,j*2.5*Grid,2*Plate.z – Latch.z/2])
    cube(Latch,center=true);
    }
    translate([0,0,2*Plate.z + (Cage.z – Sheet.z)/4])
    rotate([0,45,0])
    cube([Strut/sqrt(2),Plate.y,Strut/sqrt(2)],center=true);
    }
    }
    }
    module Attachment() {
    if (Bracket == "Angle") {
    translate([0,Plate.y/2,0])
    rotate(45)
    difference() {
    union() {
    cube(AnglePlate,center=false);
    rotate(-45)
    translate([0,WallThick,Plate.z/2])
    cube([Plate.x – 2*PlateRad,4*WallThick,Plate.z],center=true);
    }
    translate([WallThick,WallThick,-Protrusion])
    cube(AnglePlate + [0,0,2*Protrusion],center=false);
    translate([AnglePlate.x/2,-Protrusion,2*AnglePlate.z/3])
    rotate([-90,0,0])
    PolyCyl(ScrewClear,2*AnglePlate.x,6);
    translate([-Protrusion,AnglePlate.x/2,1*AnglePlate.z/3])
    rotate([90,0,90])
    PolyCyl(ScrewClear,2*AnglePlate.x,6);
    }
    }
    else if (Bracket == "Ski") {
    translate([0,Plate.y/2 + SkiPole[OD]/2,0])
    difference() {
    union() {
    PolyCyl(SkiPole[OD],SkiPole[LENGTH],24);
    translate([0,-3*WallThick,Plate.z/2])
    cube([Plate.x – 2*PlateRad,4*WallThick,Plate.z],center=true);
    }
    translate([0,0,-2*WallThick])
    PolyCyl(SkiPole[ID],SkiPole[LENGTH],24);
    }
    }
    }
    //———————-
    // Build it
    if (Layout == "Cap")
    Cap();
    if (Layout == "Attachment") {
    Attachment();
    }
    if (Layout == "Show") {
    translate([0,0,Sheet.z/2 + Plate.z])
    color("Yellow")
    cube(Sheet,center=true);
    Cap();
    Attachment();
    translate([0,0,Sheet.z + 2*Plate.z])
    rotate([180,0,0])
    Cap();
    }
    if (Layout == "Build") {
    translate([-(Plate.x/2 + BuildGap),0,0]) {
    Cap();
    Attachment();
    }
    translate([(Plate.x/2 + BuildGap),0,0])
    Cap();
    }

  • Bafang Brake Sensor Magnet Realignment

    Bafang Brake Sensor Magnet Realignment

    As mentioned earlier, the Bafang brake sensors on Mary’s Tour Easy require a magnet on the brake levers to activate the switches. They arrived with disk magnets that did not suit the levers, so I used neodymium “bar magnets”:

    Tour Easy Bafang BBS02 - brake sensor - installed
    Tour Easy Bafang BBS02 – brake sensor – installed

    That worked for a few rides, but the alignment turned out to be entirely too critical, because the magnetization is through the bar’s thin dimension, rather than along its length, making the field weakest in the direction of the switch.

    Magnetic field visualization film shows the field null along the thin edge of the bar:

    Neodymium bar magnet - edge field
    Neodymium bar magnet – edge field

    That’s a slightly shorter magnet from a different toothbrush head, cemented edgewise into a holder conjured from the vasty digital deep:

    Brake Magnet Mount - PrusaSlicer prevew
    Brake Magnet Mount – PrusaSlicer prevew

    The field is much more uniform on the flat side of the bar:

    Neodymium bar magnet - side field
    Neodymium bar magnet – side field

    Some double-sided foam tape snuggles the sensor and the magnet together on the brake lever:

    Bafang Brake Sensor - released detail
    Bafang Brake Sensor – released detail

    I coated the magnet with JB Plastic Bonder urethane adhesive in the hope of filling any gaps in its nickel coating caused while extricating it from the toothbrush head.

    The rusty screw head in the upper right positions the lever at the proper distance from the grip to suit Mary’s hand. An earlier version of the holder shows the alignment:

    Bafang Brake Sensor - released position
    Bafang Brake Sensor – released position

    The switch trips (opens) with the lever roughly parallel to the grip, again with the earlier holder:

    Bafang Brake Sensor - activated position
    Bafang Brake Sensor – activated position

    A detailed view of the gap with the lever at the tripped position:

    Bafang Brake Sensor - activated detail
    Bafang Brake Sensor – activated detail

    The levers have enough travel to prevent accidental trips due to light finger pressure, which turned out to be a problem with the original end-on alignment.

    The brake pads don’t quite touch the rim when the switch trips, so the motor has plenty of time to shut off before the brakes take effect. It also stops when the pedals stop turning, so we should not see any disagreement between motor and brakes as to the bike’s momentum.

    The wider base on the new mounts makes them much more stable on the levers, although I don’t like having them stick up so far. Mounting everything underneath the levers would look better, but any problems will be more obvious with everything in plain sight.

    I may affix the magnets directly to the levers with Plastic Bonder if the foam tape doesn’t live up to its reputation. Removing them would be more challenging; a shot with a small chisel should suffice.