g_fn = 64; g_base_thickness = 1.8; g_button_d = 8; module base(h) { hull() { translate([-118.9, 22.5, 0]) cylinder(h=h, d=0.5, center=false, $fn=g_fn); translate([-119.9, 0, 0]) cylinder(h=h, d=0.5, center=false, $fn=g_fn); translate([-118.9, -22.5, 0]) cylinder(h=h, d=0.5, center=false, $fn=g_fn); translate([118.9, 22.5, 0]) cylinder(h=h, d=0.5, center=false, $fn=g_fn); translate([119.9, 0, 0]) cylinder(h=h, d=0.5, center=false, $fn=g_fn); translate([118.9, -22.5, 0]) cylinder(h=h, d=0.5, center=false, $fn=g_fn); } } module base2(h) { difference () { polygon( points = [ [-118.51, 22.3], [-119.5, 0], [-118.51, -22.3], [118.51, -22.3], [119.5, 0], [118.51, 22.3] ] ); circle(d=5.5); } } module stand(h) { union() { difference() { cylinder(h=h, d=9, center=false, $fn=g_fn); cylinder(h=h, d=4, center=false, $fn=g_fn); } translate([2.8, 0, 0] )rotate([90, 0, 0]) linear_extrude(height=2, center=true) polygon([[0, 0], [0, h], [3, 0]]); translate([0, 2.8, 0] )rotate([90, 0, 90]) linear_extrude(height=2, center=true) polygon([[0, 0], [0, h], [3, 0]]); translate([-2.8, 0, 0] )rotate([90, 0, 180]) linear_extrude(height=2, center=true) polygon([[0, 0], [0, h], [3, 0]]); translate([0, -2.8, 0] )rotate([90, 0, 270]) linear_extrude(height=2, center=true) polygon([[0, 0], [0, h], [3, 0]]); } } module control_sub() { // leds led_d = 5.1; led_x = -39.71; led_y = 9.52; led_step_x = 10.16; led_step_y = 8.88; // valve leds translate([led_x + led_step_x * 0, led_y - led_step_y * 0, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); translate([led_x + led_step_x * 1, led_y - led_step_y * 0, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); translate([led_x + led_step_x * 2, led_y - led_step_y * 0, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); translate([led_x + led_step_x * 3, led_y - led_step_y * 0, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); translate([led_x + led_step_x * 4, led_y - led_step_y * 0, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); translate([led_x + led_step_x * 5, led_y - led_step_y * 0, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); // leakage leds translate([led_x + led_step_x * 0, led_y - led_step_y * 1, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); translate([led_x + led_step_x * 1, led_y - led_step_y * 1, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); translate([led_x + led_step_x * 2, led_y - led_step_y * 1, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); translate([led_x + led_step_x * 3, led_y - led_step_y * 1, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); // metter leds translate([led_x + led_step_x * 0, led_y - led_step_y * 2, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); translate([led_x + led_step_x * 1, led_y - led_step_y * 2, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); // power led translate([led_x + led_step_x * 5, led_y - led_step_y * 2, 0]) cylinder(h=4, d=led_d, center=true, $fn=g_fn); // button OK translate([25.07, 8.25, 0]) cylinder(h=4, d=g_button_d+0.2, center=true, $fn=g_fn); // button Cancel translate([25.07, -6.99, 0]) cylinder(h=4, d=g_button_d+0.2, center=true, $fn=g_fn); // encoder translate([40.31, 0.88, 0]) cylinder(h=4, d=7, center=true, $fn=g_fn); } module control_add() { // board support board_support_h = 13; translate([-46, 14.5, g_base_thickness]) stand(h=board_support_h); translate([46, 14.5, g_base_thickness]) stand(h=board_support_h); translate([46, -14.5, g_base_thickness]) stand(h=board_support_h); translate([-46, -14.5, g_base_thickness]) stand(h=board_support_h); translate([0, -15.5, g_base_thickness+board_support_h/2]) cube([20, 4, board_support_h], center=true); translate([0, 15.5, g_base_thickness+board_support_h/2]) cube([20, 4, board_support_h], center=true); // encoder support es_h = board_support_h - 6.6; es_d = 18; es_thickness = 3; es_thickness_top = g_base_thickness; difference() { translate([40.31, 0.88, g_base_thickness]) cylinder(h=es_h, d=es_d, center=false, $fn=g_fn); translate([40.31, 0.88, g_base_thickness]) cylinder(h=es_h-es_thickness_top, d=es_d-es_thickness, center=false, $fn=g_fn); translate([40.31, 0.88, g_base_thickness]) cylinder(h=es_h, d=7, center=false, $fn=g_fn); translate([40.31-7, 0.88, g_base_thickness+(es_h-es_thickness_top)/2]) cube([5,15,es_h-es_thickness_top], center=true); translate([40.31+7, 0.88, g_base_thickness+(es_h-es_thickness_top)/2]) cube([5,15,es_h-es_thickness_top], center=true); } // button OK button_well_h = 6; translate([25.07, 8.25, g_base_thickness]) difference() { cylinder(h=button_well_h, d=g_button_d+0.2+2, center=false, $fn=g_fn); cylinder(h=button_well_h, d=g_button_d+0.2, center=false, $fn=g_fn); } // button Cancel translate([25.07, -6.99, g_base_thickness]) difference() { cylinder(h=button_well_h, d=g_button_d+0.2+2, center=false, $fn=g_fn); cylinder(h=button_well_h, d=g_button_d+0.2, center=false, $fn=g_fn); } } module lcd_sub() { cube([95, 14, 4], center=true); } module lcd_add() { translate([-54, 14.5, g_base_thickness]) stand(h=8.5); translate([54, 14.5, g_base_thickness]) stand(h=8.5); translate([54, -14.5, g_base_thickness]) stand(h=8.5); translate([-54, -14.5, g_base_thickness]) stand(h=8.5); board_thickness = 2; board_h = 1.5; board_b = 8; translate([0, 0, g_base_thickness+board_h/2]) difference() { cube([95+board_b+board_thickness, 14+board_b+board_thickness, board_h], center=true); cube([95+board_b, 14+board_b, board_h], center=true); } } mirror(0,1,0) union() { difference() { base(h=g_base_thickness); translate([58, 0, 0]) control_sub(); translate([-50, 0, 0]) lcd_sub(); } difference() { union() { translate([58, 0, 0]) control_add(); translate([-50, 0, 0]) lcd_add(); //translate([8, 14.5, g_base_thickness+8.5/2]) cube([5, 2, 8.5], center=true); //translate([8, -14.5, g_base_thickness+8.5/2]) cube([5, 2, 8.5], center=true); } translate([-50, 0, g_base_thickness+8.5+5/2]) cube([117, 37, 5], center=true); } }