Advertisements

Archive for April 1st, 2011

Tour Easy: Zzipper Fairing Lower Mount Plates

Those plates handle the upper mount points, but the fairing also attaches to each side of the front fork. A nice rounded oval mates the fairing to the bracket, with two foam pads adapting the flat plates to the curved fairing surface. This view shows the outside of the fairing:

Lower mount - front

Lower mount - front

The hole position requires a mirror-image pair of mounts that, mercifully, all fit on the build platform at once. The solid models look about like you’d expect:

Lower Bushings

Lower Bushings

Those little tabs on the inside edge of the bracket recess printed about as poorly as you’d expect, but they’re not really critical.

I printed a set of white plates for my bike, installed the new filament tensioner, and went full frontal Barbie for my favorite ladies. This view shows the inside of the fairing:

Lower mount - rear

Lower mount - rear

Turns out my ladies don’t like pink any more than I do.

The OpenSCAD source:

// Clamp plates for Zzipper fairing on Tour Easy recumbents
// Ed Nisley - KE4ZNU - Mar 2011

// Build with...
//	extrusion parameters matching the values below
//	4 outer shells
//	4 solid surfaces at top + bottom

include </home/ed/Thing-O-Matic/lib/MCAD/units.scad>

// Extrusion parameters for successful building

ThreadWidth = 0.55;					// should match extrusion width
ThreadZ = 0.33;						// should match extrusion thickness

HoleWindage = ThreadWidth;			// enlarge hole dia by extrusion width

// Plate dimensions

Layer1X = 35;						// against fairing surface
Layer1Y = 30;
Layer1Z = 2*ThreadZ;

HoleOffsetX = 5.0;					// will be sign-flipped as needed
HoleOffsetY = -(Layer1Y/2 - 10.0);

Layer2Margin = 1.5;					// uncovered edge
Layer2X = Layer1X - 2*Layer2Margin;
Layer2Y = Layer1Y - 2*Layer2Margin;
Layer2Z = 3*ThreadZ;

MountX = 16.3 + HoleWindage;		// front fork mounting plate
MountHoleOffset = 13.0;				// Y end to hole center
MountY = Layer1Y;
MountZ = 4*ThreadZ;					// recess depth
MountCap = 3.0;						// endcap arc height
MountR = (pow(MountCap,2) + 0.25*pow(MountX,2)) / (2*MountCap);	// ... radius

Layer3Margin = 1.5;
Layer3X = Layer2X - 2*Layer3Margin;
Layer3Y = Layer2Y - 2*Layer3Margin;
Layer3Z = 3*ThreadZ;

PlateZ = Layer1Z + Layer2Z + Layer3Z;

HoleDia = 0.25 * inch;				// these are 1/4-20 bolt holes

// Convenience settings

BuildOffsetX = 3.0 + Layer1X/2;		// build X spacing between top & bottom plates
BuildOffsetY = 3.0 + Layer1Y/2;		//	... Y

Protrusion = 0.1;					// extend holes beyond surfaces for visibility

//---------------
// Create plate

module Plate() {

  union() {
	  translate([0,0,Layer1Z/2])
		scale([Layer1X,Layer1Y,1]) cylinder(r=0.5,h=Layer1Z,$fn=32,center=true);
	  translate([0,0,Layer1Z + Layer2Z/2])
		  scale([Layer2X,Layer2Y,1]) cylinder(r=0.5,h=Layer2Z,$fn=32,center=true);
	  translate([0,0,Layer1Z + Layer2Z + Layer3Z/2])
		  scale([Layer3X,Layer3Y,1]) cylinder(r=0.5,h=Layer3Z,$fn=32,center=true);
  }

}

//---------------
// Create hole

module Hole(OffsetX,OffsetY) {

  translate([OffsetX,OffsetY,PlateZ/2])
	cylinder(r=(HoleDia + HoleWindage)/2,
			h=(PlateZ + 2*Protrusion),
			center=true,$fn=10);

}

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

// Right side

translate([BuildOffsetX,BuildOffsetY,0])
  difference() {
	Plate();
	Hole(HoleOffsetX,HoleOffsetY);
  }

translate([BuildOffsetX,-BuildOffsetY,0])
  difference() {
	  Plate();
	  Hole(-HoleOffsetX,HoleOffsetY);
	  translate([-HoleOffsetX,(HoleOffsetY - MountY/2 + MountHoleOffset),(PlateZ - MountZ/2 + Protrusion/2)])
		intersection() {
		  cube([MountX,MountY,(MountZ + Protrusion)],center=true);
		  translate([0,(MountY/2 - MountR),0]) cylinder(r=MountR,h=(MountZ + Protrusion),center=true);
		}
  }

// Left side

translate([-BuildOffsetX,BuildOffsetY,0])
  difference() {
	Plate();
	Hole(-HoleOffsetX,HoleOffsetY);
  }

translate([-BuildOffsetX,-BuildOffsetY,0])
  difference() {
	  Plate();
	  Hole(HoleOffsetX,HoleOffsetY);
	  translate([HoleOffsetX,(HoleOffsetY - MountY/2 + MountHoleOffset),(PlateZ - MountZ/2 + Protrusion/2)])
		intersection() {
		  cube([MountX,MountY,(MountZ + Protrusion)],center=true);
		  translate([0,(MountY/2 - MountR),0]) cylinder(r=MountR,h=(MountZ + Protrusion),center=true);
		}
  }
Advertisements

, ,

3 Comments