1include <BOSL/constants.scad>
 2use <BOSL/masks.scad>
 3
 4// Start config
 5// Pi Board
 6pi_board_size = [51,21]; //mm
 7pi_board_screw_holes_center_from_board_edge_distance = [3.7/2/*3.7 is the difference between screen and pi pcb height 21-24.7 */+4.8,2]; //mm
 8pi_board_screw_holes_diameter = 2.1; //mm
 9pi_board_padding = 1; //mm
10
11// Screen
12screen_pcb_size = [24.7,27,13.3]; //mm (+- 0.2) 13.3mm are pin headers.
13screen_pcb_screw_holes_center_from_board_edge_distance = 2.1; //mm
14screen_pcb_screw_holes_diameter=2.8; //mm
15screen_pcb_screw_holes_spacing=[20.5,23]; //mm
16active_screen_area = [24.7,16.9,3.5]; //mm (old: 13.86)
17active_screen_area_offset_from_corner = [0,5.08]; //mm
18
19// MEMS Package (HCLGA)
20mems_microphone_package_size = [3,4,1.06]; //mm https://cdn-learn.adafruit.com/assets/assets/000/049/977/original/MP34DT01-M.pdf
21mems_microphone_position_offset_from_corner = [11.5,pi_board_padding+screen_pcb_size.x/2-mems_microphone_package_size.y/2,0]; //mm
22
23
24
25// Screws
26m2_screw_nut_size = [5,5,1.6];
27
28// Misc
29walls_thickness = 2; //mm
30rounding_radius=1.5; //mm
31
32resolution = 80;
33// End config
34
35// Modules
36module sector(radius, angles, fn = resolution) {
37    r = radius / cos(180 / fn);
38    step = -360 / fn;
39
40    points = concat([[0, 0]],
41        [for(a = [angles[0] : step : angles[1] - 360]) 
42            [r * cos(a), r * sin(a)]
43        ],
44        [[r * cos(angles[1]), r * sin(angles[1])]]
45    );
46
47    difference() {
48        circle(radius, $fn = fn);
49        polygon(points);
50    }
51}
52
53module arc(radius, angles, width = 1, fn = resolution) {
54    difference() {
55        sector(radius + width, angles, fn);
56        sector(radius, angles, fn);
57    }
58}
59
60// Modeling
61difference(){
62// Body
63cube(size=[pi_board_size.x+2*pi_board_padding,screen_pcb_size.x+2*pi_board_padding,walls_thickness]);
64   // Fillet Edge
65    fillet_mask_z(l=walls_thickness, r=rounding_radius, align=V_UP, $fn=resolution);
66    
67   translate([pi_board_size.x+2*pi_board_padding,screen_pcb_size.x+2*pi_board_padding,0])
68    fillet_mask_z(l=walls_thickness, r=rounding_radius, align=V_UP, $fn=resolution);
69    
70   translate([pi_board_size.x+2*pi_board_padding,0,0]) fillet_mask_z(l=walls_thickness, r=rounding_radius, align=V_UP, $fn=resolution);
71    
72   translate([0,screen_pcb_size.x+2*pi_board_padding,0]) fillet_mask_z(l=walls_thickness, r=rounding_radius, align=V_UP, $fn=resolution);
73    // MEMS Package (HCLGA)
74    translate(mems_microphone_position_offset_from_corner) cube(size=[mems_microphone_package_size.x,mems_microphone_package_size.y,walls_thickness]);
75    // Screws + Nuts
76    translate([pi_board_screw_holes_center_from_board_edge_distance.y+pi_board_padding,pi_board_screw_holes_center_from_board_edge_distance.x+pi_board_padding,0]) cylinder(walls_thickness,pi_board_screw_holes_diameter/2,pi_board_screw_holes_diameter/2,$fn=resolution);
77    
78    translate([pi_board_screw_holes_center_from_board_edge_distance.y+pi_board_padding,pi_board_screw_holes_center_from_board_edge_distance.x+pi_board_padding,walls_thickness-m2_screw_nut_size.z]) cylinder(m2_screw_nut_size.z,m2_screw_nut_size.x/2,m2_screw_nut_size.x/2,$fn=6);
79    
80    translate([pi_board_screw_holes_center_from_board_edge_distance.y+pi_board_padding,screen_pcb_size.x-pi_board_screw_holes_center_from_board_edge_distance.x+pi_board_padding,0]) cylinder(walls_thickness,pi_board_screw_holes_diameter/2,pi_board_screw_holes_diameter/2,$fn=resolution);
81    
82    translate([pi_board_screw_holes_center_from_board_edge_distance.y+pi_board_padding,screen_pcb_size.x-pi_board_screw_holes_center_from_board_edge_distance.x+pi_board_padding,walls_thickness-m2_screw_nut_size.z]) cylinder(m2_screw_nut_size.z,m2_screw_nut_size.x/2,m2_screw_nut_size.x/2,$fn=6);
83    
84    translate([pi_board_size.x-pi_board_screw_holes_center_from_board_edge_distance.y+pi_board_padding,pi_board_screw_holes_center_from_board_edge_distance.x+pi_board_padding,0]) cylinder(walls_thickness,pi_board_screw_holes_diameter/2,pi_board_screw_holes_diameter/2,$fn=resolution);
85    
86    translate([pi_board_size.x-pi_board_screw_holes_center_from_board_edge_distance.y+pi_board_padding,pi_board_screw_holes_center_from_board_edge_distance.x+pi_board_padding,walls_thickness-m2_screw_nut_size.z]) cylinder(m2_screw_nut_size.z,m2_screw_nut_size.x/2,m2_screw_nut_size.x/2,$fn=6);
87    
88    translate([pi_board_size.x-pi_board_screw_holes_center_from_board_edge_distance.y+pi_board_padding,screen_pcb_size.x-pi_board_screw_holes_center_from_board_edge_distance.x+pi_board_padding,0]) cylinder(walls_thickness,pi_board_screw_holes_diameter/2,pi_board_screw_holes_diameter/2,$fn=resolution);
89    
90    translate([pi_board_size.x-pi_board_screw_holes_center_from_board_edge_distance.y+pi_board_padding,screen_pcb_size.x-pi_board_screw_holes_center_from_board_edge_distance.x+pi_board_padding,walls_thickness-m2_screw_nut_size.z]) cylinder(m2_screw_nut_size.z,m2_screw_nut_size.x/2,m2_screw_nut_size.x/2,$fn=6);
91   }