Posts Tagged M2

Prototype Board Holder: Now With Mounting Holes and Common Board Sizes

The folks I’ve been coaching through their plotter build project showed it off at the local MiniMakerFaire this past weekend. Next time around, I’ll insist they secure their circuit boards and use good wiring techniques, so as to avoid destroying more stepper drivers.

To that end, adding mounting holes to my proto board holder seems in order:

Proto Board Holder 90x70 - Flange mounting holes - Slic3r preview

Proto Board Holder 90×70 – Flange mounting holes – Slic3r preview

The board dimensions now live in an associative array, so you just pick the board name from a Configurator drop-down list:

/* [Options] */

PCBSelect = "ArdUno"; // ["20x80","40x60","30x70","50x70","70x90","80x120","ArdDuemil","ArdMega","ArdPro","ArdUno","ProtoneerCNC"]


PCBSizes = [

Which seems easier than keeping track of the dimensions in comments.

You can now put the PCB clamp screws and mounting holes on specific corners & sides, allowing oddball locations for Arduino boards with corner cutouts along the right edge:

Proto Board Holder ArdUno - Slic3r preview

Proto Board Holder ArdUno – Slic3r preview

A “selector” notation separates the hole location from the board dimensions & coordinates:

ScrewSites = [
//  [-1,1],[1,1],[1,-1],[-1,-1],        // corners
//  [-1,0],[1,0],[0,1],[0,-1]           // middles
  [-1,1],[-1,-1],[1,0]                  // Arduinos

Might not be most obvious way, but it works for me. Most of the time, corner clamps seem just fine, so I’m not sure adding the clamp and mounting hole locations to the dimension array makes sense.

The OpenSCAD source code as a GitHub Gist:



Leave a comment

Mostly Printed CNC: Endstop Mount

Being a big fan of having a CNC machine know where it is, adding endstops (pronounded “home switches” in CNC parlance) to the Mostly Printed CNC axes seemed like a good idea:

MPCNC - X min endstop - actuator view

MPCNC – X min endstop – actuator view

All the mounts I could find fit bare microswitches of various sizes or seemed overly complex & bulky for what they accomplished. Rather than fiddle with screws and nut traps / inserts, a simple cable tie works just fine and makes the whole affair much smaller. Should you think cable ties aren’t secure enough, a strip of double stick tape will assuage your doubts.

A snippet of aluminum sheet moves the switch trip point out beyond the roller’s ball bearing:

MPCNC - X min endstop

MPCNC – X min endstop

I’m not convinced homing the Z axis at the bottom of its travel is the right thing to do, but it’s a start:

MPCNC - Z min endstop

MPCNC – Z min endstop

Unlike the stationary X and Y axes, the MPCNC’s Z axis rails move vertically in the middle block assembly; the switch moves downward on the rail until the actuator hits the block.

Perforce, the tooling mounted on the Z axis must stick out below the bottom of the tool carrier, which means the tool will hit the table before the switch hits the block. There should also be a probe input to support tool height setting.

The first mount fit perfectly, so I printed four more in one pass:

MPCNC MB Endstop Mounts - Slic3r preview

MPCNC MB Endstop Mounts – Slic3r preview

All three endstops plug into the RAMPS board, leaving the maximum endstop connections vacant:

MPCNC - RAMPS min endstop positions

MPCNC – RAMPS min endstop positions

Obviously, bare PCBs attached to the rails in mid-air aren’t compatible with milling metal, which I won’t be doing for quite a while. The electronic parts long to be inside enclosures with ventilation and maybe dust filtering, but …

The switches operate in normally open mode, closing when tripped. That’s backwards, of course, and defined to be completely irrelevant in the current context.

Seen from a high level, these switches set the absolute “machine coordinate system” origin, so the firmware travel limits can take effect. Marlin knows nothing about coordinate systems, but GRBL does: it can touch off to a fixture origin and generally do the right thing.

The OpenSCAD source code as a GitHub Gist:

, ,


NEMA17 Motor and Bearing Mounts

As part of coaching a student (and his father!) on their incredibly ambitious build-a-plotter-from-scratch project, I suggested stealing using HP’s grit-wheel paper drive, rather than fiddling with guide rods to move either the pen carrier or the entire paper platform. Dremel sanding drums seem about the right size and they had an 8 mm shaft harvested from a defunct printer, so a pair of mounts moves the project along:

NEMA17 and Bearing Mounts - Slic3r preview

NEMA17 and Bearing Mounts – Slic3r preview

The motor mount code is a hack job from my old NEMA17 mount and the code has a lot not to like. The bearing mount puts the bearing on the proper centerline using brute force copypasta and depends on friction to hold it in place. The two models should be integrated into the same file, the shaft centerline shouldn’t involve the printed thread width, and blah blah blah:

NEMA17 motor and bearing mounts

NEMA17 motor and bearing mounts

I had him turn the shaft adapter from an aluminum rod in the mini-lathe: he’s hooked.

The OpenSCAD source code as a GitHub Gist:

, ,


More Tommy Bar Handles

Having used a nail for far too long, this is a definite step up for my machinist vises:

Tommy Bar - machinist vise

Tommy Bar – machinist vise

The vise knob has a hole just barely passing a length of 3.4 mm = 9/64 inch mild steel rod from the Small Box o’ Cutoffs.

While I was at it, I made a handle for the parallel jaw clamps:

Tommy Bar - parallel jaw clamp

Tommy Bar – parallel jaw clamp

Those knobs pass a 3.0 mm = 1/8 inch rod, similarly sourced. Inexplicably, one clamp expected no more than a 7/64 inch rod; a brief introduction to Mr Drill Press persuaded it concerning the error of its ways.

I should have made the handles distinctively different, because they’ll get mixed up in the box of vises & clamps. Next time, fer shure!

The Tommy Bar handles use the same solid model as the Sherline Tommy Bars, with hole diameters as noted. Cyan PETG is definitely easier on the eye than red PLA, although it does fade into the background clutter around here.

, ,

1 Comment

Hydrant Wrench

Just because I can:

Fire Hydrant Wrench

Fire Hydrant Wrench

The Slic3r preview shows a bit more detail:

Hydrant Wrench - Slic3r preview

Hydrant Wrench – Slic3r preview

Even an inch-thick handle wouldn’t have enough mojo for the task.

Wikipedia has the equations you need to go from the easily measured “height” (vertex to opposite side) dimension to the pentagon’s “outside radius”, which equals the radius of the circumscribed circle needed by OpenSCAD.

The OpenSCAD source code as a GitHub Gist:

Sorry ’bout that … had to do it.


Tour Easy Headset Wrench

The headset on my Tour Easy ‘bent worked its way loose, which led to a disturbing discovery: the headset wrench I made from a discarded flat wrench vanished with the shop tools donated to MakerSmiths.

Fortunately, we live in the future:

Tour Easy Headset Wrench - Slic3r preview

Tour Easy Headset Wrench – Slic3r preview

A thin plastic wrench is absolutely no good for torquing down the locknut, but that’s not what it’s for. Adjust the bearing race to the proper preload with this wrench, hold it in place, then torque the locknut with the BFW.

The OpenSCAD source code as a GitHub Gist:

Now, I’d like to say that was easy, but in actual point of fact …

First, I forgot to divide by cos(180/6) to convert the across-the-flats size to the diameter of OpenSCAD’s circumscribed hexagon-as-circle, which made the wrench uselessly small:

Tour Easy Headset Wrench - v1

Tour Easy Headset Wrench – v1

If you have a 28 mm nut with low torque requirements, though, I’ve got your back.

While I had the hood up, I slenderized the handle into a much shapelier figure:

Tour Easy Headset Wrench

Tour Easy Headset Wrench

Trotting off to the garage with a warm plastic wrench in hand, I discovered the blindingly obvious fact that the headset nuts have eight sides. On the upside, the number of sides became a parameter, so, should you happen to need a five-sided wrench (perhaps on Mars), you can have one.

So, yeah, it’s rapid prototyping in full effect:

Tour Easy Headset Wrench Iterations

Tour Easy Headset Wrench Iterations

Remember, kids, never design while distracted …

, ,


Tour Easy Daytime Running Light: Now with Chirality!

In the unlikely event our bikes need two running lights or, perhaps, a running light and a headlight, the solid model now builds mounts for the right side of the fairing, as before:

Fairing Flashlight Mount - Right side - solid model

Fairing Flashlight Mount – Right side – solid model

And for the left side:

Fairing Flashlight Mount - Left side - solid model

Fairing Flashlight Mount – Left side – solid model

Ahhh, chirality: love that word.

Those pix come from a cleaned-up version of the OpenSCAD code that finally gets the 3-axis rotations right, after a rip-and-replace rewrite to deliver the ball model with its origin in the center of the ball where it belonged and rotate the ring about its geometric center. Then the rotations become trivially easy and a slight hack job spits out a completely assembled model:

if (Component == "Complete") {
  mirror(TiltMirror) {
    translate([0,0,ClampOD/2]) {

However, putting the center of rotation directly over the center of the base plate means the ToeIn rotation shifts the bottom of the clamp ring along the X axis, where it can obstruct the mounting holes. Shifting the ring by a little bit:


… keeps the ring more-or-less centered on the top of the plate. That’s not quite the correct geometry, but it’s close enough for the small angles needed here.

Aiming the beam slightly higher makes a 400 lumen flashlight about as bright as any single LED in new car running lights:

Fairing Flashlight Mount - Mary approaching

Fairing Flashlight Mount – Mary approaching

You can just barely make out the snazzy new blue plate on the left side of the fairing.

A bike’s natural back-and-forth handlebar motion sweeps the beam across the lane, so I think there’s no real benefit from blinking.

The OpenSCAD source code as a GitHub Gist:

, ,