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