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: Recumbent Bicycling

Cruisin’ the streets

  • Tour Easy: DPC-18 Display Controls

    Tour Easy: DPC-18 Display Controls

    The Bafang 500C display I installed on Mary’s Tour Easy recumbent has assist level buttons along its left edge:

    Bafang display - clamp bushing
    Bafang display – clamp bushing

    This required her to take her left hand off the handlebar to fiddle with the assist level and, as it turned out, used her thumb in position causing some distress. Given that changing the assist level happens a lot as we ride, it was time for a change.

    So I replaced the 500C with a DPC-18 display like the one on my bike, with the key advantage of putting the buttons on the handgrip:

    Tour Easy Bafang Controls - DPC-18 buttons
    Tour Easy Bafang Controls – DPC-18 buttons

    She preferred a higher position for the buttons than I do, with the PTT button for the Baofeng amateur radio below the housing.

    After a few iterations, the throttle moved from the right handgrip to the right end of the handlebar crosspiece on a lengthened version of the mount I conjured for Tee’s Terry Symmetry upright bike:

    Tour Easy Bafang DPC-18 - throttle mount
    Tour Easy Bafang DPC-18 – throttle mount

    That location requires a bit of dexterity, but let us move the twist-grip shifter upward on the handgrip where it is more comfortable. She rarely uses the throttle, so we’ll try this for a while.

    The DPC-18 has an awkward portrait-mode display with an incredible amount of wasted space, with the side detriment of displacing the blue Camelbak hose. After a few iterations, we settled on a receptacle to catch the mouthpiece without requiring any fancy snaps / clips / fasteners:

    Tour Easy Bafang Controls - Camelbak nozzle catcher
    Tour Easy Bafang Controls – Camelbak nozzle catcher

    The solid model descends from the Zzipper fairing mounts on that same aluminum bar, with the bottle simply jammed into the big hole:

    Zzipper Fairing - Camelbak nozzle catcher - show layout
    Zzipper Fairing – Camelbak nozzle catcher – show layout

    There being no real forces on the holder, I omitted the aluminum load-spreading plate across the top and just epoxied four threaded brass inserts into the bottom part.

    Early reports suggest a happier thumb and no problems stashing the hose, so it’s all good.

  • Tour Easy Broken Spoke

    Tour Easy Broken Spoke

    A rear spoke snapped on Mary’s Tour Easy while we were at the far end of a ride. Unlike most broken spokes, the flanged end that I couldn’t maneuver the stub out of the hub and deploy the FiberFix, so we rode home slowly while avoiding as much rough pavement as feasible.

    Once in the shop, pulling the sprocket and extracting the stub posed no problem:

    Tour Easy broken spoke
    Tour Easy broken spoke

    Install the new spoke, crank to 23 on the Park Spoke Tension Meter to match the rest of the wheel, check the truing, and it’s all good.

    At some point in the last two decades of riding, it seem the chain fell off the high side and gouged the spokes around the hub:

    Tour Easy broken spoke - damage
    Tour Easy broken spoke – damage

    If another spoke snaps in the near future, I’ll replace the lot of them, but until then, well, there’s riding to be done …

  • Tour Easy Running Lights: Anodizing Sun Fade

    Tour Easy Running Lights: Anodizing Sun Fade

    After six years, the anodizing on the Anker LC40 flashlights I repurposed as daytime running lights shows some radiation damage:

    Tour Easy Running Lights fading - mount top view
    Tour Easy Running Lights fading – mount top view

    The bottom side looks pristine:

    Tour Easy Running Lights fading - mount bottom view
    Tour Easy Running Lights fading – mount bottom view

    It turns out they were clamped in slightly different positions on our two bikes:

    Tour Easy Running Lights fading - top view
    Tour Easy Running Lights fading – top view

    The side view shows a gentle color transition:

    Tour Easy Running Lights fading - bottom view
    Tour Easy Running Lights fading – bottom view

    Apparently I had swapped the caps from the two lights when I noticed the fading after only the first year.

  • Newmowa NP-BX1

    Newmowa NP-BX1

    After a year’s service in my Sony AS-30V helmet camera, the Newmowa NP-BX1 lithium cells perform pretty nearly as well as they started out:

    NP-BX1 - Newmowa 2022 - 2023-08
    NP-BX1 – Newmowa 2022 – 2023-08

    Recharging the cells after that test averaged 907 mA·hr within 2%, so they’re still reasonably well grouped.

    The camera burns 1.9 W, so the worst of the cells has a 100 minute runtime = 3.3 W·hr/1.9 W × 60 min/hr,.

    Our usual weekday rides run a little over an hour and I change the batteries during our longer weekend rides, so they rarely see more than an hour’s use.

    A recent 1-¼ hour = 75 minute ride soaked up 687 mA·hr, just about exactly 75% of 907 mA·hr. Gotta love it when the numbers work.

    Surprisingly good performance, given the drama involved in finding those cells. I wonder if that will hold next year when I buy another set?

  • Eneloop AAA Cells: Six Years of Blinkiness

    Eneloop AAA Cells: Six Years of Blinkiness

    With the rear running lights up and mmmm running on our Tour Easy recumbents, I could finally retire the Planet Bike Superflash blinkie after a decade of constant use:

    Superflash on Tour Easy
    Superflash on Tour Easy

    For the last six years, a set of eight Panasonic Eneloop AAA cells have been marching in pairs through the Superflashes in lockstep alphabetic order. We ride several times a week, less in the winter, and I changed the batteries once a week whether they need it or not, so they’ve gone through maybe 200 charge cycles. With four pairs and two bikes, that’s 100 cycles each.

    They’re not dead yet, but they’re showing signs of age:

    Eneloop AAA - final - 2023-08
    Eneloop AAA – final – 2023-08

    In round numbers, the capacity is down 20% from their original 850 mW·hr. The 50 to 75 mV depression is probably more significant for an LED power supply intended for alkaline cells, as the light was running from 2.3 V instead of 3 V.

    They worked surprisingly well, all things considered.

    Nowadays, one might use bucked lithium cells with a constant 1.5 V output for their entire discharge curve, although I absolutely do not believe a claimed 1000+ mW·hr capacity.

  • Tour Easy Running Lights: Firmware

    Tour Easy Running Lights: Firmware

    The optoisolator carrying the Bafang controller’s LIGHT signal pulls Pin 2 down to turn the LED on constantly for night riding:

        if (!Morser.continueSending())
            if (digitalRead(PIN_LIGHTMODE) == HIGH)
                Morser.startSending();
            else
                digitalWrite(PIN_OUTPUT,HIGH);      // constantly turn on in headlight mode
    

    That’s the entirety of the program’s loop() function, so there’s not much to the firmware.

    Imagine that: a whole computer devoted to sampling an input bit a zillion times a second and persistently setting an output bit:

    Tour Easy Running Light - Arduino view
    Tour Easy Running Light – Arduino view

    The Morse output to the rear is now “s” rather than “i” for more blinkiness, but I doubt anybody will ever notice.

    The next time I raise the hood on this thing, I’ll add a digital input to select FRONT or REAR mode to get me out of having to remember which hardware goes where.

    The Arduino source code as a GitHub Gist:

    // Tour Easy Running Light
    // Ed Nisley – KE4ZNU
    // September 2021
    // 2023-03 preprocessorize for front/rear lights
    // https://github.com/markfickett/arduinomorse
    #include <morse.h>
    // Bafang headlight output pulls pin low
    #define PIN_LIGHTMODE 2
    #define PIN_OUTPUT 13
    #define FRONT
    #if defined(FRONT)
    #define BLINKS "b e "
    #define POLARITY false
    #elif defined(REAR)
    #define BLINKS "s "
    #define POLARITY true
    #else
    #error "Needs FRONT or REAR"
    #endif
    // second param: true = active low output
    LEDMorseSender Morser(PIN_OUTPUT,POLARITY,(float)10.0);
    void setup()
    {
    pinMode(PIN_LIGHTMODE,INPUT_PULLUP);
    Morser.setup();
    Morser.setMessage(String("qst de ke4znu "));
    Morser.sendBlocking();
    Morser.setSpeed(75);
    Morser.setMessage(String(BLINKS));
    }
    void loop()
    {
    if (!Morser.continueSending())
    if (digitalRead(PIN_LIGHTMODE) == HIGH)
    Morser.startSending();
    else
    digitalWrite(PIN_OUTPUT,HIGH); // constantly turn on in headlight mode
    }
  • Tour Easy Running Lights: Mechanics

    Tour Easy Running Lights: Mechanics

    The running lights have the same general structure as before and fit into the same front and rear holders:

    Tour Easy Running Light - rear installed
    Tour Easy Running Light – rear installed

    I made the recess slightly deeper to provide a bit more protection to the lens:

    Tour Easy Running Light - front installed
    Tour Easy Running Light – front installed

    The lenses have a 10° beam angle, so a few more millimeters of sidewall doesn’t intercept much light.

    The layout doodle grew a few more notes:

    Tour Easy running light - housing dimensions
    Tour Easy running light – housing dimensions

    I had the good idea of boring the tube, knurling the rod, then epoxying the two together before cutting the rod:

    Tour Easy Running Light - heatsink curing
    Tour Easy Running Light – heatsink curing

    Which let the lathe hold them in perfect alignment during curing:

    Tour Easy Running Light - heatsink plug alignment
    Tour Easy Running Light – heatsink plug alignment

    The rod fits through the lathe spindle and I intended to use it as an arbor while turning the tube exterior, then cut the finished heatsink off flush.

    Which really good idea lasted until the next morning, when I looked at the setup and immediately cut the rod flush with the tube. Because reasons, perhaps excess blood in my caffeine stream.

    So I had to finish the heatsink on hard mode right up against the chuck:

    Tour Easy Running Light - turning heatsink rebate
    Tour Easy Running Light – turning heatsink rebate

    Flipping it around and gripping that little rebate to skim the OD down to 25 mm seemed fraught with peril, so I stabilized the open end with a chuck and plenty of oil; the live center was just too big around for the job.

    Dang, I hate it when I screw up a nice plan.

    Then drill various holes on the Sherline and epoxy the circuit support plate:

    Tour Easy Running Light - circuit plate curing
    Tour Easy Running Light – circuit plate curing

    After boring the PVC pipe to 23 mm ID, I made a pair of Delrin fixtures to simplify turning the exterior to 25 mm before parting it off:

    Tour Easy Running Light - turning body OD
    Tour Easy Running Light – turning body OD

    The PVC is so thin the Arduino’s LEDs shine right through:

    Tour Easy Running Light - installed top view
    Tour Easy Running Light – installed top view

    The radioactive green endcap is ordinary laser-cut fluorescent edge-lit acrylic with sunlight through the garage door on the left. I used red acrylic for the taillight to encourage their separate identities.

    The knockoff Arduino Nano fits on one side of the support plate:

    Tour Easy Running Light - Arduino view
    Tour Easy Running Light – Arduino view

    And the current regulator on the other:

    Tour Easy Running Light - current regulator
    Tour Easy Running Light – current regulator

    Because these run from a dedicated 6.3 V step-down regulator, rather than the Bafang controller’s headlight output, the 2.0 Ω sense resistor sets the LED current to 0.8 V / 2.0 Ω = 400 mA, which is pretty close to the LED 1 W spec.

    The white blob at the end of the two ribbon cable wires is the optoisolator pulling down a pin when the LIGHT signal is active, telling the firmware to stop the normal blink pattern and just turn the LED on all the time. This will come in handy if I ever do any night riding.

    The LED is epoxied to the aluminum shell (with metal-filled JB Weld) and the whole affair never gets more than comfortably warm even with the LED running constantly.

    I think they came out All Good™, despite various blunders along the way.