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.
244 lines
7.4 KiB
OpenSCAD
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);
|