Saturday, July 13, 2013

Solar Tracker 0.2 3d Printed 20 Watt Flexible Solar Panel






4  x  608 Bearing Holder Dual Rail M6 24mm apart
4  x 21 teeth parametric involute gears

2x Solar Panel Holder
Tripod Adapter
4xSolar Panel Attachment
Servo Holder Dual Rail M6 24mm apart

Servo Mechanism SubAssembly

1x Standard Servo and horn.
2x 120mm M6 ThreadedRod
1x Servo Holder Dual Rail M6
2x 608 Bearing Holder Dual Rail M6 
2x 608 Bearings
3x M8 HexNuts
2x 21 teeth parametric involute gears
2x MachineScrews



Tripod Stand Adapter
M8 Hex Head Capture Dual Rail

Full Assembly Diagram


Wednesday, July 10, 2013

New Compression Springs for the Taylors-Gregs-Wade Hinged Extruder

RS-Australia
Steel Compression Spring 22mm Length 9.25mm dia
104.93 Newtons at 11mm full compression.
Currently testing the springs on the extruder.

Sunday, July 7, 2013

Taylors-Gregs-Wade Mod Extruder Build





Taylors-Gregs-Wade Extruder mod Openscad

This a mod of Taylors-Gregs-Wade Extruder from thingiverse.http://www.thingiverse.com/thing:6713
Designed for use with m3 lock nuts and 45mm M3 bolts.
Two 16.6mm diameter M8 Bearings.
One 608 22mm M8 Bearing.
Using normal Wades Gears and a standard nema17 stepper motor.
I have included about 20-30 adjustments from the original.
http://www.openscad.org/
OPENSCAD FILE:--------------------------------------------------------------------------------
// Taylor's Greg's Wade Extruder.
// It is licensed under the Creative Commons - GNU GPL license.
// 2010 by GregFrost, modified by Taylor Alexander (tlalexander) 2012
// Extruder based on prusa git repo.
// Greg's thing: http://www.thingiverse.com/thing:6713

//How do you use this file? Download the zip from https://github.com/prusajr/PrusaMendel
// and then place this file in the "source" directory. Now open with OpenSCAD.
//Slice at 0.2mm or change layer_thickness variable accordingly

//include<configuration.scad>

// Define the hotend_mounting style you want by specifying hotend_mount=style1+style2 etc.
malcolm_hotend_mount=1;
groovemount=2;
peek_reprapsource_mount=4;
arcol_mount=8;
mendel_parts_v6_mount=16;
grrf_peek_mount=32;
wildseyed_mount=64;
ultimaker_mount=128;


//Set the hotend_mount to the sum of the hotends that you want the extruder to support:
//e.g. wade(hotend_mount=groovemount+peek_reprapsource_mount);
m3_diameter=3;
m4_diameter=4;
m8_diameter=8;

wade(hotend_mount=4);


//Place for printing
//translate([78,-10,15.25])
//rotate([0,0,14])
//translate([-3,-3,0])
//rotate([0,-90,0])

//Place for assembly.
//wadeidler();

//===================================================
// Parameters defining the wade body:

mirrorpart=1; //set 1 to mirror the whole part (0 otherwise). This is for the Ultimaker.

idler_trap_holes_on_side=1; //set to 1 to put nut trap access holes on the side rather than the "top". useful when mounting the part upside-down, such as on the Ultimaker. set to 0 otherwise

//these are for m4 nuts
idler_screw_diameter=3.0;
idler_nut_flat_width=5.6;
idler_nut_thickness=4.2;


wade_block_height=58;
wade_block_width=22;
wade_block_depth=26;

block_bevel_r=6;

base_thickness=8;
base_length=70;
base_leadout=25;

nema17_hole_spacing=31; //31 on Ultimaker. was something else before (on greg's), so check your stepper if you don't have an Ultimaker
nema17_width=1.7*25.4;
nema17_support_d=nema17_width-nema17_hole_spacing;

screw_head_recess_diameter=7.2;
screw_head_recess_depth=3;

motor_spacing_extra=10.625; //moves the motor back extra distance. used with the large Ultimaker Gear

ultimaker_gear_separation=49.625;
stock_wades_separation=7.4444+32.0111+0.25;
gear_separation=stock_wades_separation;

motor_mount_rotation=63; //63 fits perfectly on Taylors Ultimaker mount. 45 is normal for gregs

motor_mount_translation=[motor_spacing_extra+40.5,34,0];
motor_mount_thickness=12;

m8_clearance_hole=8.5; //*ahem* this isn't actually for an M8 bolt if you're, say, using a MK6 drive gear. but I didn't feel like renaming everything
hole_for_608=17.3; //actually hole for whatever bearings you are using for the hob. 17.6 is for 606 bearings
608_thickness=6; //this is, again, actually the thickness for the bearings you're using for the hob. so the MK6 setup with 606 bearings needs 6 here

608_diameter=22; //keep this 22 if you are using a 608 for the idler

filament_feed_hole_additional_offset=0; //if using a MK6 Drive Gear, make this 2.4. Otherwise, Zero.

block_top_right=[wade_block_width,wade_block_height];

layer_thickness=0.2; //set this to the layer height you're going to slice it. this makes sure the supports work.

layer_height=layer_thickness; //this just fixes a big in greg's code. leave it alone.

filament_feed_hole_d=4;
filament_diameter=3;
filament_feed_hole_offset=filament_diameter+0.5+filament_feed_hole_additional_offset;//added additional offset for MK6 drive gear



function motor_hole(hole)=[
motor_mount_translation[0],
motor_mount_translation[1]]+
rotated(45+motor_mount_rotation+hole*90)*nema17_hole_spacing/sqrt(2);

// Parameters defining the idler.

filament_pinch=[
motor_mount_translation[0]-gear_separation-filament_feed_hole_offset-filament_diameter/2,
motor_mount_translation[1],
wade_block_depth/2];
idler_axis=filament_pinch-[608_diameter/2,0,0];
idler_fulcrum_offset=608_diameter/2+3.5+m3_diameter/2;
idler_fulcrum=idler_axis-[0,idler_fulcrum_offset,0];
idler_corners_radius=4;
idler_height=11.5;
idler_608_diameter=608_diameter+2;
idler_608_height=9;
idler_mounting_hole_across=8;
idler_mounting_hole_up=14;
idler_short_side=wade_block_depth-2;
idler_hinge_r=m3_diameter/2+2.15;
idler_hinge_width=6.5;
idler_end_length=(idler_height-2)+8;
idler_mounting_hole_diameter=m3_diameter+0.25;
idler_mounting_hole_elongation=3;
idler_long_top=idler_mounting_hole_up+idler_mounting_hole_diameter/2+idler_mounting_hole_elongation+2.5;
idler_long_bottom=idler_fulcrum_offset;
idler_long_side=idler_long_top+idler_long_bottom;
idler_nut_trap_depth=7.2;// front to back location of nut trap holes. typically this does not need to be changed






module arc(h,w,r,a)
intersection(){linear_extrude(height = h, center = true)
polygon([[0,0],[-r*sin(a),r],[r*sin(a),r]]);
difference(){
cylinder(h,r,r,center=true);
cylinder(h,r-w,r-w,center=true);
}
}






module wade (hotend_mount=0)
{

mirror([ 0, mirrorpart, 0 ])
{

difference ()
{
union()
{

translate([57,14,6])arc(12,10,49,26);


// The wade block.
translate([0,0,0])cube([wade_block_width,wade_block_height,wade_block_depth]);

// Filler between wade block and motor mount.
translate([10,motor_mount_translation[1]-hole_for_608/2,0])
cube([wade_block_width-8+ motor_spacing_extra*1.1,
wade_block_height-motor_mount_translation[1]+hole_for_608/2,
motor_mount_thickness]);

// Connect block to top of motor mount.
linear_extrude(height=motor_mount_thickness)
barbell(block_top_right-[0,5],motor_hole(0),5,nema17_support_d/2,100,60);

//Connect motor mount to base.
linear_extrude(height=motor_mount_thickness)
barbell([base_length-base_leadout,
base_thickness/2],motor_hole(2),base_thickness/2,
nema17_support_d/2,100,60);

// Round the ends of the base
translate([base_length-base_leadout,base_thickness/2,0])
cylinder(r=base_thickness/2,h=wade_block_depth,$fn=20);

translate([-base_leadout,base_thickness/2,0])
cylinder(r=base_thickness/2,h=wade_block_depth,$fn=20);

//Provide the bevel betweeen the base and the wade block.
render()
difference()
{
translate([-block_bevel_r,0,0])
cube([block_bevel_r*2+wade_block_width,
base_thickness+block_bevel_r,wade_block_depth]);
translate([-block_bevel_r,block_bevel_r+base_thickness])
cylinder(r=block_bevel_r,h=wade_block_depth,$fn=60);
translate([wade_block_width+block_bevel_r,
block_bevel_r+base_thickness])
cylinder(r=block_bevel_r,h=wade_block_depth,$fn=60);
}

// The idler hinge.
translate([2,3,0])
translate(idler_fulcrum)
{
translate([idler_hinge_r,0,0])
cube([idler_hinge_r*2,idler_hinge_r*2,idler_short_side-2*idler_hinge_width-0.5],
center=true);
rotate(-30)
{
cylinder(r=idler_hinge_r,
h=idler_short_side-2*idler_hinge_width-0.5,
center=true,$fn=60);
translate([idler_hinge_r,0,0])
cube([idler_hinge_r*2,idler_hinge_r*2,
idler_short_side-2*idler_hinge_width-0.5],
center=true);
}
}

// The idler hinge support.
translate([0,3,0])
translate(idler_fulcrum)
{
rotate(-15)
translate([-(idler_hinge_r+3),-idler_hinge_r-2,-wade_block_depth/2])
cube([idler_hinge_r+3,
idler_hinge_r*2+4,
wade_block_depth/2-
idler_short_side/2+
idler_hinge_width+0.25+
layer_thickness]);
rotate(-15)
translate([-(idler_hinge_r+3),-idler_hinge_r-2,
-idler_short_side/2+idler_hinge_width+0.25])
cube([idler_hinge_r+3+15,
idler_hinge_r*2+4,
layer_thickness]);
}

//The base.
translate([-base_leadout,0,0])
cube([base_length,base_thickness,wade_block_depth]);

motor_mount ();
}





block_holes();
motor_mount_holes ();




translate([3,34,0])cylinder(60,8,8,center=true);

translate([-4,38,-2])cube([8,24,30]);
translate([-7,28,-2])rotate([0,0,-45])cube([10,10,10]);
translate([-7,28,18.5])rotate([0,0,-45])cube([10,10,10]);
translate([-6,24,-2]){

cube([13,18,30]);
}
translate([motor_mount_translation[0]-gear_separation-filament_feed_hole_offset,
0,wade_block_depth/2])
rotate([-90,0,0])
{
if (in_mask (hotend_mount,malcolm_hotend_mount))
malcolm_hotend_holes ();
if (in_mask (hotend_mount,groovemount))
groovemount_holes ();
if (in_mask (hotend_mount,peek_reprapsource_mount))
peek_reprapsource_holes ();
if (in_mask (hotend_mount,arcol_mount))
arcol_mount_holes ();
if (in_mask (hotend_mount,mendel_parts_v6_mount))
mendel_parts_v6_hotend ();
if (in_mask(hotend_mount,grrf_peek_mount))
grrf_peek_mount_holes();
if (in_mask(hotend_mount,wildseyed_mount))
wildseyed_mount_holes();
if (in_mask(hotend_mount,ultimaker_mount))
ultimaker_mount_holes();

}


translate([57,14,10])arc(8,5,46.35,18);
translate([57,14,6])arc(16,3,45.35,18);
translate([70,55,6])rotate([0,90,0])cylinder(8,1.5,1.5);

}

}
}

function in_mask(mask,value)=(mask%(value*2))>(value-1);

module block_holes()
{
//Round off the top of the block.
translate([0,wade_block_height-block_bevel_r,-1])
render()
difference()
{
translate([-1,0,0])
cube([block_bevel_r+1,block_bevel_r+1,wade_block_depth+2]);
translate([block_bevel_r,0,0])
cylinder(r=block_bevel_r,h=wade_block_depth+2,$fn=40);
}

// Round the top front corner.
translate ([-base_leadout-base_thickness/2,-1,wade_block_depth-block_bevel_r])
render()
difference()
{
translate([-1,0,0])
cube([block_bevel_r+1,base_thickness+2,block_bevel_r+1]);
rotate([-90,0,0])
translate([block_bevel_r,0,-1])
cylinder(r=block_bevel_r,h=base_thickness+4);
}

// Round the top back corner.
translate ([base_length-base_leadout+base_thickness/2-block_bevel_r,
-1,wade_block_depth-block_bevel_r])
render()
difference()
{
translate([0,0,0])
cube([block_bevel_r+1,base_thickness+2,block_bevel_r+1]);
rotate([-90,0,0])
translate([0,0,-1])
cylinder(r=block_bevel_r,h=base_thickness+4);
}

// Round the bottom front corner.
translate ([-base_leadout-base_thickness/2,-1,-2])
render()
difference()
{
translate([-1,0,-1])
cube([block_bevel_r+1,base_thickness+2,block_bevel_r+1]);
rotate([-90,0,0])
translate([block_bevel_r,-block_bevel_r,-1])
cylinder(r=block_bevel_r,h=base_thickness+4);
}

// Idler fulcrum hole.
translate(idler_fulcrum+[2,3,0.4])
cylinder(r=m3_diameter/2,h=idler_short_side-2*idler_hinge_width-0.5,center=true,$fn=16);

translate(idler_fulcrum+[2,3,idler_short_side/2-idler_hinge_width-1])
cylinder(r=m3_nut_diameter/2+0.25,h=1,$fn=40);

//Rounded cutout for idler hinge.
render()
translate(idler_fulcrum)
difference()
{
cylinder(r=idler_hinge_r+0.5,h=idler_short_side+2.5,center=true,$fn=60);
cylinder(r=idler_hinge_r+1,h=idler_short_side-2*idler_hinge_width-0.5,center=true);
}

translate(motor_mount_translation)
{
translate([-gear_separation,0,0])
{
% rotate([0,180,0])
translate([0,0,1])
import_stl("wade-large.stl");

// Open the top to remove overhangs and to provide access to the hobbing.
//translate([-wade_block_width+2,0,9.5])
//cube([wade_block_width,
// wade_block_height-motor_mount_translation[1]+1,
// wade_block_depth]);

translate([0,0,-1])
b608(h=608_thickness+1);

translate([0,0,wade_block_depth-608_thickness])
b608(h=608_thickness+1);

translate([-13,0,9.5])
b608(h=wade_block_depth);

translate([0,0,608_thickness+layer_height])
cylinder(r=m8_clearance_hole/2,h=wade_block_depth-(8+layer_height)+2);

// Filament feed.
translate([-filament_feed_hole_offset,0,wade_block_depth/2])
rotate([90,0,0])
rotate(360/16)
cylinder(r=filament_feed_hole_d/2,h=wade_block_depth*3,center=true,$fn=8);

// Mounting holes on the base.
for (mount=[0:1])
{
translate([-filament_feed_hole_offset+25*((mount<1)?1:-1),
-motor_mount_translation[1]-1,wade_block_depth/2])
rotate([-90,0,0])
rotate(360/16)
cylinder(r=m4_diameter/2,h=base_thickness+2,$fn=8);

translate([-filament_feed_hole_offset+25*((mount<1)?1:-1),
-motor_mount_translation[1]+base_thickness/2,
wade_block_depth/2])
rotate([-90,0,0])
cylinder(r=m4_nut_diameter/2,h=base_thickness,$fn=6);
}

}
% translate([0,0,-8])
import_stl("wade-small.stl");
}

// Idler mounting holes and nut traps.
for (idle=[-1,1])
{
translate([-8,
idler_mounting_hole_up+motor_mount_translation[1]+5,
wade_block_depth/2+idler_mounting_hole_across*idle])
rotate([0,90,0])
{
rotate([0,0,(90*idle*idler_trap_holes_on_side)])
{
rotate([0,0,30])
{
translate([0,0,-1])
cylinder(r=(idler_screw_diameter/cos(30))/2,h=wade_block_depth+6,$fn=6);
translate([0,0,wade_block_width-idler_nut_trap_depth])
cylinder(r=(idler_nut_flat_width/cos(30))/2,h=idler_nut_thickness,$fn=6);
}
translate([0,10/2,(wade_block_width-idler_nut_trap_depth+idler_nut_thickness/2)])
cube([idler_nut_flat_width,10,idler_nut_thickness],center=true);
}

}
}
}

module motor_mount()
{
linear_extrude(height=motor_mount_thickness)
{
barbell (motor_hole(0),motor_hole(1),nema17_support_d/2,
nema17_support_d/2,20,160);
barbell (motor_hole(1),motor_hole(2),nema17_support_d/2,
nema17_support_d/2,20,160);
}
}

module motor_mount_holes()
{
radius=4/2;
slot_left=1;
slot_right=2;

{

hole=2;
translate([0,0,-layer_height])
{
translate([motor_hole(hole)[0]-slot_left,motor_hole(hole)[1],0])
cylinder(h=motor_mount_thickness+1,r=radius,$fn=16);



}


}
}

module wadeidler()
{
difference()
{
union()
{
//The idler block.
translate(idler_axis+[-idler_height/2+2,+idler_long_side/2-idler_long_bottom,0])
cube([idler_height,idler_long_side,idler_short_side],center=true);

// The fulcrum Hinge
translate([2,0,0])
translate(idler_fulcrum)
rotate([0,0,-30])
{
cylinder(h=idler_short_side,r=idler_hinge_r,center=true,$fn=60);
translate([-idler_end_length/2,0,0])
cube([idler_end_length,idler_hinge_r*2,idler_short_side],center=true);
}
}

//Back of idler.
translate(idler_axis+[-idler_height/2+2-idler_height,
idler_long_side/2-idler_long_bottom-10,0])
cube([idler_height,idler_long_side,idler_short_side],center=true);

//Slot for idler fulcrum mount.
translate(idler_fulcrum)
{
cylinder(h=idler_short_side-2*idler_hinge_width,
r=idler_hinge_r+2.5,center=true,$fn=60);
rotate(-30)
translate([0,-idler_hinge_r-0.5,0])
cube([idler_hinge_r*2+1,idler_hinge_r*2+1,
idler_short_side-2*idler_hinge_width],center=true);
}

//Bearing cutout.
translate([-1.5,-2,0])
translate(idler_axis)
{
difference()
{
cylinder(h=idler_608_height,r=idler_608_diameter/2,
center=true,$fn=60);
for (i=[0,1])
rotate([180*i,0,0])
translate([0,0,6.9/2])
cylinder(r1=12/2,r2=16/2,h=2);
}
cylinder(h=idler_short_side+2,r=m8_diameter/2-0.25/*Tight*/,
center=true,$fn=20);
}

//Fulcrum hole.
translate([2,0,0])
translate(idler_fulcrum)
rotate(360/12)
cylinder(h=idler_short_side+2,r=m3_diameter/2-0.1,center=true,$fn=8);

//Nut trap for fulcrum screw.
translate(idler_fulcrum+[0,0,idler_short_side/2-idler_hinge_width-1])
rotate(360/16)
cylinder(h=3,r=m3_nut_diameter/2,$fn=6);

for(idler_screw_hole=[-1,1])
translate(idler_axis+[2-idler_height,0,0])
{
//Screw Holes.
translate([-1,idler_mounting_hole_up,
idler_screw_hole*idler_mounting_hole_across])
rotate([0,90,0])
{
cylinder(r=idler_mounting_hole_diameter/2,h=idler_height+2,$fn=16);
translate([0,idler_mounting_hole_elongation,0])
cylinder(r=idler_mounting_hole_diameter/2,h=idler_height+2,$fn=16);
translate([-idler_mounting_hole_diameter/2,0,0])
cube([idler_mounting_hole_diameter,idler_mounting_hole_elongation,
idler_height+2]);
}

// Rounded corners.
render()
translate([idler_height/2,idler_long_top,
idler_screw_hole*(idler_short_side/2)])
difference()
{
translate([0,-idler_corners_radius/2+0.5,-idler_screw_hole*(idler_corners_radius/2-0.5)])
cube([idler_height+2,idler_corners_radius+1,idler_corners_radius+1],
center=true);
rotate([0,90,0])
translate([idler_screw_hole*idler_corners_radius,-idler_corners_radius,0])
cylinder(h=idler_height+4,r=idler_corners_radius,center=true,$fn=40);
}
}
}
}

module b608(h=8)
{
translate([0,0,h/2]) cylinder(r=hole_for_608/2,h=h,center=true,$fn=60);
}

module barbell (x1,x2,r1,r2,r3,r4)
{
x3=triangulate (x1,x2,r1+r3,r2+r3);
x4=triangulate (x2,x1,r2+r4,r1+r4);
render()
difference ()
{
union()
{
translate(x1)
circle (r=r1);
translate(x2)
circle(r=r2);
polygon (points=[x1,x3,x2,x4]);
}

translate(x3)
circle(r=r3,$fa=5);
translate(x4)
circle(r=r4,$fa=5);
}
}

function triangulate (point1, point2, length1, length2) =
point1 +
length1*rotated(
atan2(point2[1]-point1[1],point2[0]-point1[0])+
angle(distance(point1,point2),length1,length2));

function distance(point1,point2)=
sqrt((point1[0]-point2[0])*(point1[0]-point2[0])+
(point1[1]-point2[1])*(point1[1]-point2[1]));

function angle(a,b,c) = acos((a*a+b*b-c*c)/(2*a*b));

function rotated(a)=[cos(a),sin(a),0];

//========================================================
// Modules for defining holes for hotend mounts:
// These assume the extruder is verical with the bottom filament exit hole at [0,0,0].

//malcolm_hotend_holes ();
module malcolm_hotend_holes ()
{
extruder_recess_d=18;
extruder_recess_h=10;

// Recess in base
translate([0,0,-1])
cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1);
}

//groovemount_holes ();
module groovemount_holes ()
{
extruder_recess_d=16;
extruder_recess_h=5.5;

// Recess in base
translate([0,0,-1])
cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1);
}

//peek_reprapsource_holes ();
module peek_reprapsource_holes ()
{
extruder_recess_d=18.0;
extruder_recess_h=16;

// Recess in base
translate([0,0,-1])
cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1);

// Mounting holes to affix the extruder into the recess.
translate([-6,0,min(extruder_recess_h/2, base_thickness)])
rotate([-90,0,0])
cylinder(r=m4_diameter/2-0.5/* tight */,h=wade_block_depth+2,center=true);

translate([6,0,min(extruder_recess_h/2, base_thickness)])
rotate([-90,0,0])
cylinder(r=m4_diameter/2-0.5/* tight */,h=wade_block_depth+2,center=true);

}

//arcol_mount_holes();
module arcol_mount_holes()
{
hole_axis_rotation=42.5;
hole_separation=30;
hole_slot_height=4;
for(mount=[-1,1])
translate([hole_separation/2*mount,-7,0])
{
translate([0,0,-1])
cylinder(r=m4_diameter/2,h=base_thickness+2,$fn=8);

translate([0,0,base_thickness/2])
//rotate(hole_axis_rotation)
{
cylinder(r=m4_nut_diameter/2,h=base_thickness/2+hole_slot_height,$fn=6);
translate([0,-m4_nut_diameter,hole_slot_height/2+base_thickness/2])
cube([m4_nut_diameter,m4_nut_diameter*2,hole_slot_height],
center=true);
}
}
}

//mendel_parts_v6_hotend ();
module mendel_parts_v6_hotend ()
{
extruder_recess_d=13.4;
extruder_recess_h=10;
hole_axis_rotation=42.5;
hole_separation=30;
hole_slot_height=5;

// Recess in base
translate([0,0,-1])
cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1);

for(mount=[-1,1])
rotate([0,0,hole_axis_rotation+90+90*mount])
translate([hole_separation/2,0,0])
{
translate([0,0,-1])
cylinder(r=m4_diameter/2,h=base_thickness+2,$fn=8);

translate([0,0,base_thickness/2])
rotate(-hole_axis_rotation+180)
{
// rotate(30)
cylinder(r=m4_nut_diameter/2,h=base_thickness/2+hole_slot_height,$fn=6);
translate([0,-m4_nut_diameter,hole_slot_height/2+base_thickness/2])
cube([m4_nut_diameter,m4_nut_diameter*2,hole_slot_height],
center=true);
}
}
}

//grrf_peek_mount_holes();
module grrf_peek_mount_holes()
{
extruder_recess_d=16.5;
extruder_recess_h=10;

// Recess in base
translate([0,0,-1])
cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1);

for (hole=[-1,1])
rotate(90,[1,0,0])
translate([hole*(extruder_recess_d/2-1.5),3+1.5,-wade_block_depth/2-1])
cylinder(r=1.5,h=wade_block_depth+2,$fn=10);
}

//wildseyed_mount_holes();
module wildseyed_mount_holes()
{
extruder_recess_d=13.4;
extruder_recess_h=10;

// Recess in base
translate([0,0,-1])
cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1);

for (hole=[-1,1])
rotate(90,[1,0,0])
translate([hole*(extruder_recess_d/2-1.5),3+1.5,-wade_block_depth/2-1])
cylinder(r=1.5,h=wade_block_depth+2,$fn=10);
}

//ultimaker_mount_holes();
module ultimaker_mount_holes()
{
extruder_recess_d=11;
extruder_recess_h=11;

// Recess in base
translate([0,0,-1])
cylinder(r=extruder_recess_d/2,h=extruder_recess_h+1);

//for (hole=[-1,1])
//rotate(90,[1,0,0])
//translate([hole*(extruder_recess_d/2-1.5),3+1.5,-wade_block_depth/2-1])
//cylinder(r=1.5,h=wade_block_depth+2,$fn=10);

}