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// Screws
20m2_screw_head_size = [4,4,1];
21
22
23// Misc
24walls_thickness = 2; //mm
25rounding_radius=1.5; //mm
26
27resolution = 80;
28// End config
29
30// Modules
31module sector(radius, angles, fn = resolution) {
32 r = radius / cos(180 / fn);
33 step = -360 / fn;
34
35 points = concat([[0, 0]],
36 [for(a = [angles[0] : step : angles[1] - 360])
37 [r * cos(a), r * sin(a)]
38 ],
39 [[r * cos(angles[1]), r * sin(angles[1])]]
40 );
41
42 difference() {
43 circle(radius, $fn = fn);
44 polygon(points);
45 }
46}
47
48module arc(radius, angles, width = 1, fn = resolution) {
49 difference() {
50 sector(radius + width, angles, fn);
51 sector(radius, angles, fn);
52 }
53}
54
55// Modeling
56difference(){
57// Body
58cube(size=[pi_board_size.x+2*pi_board_padding,screen_pcb_size.x+2*pi_board_padding,walls_thickness]);
59 // Fillet Edge
60 fillet_mask_z(l=walls_thickness, r=rounding_radius, align=V_UP, $fn=resolution);
61
62 translate([pi_board_size.x+2*pi_board_padding,screen_pcb_size.x+2*pi_board_padding,0])
63 fillet_mask_z(l=walls_thickness, r=rounding_radius, align=V_UP, $fn=resolution);
64
65 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);
66
67 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);
68 // Screen
69 translate([pi_board_size.x/2+screen_pcb_size.x/2+pi_board_padding,screen_pcb_size.x/2+pi_board_padding,0])
70 translate([-screen_pcb_size.x,-active_screen_area.y/2,0])
71 cube([screen_pcb_size.x,active_screen_area.y,walls_thickness]);
72 // Screws + Heads
73 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);
74
75 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_head_size.z]) cylinder(m2_screw_head_size.z,m2_screw_head_size.x/2,m2_screw_head_size.x/2,$fn=resolution);
76
77 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);
78
79 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_head_size.z]) cylinder(m2_screw_head_size.z,m2_screw_head_size.x/2,m2_screw_head_size.x/2,$fn=resolution);
80
81 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);
82
83 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_head_size.z]) cylinder(m2_screw_head_size.z,m2_screw_head_size.x/2,m2_screw_head_size.x/2,$fn=resolution);
84
85 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);
86
87 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_head_size.z]) cylinder(m2_screw_head_size.z,m2_screw_head_size.x/2,m2_screw_head_size.x/2,$fn=resolution);
88 }