My Gridfinity models
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Pegboard shelf and plastic drawer bottom

Chris Guidry 9679563f

+203
+14
.gitignore
··· 1 + # OpenSCAD generated files 2 + *.stl 3 + *.3mf 4 + *.amf 5 + *.off 6 + *.dxf 7 + *.svg 8 + *.csg 9 + *.echo 10 + *.png 11 + 12 + # OpenSCAD backup/cache 13 + *.scad~ 14 + *.bak
+3
.gitmodules
··· 1 + [submodule "lib/gridfinity-rebuilt-openscad"] 2 + path = lib/gridfinity-rebuilt-openscad 3 + url = https://github.com/kennetek/gridfinity-rebuilt-openscad.git
+159
pegboard-shelf.scad
··· 1 + include <lib/gridfinity-rebuilt-openscad/src/core/standard.scad> 2 + include <lib/gridfinity-rebuilt-openscad/src/core/gridfinity-baseplate.scad> 3 + use <lib/gridfinity-rebuilt-openscad/src/core/gridfinity-rebuilt-holes.scad> 4 + use <lib/gridfinity-rebuilt-openscad/gridfinity-rebuilt-baseplate.scad> 5 + 6 + $fa = 4; 7 + $fs = 0.25; 8 + 9 + /* [Shelf Size] */ 10 + // Width in gridfinity units 11 + grid_x = 1; // [2:1:8] 12 + // Depth in gridfinity units 13 + grid_y = 1; // [1:1:3] 14 + 15 + /* [Pegboard (1" standard)] */ 16 + peg_spacing = 25.4; 17 + peg_hole_dia = 6.35; 18 + board_thickness = 4.76; 19 + 20 + /* [Construction] */ 21 + peg_dia = 5.6; 22 + peg_behind = 10; 23 + backplate_thick = 4; 24 + gusset_thick = 1.6; 25 + 26 + /* [Options] */ 27 + enable_magnets = false; 28 + // Tilt shelf forward for bin visibility 29 + shelf_angle = 15; // [0:5:20] 30 + 31 + // === DERIVED === 32 + 33 + shelf_width = grid_x * 42; 34 + shelf_depth = grid_y * 42; 35 + 36 + // Peg layout: 1" intervals centered across shelf width 37 + num_pegs = floor(shelf_width / peg_spacing) + 1; 38 + peg_array_width = (num_pegs - 1) * peg_spacing; 39 + peg_x_start = (shelf_width - peg_array_width) / 2; 40 + 41 + // Z positions (shelf bottom = 0, shelf top = BASEPLATE_HEIGHT) 42 + top_peg_z = BASEPLATE_HEIGHT / 2; 43 + bottom_peg_z = top_peg_z - peg_spacing; 44 + 45 + // Backplate covers both peg rows with margin 46 + bp_z_bottom = bottom_peg_z - peg_dia; 47 + 48 + // Gusset geometry 49 + gusset_depth = shelf_depth; 50 + num_gussets = max(2, floor(grid_x / 2) + 1); 51 + 52 + hole_options = enable_magnets 53 + ? bundle_hole_options(magnet_hole=true, crush_ribs=true, chamfer=true) 54 + : bundle_hole_options(); 55 + 56 + echo(str("Shelf: ", grid_x, "x", grid_y, " (", shelf_width, "x", shelf_depth, "mm)")); 57 + echo(str("Total depth from wall: ", backplate_thick + shelf_depth, "mm")); 58 + echo(str("Pegs per row: ", num_pegs, ", gussets: ", num_gussets)); 59 + 60 + // === ASSEMBLY === 61 + 62 + color("SteelBlue") 63 + union() { 64 + // Tilted shelf group: pivot at top-back edge of shelf 65 + translate([0, backplate_thick, BASEPLATE_HEIGHT]) 66 + rotate([-shelf_angle, 0, 0]) 67 + translate([0, -backplate_thick, -BASEPLATE_HEIGHT]) 68 + { 69 + // Gridfinity baseplate surface 70 + translate([shelf_width/2, backplate_thick + shelf_depth/2, 0]) 71 + gridfinityBaseplate( 72 + [grid_x, grid_y], l_grid, [0, 0], 73 + 0, hole_options, 0 74 + ); 75 + 76 + // Fill the rounded baseplate corners at the backplate edge 77 + translate([0, backplate_thick, 0]) 78 + cube([shelf_width, BASEPLATE_OUTER_RADIUS, BASEPLATE_HEIGHT]); 79 + } 80 + 81 + // Gussets (in world coords, bridging tilted shelf to vertical backplate) 82 + for (i = [0 : num_gussets - 1]) { 83 + gx = gusset_thick/2 + 84 + i * (shelf_width - gusset_thick) / max(1, num_gussets - 1); 85 + translate([gx, 0, 0]) 86 + gusset(); 87 + } 88 + 89 + // Backplate wall 90 + translate([0, 0, bp_z_bottom]) 91 + cube([shelf_width, backplate_thick, BASEPLATE_HEIGHT - bp_z_bottom]); 92 + 93 + // Top row pegs (J-hooks, weight-bearing) 94 + for (i = [0 : num_pegs - 1]) 95 + translate([peg_x_start + i * peg_spacing, 0, top_peg_z]) 96 + j_hook(); 97 + 98 + // Bottom row pegs (anti-rotation) 99 + for (i = [0 : num_pegs - 1]) 100 + translate([peg_x_start + i * peg_spacing, 0, bottom_peg_z]) 101 + peg(board_thickness + 4); 102 + } 103 + 104 + // === MODULES === 105 + 106 + module peg(length) { 107 + rotate([90, 0, 0]) 108 + cylinder(d=peg_dia, h=length); 109 + translate([0, -length, 0]) 110 + sphere(d=peg_dia); 111 + } 112 + 113 + module j_hook() { 114 + shaft_behind = 6; 115 + shaft_length = board_thickness + shaft_behind; 116 + tip_length = 5; 117 + tip_angle = 20; 118 + 119 + // Straight shaft through the board 120 + peg(shaft_length); 121 + 122 + // Upward-angled tip 123 + translate([0, -shaft_length, 0]) 124 + hull() { 125 + sphere(d=peg_dia); 126 + rotate([tip_angle, 0, 0]) 127 + translate([0, 0, tip_length]) 128 + sphere(d=peg_dia); 129 + } 130 + } 131 + 132 + module gusset() { 133 + // Triangle in the Y-Z plane bridging tilted shelf to vertical backplate 134 + // rotate([0,90,0]) maps: polygon_x → -world_z, polygon_y → world_y 135 + 136 + // Hinge point (top of backplate where shelf pivots) 137 + ay = backplate_thick; 138 + az = BASEPLATE_HEIGHT; 139 + 140 + // Front-bottom of tilted shelf 141 + by = backplate_thick 142 + + shelf_depth * cos(shelf_angle) 143 + - BASEPLATE_HEIGHT * sin(shelf_angle); 144 + bz = BASEPLATE_HEIGHT * (1 - cos(shelf_angle)) 145 + - shelf_depth * sin(shelf_angle); 146 + 147 + // Bottom of backplate 148 + cy = backplate_thick; 149 + cz = bp_z_bottom; 150 + 151 + translate([-gusset_thick/2, 0, 0]) 152 + rotate([0, 90, 0]) 153 + linear_extrude(gusset_thick) 154 + polygon([ 155 + [-az, ay], 156 + [-bz, by], 157 + [-cz, cy] 158 + ]); 159 + }
+27
plastic-drawer-bottom.scad
··· 1 + include <lib/gridfinity-rebuilt-openscad/src/core/standard.scad> 2 + use <lib/gridfinity-rebuilt-openscad/src/core/gridfinity-rebuilt-holes.scad> 3 + use <lib/gridfinity-rebuilt-openscad/gridfinity-rebuilt-baseplate.scad> 4 + 5 + $fa = 8; 6 + $fs = 0.25; 7 + 8 + drawer_width = 240; 9 + drawer_length = 8 * 42; 10 + 11 + hole_options = bundle_hole_options( 12 + magnet_hole = true, 13 + crush_ribs = true, 14 + chamfer = true 15 + ); 16 + 17 + color("tomato") 18 + gridfinityBaseplate( 19 + grid_size_bases = [8, 0], 20 + length = l_grid, 21 + min_size_mm = [0, drawer_width], 22 + sp = 0, 23 + hole_options = hole_options, 24 + sh = 0, 25 + fit_offset = [0, 0] 26 + ); 27 +