diff --git a/README.md b/README.md index c38732d..66a11e4 100644 --- a/README.md +++ b/README.md @@ -42,14 +42,34 @@ This model is parameterised and is resizeable within limits, but if you vary any Colours are for clarity only. +## Parameters + +height=950, width=1500, nplanks=4, ndowels=4, plank_width=150, plank_gap=20, top_thickness=75, leg_section=100 + +The following parameters may be passed to the `bench` module: + +| Parameter | Default | Documentation | Sensible range | +| ------------- | ------- | --------------------------------------------------------- | -------------- | +| height | 950 | height of bench top | 800-1100 | +| width | 1500 | overall width of the bench, excluding the end vice winder | 1200-2000 | +| nplanks | 4 | number of planks comprising the top | 2-5 | +| ndowels | 4 | number of dowels joining each adjacent plank pair | 2-8 | +| plank_width | 150 | width of each plank | 150-300 | +| plank_gap | 20 | gap between each pair of planks | 0-20 | +| top_thickness | 75 | thickness of the planks comprising the top | 60-100 | +| leg_section | 100 | thickness of the (square section) legs | 75-150 | + + + ## Errata/todo: 1. locking wedges and treenails are generally not present in this drawing; 2. mortices and holes for wedges and treenails are not all present; 3. two of the tapered mortices for the longitudinal braces are the wrong way round; -5. while all tenons are modelled, not all mortices are; where a tenon +4. while all tenons are modelled, not all mortices are; where a tenon intersects an apparently solid piece, assume there is a mortice! +5. screw threads are not yet modelled. ## Licence diff --git a/roubo.scad b/roubo.scad index ebcb4c7..f54dd72 100644 --- a/roubo.scad +++ b/roubo.scad @@ -171,15 +171,19 @@ module top_plank(bench_width = 1500, plank_width= 150, top_thickness=75) { }; } -//top_plank(); - -module top_end(depth=600, section=75) { +module top_end(nplanks=4, plank_gap=20, plank_width=150, section=75) { + depth = (nplanks*plank_width) + (plank_gap * (nplanks - 1)); + color("green") - cube([ depth, section, section]); - // todo: add mortices + difference() { + cube([ depth, section, section]); + for ( plank = [1:nplanks]) { + translate([(plank -1) * (plank_width + plank_gap), 0, 0]) + top_plank_end_tenon( plank_width, section); + }; + }; } - module end_vice_cut( plank_width=150, width=300, top_thickness=75) { translate([plank_width * 0.375, 0, -1]) cube([plank_width/4, width, top_thickness + 2]); @@ -211,6 +215,10 @@ module vice_screw(depth=400) { } } +/** + * todo: the block doesn't get correctly centred in the slot if the + * plank_width isn't 150mm, so I've got geometry wrong. + */ module end_vice( plank_width=150, width=300, top_thickness=75){ // the end vice block: this has exactly the section of the end // vice cut, so we'll use the same model (but much smaller width) @@ -218,8 +226,8 @@ module end_vice( plank_width=150, width=300, top_thickness=75){ translate([50 - (width/5), 0, 0]) end_vice_cut( plank_width, 50, top_thickness); rotate([0, 0, 90]) - translate([width *1.1, 0 - plank_width/2, top_thickness/2]) - vice_screw(width); + translate([width *1.1, 0 - plank_width/2, top_thickness/2]) + vice_screw(width); } module bench_top( nplanks=4, ndowels = 4, plank_gap=20, bench_width=1500, plank_width=150, top_thickness=75) { @@ -244,10 +252,13 @@ module bench_top( nplanks=4, ndowels = 4, plank_gap=20, bench_width=1500, plank_ } } } + //module top_end(nplanks=4, plank_gap=20, plank_width=150, section=75) { + translate([0, 1, 0]) - top_end((plank_width * nplanks)+(plank_gap * (nplanks - 1)), top_thickness); - translate([ 0, bench_width - (top_thickness +1), 0]) - top_end((plank_width * nplanks)+(plank_gap * (nplanks - 1)), top_thickness); + top_end( nplanks, plank_gap, plank_width, top_thickness); + translate([ 0, bench_width - 1, top_thickness]) + rotate([ 180, 0, 0]) + top_end( nplanks, plank_gap, plank_width, top_thickness); } @@ -305,14 +316,14 @@ module front_vice( width=150, height=800, depth=400) { color("fuchsia") translate([0-(depth*0.8), (width/2)-(width/12), width/2]) difference() { - cube([depth, width/6, width/2]); + cube([depth, width/6, 75]); for( hole_pair=[1:5]) { - translate([25+(depth/10 * hole_pair), width/3, width/6]) - rotate([90,0,0]) - cylinder(width/2, r=12.5); - translate([(depth/10 * hole_pair), width/3, width/3]) - rotate([90,0,0]) - cylinder(width/2, r=12.5); + translate([25+(depth/10 * hole_pair), 50, 25]) + rotate([90,0,0]) + cylinder(width/2, r=12.5); + translate([(depth/10 * hole_pair), 50, 50]) + rotate([90,0,0]) + cylinder(width/2, r=12.5); } }; translate([(depth*0.22), width/2, height * 0.75]) @@ -334,4 +345,8 @@ module bench( height=950, width=1500, nplanks=4, ndowels=4, plank_width=150, pla //translate([0, 0, 875]) // bench_top(); -bench(width=1700); \ No newline at end of file +bench(); +translate([1000, 0, 0]) + bench(width=1700, nplanks=3, plank_width = 200); + +//legs(); \ No newline at end of file