In this video I will build out a more sophisticated hardware hacking rig, and begin experimenting with the upgrade files.
// // Utilities // module mirror_copy(v = [1, 0, 0]) { children(); mirror(v) children(); } // // LKV Board // lkv_hole_dia = 2.8; lkv_pin_dia = 2.8; lkv_pin_height = 4; lkv_board_size = [100, 50]; lkv_hole_spacing = [91.5, 43.0]; module lkv_board() { color([0.75, 0, 0]) difference() { square(lkv_board_size, center=true); mirror_copy([1, 0]) mirror_copy([0, 1]) translate([lkv_hole_spacing[0] / 2, lkv_hole_spacing[1] / 2]) circle(d=lkv_hole_dia); } } // // Pad Board // pad_board_hole_dia = 2.; pad_board_pin_dia = 1.8; pad_board_pin_height = 3; pad_board_size = [60, 40]; pad_board_hole_spacing = [54, 34]; module pad_board() { color([0, 0.75, 0]) difference() { square(pad_board_size, center=true); mirror_copy([1, 0]) mirror_copy([0, 1]) translate([pad_board_hole_spacing[0] / 2, pad_board_hole_spacing[1] / 2]) circle(d=pad_board_hole_dia); } } // // Boards Model // board_spacing = 1.0; module boards() { lkv_board(); mirror_copy([0, 1, 0]) translate([0, lkv_board_size[1] / 2 + pad_board_size[1] / 2 + board_spacing, 0]) pad_board(); } // // Pillars // pillar_dia = 6; pillar_hole_dia = 2.75; pillar_height = 5; module column(d, fn) cylinder(d=d, h=100, $fn=32); module lkv_pillar_cols(d) { translate([0, 0, pillar_height - 100]) mirror_copy([1, 0, 0]) mirror_copy([0, 1, 0]) translate(lkv_hole_spacing/2) column(d=d); } module pad_board_pillar_cols(d) { translate([0, lkv_board_size[1] / 2 + board_spacing + pad_board_size[1] / 2, pillar_height - 100]) mirror_copy([1, 0, 0]) mirror_copy([0, 1, 0]) translate(pad_board_hole_spacing/2) column(d=d); } // // Frame // frame_thickness = 1.5; frame_width = 6; frame_oversize = 8; frame_size = [ lkv_hole_spacing[0], lkv_board_size[1] + pad_board_size[1] + pad_board_hole_spacing[1] + board_spacing * 2 + frame_oversize * 2 ]; frame_reinforcement_height = pillar_height - 2; frame_reinforcement_thickness = 1.5; module frame_border() { color([0, 0, 1]) translate(-frame_size/2) square(frame_size); } module frame_outline(width) { union() { difference() { offset(r=width/2, $fn=32) frame_border(); offset(r=-width/2, $fn=32) frame_border(); } difference() { mirror_copy([0, 1, 0]) translate([0, (lkv_board_size[1] + pad_board_size[1] - pad_board_hole_spacing[1]) / 2 + board_spacing]) square([frame_size[0], width], center=true); square([pad_board_hole_spacing[0], (lkv_board_size[1] + pad_board_size[1] - pad_board_hole_spacing[1]) + 2 * board_spacing + frame_width], center=true); } difference() { mirror_copy([1, 0, 0]) translate([pad_board_hole_spacing[0] / 2, 0]) square([width, frame_size[1]], center=true); square([pad_board_hole_spacing[0] + width, lkv_board_size[1] + 2 * board_spacing + pad_board_size[1] + pad_board_hole_spacing[1]], center=true); } } } // // Main // module ground() { translate([0, 0, -500]) cube([1000, 1000, 1000], center=true); } union() { render(convexity=2) difference() { union() { lkv_pillar_cols(pillar_dia); mirror_copy([0, 1, 0]) pad_board_pillar_cols(pillar_dia); } ground(); } render(convexity=2) difference() { union() { translate([0, 0, lkv_pin_height]) lkv_pillar_cols(lkv_pin_dia); translate([0, 0, pad_board_pin_height]) mirror_copy([0, 1, 0]) pad_board_pillar_cols(pad_board_pin_dia); } ground(); } linear_extrude(frame_thickness) frame_outline(frame_width); linear_extrude(frame_reinforcement_height) frame_outline(frame_reinforcement_thickness); } translate([0, 0, pillar_height]) boards();