Advertisements

Archive for January 2nd, 2014

Bell Helmet Visor Mount Tabs

Santa delivered a pair of helmets that will require mirror mounts and a mic boom before the spring riding season kicks in. The visor has tabs that snap into sockets on each side of the helmet:

Bell Helmet Visor Mount - socket

Bell Helmet Visor Mount – socket

It occurred to me that I could make an interposer between the helmet and the visor that could anchor the mic boom, with a tab for the helmet and a socket of some sort for the visor. While that’s still on the to-do list, the tab looks like this:

Bell Helmet Visor Mount

Bell Helmet Visor Mount

Those are 1 mm cubes on 10 mm centers, so this is a teeny little thing.

I don’t have a good idea for the corresponding socket, because those little grippers seem much too small for 3D printing, but now I have some tabs to play with:

Bell Helmet Visor Mount - OEM vs 3D Printed

Bell Helmet Visor Mount – OEM vs 3D Printed

The OpenSCAD source code puts the tab atop an oval base plate, but it’ll eventually stick out of the boom mount:

// Bell Helmet Visor Mount
// Ed Nisley KE4ZNU
// December 2013

// Layout options

Layout = "Build";			// Build Show

//-----
// Extrusion parameters must match reality!

ThreadThick = 0.20;
ThreadWidth = 0.4;

HoleWindage = 0.2;

//-- Handy stuff

function IntegerMultiple(Size,Unit) = Unit * ceil(Size / Unit);

Protrusion = 0.1;			// make holes end cleanly

inch = 25.4;

//----------------------
// Dimensions

//----------------------
// 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);
}

//- Put peg grid on build surface

module ShowPegGrid(Space = 10.0,Size = 1.0) {

	RangeX = floor(100 / Space);
	RangeY = floor(125 / Space);

	for (x=[-RangeX:RangeX])
		for (y=[-RangeY:RangeY])
			translate([x*Space,y*Space,Size/2])
			%cube(Size,center=true);

}

//-------------------
// Shapes

TabBaseLength = 17.0;
TabTopLength = 15.5;

TabWidth = 4.00;
TabHeight = 5.5;
TabEmbed = 0.5;
TabTaperHeight = 3.70;
TabBaseHeight = TabHeight - TabTaperHeight;

LatchBar = 2.25;					// square cross section
WebIndent = 1.60;					// from outside edge of post
WebThick = TabWidth - 2*WebIndent;
LatchIndentTall = TabHeight - LatchBar;

PostLength = 5.00;
PostTaper = 1.25;
LatchIndentLength = TabBaseLength - 2*(PostLength + PostTaper);

module BellLatch() {

	difference() {
		intersection() {
			translate([0,TabWidth/2,0]) rotate([90,0,0])				// side view
			linear_extrude(height=TabWidth)
				polygon(points=[
					[-TabBaseLength/2,-TabEmbed],[-TabBaseLength/2,TabBaseHeight],[-TabTopLength/2,TabHeight],
					[TabTopLength/2,TabHeight],[TabBaseLength/2,TabBaseHeight],[TabBaseLength/2,-TabEmbed]
				]);

			translate([0,0,-TabEmbed])
			linear_extrude(height=(TabHeight + TabEmbed),convexity=3)				// top view
				polygon(points=[
					[-TabBaseLength/2,-TabWidth/2],
					[-TabBaseLength/2, TabWidth/2],
					[-(TabBaseLength/2 - PostLength), TabWidth/2],
					[-(TabBaseLength/2 - PostLength - PostTaper),LatchBar/2],
					[ (TabBaseLength/2 - PostLength - PostTaper),LatchBar/2],
					[ (TabBaseLength/2 - PostLength),TabWidth/2],
					[ TabBaseLength/2, TabWidth/2],
					[ TabBaseLength/2,-TabWidth/2],
					[ (TabBaseLength/2 - PostLength),-TabWidth/2],
					[ (TabBaseLength/2 - PostLength - PostTaper),-LatchBar/2],
					[-(TabBaseLength/2 - PostLength - PostTaper),-LatchBar/2],
					[-(TabBaseLength/2 - PostLength),-TabWidth/2]
				]);
		}
		for (y=[-1,1])
		translate([0,y*((TabWidth/2 + WebThick/2)),LatchIndentTall/2])
			cube([LatchIndentLength,TabWidth,LatchIndentTall],center=true);
	}

/*	difference() {
		translate([0,0,TabHeight/2])
		cube([TabLength,TabWidth,TabHeight],center=true);
	}
*/
}

//-------------------
// Build things...

ShowPegGrid();

if (Layout == "Show")
	BellLatch();

if (Layout == "Build") {
	translate([0,0,2.0])
		BellLatch();
	difference() {
		resize([20.0,10.5,2.0])
			cylinder(r=2,h=2,$fn=32);
		for (x=[-1,1])
			translate([x*(5/2 + TabBaseLength/2 + 0.5),0,5+0.6])
				cube([5,25,10],center=true);
	}

}
Advertisements

7 Comments