You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hexapod/mechanism/Battery_box_for_18650_cells...

244 lines
7.4 KiB
OpenSCAD

3 years ago
/*
* 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);