diff --git a/Panels/luther_triangle_10hp.scad b/Panels/luther_triangle_10hp.scad index b4dd892..5288dc7 100644 --- a/Panels/luther_triangle_10hp.scad +++ b/Panels/luther_triangle_10hp.scad @@ -33,7 +33,7 @@ $fn=FN; // Height of module (mm) - Would not change this if you are using Eurorack height = 128.5; // A little less then 3U // Thickness of module (mm) - Would not change this if you are using Eurorack -thickness = 2; // Website specifies a thickness of 2mm +thickness = 2; // Website specifies a thickness of 2mm - but adjust to fit printer specs - often the first layer will be thinner than this // for inset labels, translating to this height controls label depth label_inset_height = thickness-1; @@ -53,6 +53,8 @@ hole_dist_side = hp_mm(1.5); // Hole distance from the top (mm) hole_dist_top = 2.5; +rail_clearance = 9; // mm from very top/bottom edge and where it is safe to put reinforcing walls; i.e. the thickness of the rail + a safety margin + // margins from edges h_margin = hole_dist_side + thickness; v_margin = hole_dist_top*2; @@ -61,14 +63,14 @@ width_mm = hp_mm(width); // where to put the output jacks output_column = width_mm - h_margin; input_column = h_margin; -working_height = height - v_margin*2 - title_font_size*1.5; +working_height = height - v_margin*2 - title_font_size; working_increment = working_height / 5; row_1 = v_margin+12; row_2 = working_increment*1 + row_1; row_3 = working_increment*2 + row_1; row_4 = working_increment*3 + row_1; //special-case the top knob -top_row = height - v_margin - title_font_size*1.5; +top_row = height - v_margin - title_font_size*2; working_width = width_mm - h_margin; cv_in = [h_margin, row_1, 0]; saw_out = [h_margin + working_width/4, row_1, 0]; @@ -88,8 +90,8 @@ c_tune = [width_mm/2, top_row, 0]; f_tune = [h_margin+working_width/8, row_4, 0]; -left_rib_x = thickness * 1.2; -right_rib_x = width_mm - thickness*2.2; +left_rib_x = thickness * 1; +right_rib_x = width_mm - thickness*2; // draw panel, subtract holes union() { @@ -108,12 +110,12 @@ union() { translate(pwm_in) audio_jack_3_5mm(); // PWM duty in // pots - translate(fm_lvl) pot_p160(); // fm lvl - translate(pwm_duty) pot_p160(); // pwm duty - translate(pwm_cv_lvl) pot_p160(); // pwm lvl + translate(fm_lvl) pot_p160(anchor_hole="both"); // fm lvl + translate(pwm_duty) pot_p160(anchor_hole="both"); // pwm duty + translate(pwm_cv_lvl) pot_p160(anchor_hole="both"); // pwm lvl - translate(c_tune) pot_p160(); // coarse tuning - translate(f_tune) pot_p160(); // fine tuning + translate(c_tune) pot_p160(anchor_hole="both"); // coarse tuning + translate(f_tune) pot_p160(anchor_hole="both"); // fine tuning /* translate([61,height-title_font_size*1.67,label_inset_height]) @@ -147,30 +149,30 @@ union() { // label the whole thing? // translate([width_mm/2, height-hole_dist_top-10, 0]) label("Fireball VCO", size=10); - // ribs? - //color([.1,.1,.1]) - translate([left_rib_x, hole_dist_top+4, 0]) wall(h=4, w=height-hole_dist_top*3-4); - //color([.1,.1,.1]) - translate([right_rib_x, hole_dist_top+4, 0]) wall(h=4, w=height-hole_dist_top*3-4); + // ribs + translate([left_rib_x, rail_clearance, 0]) + v_wall(h=4, l=height-rail_clearance*2-thickness); + translate([right_rib_x, rail_clearance, 0]) + v_wall(h=4, l=height-rail_clearance*2-thickness); - // top/bottom ribs? - translate([width_mm-hole_dist_top, hole_dist_top+4, 0]) - rotate([0,0,90]) - wall(h=4, w=width_mm-hole_dist_top-4); + // top horizontal rib + translate([left_rib_x, height-rail_clearance-thickness, 0]) + h_wall(h=4, l=right_rib_x); - translate([width_mm-hole_dist_top, height-hole_dist_top-4.5, 0]) //4.5? - rotate([0,0,90]) - wall(h=4, w=width_mm-hole_dist_top-4); + // middle horizontal rib + translate([left_rib_x, top_row-rail_clearance, 0]) + h_wall(h=4, l=right_rib_x); + // bottom horizontal rib + translate([left_rib_x, rail_clearance, 0]) + h_wall(h=4, l=right_rib_x); + + // one more vertical to mount the circuit board to, dead center + translate([width_mm/2-thickness/2, rail_clearance, 0]) + v_wall(h=4, l=top_row-rail_clearance*2); - translate([hole_dist_top, top_row-12, 0]) - v_wall(h=4, w=width_mm-hole_dist_top*2); - - - // one more to mount the circuit board to, dead center - //color([.1,.1,.1]) - translate([width_mm/2-thickness/2, hole_dist_top+4, 0]) - wall(h=6, w=top_row-16.5); + translate([width_mm/2-thickness/2+1.15/2, rail_clearance, 0]) + pcb_holder(h=10, l=top_row-rail_clearance*2, th=1.15, wall_thickness=1); // color([1,0,0]) // translate([62,height-10,thickness-.1]) @@ -252,10 +254,15 @@ module toggle_switch_6_8mm() { translate([0, 0, -1]) cylinder(r=3.4, h=thickness*2+1); } // http://www.mouser.com/ds/2/414/Datasheet_RotaryPanelPot_P160series-1133272.pdf -module pot_p160() { +module pot_p160(anchor_hole="left") { translate([0, 0, -1]) cylinder(r=3.75, h=thickness*2); // hole for anchor; with translate() ends up being h-1 deep - translate([7.8, 0, -1]) cylinder(r=1.5, h=thickness); + if (anchor_hole=="left" || anchor_hole=="both") { + translate([7.8, 0, -1]) cylinder(r=1.5, h=thickness); + } + if (anchor_hole=="right" || anchor_hole=="both") { + translate([-7.8, 0, -1]) cylinder(r=1.5, h=thickness); + } } module pot_wh148() { @@ -277,14 +284,32 @@ module title(string, size=12, halign="center", font=font_for_title) { text(string, size, halign=halign, font=font); } -// draw a "vertical" wall to mount a circuit board sideways on -// h = z height, e.g. height of the board -module wall(h, w) { - translate([0, 0, -h]) cube(size = [thickness, w, h]); +// draw a "vertical" wall +// h = z height, i.e. how tall the wall is coming out of the panel +// l = length of the wall along the panel +module v_wall(h, l, th=thickness) { + translate([0, 0, -h]) cube(size = [th, l, h]); } -module v_wall(h, w) { - translate([0, 0, -h]) cube(size = [w, thickness, h]); +// draw a horizontal wall (across the panel) +// h = z height, how far the wall comes out of the panel +// l = length of the wall along the panel +module h_wall(h, l, th=thickness) { + translate([0, 0, -h]) cube(size = [l, th, h]); +} + +// draws two walls in parallel, close together so a PCB can fit between +// h = how deep to make the walls; a little extra is probably good +// l = length of the side of the board that will be seated in the slit, with tolerances +// th = thickness of the PCB, with tolerances +// wall_thickness = how thick to make each wall of the holder +// e.g.: Radio Shaek is 51mm x 70mm and 1.2mm thick +module pcb_holder(h, l, th, wall_thickness=thickness) { + translate([0-(wall_thickness+th)/2, 0, 0]) + v_wall(h, l, wall_thickness); + + translate([(wall_thickness+th)/2, 0, 0]) + v_wall(h, l, wall_thickness); } diff --git a/Panels/luther_triangle_10hp_pcb_holder.stl b/Panels/luther_triangle_10hp_pcb_holder.stl new file mode 100644 index 0000000..86b55a8 Binary files /dev/null and b/Panels/luther_triangle_10hp_pcb_holder.stl differ