Merge pull request 'Fix rail clearance issues, add PCB slot, more options for potentiometer spoke placement' (#1) from bugfix/10hp into main
Reviewed-on: https://gitea.circuitlocution.com/synth_mages/MK_VCO/pulls/1
This commit is contained in:
commit
c971d0bd8b
3 changed files with 73 additions and 38 deletions
|
|
@ -33,7 +33,8 @@ $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
|
||||
printer_z_fix = 0.2; // this gets added to the base panel's thickness to account for squishing
|
||||
|
||||
// for inset labels, translating to this height controls label depth
|
||||
label_inset_height = thickness-1;
|
||||
|
|
@ -53,6 +54,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 +64,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 +91,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 +111,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 +150,38 @@ 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-thickness, 0])
|
||||
h_wall(h=1.6, l=right_rib_x);
|
||||
|
||||
// middle-bottom h rib
|
||||
translate([left_rib_x, rail_clearance+15+thickness, 0])
|
||||
h_wall(h=1.6, l=right_rib_x);
|
||||
|
||||
translate([hole_dist_top, top_row-12, 0])
|
||||
v_wall(h=4, w=width_mm-hole_dist_top*2);
|
||||
// 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+15+thickness, 0])
|
||||
v_wall(h=4, l=top_row-rail_clearance*2-thickness-15);
|
||||
|
||||
// PCB holder
|
||||
translate([width_mm/2-thickness/2+1.15/2, rail_clearance+15+thickness, 0])
|
||||
pcb_holder(h=10, l=top_row-rail_clearance*2-15-thickness, th=1.15, wall_thickness=1);
|
||||
|
||||
// lower h-rib reinforcer
|
||||
|
||||
// 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);
|
||||
|
||||
// color([1,0,0])
|
||||
// translate([62,height-10,thickness-.1])
|
||||
|
|
@ -195,7 +206,8 @@ module make_surface(filename, h) {
|
|||
module panel(h) {
|
||||
width_mm = hp_mm(h);
|
||||
difference() {
|
||||
cube(size = [width_mm, height, thickness]);
|
||||
// translate([0, 0, -printer_z_fix])
|
||||
cube(size = [width_mm, height, thickness+printer_z_fix]);
|
||||
|
||||
if (h < four_hole_threshold) {
|
||||
if (two_holes_type == "center") {
|
||||
|
|
@ -252,10 +264,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 +294,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);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
BIN
Panels/luther_triangle_10hp_pcb_holder.stl
Normal file
BIN
Panels/luther_triangle_10hp_pcb_holder.stl
Normal file
Binary file not shown.
BIN
Panels/luther_triangle_10hp_rib_space_fixes.stl
Normal file
BIN
Panels/luther_triangle_10hp_rib_space_fixes.stl
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue