battery box
This commit is contained in:
		
							
								
								
									
										244
									
								
								mechanism/Battery_box_for_18650_cells.scad
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										244
									
								
								mechanism/Battery_box_for_18650_cells.scad
									
									
									
									
									
										Normal file
									
								
							@@ -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);
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								mechanism/Battery_box_for_18650_cells.stl
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								mechanism/Battery_box_for_18650_cells.stl
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
		Reference in New Issue
	
	Block a user