diff --git a/.gitignore b/.gitignore index 49813ed..8859f1a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ .DS_Store *.pyc .vscode/ +*.blend1 diff --git a/mechanism/Battery_box_for_18650_cells.scad b/mechanism/Battery_box_for_18650_cells.scad new file mode 100644 index 0000000..bff5acb --- /dev/null +++ b/mechanism/Battery_box_for_18650_cells.scad @@ -0,0 +1,244 @@ +/* + * Variables for Thingiverse Customizer + * ================================================================== + * + */ + +// The number of cells in your battery holder +Cell_Count = 2; +// AA:50.5;18650:65 +Cell_Long = 65; +// AA:14.5;18650:18 +Cell_Wide = 18; +// 1:series connection; 2:parallel connection +Connection = 1; +// 1:yes; 2:no +mounting_flanges = 1; + +/* + * Library function: edge + * ================================================================== + * + * Used to make roundes edges on objects + * + */ +module edge(radius, height) +{ + difference() + { + translate([radius/2-0.5, radius/2-0.5, 0]) + cube([radius+1, radius+1, height], center = true); + + translate([radius, radius, 0]) + cylinder(h = height+1, r1 = radius, r2 = radius, center = true, $fn = 100); + } +} + +module battery_box(cells) +{ + difference() + { + union() + { + translate([0, 0, Cell_Wide*(4/3)/4]) + cube(size=[Cell_Long+7+7, Cell_Wide*cells, Cell_Wide*(4/3)/2], center=true); + + translate([Cell_Long/2+5.5, 0, Cell_Wide*(4/3)/2]) + cube(size=[3, Cell_Wide*cells, Cell_Wide*(4/3)], center=true); + + translate([-(Cell_Long/2+5.5), 0, Cell_Wide*(4/3)/2]) + cube(size=[3, Cell_Wide*cells, Cell_Wide*(4/3)], center=true); + + translate([-(Cell_Long/2+5-2), 0, Cell_Wide*0.8/2+Cell_Wide*(4/3)/4]) + cube(size=[2, Cell_Wide*cells, Cell_Wide*0.7], center=true); + + translate([(Cell_Long/2+5-2), 0, Cell_Wide*0.8/2+Cell_Wide*(4/3)/4]) + cube(size=[2, Cell_Wide*cells, Cell_Wide*0.7], center=true); + + // mounting flanges + if (mounting_flanges == 1) + { + translate([20, cells*Cell_Wide/2+4/2, 3/2]) + cube(size=[7, 4, 3], center=true); + + translate([20, cells*Cell_Wide/2+4, 3/2]) + cylinder(r=7/2, h=3, center=true, $fn = 60); + + translate([-20, cells*Cell_Wide/2+4/2, 3/2]) + cube(size=[7, 4, 3], center=true); + + translate([-20, cells*Cell_Wide/2+4, 3/2]) + cylinder(r=7/2, h=3, center=true, $fn = 60); + + translate([20, -(cells*Cell_Wide/2+4/2), 3/2]) + cube(size=[7, 4, 3], center=true); + + translate([20, -(cells*Cell_Wide/2+4), 3/2]) + cylinder(r=7/2, h=3, center=true, $fn = 60); + + translate([-20, -(cells*Cell_Wide/2+4/2), 3/2]) + cube(size=[7, 4, 3], center=true); + + translate([-20, -(cells*Cell_Wide/2+4), 3/2]) + cylinder(r=7/2, h=3, center=true, $fn = 60); + } + } + + if (mounting_flanges == 2) + { + + } + + for (i=[0:cells-1]) + { + // battery cradle + translate([0, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, Cell_Wide/2+10/2]) + rotate(90, [0, 1, 0]) + cylinder(r=Cell_Wide/2, h=Cell_Long+2+2, center=true, $fn = 100); + + // spring cut-out + translate([Cell_Long/2+3.5, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, Cell_Wide/2+10/2]) + cube(size=[1, 12, 12], center=true); + + translate([Cell_Long/2+3.5, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, Cell_Wide/2+10/2]) + cube(size=[1, 4, 30], center=true); + + translate([Cell_Long/2+3-1/2, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, Cell_Wide/2+10/2]) + cube(size=[1, 8, 12], center=true); + + translate([-(Cell_Long/2+3.5), -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, Cell_Wide/2+10/2]) + cube(size=[1, 12, 12], center=true); + + translate([-(Cell_Long/2+3.5), -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, Cell_Wide/2+10/2]) + cube(size=[1, 4, 30], center=true); + + translate([-(Cell_Long/2+3-1/2), -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, Cell_Wide/2+10/2]) + cube(size=[1, 8, 12], center=true); + + // solder flange cut-out + translate([(Cell_Long/2+5-6/2), -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, 3/2]) + cube(size=[6, 6, 3.1], center=true); + + translate([(Cell_Long/2)-1/2, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, 3/2]) + cylinder(r=6/2, h=3.1, center=true, $fn = Cell_Long); + + translate([-(Cell_Long/2+5-6/2), -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, 3/2]) + cube(size=[6, 6, 3.1], center=true); + + translate([-(Cell_Long/2)+1/2, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, 3/2]) + cylinder(r=6/2, h=3.1, center=true, $fn = Cell_Long); + + // polarity marking (+) + translate([20, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, 4/2+4.5]) + cube(size=[6, 2, 4], center=true); + + translate([20, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, 4/2+4.5]) + cube(size=[2, 6, 4], center=true); + + // polarity marking (-) + translate([-20, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*i, 4/2+4.5]) + cube(size=[6, 2, 4], center=true); + } + + if (cells>=2) + { + for (i=[0:cells-2]) + { + // bottom cut-out for cell connections + if (Connection == 1) + { + translate([0, -cells*Cell_Wide/2+Cell_Wide+Cell_Wide*i, 2.5/2]) + rotate(17, [0, 0, 1]) + cube(size=[Cell_Long, 2, 2.6], center=true); + } + + if (Connection == 2) + { + translate([Cell_Long/2+3, -cells*Cell_Wide/2+Cell_Wide+Cell_Wide*i, 2.5/2]) + rotate(90, [0, 0, 1]) + cube(size=[Cell_Wide, 2, 2.6], center=true); + + translate([-Cell_Long/2-3, -cells*Cell_Wide/2+Cell_Wide+Cell_Wide*i, 2.5/2]) + rotate(90, [0, 0, 1]) + cube(size=[Cell_Wide, 2, 2.6], center=true); + } + } + } + + // bottom cut-out for output wires + translate([Cell_Long/4, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*0, 2.5/2]) + cube(size=[Cell_Long/2, 2, 2.6], center=true); + + translate([3/2, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*0+1, 2.5/2]) + edge(4, 2.6); + + translate([3/2, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*0-1, 2.5/2]) + rotate(-90, [0, 0, 1]) + edge(4, 2.6); + + translate([-Cell_Long/4, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*(cells-1), 2.5/2]) + cube(size=[Cell_Long/2, 2, 2.6], center=true); + + translate([-3/2, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*(cells-1)+1, 2.5/2]) + rotate(90, [0, 0, 1]) + edge(4, 2.6); + + translate([-3/2, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*(cells-1)-1, 2.5/2]) + rotate(180, [0, 0, 1]) + edge(4, 2.6); + + // bottom polarity marking (+) + translate([7, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*0-4.5, 1.5/2]) + cube(size=[4, 1.5, 1.6], center=true); + + translate([7, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*0-4.5, 1.5/2]) + cube(size=[1.5, 4, 1.6], center=true); + + // bottom polarity marking (-) + translate([-7, -cells*Cell_Wide/2+Cell_Wide/2+Cell_Wide*(cells-1)+4.5, 1.5/2]) + cube(size=[4, 1.5, 1.6], center=true); + + // mounting holes + translate([20, cells*Cell_Wide/2+4, 3/2]) + cylinder(r=3.3/2, h=4, center=true, $fn = 30); + + translate([-20, cells*Cell_Wide/2+4, 3/2]) + cylinder(r=3.3/2, h=4, center=true, $fn = 30); + + translate([20, -(cells*Cell_Wide/2+4), 3/2]) + cylinder(r=3.3/2, h=4, center=true, $fn = 30); + + translate([-20, -(cells*Cell_Wide/2+4), 3/2]) + cylinder(r=3.3/2, h=4, center=true, $fn = 30); + + // bottom cut-out for output wire + translate([0, 0, 2.5/2]) + cube(size=[3, cells*Cell_Wide+5, 2.6], center=true); + + // cutout to ease battery removal + translate([0, 0, 20/2+10/2]) + rotate(90, [1, 0, 0]) + cylinder(r=20/2, h=cells*Cell_Wide+5, center=true, $fn = 100); + + // rounded corners on end plates + translate([0, -cells*Cell_Wide/2, Cell_Wide*(4/3)]) + rotate(90, [0, 1, 0]) + edge(4, Cell_Long+8+8+5); + + translate([0, cells*Cell_Wide/2, Cell_Wide*(4/3)]) + rotate(90, [0, 1, 0]) + rotate(-90, [0, 0, 1]) + edge(4, Cell_Long+8+8+5); + + translate([0, -cells*Cell_Wide/2, Cell_Wide*(4/3)*0.95-3]) + rotate(90, [0, 1, 0]) + edge(3, Cell_Long+4+4); + + translate([0, cells*Cell_Wide/2, Cell_Wide*(4/3)*0.95-3]) + rotate(90, [0, 1, 0]) + rotate(-90, [0, 0, 1]) + edge(3, Cell_Long+4+4); + } +} + +battery_box(Cell_Count); \ No newline at end of file diff --git a/mechanism/Battery_box_for_18650_cells.stl b/mechanism/Battery_box_for_18650_cells.stl new file mode 100644 index 0000000..1830349 Binary files /dev/null and b/mechanism/Battery_box_for_18650_cells.stl differ diff --git a/mechanism/back.stl b/mechanism/back.stl new file mode 100644 index 0000000..32036f5 Binary files /dev/null and b/mechanism/back.stl differ diff --git a/mechanism/battery_box.blend b/mechanism/battery_box.blend new file mode 100644 index 0000000..2c2a59d Binary files /dev/null and b/mechanism/battery_box.blend differ diff --git a/mechanism/battery_box.stl b/mechanism/battery_box.stl new file mode 100644 index 0000000..551b8ff Binary files /dev/null and b/mechanism/battery_box.stl differ diff --git a/mechanism/body_bottom.blend b/mechanism/body_bottom.blend index f02c735..a739e3d 100644 Binary files a/mechanism/body_bottom.blend and b/mechanism/body_bottom.blend differ diff --git a/mechanism/body_bottom.stl b/mechanism/body_bottom.stl index d712b49..6e74a07 100644 Binary files a/mechanism/body_bottom.stl and b/mechanism/body_bottom.stl differ diff --git a/mechanism/body_top.blend b/mechanism/body_top.blend index 7a46ebc..c222313 100644 Binary files a/mechanism/body_top.blend and b/mechanism/body_top.blend differ diff --git a/mechanism/body_top.stl b/mechanism/body_top.stl index 107f402..a730c87 100644 Binary files a/mechanism/body_top.stl and b/mechanism/body_top.stl differ