-
-
Notifications
You must be signed in to change notification settings - Fork 9
/
module_oled.scad
179 lines (149 loc) · 6.05 KB
/
module_oled.scad
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
// Creates a module with an opening and mounts for a display
/* [Case Dimensions] */
// diameter of the base
base_diameter = 62.8; //[62.8:Small, 80:Medium, 100:Large, 130:XLarge]
// thickness of outer wall
wall_thickness = 2; //[2:0.5:5]
// enable rim
enable_rim = true;
// rim height
rim_height = 1.2; // [.5: .1: 2]
/* [OLED Dimensions] */
// type of display
display = 0; //[0: Custom, 1:OLED 0.96, 2:OLED 1.3]
// width of the display
oled_width = 35; //[10:1:100]
// height of the display
oled_height = 18; //[10:1:100]
// width of the pcb
oled_pcb_width = 36; //[10:1:100]
// height of the pcb
oled_pcb_height = 34; //[10:1:100]
// position of the display (lower edge)
oled_y_position = 9.0;
// diameter of display screw
oled_thread_diameter = 3;
// pitch of display screw
oled_thread_pitch = 0.5;
/* [Hidden] */
$fn = 128;
preview = false;
base_radius = base_diameter / 2;
use <common.scad>
use <module_empty.scad>
use <threads.scad>
module cutOuter(radius, module_height)
{
intersection() {
children();
cylinder(r=radius, h=module_height);
}
}
module cutInner(radius, module_height)
{
difference() {
children();
cylinder(r=radius, h=module_height);
}
}
module _oled(base_radius, wall_thickness, enable_rim, oled_width, oled_height, oled_pcb_width, oled_pcb_height, oled_y_position) {
oled_module_height = oled_pcb_height + 2*wall_thickness + 1;
rotate([0,0,180])
union() {
difference() {
union() {
// base
empty(base_radius, oled_module_height, wall_thickness, enable_rim);
// frame
cutInner(base_radius - wall_thickness - 6, oled_module_height) {
cutOuter(base_radius - wall_thickness+0.1, oled_module_height) {
translate([base_radius-wall_thickness*2-4, -(oled_pcb_width/2 + wall_thickness/2), 0])
cube([base_radius, oled_pcb_width + wall_thickness, oled_pcb_height + wall_thickness * 2]);
};
};
// board dummy
%translate([base_radius - 2 * wall_thickness-5, -oled_pcb_width/2, wall_thickness])
cube([2, oled_pcb_width, oled_pcb_height]);
}
// spacer for rim of module below
if (enable_rim) {
// make spacer 25% taller and 20% wider than the rim itself
rim(base_radius, 0, wall_thickness - 0.2, rim_height * 1.25, 1.2);
}
// display cutout
translate([0, -oled_width/2, oled_y_position + wall_thickness])
cube([base_radius, oled_width, oled_height]);
// pcb cutout
translate([-5.1, -oled_pcb_width/2, wall_thickness])
cube([base_radius - 1.5*wall_thickness, oled_pcb_width, oled_pcb_height]);
// outer recess
translate([base_radius - wall_thickness, -oled_width/2 - 2, oled_y_position + wall_thickness])
cube([base_radius - 2*wall_thickness, oled_width+4, oled_height]);
// chamfer top
/*
translate([base_radius - wall_thickness-2.3, -oled_width/2 - 2, oled_y_position + oled_height + wall_thickness])
rotate([0,30,0])
cube([base_radius - 2*wall_thickness, oled_width+4, oled_height+4]);
*/
// chamfer bottom
/*
translate([base_radius - wall_thickness-2.3, -oled_width/2 - 2, oled_y_position + wall_thickness])
rotate([0,60,0])
cube([base_radius - 2*wall_thickness, oled_width+4, oled_height+4]);
*/
// chamfer horizontal
/*
translate([base_radius - wall_thickness-4.1, -oled_width/2 - 12, oled_y_position + wall_thickness])
cube([base_radius - 2*wall_thickness, oled_width+24, oled_height]);
*/
}
// screw threads
difference() {
translate([base_radius-2*wall_thickness-6, -oled_width/2, wall_thickness + oled_pcb_height - 4])
cube([2,4,4]);
render() translate([base_radius-2*wall_thickness-6.1, -oled_width/2+2, wall_thickness + oled_pcb_height - 2])
rotate([0,90,0])
metric_thread(diameter=oled_thread_diameter, pitch=oled_thread_pitch, length=3, internal=true, test=preview);
}
difference() {
translate([base_radius-2*wall_thickness-6, oled_width/2-4, wall_thickness + oled_pcb_height - 4])
cube([2,4,4]);
render() translate([base_radius-2*wall_thickness-6.1, oled_width/2-2, wall_thickness + oled_pcb_height - 2])
rotate([0,90,0])
metric_thread(diameter=oled_thread_diameter, pitch=oled_thread_pitch, length=3, internal=true, test=preview);
}
difference() {
translate([base_radius-2*wall_thickness-6, -oled_width/2, wall_thickness])
cube([2,4,4]);
render() translate([base_radius-2*wall_thickness-6.1, -oled_width/2+2, wall_thickness + 2])
rotate([0,90,0])
metric_thread(diameter=oled_thread_diameter, pitch=oled_thread_pitch, length=3, internal=true, test=preview);
}
difference() {
translate([base_radius-2*wall_thickness-6, oled_width/2-4, wall_thickness])
cube([2,4,4]);
render() translate([base_radius-2*wall_thickness-6.1, oled_width/2-2, wall_thickness + 2])
rotate([0,90,0])
metric_thread(diameter=oled_thread_diameter, pitch=oled_thread_pitch, length=3, internal=true, test=preview);
}
}
}
module oled(base_radius, wall_thickness, enable_rim, oled_width, oled_height, oled_pcb_width, oled_pcb_height, oled_y_position) {
// display dimensions database (unique variables needed due to language restrictions)
display_size1 = display==0?[oled_width, oled_height]:[1,1]; // custom
display_size2 = display==1?[27, 15]:display_size1; // OLED 0.96"
display_size3 = display==2?[35, 18]:display_size2; // OLED 1.3"
display_size = display_size3; // use last variable from table above here
// pcb dimensions [width, height]
pcb_size1 = display==0?[oled_pcb_width, oled_pcb_height]:[1,1]; // custom
pcb_size2 = display==1?[28, 28]:pcb_size1; // OLED 0.96"
pcb_size3 = display==2?[36, 34]:pcb_size2; // OLED 1.3"
pcb_size = pcb_size3; // use last variable from table above here
// y offset of display
y_offset1 = display==0?oled_y_position:0; // custom
y_offset2 = display==1?8:y_offset1; // OLED 0.96"
y_offset3 = display==2?9:y_offset2; // OLED 1.3"
y_offset = y_offset3; // use last variable from table above here
_oled(base_radius, wall_thickness, enable_rim, display_size[0], display_size[1], pcb_size[0], pcb_size[1], y_offset);
}
oled(base_radius, wall_thickness, enable_rim, oled_width, oled_height, oled_pcb_width, oled_pcb_height, oled_y_position);