/* * * Filename: LEGO_launcher.scad * Description: LEGO minifigure launcher. Test of press-fit tolerancing for laser-cut peg-joints in OpenSCAD. * Launcher design inspired by http://madebyjoel.com/2012/05/small-catapult-toy.html * Written By: Timothy Prestero * Created: 24 Feb 2013 * * NOTES: First laser-cut wasn't a success. Perfect tolerance in OpenSCAD creates a too-loose * fit with the laser cutter. Need to add some xy-plane thickness to the pegs to account * for material removed by the laser. * * Used minkowski() on the pegs to make them thicker: * -- 0.125mm recommended offset was too loose, needed glue. * -- 0.375mm appears to be a perfect press-fit offset (no hammering, no glue) * -- 0.5mm too-tight press-fit offset (had to hammer together, stripping a layer of laminate) * Idea and initial offset dimensions from http://www.thingiverse.com/thing:27736 * * Research suggests the laser cuts a v-shaped notch, widest closest to the cutting surface. * Width and depth of the notch are presumably functions of the power and speed settings. * A 0.375mm offset worked best with 4.75mm (3/16") baltic birch plywood. * Epilog 36-EXT, laser setting was SPEED=08, POWER=85 and FREQ=450 * */ /* ---------------------------------------------------------------- DIMENSIONS ---------------------------------------------------------------- */ woodThickness = 4.5 ; // dimensions in mm launcherLength = 150 ; // length of lever bar in mm launcherWidth = 40 ; // width of lever bar in mm cornerRadius = 4 ; // corner radius in mm laserOffset = 0.375 ; // assumed thickness of the laser cut in mm $fn=100 ; // model resolution /* ---------------------------------------------------------------- DIMENSIONS ---------------------------------------------------------------- */ module basicFulcrum() { union() { // OCD annoyance: have to add offset to fulcrum x-dimension or pegs stick out cube([woodThickness+laserOffset*2,launcherWidth,woodThickness],center=true) ; for ( i = [0 : 1] ) // make one peg and then mirror it around the axis { mirror([0,i,0]) translate([0,launcherWidth/4,woodThickness/2]) // add some xy-plane thickness to pegs for a press-fit in the lever linear_extrude(height=woodThickness*2, center=true, convexity=10, twist=0) minkowski() { square([woodThickness,woodThickness],center=true) ; square([laserOffset,laserOffset],center=true) ; } } } } module basicLever() { difference() { minkowski() { cube([launcherLength-2*cornerRadius,launcherWidth-2*cornerRadius,woodThickness/2],center=true); cylinder(r=cornerRadius,h=woodThickness/2); } union() { for ( i = [0 : 1] ) // make one hole and then mirror it around the axis { mirror([0,i,0]) translate([launcherLength/4,launcherWidth/4,woodThickness]) cube([woodThickness,woodThickness,woodThickness*10],center=true) ; } } } } /* ---------------------------------------------------------------- TEST FIT ---------------------------------------------------------------- */ module testFit() { basicLever() ; translate([launcherLength/4,0,-woodThickness*.75]) % basicFulcrum() ; } module offsetTest() { % cube([woodThickness,woodThickness,woodThickness],center=true) ; minkowski() { square([woodThickness,woodThickness],center=true) ; square([laserOffset,laserOffset],center=true) ; } } // offsetTest() ; // basicFulcrum() ; testFit() ; /* ---------------------------------------------------------------- PRINT 2D FOR EXPORT DFX ---------------------------------------------------------------- */ // projection() generates a 2d shape from a 3d object // necessary for exporting DXF files for laser-cutting // wiki instructions https://en.wikibooks.org/wiki/OpenSCAD_User_Manual/3D_to_2D_Projection // cut from roughly 4.5mm (3/16") baltic birch // Epilog 36-EXT // 2A: laser setting was SPEED=08, POWER=85 and FREQ=450 (CUT) // 2B: laser setting was SPEED=50, POWER=20 and FREQ=450 (ETCH) module pressFitJoints() { projection(cut=true) { basicLever() ; translate([launcherLength*1.05/2,0,0]) rotate([0,90,0]) basicFulcrum() ; } } // pressFitJoints() ;