chiark / gitweb /
air-hockey-puck: wip
[reprap-play.git] / fairphone-battery-case.scad
1 // -*- C -*-
2
3 include <utils.scad>
4
5 mainwall_th = 3.0;
6 smallwall_th = 2.0;
7
8 seal_th = 0.3 + 0.6 + 0.6 - 0.4 - 0.4 + 0.2; // total gap for seal etc.
9 behind_recess = 1.5;
10
11 recess_gap_end = 0.4;
12
13 lid_edge_th = 0.5;
14
15 battery_len = 66.55 + 1.25 -.55;
16 battery_th = 6.55 + 0.75 - .60;
17 battery_wdth = 44.38 + 0.75 -.55;
18
19 battery_base_indent = 0.94 + 0.50;
20 battery_base_indent_fromside_outside = 4;
21 battery_base_indent_fromside_inside = 10;
22
23 handle_height = 3.5;
24 handle_inward = 10;
25 handle_len = 5;
26
27 pushhole_ell_sz = 4.75;
28 pushhole_ell_th = 1.75;
29 pushhole_circle_dia = 4.0;
30
31 // for testing:
32 //battery_len = 3;
33 //battery_wdth = 15;
34 //battery_base_indent_fromside_inside = 6;
35
36 // calculated
37
38 bpp0 = [0,0];
39 bpp1 = bpp0 + [ 0, mainwall_th - behind_recess ];
40 lppA = bpp1 + [ seal_th, -recess_gap_end ];
41 lppB = lppA + [ lid_edge_th, 0 ];
42 bpp2 = [ lppB[0], bpp1[1] ];
43 bpp3 = [ bpp2[0] + (bpp1 - bpp0)[1], bpp0[1] ];
44 bpp4 = [ bpp3[0], bpp0[1] + mainwall_th ];
45 lppC = bpp3 + [ 0, -recess_gap_end ];
46
47 lppF = lppC + [ handle_height, 0 ];
48
49 s0 = battery_wdth/2;
50 s0i = s0 - battery_th/2;
51 s1 = s0 + smallwall_th;
52
53 l1 = s1 - handle_inward;
54 l0 = l1 - handle_len;
55
56 echo(
57      bpp0,
58      bpp1,
59      bpp2,
60      bpp3,
61      bpp4,
62      bpp5,
63      bpp6,
64      bpp7,
65      bpp8
66 );
67
68 echo(
69      lppA,
70      lppB,
71      lppC,
72      lppD,
73      lppE
74 );
75
76 bpp8 = bpp0 + [ -battery_len,0 ];
77 bpp5 = [ bpp8[0] - smallwall_th, bpp4[1] ];
78 bpp9 = [ bpp0[0], bpp0[1] - battery_th/2 - 1.0 ];
79 bpp7 = [ bpp8[0], bpp9[1] ];
80 bpp6 = [ bpp5[0], bpp9[1] ];
81 lppE = [ lppA[0], bpp9[1] ];
82 lppD = [ lppC[0], bpp9[1] ];
83
84 module BaseHalfPlan(indent=0){
85   polygon([ bpp0,
86             bpp1,
87             bpp2,
88             bpp3,
89             bpp4,
90             bpp5,
91             bpp6,
92             bpp7 + indent * [1,0],
93             bpp8 + indent * [1,0]
94             ]);
95 }
96
97 module SideHalfPlan(){
98   polygon([ bpp5,
99             bpp6,
100             bpp9,
101             bpp1
102             ]);
103 }
104
105 module LidHalfPlan(){
106   polygon([ lppA,
107             lppE,
108             lppD,
109             lppC,
110             lppB
111             ]);
112 }
113
114 module HandleHalfPlan(){
115   translate(lppE)
116     square(lppF - lppE);
117 }
118
119 module ExtrudePlan(from,to){
120   rotate([0,-90,0])
121   for (mj=[0,1]) {
122     mirror([0,0,mj]) translate([0,0,from]){
123       linear_extrude(height= to-from, convexity=5){
124         for (mi=[0,1]) {
125           mirror([0,mi])
126             translate([0, battery_th/2])
127             children(0);
128         }
129       }
130     }
131   }
132 }
133
134 module PushHolePlan(){ ////toplevel
135   translate(-(pushhole_ell_th * 0.10 +
136               pushhole_ell_sz * 0.10) * [1,1]) {
137     for (r=[0,90])
138       rotate(r)
139         translate(-pushhole_ell_th * 0.5 * [1,1])
140         square([ pushhole_ell_sz, pushhole_ell_th ]);
141   }
142   circle(pushhole_circle_dia/2, $fn=40);
143 }
144
145 module PlanDemo(){ ////toplevel
146   color("blue") BaseHalfPlan();
147   color("red") LidHalfPlan();
148   translate([0,0,-1]) color("lightblue") SideHalfPlan();
149 }
150
151 module Base(){ ////toplevel
152   difference(){
153     ExtrudePlan(0,s1) BaseHalfPlan();
154     linextr(-(10+battery_len), battery_len+10, convexity=5) PushHolePlan();
155   }
156   difference(){
157     union(){
158       ExtrudePlan(s0i, s1) SideHalfPlan();
159       ExtrudePlan(s0 - battery_base_indent_fromside_inside,
160                   s0 - battery_base_indent_fromside_outside
161                   ) BaseHalfPlan(indent = battery_base_indent);
162     }
163     for (m=[0,1])
164       mirror([m,0,0])
165         translate([s0i, 0, bpp7[0] - 0.1])
166         cylinder(r= battery_th/2, h=100, $fs=0.5);
167   }
168 }
169
170 module BaseHalfTest(){ ////toplevel
171   intersection(){
172     Base();
173     translate([-100,0,-100])
174       cube([200,200,200]);
175   }
176 }
177
178 module Lid(){ ////toplevel
179   ExtrudePlan(0,s1) LidHalfPlan();
180   ExtrudePlan(l0,l1) HandleHalfPlan();
181 }
182
183 module Demo(){ ////toplevel
184   %Base();
185   Lid();
186 }
187
188 //PlanDemo();
189 //Demo();
190 //Base();