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: Sherline

Sherline CNC mill

  • HT GPS + Audio: PCB Layout

    The circuit board is 30-mil, double-sided, half-ounce (I think) copper on glass-fiber stock, direct-etched by rubbing ferric chloride solution onto it with a sponge.

    Used the CNC Sherline to drill the holes; the G-Code is now tailored for my Sherline mill and tool-length probe station.

    The copper layers as a 600 dpi PNG file:

    Top and Bottom Copper
    Top and Bottom Copper

    The top copper image (on the left) is reversed so it comes out correctly when you’re doing toner-transfer etching.

    I didn’t bother with a silkscreen, because I don’t have a soldermask and there’s no room for text around the parts anyway.

    The four vias at the corners mark the edge of the board. Trim it with tinsnips (or a shear if you have one), then introduce it to Mr Belt Sander until the edges pass directly through the middle of those via holes. Round the corners a bit so they fit into the case recess atop the mounting shoulder.

    Put Z-wires in the small round vias (the ones that don’t have any other traces) to connect the top and bottom ground planes.

    Put Z-wires in the other round vias to connect a top-side signal to the corresponding bottom-side trace.

    There are three jumper wires across the bottom; with only two layers I don’t get all bothered about embedding the last few. Those vias are square.

    I don’t have any way to do plated-through holes, so solder the wires to both sides of any vias with traces on both planes. I admit I missed two of them on the TT3 ribbon cable.

    The big empty space around the positive power terminal prevents the ring-lug connector from shorting to the ground plane. Now that I think of it, there’s no need for an empty space on the bottom copper, but it doesn’t do any harm.

  • GPS + Audio Interface for ICOM Z-1A HT

    You’ve seen bits & pieces of this in the previous weeks and months: now it’s up and running!

    Admittedly, this is brassboard hardware; I must now build three final versions for our bikes incorporating all the tweaks & adjustments. But it’s time to write this stuff down so I can find it again … and perhaps you can use some chunks, too.

    ICOM IC-Z1A with GPS+Audio Interface
    ICOM IC-Z1A with GPS+Audio Interface

    What it does:

    Why we need it:

    • voice intercom for our family rides: we talk without shouting at each other
    • safety communication for public service events supported by the local amateur radio club
    • GPS-based APRS position reporting for those events
    • trip monitoring on our long solo rides
    • it’s a neat tech hack with lots of Quality Shop Time

    Major sub-projects (some already partially written up):

    I don’t have an instruction manual to go along with this, nor is there a parts kit available. You’ll certainly want to modify everything for your own purposes; the circuit board and case certainly won’t fit whatever HT you’re using!

    Over the next several days, I’ll be describing & documenting the tricky parts… in no particular order, because I’m not going to sort my notes & photos ahead of time.

  • Water Bottle Spring Cap Repair

    One of our nice aluminum water bottles hit the floor and, of course, the tiny little hinge shattered. It’s some wonderful engineering plastic, but just look at the leverage you can apply to those few millimeters of material. This is the sort of repair that can’t possibly be economically justified, but it pisses me right off when something that should be rugged turns out to be this fragile.

    The 2 mm steel hinge pin snapped the molded plastic center post of the hinge off the cap; we found the larger fragment, but the smaller one may lurk under the refrigerator for quite some time. Nothing bonds to this plastic and, if the post broke in the first place, adhesive isn’t going to help.

    Broken hinge
    Broken hinge

    Some doodling showed that a replacement hinge post should be machineable. The general idea was to square up the remaining chunk of the post, then attach a replacement hinge pivot with a screw. The post is almost exactly 1/4-inch thick, call it 6.2 mm, which means the right-angle feature under the pivot ought to keep the whole affair from twisting.

    Water Bottle Hinge
    Water Bottle Hinge

    I planned to leave the left side unmachined and cut it to fit by hand, but then figured, eh, just make it happen. I also expected to leave the area around the screw a lot thicker, with a neat counterbore around the head.

    This being a bash-to-fit, file-to-hide kind of project, I wrote a snippet of G-Code (at the bottom of the post) to chew out the part from a sheet of Lexan, then did the perpendicular hole & countersinking with manual CNC.

    No pix of that; I was working in a white-hot fury. Basically, I double-sticky-taped a slab of Lexan to a sacrificial sheet, clamped it to the tooling plate, and had at it with a 2 mm end mill. Cutting a 6.4 mm sheet with a 2 mm end mill is a bit iffy, as the flutes are just barely that long; the mill was armpit-deep in swarf and I was dribbling water into the cut to keep it cool.

    By the time I stopped for a picture, the situation looked like this.

    Replacement hinge part
    Replacement hinge part

    For what it’s worth, that’s the second part. I had to lower the screw head below the top of the half-round feature on the left end in order to clear the cap. That’s what CNC is really good for in my shop: make another one, just like the other one, only different exactly like that.

    I drilled a #50 (2-56 tap) hole in the cap pretty much by eye, using laser targeting to touch off.

    Laser aligning to hinge stub
    Laser aligning to hinge stub

    The hole wound up minutely too far inboard, but some filing cleaned up the stub edge and it was all good. I started the tap in the mill, held loosely in the chuck and turning it with my fingers, then finished up on the bench.

    The screw hole goes all the way through the cap. I filed the screw down so the end sits flush at the bottom of the cap, where the silicone rubber gasket should seal firmly against it.

    Here’s what the hinge looks like with all the bits assembled. The spring bears on the screw head, which makes the cap open with more snap than before. I put a little counterbore under the screw head, even after lowering it, to reduce the spring tension.

    Rebuilt hinge
    Rebuilt hinge

    The cap has a spring-loaded latch that never worked very well in the first place and this repair didn’t improve it. As nearly as I can tell, the molded ledge on the cap has a rounded edge that the latch simply cannot engage. This is beyond even my level of interest; Mary was accustomed to using the wire snap to hold the cap closed and that practice will continue.

    Works well enough for us and I got some Quality Shop Time on a rainy afternoon.

    The G-Code uses a slightly modified & simplified version of the tool length probe routines. I’m not convinced that using the G59.3 coordinate system is the right way to go, but everything else seems worse.

    
    (Water bottle hinge repair)
    (Ed Nisley - KE4ZNU - June 2010)
    (Rough-cut 1/4-inch plate with clamp at +Y)
    (Sacrificial plate below, double-stick tape to secure)
    (Tool change @ G30 position above length probe)
    
    (-- Global dimensions & locations)
    
    #<_Stock_Thick> =        6.5                    (overall thickness)
    
    #<_Traverse_Z> =        1.0
    #<_Safe_Z> =            30.0                (clamp clearance)
    
    (-- Section controls)
    
    #<_Do_Outline> =    1
    #<_Do_Drill> =        1
    
    (-------------------)
    (-- Initialize new tool length at probe switch)
    (    Assumes G59.3 is still in machine units, returns in G54)
    
    #<_Probe_Speed> =        250            (set for something sensible in mm or inch)
    #<_Probe_Retract> =        1            (ditto)
    
    O<Probe_Tool> SUB
    
    G49                    (clear tool length compensation)
    G30                    (to probe switch)
    G59.3                (coord system 9)
    
    G38.2 Z0 F#<_Probe_Speed>        (trip switch on the way down)
    
    G91
    G0 Z#<_Probe_Retract>            (back off the switch)
    G90
    
    G38.2 Z0 F[#<_Probe_Speed> / 10]    (trip switch slowly)
    
    #<_ToolZ> = #5063                    (save new tool length)
    
    G43.1 Z[#<_ToolZ> - #<_ToolRefZ>]    (set new length)
    
    G54
    G30                    (return to safe level)
    
    O<Probe_Tool> ENDSUB
    
    (-------------------)
    (-- Initialize first tool length at probe switch)
    
    O<Probe_Init> SUB
    
    #<_ToolRefZ> = 0.0        (set up for first call)
    
    O<Probe_Tool> CALL
    
    #<_ToolRefZ> = #5063    (save trip point)
    
    G43.1 Z0                (tool entered at Z=0, so set it there)
    
    O<Probe_Init> ENDSUB
    
    (-------------------)
    
    (-- Get started ...)
    
    G40 G49 G54 G80 G90 G92.1 G94 G97 G98        (reset many things)
    
    M5
    
    (msg,Verify clamp to +Y, stock taped down)
    M0
    
    (msg,Verify X=0 at left edge, Y=0 on finished centerline)
    M0
    
    (msg,Verify tool touched off at Z=0 on surface)
    M0
    
    O<Probe_Init> CALL
    
    T0 M6                            (ensure first tool change pauses)
    
    (-- Drill the hinge pin hole)
    
    #<Pin_X> =                7.0
    #<Pin_Y> =                0.0
    
    #<Drill_Dia> =            2.06    (Drill diameter)
    #<Drill_Num> =            46        (Drill number)
    #<Tool_Num> =            146        (Tool number)
    #<Drill_Radius> =        [#<Drill_Dia> / 2]
    #<Drill_RPM> =            3000
    #<Drill_Feed> =         [#<Drill_Dia> * 100]
    
    #<Drill_Depth> =        [#<_Stock_Thick> + 2 * #<Drill_Dia>]
    
    O<Doing_Drill> IF [#<_Do_Drill>]
    
    (debug,Insert Num #<Drill_Num> drill)
    T#<Tool_Num> M6
    
    O<Probe_Tool> CALL
    
    (debug,Set spindle to #<Drill_RPM>)
    M0
    
    F#<Drill_Feed>
    
    G0 Z#<_Traverse_Z>
    
    G83 X#<Pin_X> Y#<Pin_Y> Z[0 - #<Drill_Depth>] R#<_Traverse_Z> Q[2 * #<Drill_Dia>]
    
    O<Doing_Drill> ENDIF
    
    (-- Mill outline)
    
    #<Hinge_Radius> =        3.75                        (half-width of hinge body)
    #<Cutout_Base> =        2.75
    
    #<Cutout_Screw> =        1.50
    #<Cutout_Screw_Y> =        [#<Hinge_Radius> - #<Cutout_Screw>]
    #<Cutout_Screw_A> =        ASIN [#<Cutout_Screw_Y> / #<Hinge_Radius>]
    #<Cutout_Screw_X> =        [#<Hinge_Radius> * COS [#<Cutout_Screw_A>]]
    
    #<Passes> =                3
    
    #<Mill_Dia> =            1.98            (end mill diameter)
    #<Tool_Num> =            20
    #<Mill_Radius> =        [#<Mill_Dia> / 2]
    #<Mill_RPM> =            3000
    #<Mill_Feed> =            100
    
    #<Entry_XL> =            [0 - #<Mill_Dia>]
    #<Entry_YL> =            [0 - 2 * #<Hinge_Radius>]
    
    O<Doing_Outline> IF [#<_Do_Outline>]
    
    (debug,Insert #<Mill_Dia> mm end mill)
    T#<Tool_Num> M6
    
    O<Probe_Tool> CALL
    
    (debug,Set spindle to #<Mill_RPM>)
    M0
    
    F#<Mill_Feed>
    
    G0 X0 Y[0 - 2 * #<Hinge_Radius>]    (get to comp entry point)
    G0 Z#<_Traverse_Z>
    
    G42.1 D#<Mill_Dia>                                    (cutter comp right)
    G1 X#<Pin_X> Y[0 - #<Hinge_Radius>]
    
    #<Step_Z> = [#<_Stock_Thick> / #<Passes>]
    #<Current_Z> = [0 - #<Step_Z>]
    
    O<Outline_Passes> REPEAT [#<Passes>]
    
    G2 J[0 - #<Hinge_Radius>] Z#<Current_Z>                (ramp down to cutting level)
    
    G3 Y#<Hinge_Radius> J#<Hinge_Radius>
    G3 X[#<Pin_X> - #<Cutout_Screw_X>] Y#<Cutout_Screw_Y> J[0 - #<Hinge_Radius>]
    G1 X0
    G1 Y[0 - [#<Hinge_Radius> - #<Cutout_Base>]]
    G1 X#<Pin_X>
    G1 Y[0 - #<Hinge_Radius>]
    
    #<Current_Z> = [#<Current_Z> - #<Step_Z>]
    
    O<Outline_Passes> ENDREPEAT
    
    G0 Z#<_Safe_Z>
    
    G40
    
    O<Doing_Outline> ENDIF
    
    G30                    (back to tool change position)
    
    (msg,Done!)
    
    M2
    
  • Another Circumferential Seat-Frame Clamp

    This is another step along the way to getting our daughter’s radio firmly mounted to her Tour Easy, not tucked into one of the panniers. The general idea is to use a water bottle holder for the radio, with a seat wedge pack from an upright bike cushioning the radio. The secret ingredient is a circumferential clamp that mounts the holder to the lower rail of the bike’s seat frame.

    This clamp is basically the same as the ones on our bikes, but I doodled up a sketch with some illegible dimensions that almost matches the actual clamp; we may both find it useful the next time.

    Clamp layout sketch
    Clamp layout sketch

    Machining the clamp is straightforward: bandsaw a block of about the right size, square it up in the mill, helix-mill the clamp hole …

    Helix-milling the clamp hole
    Helix-milling the clamp hole

    Drill the clearance and tapping holes for the screw, bandsaw it in half, clean up the cut edges …

    Finished clamp parts
    Finished clamp parts

    Obviously, I didn’t put those nice bevels on the front side.

    Both previous water bottle holders required a spreader plate between the clamp screws and the holder’s screws, but this time the holder had a nice aluminum plate all by itself. It just fit on the Sherline and a bit of manual CNC center-drilled the curved plate and poked a jobber-length drill through the holes …

    Drilling holder for clamp screws
    Drilling holder for clamp screws

    And then it fit perfectly on the bike …

    Mounted holder
    Mounted holder

    A side view …

    Mounted holder - side view
    Mounted holder – side view

    Now, to find a wedge pack big enough for the HT and small enough to fit in the holder!

  • Machinable Wax: First Cuts

    This is a prototype for the case that will eventually hold a TinyTrak3 GPS-to-APRS encoder, along with a homebrew circuit board that combines the APRS data with voice from the helmet mic. The case slides into the back of our ICOM IC-Z1A and W-32A HTs, replacing the battery case.

    It’s the most complex CNC machining I’ve done so far and I figured that was the perfect reason to carve up a block of machinable wax that’s been sitting on the shelf for far too long.

    The exterior view shows why you use wax for the first pass… the ugly gash came from not retracting the end mill before the final G30, combined with trying to clamp a bendy shell in the vise. That was, of course, the final operation on that part!

    Machinable wax case - exterior
    Machinable wax case – exterior

    The inside view shows the TinyTrak serial connector cutout (left half), as well as the shoulder to support the audio interface circuit board (right half). The two holes at the upper-right are 4-40 clearance for screws that serve as contacts for the HT’s battery connection and hold the board in place.

    Machinable wax case - interior
    Machinable wax case – interior

    These survived far too many setups and takedowns as I figured out how to get all the cuts laid out and in what sequence to do everything. Now that I know a bit more about what to do, the plastic version should come out better; I’m sure I’ll also make better mistakes.

  • CycleAware Mirror Repair

    Original CycleAware Attachment
    Original CycleAware Attachment

    While installing the audio gear on our bike helmets, I found a defunct CycleAware Reflex helmet mirror in the big box o’ bike stuff.

    This pic shows that the mirror attaches to the boom through a clever ball joint that allows both rotation around the mirror’s long axis and a slight amount of tilt. Unfortunately, after a few years, the ball stem breaks and at least one of the socket petals snaps. It’s a nice  plastic design that’s totally unsuited to a few years of more-or-less daily bicycle travel.

    The repair was easy enough, particularly because I think the boom has enough adjustment range to handle the job on its own (and I don’t care about how it looks). I filed off the stem stub and milled a slot for a 2-56 machine screw along the back edge.

    Milling slot for screw
    Milling slot for screw

    Then you just slide a brass tube from the cutoff box over the end of the boom around some JB Weld epoxy, shove the screw into the blob, align the mirror with the boom, and let it cure.

    Reinforced attachment
    Reinforced attachment

    Although it’s not shown here, the helmet attachment is aligned with the mirror at right angles to the helmet bracket. That puts it in roughly the proper position with the boom bent as usual.

    I don’t actually plan to use this one for anything, but if I need a somewhat scuffed mirror in a pinch, well, it’s in the box!

  • Bike Helmet Mic Boom

    Drilling mic enclosure
    Drilling mic enclosure

    This is my latest attempt to come up with a robust electret mic capsule mount for our bike helmets.

    The general idea is to put the capsule in a small brass tube (from my box o’ random cutoffs) soldered to the end of a copper-wire boom lashed to the helmet. The tube provides alignment and physical protection, the boom doesn’t pose a poking hazard, and some decent electrical tape secures the mic cable to the boom.

    The mic capsule has back vents that allegedly provide ambient noise reduction, so the brass tube must be open on both ends. This does not implement the “waterproof” part of the spec; I still haven’t figured that out yet.

    I annealed a length of 12 AWG copper wire to make it easy to bend around the helmet’s contours; two passes with a propane torch to red heat does the deed. It will work-harden quickly and maintain its shape after that.

    AWG 12 wire is 0.080 inches in diameter, close enough to 2 mm that I poked a hole in the brass tubing with a 2 mm end mill. Filed the end of the wire flat, stuffed it in the hole, fluxed the joint, applied the big soldering gun to the wire, flowed some silver solder, and it’s all good. Fairly obviously, this meets my “the bigger the blob, the better the job” soldering criterion…

    Mic rear
    Mic rear

    The capsule has two layers of Kapton tape wrapped around it to snug up the fit, although I doubt that insulating it from the brass tube makes any difference.

    Mic front
    Mic front

    The windscreen is a ball snipped from an open-cell acoustic foam sound deadening panel that has contributed myriad mic windscreens over the years. The mic fits into a slit cut with an X-acto knife; no finesse required. The nylon cable tie will disintegrate from sun exposure at about the same time the foam rots away, which takes about two years.

    Mic foam windscreen ball
    Mic foam windscreen ball

    Despite what you might think, the helmet attachment is dramatically less butt-ugly than in years gone by…

    Boom-to-helmet detail
    Boom-to-helmet detail

    The trick is lashing the bent portion of the boom to the helmet, which prevents the entire boom from rotating around its long axis. That keeps the mic aimed directly at your mouth, regardless of how you bend the boom.

    The earbud wire loops around the mic boom a few times, with the first loop over the boom to take advantage of its rounded surface. With any luck, that will delay the inevitable fatigue failure. Mary favors old-style cylindrical earbuds, rather than newer flat or round ones.

    The USB cable (this is not, repeat not a USB headset) gets lashed to various parts of the helmet foam and routed out to the middle of the back, with the male connector a few inches below the helmet. That puts the cable over the back of the Tour Easy’s seat frame, leaving the bulk of the cable hanging behind the seat. The cable length from the female connector to the radio interface is a delicate trade off between being

    • Long enough to let you stand up and
    • Short enough to stay out of the rear wheel.

    This vertiginous shot looks down at the helmet hanging on the seat of Mary’s bike. Yup, that’s her bright new homebrew seat cover to the upper left…

    Helmet overview
    Helmet overview

    Now, for some power-on hours!