<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.opensourceecology.org/index.php?action=history&amp;feed=atom&amp;title=User%3ADorkmo%2FIdeas%2FBattery%2FSCAD%2F201411</id>
	<title>User:Dorkmo/Ideas/Battery/SCAD/201411 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.opensourceecology.org/index.php?action=history&amp;feed=atom&amp;title=User%3ADorkmo%2FIdeas%2FBattery%2FSCAD%2F201411"/>
	<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=User:Dorkmo/Ideas/Battery/SCAD/201411&amp;action=history"/>
	<updated>2026-04-07T15:40:43Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.13</generator>
	<entry>
		<id>https://wiki.opensourceecology.org/index.php?title=User:Dorkmo/Ideas/Battery/SCAD/201411&amp;diff=130924&amp;oldid=prev</id>
		<title>Dorkmo: Created page with &quot; November, 2014  ==cage==  &lt;nowiki&gt;  height = 90; tub_width = 36; tub_length = 70; basethickness = 5; tub_wall = 2; tub_outsidewall = 4;  tubs_rows    = 5; tubs_columns = 2;...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.opensourceecology.org/index.php?title=User:Dorkmo/Ideas/Battery/SCAD/201411&amp;diff=130924&amp;oldid=prev"/>
		<updated>2015-09-05T19:48:30Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot; November, 2014  ==cage==  &amp;lt;nowiki&amp;gt;  height = 90; tub_width = 36; tub_length = 70; basethickness = 5; tub_wall = 2; tub_outsidewall = 4;  tubs_rows    = 5; tubs_columns = 2;...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&lt;br /&gt;
November, 2014&lt;br /&gt;
&lt;br /&gt;
==cage==&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
height = 90;&lt;br /&gt;
tub_width = 36;&lt;br /&gt;
tub_length = 70;&lt;br /&gt;
basethickness = 5;&lt;br /&gt;
tub_wall = 2;&lt;br /&gt;
tub_outsidewall = 4;&lt;br /&gt;
&lt;br /&gt;
tubs_rows    = 5;&lt;br /&gt;
tubs_columns = 2;&lt;br /&gt;
&lt;br /&gt;
spacing = 1.940055;&lt;br /&gt;
center_dividers = 00; //1 yes 0 no&lt;br /&gt;
cage_height = 60;&lt;br /&gt;
cage_wall = 5.5;&lt;br /&gt;
cage_endwall = 2;&lt;br /&gt;
cage_base = 5;&lt;br /&gt;
&lt;br /&gt;
mesh_opening = 1.5 ;&lt;br /&gt;
mesh_angle = 45;&lt;br /&gt;
mesh_spacing = 3.5;&lt;br /&gt;
&lt;br /&gt;
wire_diameter = 2;&lt;br /&gt;
wire_holeoffc = 0;&lt;br /&gt;
cage_lid_depthinto = 7;&lt;br /&gt;
cage_divot_height = 5.5;&lt;br /&gt;
tub_lid_depthinto = 7;&lt;br /&gt;
tub_divot_height = 5.5;&lt;br /&gt;
&lt;br /&gt;
//begin underlying cage module&lt;br /&gt;
module cage()&lt;br /&gt;
 {&lt;br /&gt;
  difference()&lt;br /&gt;
   {&lt;br /&gt;
    cube(size = [(tub_width-(spacing*3))/2,tub_length-(spacing*2),cage_height], center=false);&lt;br /&gt;
//cut hole for powder to sit in&lt;br /&gt;
     translate([cage_wall, cage_endwall, cage_base])&lt;br /&gt;
      cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2),(tub_length-(spacing*2))-(cage_endwall*2),cage_height-cage_base+1], center=false);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
//end cage&lt;br /&gt;
     &lt;br /&gt;
//begin mesh hole grid module&lt;br /&gt;
module holes()&lt;br /&gt;
 {&lt;br /&gt;
intersection()&lt;br /&gt;
{&lt;br /&gt;
translate([0,-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))),0])&lt;br /&gt;
cube([cage_wall+0.2,1+((((tub_length-(spacing*2))-(cage_endwall*2)))),cage_height], center=false);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//need to translate closer to the cube here with llarge holes&lt;br /&gt;
&lt;br /&gt;
translate([0,0,-mesh_spacing])&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
rotate([0,-mesh_angle,0])&lt;br /&gt;
&lt;br /&gt;
scale([1,1,(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/sin(90-mesh_angle))*sin(90))])&lt;br /&gt;
{&lt;br /&gt;
//for - pair of rows to height&lt;br /&gt;
&lt;br /&gt;
  for (h = [1 : floor(((cage_height-cage_base-((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle))))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])&lt;br /&gt;
   {&lt;br /&gt;
    translate(h*[0,0,mesh_spacing])&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
//for - second row&lt;br /&gt;
&lt;br /&gt;
 for (w = [1 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])&lt;br /&gt;
        {&lt;br /&gt;
//translate second row&lt;br /&gt;
         translate([0,-mesh_spacing/2,mesh_spacing/2])&lt;br /&gt;
           {&lt;br /&gt;
//make second row copies&lt;br /&gt;
            translate(w*[0,mesh_spacing,0])&lt;br /&gt;
             {&lt;br /&gt;
              rotate([45,0,0])&lt;br /&gt;
               {&lt;br /&gt;
    cube(size = [(cage_wall*2)+(cage_height/sin(90))*sin(mesh_angle),mesh_opening,mesh_opening], center=false);&lt;br /&gt;
&lt;br /&gt;
               }&lt;br /&gt;
             }&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
&lt;br /&gt;
//for - create first row&lt;br /&gt;
for (w = [0 : floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing)])&lt;br /&gt;
&lt;br /&gt;
             {&lt;br /&gt;
              translate(w*[0,mesh_spacing,0])&lt;br /&gt;
&lt;br /&gt;
 {&lt;br /&gt;
  rotate([45,0,0])&lt;br /&gt;
   { &lt;br /&gt;
//need to tweak&lt;br /&gt;
    cube(size = [(cage_wall*2)+(cage_height/sin(90))*sin(mesh_angle),mesh_opening,mesh_opening],center=false);&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
////end cube&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
////end mesh hole grid module&lt;br /&gt;
&lt;br /&gt;
//////divot&lt;br /&gt;
module divot_sphere()&lt;br /&gt;
{&lt;br /&gt;
difference()&lt;br /&gt;
{&lt;br /&gt;
translate([(cage_divot_height/2)/sin(45)*sin(45),0,0])&lt;br /&gt;
{&lt;br /&gt;
sphere(r = (cage_divot_height/2)/sin(45));&lt;br /&gt;
}&lt;br /&gt;
translate([(cage_divot_height/2)/sin(45),0,0])&lt;br /&gt;
cube(size = [((cage_divot_height/2)/sin(45)*2),((cage_divot_height/2)/sin(45)*2),((cage_divot_height/2)/sin(45)*2)], center=true);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
////end divot module&lt;br /&gt;
&lt;br /&gt;
//begin final cage construction&lt;br /&gt;
difference()&lt;br /&gt;
 {&lt;br /&gt;
  cage();&lt;br /&gt;
//begin holes&lt;br /&gt;
  translate([(((tub_width-(spacing*3))/2)-cage_wall)+0.0, cage_endwall+((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])&lt;br /&gt;
   {&lt;br /&gt;
    holes();&lt;br /&gt;
   }&lt;br /&gt;
    translate([(cage_wall)-0.0,cage_endwall+((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/2)+(((((tub_length-(spacing*2))-(cage_endwall*2))-(((floor((((tub_length-(spacing*2))-(cage_endwall*2))-(sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening))))/mesh_spacing))*mesh_spacing)+sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/2), cage_base])&lt;br /&gt;
   {&lt;br /&gt;
&lt;br /&gt;
  mirror([1,0,0])&lt;br /&gt;
     {&lt;br /&gt;
      #holes();&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
//end holes&lt;br /&gt;
&lt;br /&gt;
//begin divots&lt;br /&gt;
&lt;br /&gt;
//1&lt;br /&gt;
      translate([cage_wall,(((tub_length-(spacing*2))-(cage_endwall*2))*1/4)+cage_endwall,cage_height-(((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        #divot_sphere();&lt;br /&gt;
       }&lt;br /&gt;
//2&lt;br /&gt;
      translate([cage_wall,(((tub_length-(spacing*2))-(cage_endwall*2))*3/4)+cage_endwall,cage_height-(((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        #divot_sphere();&lt;br /&gt;
       }&lt;br /&gt;
//3&lt;br /&gt;
      translate([cage_wall+(((tub_width-(spacing*3))/2)-(cage_wall*2)),(((tub_length-(spacing*2))-(cage_endwall*2))*1/4)+cage_endwall,cage_height-(((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([1,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          #divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//4&lt;br /&gt;
      translate([cage_wall+(((tub_width-(spacing*3))/2)-(cage_wall*2)),(((tub_length-(spacing*2))-(cage_endwall*2))*3/4)+cage_endwall,cage_height-(((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([1,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          #divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//end divots&lt;br /&gt;
 }&lt;br /&gt;
//end cage&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//calculate mesh wall minimum thickness&lt;br /&gt;
echo(sin(45)*((mesh_spacing-((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/sin(90)));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//calculate verticle height of mesh holes to take away from max height of holes&lt;br /&gt;
//works okay up to 45 then bugs out. might be because its before the scale down&lt;br /&gt;
echo((((((sin(90)*(cage_wall/sin(90-mesh_angle))))-((sin(mesh_angle)*((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))/(sin(90))))))/sin(90))*sin(mesh_angle)));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;cage cavity y&amp;quot;,((tub_width-(spacing*3))/2)-(cage_wall*2));&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;cage cavity x&amp;quot;,(tub_length-(spacing*2))-(cage_endwall*2));&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;cage cavity z&amp;quot;,cage_height-cage_base);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;powder volume per cage&amp;quot;,((((tub_width-(spacing*3))/2)-(cage_wall*2)))/10*(((tub_length-(spacing*2))-(cage_endwall*2)))/10*(cage_height-cage_base-cage_lid_depthinto)/10,&amp;quot;cm3&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;grams nickle hydroxide per cage&amp;quot;,(((((tub_width-(spacing*3))/2)-(cage_wall*2)))/10*(((tub_length-(spacing*2))-(cage_endwall*2)))/10*(cage_height-cage_base-cage_lid_depthinto)/10)*(4.10),&amp;quot;grams&amp;quot;);//density is 4.10&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;total grams nickle hydroxide&amp;quot;,(((((tub_width-(spacing*3))/2)-(cage_wall*2)))/10*(((tub_length-(spacing*2))-(cage_endwall*2)))/10*(cage_height-cage_base-cage_lid_depthinto)/10)*(4.10)*(tubs_columns*tubs_rows),&amp;quot;grams&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
//calculate mesh wall minimum thickness&lt;br /&gt;
echo(&amp;quot;mesh dividers thickness&amp;quot;,sin(45)*((mesh_spacing-((sqrt((mesh_opening*mesh_opening)+(mesh_opening*mesh_opening)))))/sin(90)));&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==cage lid with divots and cleat==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
height = 90;&lt;br /&gt;
tub_width = 36;&lt;br /&gt;
tub_length = 70;&lt;br /&gt;
basethickness = 5;&lt;br /&gt;
tub_wall = 2;&lt;br /&gt;
tub_outsidewall = 4;&lt;br /&gt;
&lt;br /&gt;
tubs_rows    = 5;&lt;br /&gt;
tubs_columns = 2;&lt;br /&gt;
&lt;br /&gt;
spacing = 1.940055;&lt;br /&gt;
center_dividers = 00; //1 yes 0 no&lt;br /&gt;
cage_height = 60;&lt;br /&gt;
cage_wall = 5.5;&lt;br /&gt;
cage_endwall = 2;&lt;br /&gt;
cage_base = 5;&lt;br /&gt;
&lt;br /&gt;
mesh_opening = 1.5 ;&lt;br /&gt;
mesh_angle = 45;&lt;br /&gt;
mesh_spacing = 3.5;&lt;br /&gt;
&lt;br /&gt;
wire_count = 7; //number of wires into each cage&lt;br /&gt;
wire_diameter = 1.4;&lt;br /&gt;
wire_holeoffc = 0;&lt;br /&gt;
cage_lid_cut = 0; //1 yes 0 no cavity in lid or not?&lt;br /&gt;
cage_minicleat = 2;&lt;br /&gt;
yn_cage_minicleat = 1; //1 yes 0 no&lt;br /&gt;
yn_cage_cleat = 0; //1 yes 0 no&lt;br /&gt;
cage_lid_depthinto = 7;&lt;br /&gt;
cage_divot_height = 5.5;&lt;br /&gt;
tub_lid_depthinto = 7;&lt;br /&gt;
tub_divot_height = 5.5;&lt;br /&gt;
&lt;br /&gt;
shrink_cage_lid = 0.5;&lt;br /&gt;
base_chamfer_depth = 0.9; //max 1.0&lt;br /&gt;
base_wire_cone = 0.2; //diameter added to wire_diameter&lt;br /&gt;
&lt;br /&gt;
union()&lt;br /&gt;
 {&lt;br /&gt;
  difference()&lt;br /&gt;
   {&lt;br /&gt;
    union()&lt;br /&gt;
     {&lt;br /&gt;
      translate([shrink_cage_lid/2,shrink_cage_lid/2,0])&lt;br /&gt;
       {&lt;br /&gt;
      cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))-shrink_cage_lid,((tub_length-(spacing*2))-(cage_endwall*2))-shrink_cage_lid,cage_lid_depthinto], center=false);&lt;br /&gt;
       }&lt;br /&gt;
      translate([-1,-1,cage_lid_depthinto])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+2,((tub_length-(spacing*2))-(cage_endwall*2))+2,2], center=false);&lt;br /&gt;
       }&lt;br /&gt;
//spheres lock ins&lt;br /&gt;
//1&lt;br /&gt;
      translate([(shrink_cage_lid/2),((tub_length-(spacing*2))-(cage_endwall*2))*1/4,((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2)])&lt;br /&gt;
       {&lt;br /&gt;
        divot_sphere();&lt;br /&gt;
       }&lt;br /&gt;
//2&lt;br /&gt;
      translate([(shrink_cage_lid/2),((tub_length-(spacing*2))-(cage_endwall*2))*3/4,((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2)])&lt;br /&gt;
       {&lt;br /&gt;
        divot_sphere();&lt;br /&gt;
       }&lt;br /&gt;
//3&lt;br /&gt;
      translate([(((tub_width-(spacing*3))/2)-(cage_wall*2))-(shrink_cage_lid/2),((tub_length-(spacing*2))-(cage_endwall*2))*1/4,((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2)])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([1,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//4&lt;br /&gt;
      translate([(((tub_width-(spacing*3))/2)-(cage_wall*2))-(shrink_cage_lid/2),((tub_length-(spacing*2))-(cage_endwall*2))*3/4,((cage_lid_depthinto-cage_divot_height)/2)+(cage_divot_height/2)])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([1,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//end spheres&lt;br /&gt;
&lt;br /&gt;
//minicleats&lt;br /&gt;
//1&lt;br /&gt;
translate([((((((tub_width-(spacing*3))/2)-(cage_wall*2))+2)/2)-cage_minicleat)+((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,((((tub_length-(spacing*2))-(cage_endwall*2))*1/2))+(wire_diameter/2),cage_lid_depthinto+2])&lt;br /&gt;
   {&lt;br /&gt;
&lt;br /&gt;
for(w = [-(wire_count-1)/2 : (wire_count-1)/2])&lt;br /&gt;
 {&lt;br /&gt;
  translate(w*[0,((((tub_length-(spacing*2))-(cage_endwall*2)-2))/(wire_count+1)),0])&lt;br /&gt;
   {&lt;br /&gt;
if (yn_cage_minicleat==1) mini_cleat(cage_minicleat,1);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//2&lt;br /&gt;
translate([-((((((tub_width-(spacing*3))/2)-(cage_wall*2))+2)/2)-cage_minicleat)+((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,((((tub_length-(spacing*2))-(cage_endwall*2))*1/2))+(wire_diameter/2),cage_lid_depthinto+2])&lt;br /&gt;
   {&lt;br /&gt;
mirror([1,0,0])&lt;br /&gt;
{&lt;br /&gt;
for(w = [-(wire_count-1)/2 : (wire_count-1)/2])&lt;br /&gt;
 {&lt;br /&gt;
  translate(w*[0,((((tub_length-(spacing*2))-(cage_endwall*2)-2))/(wire_count+1)),0])&lt;br /&gt;
   {&lt;br /&gt;
if (yn_cage_minicleat==1) mini_cleat(cage_minicleat,1);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//end mini cleats&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
//end union begin difference&lt;br /&gt;
  translate([1,1,1])&lt;br /&gt;
   {&lt;br /&gt;
    if (cage_lid_cut==1) cube(size = [((tub_width-(spacing*3))/2)-(cage_wall*2)-2,(tub_length-(spacing*2))-(cage_endwall*2)-2,cage_lid_depthinto+3], center=false);&lt;br /&gt;
   }&lt;br /&gt;
//chamfer underside of lip&lt;br /&gt;
  translate([-2,-1,cage_lid_depthinto-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,0])&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  translate([-2,(tub_length-(spacing*2))-(cage_endwall*2)+1,cage_lid_depthinto-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,0])&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  translate([-1,-2,cage_lid_depthinto-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,90])&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  translate([(((tub_width-(spacing*3))/2)-(cage_wall*2))+1,-2,cage_lid_depthinto-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,90])&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
//end chamfer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//chamfer base&lt;br /&gt;
  translate([-2,base_chamfer_depth-1,-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,0])&lt;br /&gt;
     {&lt;br /&gt;
      #cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  translate([-2,(tub_length-(spacing*2))-(cage_endwall*2)+1-base_chamfer_depth,-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,0])&lt;br /&gt;
     {&lt;br /&gt;
      #cube(size = [(((tub_width-(spacing*3))/2)-(cage_wall*2))+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  translate([-1+base_chamfer_depth,-2,-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,90])&lt;br /&gt;
     {&lt;br /&gt;
      #cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  translate([(((tub_width-(spacing*3))/2)-(cage_wall*2))+1-base_chamfer_depth,-2,-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,90])&lt;br /&gt;
     {&lt;br /&gt;
      #cube(size = [((tub_length-(spacing*2))-(cage_endwall*2))+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
//end chamfer&lt;br /&gt;
&lt;br /&gt;
//begin wire holes&lt;br /&gt;
  translate([((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,(((tub_length-(spacing*2))-(cage_endwall*2))*1/2),-1])&lt;br /&gt;
   {&lt;br /&gt;
&lt;br /&gt;
for(w = [-(wire_count-1)/2 : (wire_count-1)/2])&lt;br /&gt;
 {&lt;br /&gt;
  translate(w*[0,((((tub_length-(spacing*2))-(cage_endwall*2)-2))/(wire_count+1)),0])&lt;br /&gt;
   {&lt;br /&gt;
//wire hole&lt;br /&gt;
    #cylinder(r2 = wire_diameter/2, r1 = (wire_diameter+base_wire_cone)/2, h = cage_lid_depthinto+2+2);&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
 } &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   }&lt;br /&gt;
//end wire holes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//end difference&lt;br /&gt;
 }&lt;br /&gt;
//begin union&lt;br /&gt;
&lt;br /&gt;
//cleat&lt;br /&gt;
    translate([((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,(((tub_length-(spacing*2))-(cage_endwall*2))*1/2)-(wire_diameter*1.5)-1+wire_holeoffc,0])&lt;br /&gt;
     {&lt;br /&gt;
        if (yn_cage_cleat==1) cleat(2,cage_lid_depthinto+2);&lt;br /&gt;
     }&lt;br /&gt;
    translate([((((tub_width-(spacing*3))/2)-(cage_wall*2)))/2,(((tub_length-(spacing*2))-(cage_endwall*2))*1/2)+(wire_diameter*1.5)+1+wire_holeoffc,0])&lt;br /&gt;
     {&lt;br /&gt;
      mirror([0,1,0])&lt;br /&gt;
       {&lt;br /&gt;
        if (yn_cage_cleat==1) cleat(2,cage_lid_depthinto+2);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
//end cleat&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//divot&lt;br /&gt;
module divot_sphere()&lt;br /&gt;
{&lt;br /&gt;
difference()&lt;br /&gt;
{&lt;br /&gt;
translate([(cage_divot_height/2)/sin(45)*sin(45),0,0])&lt;br /&gt;
{&lt;br /&gt;
sphere(r = (cage_divot_height/2)/sin(45));&lt;br /&gt;
}&lt;br /&gt;
translate([(cage_divot_height/2)/sin(45),0,0])&lt;br /&gt;
cube(size = [((cage_divot_height/2)/sin(45)*2),((cage_divot_height/2)/sin(45)*2),((cage_divot_height/2)/sin(45)*2)], center=true);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
////cleat module&lt;br /&gt;
module cleat(size,height)&lt;br /&gt;
 {&lt;br /&gt;
  translate([0,0,-size])&lt;br /&gt;
  {&lt;br /&gt;
  difference()&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,0])&lt;br /&gt;
     {&lt;br /&gt;
      rotate([0,0,45])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size = [size,size,height/sin(45)], center=false);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
    translate([-size*3/2,-size*3/2,0])&lt;br /&gt;
     {&lt;br /&gt;
      #cube(size = [size*3,size*3,size],center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
//end cleat&lt;br /&gt;
&lt;br /&gt;
//mini_cleat module&lt;br /&gt;
module mini_cleat(sides,height)&lt;br /&gt;
{&lt;br /&gt;
union()&lt;br /&gt;
{&lt;br /&gt;
#cube(size = [sides,sides,height]);&lt;br /&gt;
translate([0,0,height])&lt;br /&gt;
{&lt;br /&gt;
polyhedron&lt;br /&gt;
  (points = [ [0,0,0],[sides,0,0],[sides,sides,0],[0,sides,0],&lt;br /&gt;
           [sides,0,sides],[sides*2,0,sides],[sides*2,sides,sides],[sides,sides,sides]&lt;br /&gt;
         ],&lt;br /&gt;
  faces = [ [0,1,2],[0,2,3], //&lt;br /&gt;
          [0,5,1],[0,4,5],   //&lt;br /&gt;
          [1,5,6],[1,6,2],   &lt;br /&gt;
          [2,6,7],[2,7,3],&lt;br /&gt;
          [3,7,4],[3,4,0],&lt;br /&gt;
          [4,7,6],[4,6,5]&lt;br /&gt;
        ]&lt;br /&gt;
);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//end mini cleat module&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==multi cell tub==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
height = 90;&lt;br /&gt;
tub_width = 36;&lt;br /&gt;
tub_length = 70;&lt;br /&gt;
basethickness = 5;&lt;br /&gt;
tub_wall = 2;&lt;br /&gt;
tub_outsidewall = 4;&lt;br /&gt;
&lt;br /&gt;
tubs_rows    = 1;&lt;br /&gt;
tubs_columns = 1;&lt;br /&gt;
&lt;br /&gt;
spacing = 1.940055;&lt;br /&gt;
wall_spacers_yn = 0; //1 yes 0 no&lt;br /&gt;
center_dividers = 0; //1 yes 0 no&lt;br /&gt;
cage_height = 60;&lt;br /&gt;
cage_wall = 5.5;&lt;br /&gt;
cage_endwall = 2;&lt;br /&gt;
cage_base = 5;&lt;br /&gt;
&lt;br /&gt;
mesh_opening = 1.5 ;&lt;br /&gt;
mesh_angle = 45;&lt;br /&gt;
mesh_spacing = 3.5;&lt;br /&gt;
&lt;br /&gt;
wire_diameter = 2;&lt;br /&gt;
wire_holeoffc = 0;&lt;br /&gt;
cage_lid_depthinto = 7;&lt;br /&gt;
cage_divot_height = 5.5;&lt;br /&gt;
tub_lid_depthinto = 7;&lt;br /&gt;
tub_divot_height = 5.5;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
union()&lt;br /&gt;
 {&lt;br /&gt;
&lt;br /&gt;
//tubs&lt;br /&gt;
for (c = [0 : tubs_columns-1])&lt;br /&gt;
 {&lt;br /&gt;
  translate([0,c*(tub_length+tub_wall),0])&lt;br /&gt;
   {&lt;br /&gt;
    for (r = [0 : tubs_rows-1])&lt;br /&gt;
    {&lt;br /&gt;
     translate([r*(tub_width+tub_wall),0,0])&lt;br /&gt;
      {&lt;br /&gt;
       tub();&lt;br /&gt;
      }&lt;br /&gt;
    }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
//end tubs&lt;br /&gt;
&lt;br /&gt;
//outer walls&lt;br /&gt;
translate([-tub_outsidewall+tub_wall,-tub_outsidewall+tub_wall,0])&lt;br /&gt;
 {&lt;br /&gt;
  difference()&lt;br /&gt;
   {&lt;br /&gt;
    cube(size = [((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall,((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall,height]);&lt;br /&gt;
    translate([tub_outsidewall,tub_outsidewall,0])&lt;br /&gt;
     {&lt;br /&gt;
      #cube(size = [(((tub_width+tub_wall)*tubs_rows)+tub_wall)-(tub_wall*2),(((tub_length+tub_wall)*tubs_columns)+tub_wall)-(tub_wall*2),height+1]);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
//end outer walls&lt;br /&gt;
&lt;br /&gt;
} //end union&lt;br /&gt;
&lt;br /&gt;
//tub module&lt;br /&gt;
module tub()&lt;br /&gt;
{&lt;br /&gt;
union()&lt;br /&gt;
{&lt;br /&gt;
//walls&lt;br /&gt;
 difference()&lt;br /&gt;
  {&lt;br /&gt;
   cube(size = [tub_width+(tub_wall*2), tub_length+(tub_wall*2), height], center=false);&lt;br /&gt;
   translate([tub_wall,tub_wall,basethickness])&lt;br /&gt;
    {&lt;br /&gt;
     cube(size = [tub_width, tub_length, height-basethickness+1], center=false);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
//end walls&lt;br /&gt;
&lt;br /&gt;
//spheres lock ins&lt;br /&gt;
//1&lt;br /&gt;
      translate([tub_wall,(tub_length*1/4)+tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([1,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          #divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//2&lt;br /&gt;
      translate([tub_wall,(tub_length*3/4)+tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([1,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//3&lt;br /&gt;
      translate([tub_width+tub_wall,(tub_length*1/4)+tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//4&lt;br /&gt;
      translate([tub_width+tub_wall,(tub_length*3/4)+tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//5&lt;br /&gt;
      translate([(tub_width*1/2)+tub_wall,tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,1,0])&lt;br /&gt;
         {&lt;br /&gt;
          rotate([0,0,90])&lt;br /&gt;
           {&lt;br /&gt;
            #divot_sphere();&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//6&lt;br /&gt;
      translate([(tub_width*1/2)+tub_wall,tub_length+tub_wall,height-(((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2))])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          rotate([0,0,90])&lt;br /&gt;
           {&lt;br /&gt;
            #divot_sphere();&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//end spheres&lt;br /&gt;
&lt;br /&gt;
//begin spacers&lt;br /&gt;
//1&lt;br /&gt;
translate([((tub_width+(tub_wall*2))/2)-((spacing-1)/2),tub_wall,cage_height*4/5])&lt;br /&gt;
{&lt;br /&gt;
if (center_dividers==1) divider();&lt;br /&gt;
}&lt;br /&gt;
//2&lt;br /&gt;
translate([((tub_width+(tub_wall*2))/2)-((spacing-1)/2),tub_wall,height-((spacing+cage_endwall+2)*2)-(sin(45)*(sin(45)*(spacing-1)))-(height*5/8)])&lt;br /&gt;
{&lt;br /&gt;
if (center_dividers==1) divider();&lt;br /&gt;
}&lt;br /&gt;
//3&lt;br /&gt;
translate([((tub_width+(tub_wall*2))/2)-((spacing-1)/2),tub_length+tub_wall,cage_height*4/5])&lt;br /&gt;
{&lt;br /&gt;
mirror([0,1,0])&lt;br /&gt;
{&lt;br /&gt;
if (center_dividers==1) divider();&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//4&lt;br /&gt;
translate([((tub_width+(tub_wall*2))/2)-((spacing-1)/2),tub_length+tub_wall,height-((spacing+cage_endwall+2)*2)-(sin(45)*(sin(45)*(spacing-1)))-(height*5/8)])&lt;br /&gt;
{&lt;br /&gt;
mirror([0,1,0])&lt;br /&gt;
{&lt;br /&gt;
if (center_dividers==1) divider();&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//the end_wall&amp;#039;s side spacers&lt;br /&gt;
//s1&lt;br /&gt;
translate([(tub_width+(tub_wall*2))*1/4,tub_wall,(cage_height/2)+basethickness])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,0,90])&lt;br /&gt;
{&lt;br /&gt;
if (wall_spacers_yn==1) tub_spacer(8);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//s2&lt;br /&gt;
translate([(tub_width+(tub_wall*2))*3/4,tub_wall,(cage_height/2)+basethickness])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,0,90])&lt;br /&gt;
{&lt;br /&gt;
if (wall_spacers_yn==1) tub_spacer(8);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//s3&lt;br /&gt;
translate([(tub_width+(tub_wall*2))*1/4,tub_wall+tub_length,(cage_height/2)+basethickness])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,0,270])&lt;br /&gt;
{&lt;br /&gt;
if (wall_spacers_yn==1) tub_spacer(8);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//s4&lt;br /&gt;
translate([(tub_width+(tub_wall*2))*3/4,tub_wall+tub_length,(cage_height/2)+basethickness])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,0,270])&lt;br /&gt;
{&lt;br /&gt;
if (wall_spacers_yn==1) tub_spacer(8);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//walls spacers&lt;br /&gt;
//w1&lt;br /&gt;
translate([tub_wall,(tub_length+(tub_wall*2))/2,(cage_height/2)+basethickness])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,0,0])&lt;br /&gt;
{&lt;br /&gt;
if (wall_spacers_yn==1) tub_spacer(8);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//w2&lt;br /&gt;
translate([(tub_width+tub_wall),(tub_length+(tub_wall*2))/2,(cage_height/2)+basethickness])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,0,180])&lt;br /&gt;
{&lt;br /&gt;
if (wall_spacers_yn==1) tub_spacer(8);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//base spacers&lt;br /&gt;
//b1&lt;br /&gt;
translate([(tub_width+(tub_wall*2))/2,(tub_length+(tub_wall*2))*1/5,basethickness])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,270,90])&lt;br /&gt;
{&lt;br /&gt;
tub_spacer(tub_width-(spacing*2));&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//b2&lt;br /&gt;
translate([(tub_width+(tub_wall*2))/2,(tub_length+(tub_wall*2))*4/5,basethickness])&lt;br /&gt;
{&lt;br /&gt;
rotate([0,270,90])&lt;br /&gt;
{&lt;br /&gt;
tub_spacer(tub_width-(spacing*2));&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
////end spacers&lt;br /&gt;
}&lt;br /&gt;
////endall&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
//divider modules&lt;br /&gt;
module divider()&lt;br /&gt;
 {&lt;br /&gt;
  difference()&lt;br /&gt;
   {&lt;br /&gt;
    union()&lt;br /&gt;
     {&lt;br /&gt;
      cube(size=[spacing-1,spacing+cage_endwall+2,(spacing+cage_endwall+2)*2]);&lt;br /&gt;
      translate([0,0,(spacing+cage_endwall+2)*2])&lt;br /&gt;
       {&lt;br /&gt;
        rotate([0,45,0])&lt;br /&gt;
         {&lt;br /&gt;
          cube(size=[(sin(45)*(spacing-1)),spacing+cage_endwall+2,(sin(45)*(spacing-1))]);&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
    translate([0,spacing+cage_endwall+2,-(((spacing+cage_endwall+2)/sin(45))/sin(45))/2])&lt;br /&gt;
     {&lt;br /&gt;
      rotate([45,0,0])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size=[spacing-1,((spacing+cage_endwall+2)/sin(45)),((spacing+cage_endwall+2)/sin(45))]);       &lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
//end divider module&lt;br /&gt;
&lt;br /&gt;
//spacer module&lt;br /&gt;
module tub_spacer(length)&lt;br /&gt;
 {&lt;br /&gt;
translate([-(spacing-1),-length/2,0])&lt;br /&gt;
  {&lt;br /&gt;
  difference()&lt;br /&gt;
   {&lt;br /&gt;
    rotate([0,45,0])&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [((spacing-1)/sin(45)),length,((spacing-1)/sin(45))]);&lt;br /&gt;
     }&lt;br /&gt;
    translate([-(spacing-1)-0.1,0,-(spacing-1)])&lt;br /&gt;
     {&lt;br /&gt;
      #cube(size = [((spacing-1)/sin(45))/sin(45),length,((spacing-1)/sin(45))/sin(45)]);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
}&lt;br /&gt;
//end spacer&lt;br /&gt;
&lt;br /&gt;
//divot&lt;br /&gt;
module divot_sphere()&lt;br /&gt;
{&lt;br /&gt;
difference()&lt;br /&gt;
{&lt;br /&gt;
translate([(tub_divot_height/2)/sin(45)*sin(45),0,0])&lt;br /&gt;
{&lt;br /&gt;
sphere(r = (tub_divot_height/2)/sin(45));&lt;br /&gt;
}&lt;br /&gt;
translate([(tub_divot_height/2)/sin(45),0,0])&lt;br /&gt;
cube(size = [((tub_divot_height/2)/sin(45)*2),((tub_divot_height/2)/sin(45)*2),((tub_divot_height/2)/sin(45)*2)], center=true);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
//end divot&lt;br /&gt;
&lt;br /&gt;
////calculations&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;space above cages for extra fluid is&amp;quot;, height-basethickness-spacing-cage_height-tub_lid_depthinto);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;tub print area x&amp;quot;,((tub_width+tub_wall)*tubs_rows)+(tub_outsidewall*2)-tub_wall);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;tub print area y&amp;quot;,((tub_length+tub_wall)*tubs_columns)+(tub_outsidewall*2)-tub_wall);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;tub print area z&amp;quot;,height);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;cage cavity y&amp;quot;,((tub_width-(spacing*3))/2)-(cage_wall*2));&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;cage cavity x&amp;quot;,(tub_length-(spacing*2))-(cage_endwall*2));&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;cage cavity z&amp;quot;,cage_height-cage_base);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;powder volume per cage&amp;quot;,((((tub_width-(spacing*3))/2)-(cage_wall*2)))/10*(((tub_length-(spacing*2))-(cage_endwall*2)))/10*(cage_height-cage_base-cage_lid_depthinto)/10,&amp;quot;cm3&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;grams nickle hydroxide per cage&amp;quot;,(((((tub_width-(spacing*3))/2)-(cage_wall*2)))/10*(((tub_length-(spacing*2))-(cage_endwall*2)))/10*(cage_height-cage_base-cage_lid_depthinto)/10)*(4.10),&amp;quot;grams&amp;quot;);//density is 4.10&lt;br /&gt;
&lt;br /&gt;
echo(&amp;quot;total grams nickle hydroxide&amp;quot;,(((((tub_width-(spacing*3))/2)-(cage_wall*2)))/10*(((tub_length-(spacing*2))-(cage_endwall*2)))/10*(cage_height-cage_base-cage_lid_depthinto)/10)*(4.10)*(tubs_columns*tubs_rows),&amp;quot;grams&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==tub lid==&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&lt;br /&gt;
height = 90;&lt;br /&gt;
tub_width = 36;&lt;br /&gt;
tub_length = 70;&lt;br /&gt;
basethickness = 5;&lt;br /&gt;
tub_wall = 2;&lt;br /&gt;
tub_outsidewall = 4;&lt;br /&gt;
&lt;br /&gt;
tubs_rows    = 5;&lt;br /&gt;
tubs_columns = 2;&lt;br /&gt;
&lt;br /&gt;
spacing = 1.940055;&lt;br /&gt;
center_dividers = 00; //1 yes 0 no&lt;br /&gt;
cage_height = 60;&lt;br /&gt;
cage_wall = 5.5;&lt;br /&gt;
cage_endwall = 2;&lt;br /&gt;
cage_base = 5;&lt;br /&gt;
&lt;br /&gt;
mesh_opening = 1.5 ;&lt;br /&gt;
mesh_angle = 45;&lt;br /&gt;
mesh_spacing = 3.5;&lt;br /&gt;
&lt;br /&gt;
wire_count = 6; //number of wires into each cage&lt;br /&gt;
wire_diameter = 2;&lt;br /&gt;
wire_holeoffc = 0;&lt;br /&gt;
cage_lid_depthinto = 7;&lt;br /&gt;
cage_divot_height = 5.5;&lt;br /&gt;
tub_lid_depthinto = 7;&lt;br /&gt;
tub_divot_height = 5.5;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
union()&lt;br /&gt;
 {&lt;br /&gt;
  difference()&lt;br /&gt;
   {&lt;br /&gt;
    union()&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [tub_width,tub_length,tub_lid_depthinto], center=false);&lt;br /&gt;
      translate([-1,-1,tub_lid_depthinto])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size = [tub_width+2,tub_length+2,2], center=false);&lt;br /&gt;
       }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
     }&lt;br /&gt;
//end union begin difference&lt;br /&gt;
//main cavity&lt;br /&gt;
  translate([2,2,2])&lt;br /&gt;
   {&lt;br /&gt;
    cube(size = [tub_width-4,tub_length-4,tub_lid_depthinto+2], center=false);&lt;br /&gt;
   }&lt;br /&gt;
//end cavity&lt;br /&gt;
&lt;br /&gt;
//spheres lock ins&lt;br /&gt;
//1&lt;br /&gt;
      translate([0,tub_length*1/4,((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2)])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([1,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//2&lt;br /&gt;
      translate([0,tub_length*3/4,((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2)])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([1,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//3&lt;br /&gt;
      translate([tub_width,tub_length*1/4,((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2)])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//4&lt;br /&gt;
      translate([tub_width,tub_length*3/4,((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2)])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          divot_sphere();&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//5&lt;br /&gt;
      translate([tub_width*1/2,0,((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2)])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,1,0])&lt;br /&gt;
         {&lt;br /&gt;
          rotate([0,0,90])&lt;br /&gt;
           {&lt;br /&gt;
            #divot_sphere();&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//6&lt;br /&gt;
      translate([tub_width*1/2,tub_length,((tub_lid_depthinto-tub_divot_height)/2)+(tub_divot_height/2)])&lt;br /&gt;
       {&lt;br /&gt;
        mirror([0,0,0])&lt;br /&gt;
         {&lt;br /&gt;
          rotate([0,0,90])&lt;br /&gt;
           {&lt;br /&gt;
            #divot_sphere();&lt;br /&gt;
           }&lt;br /&gt;
         }&lt;br /&gt;
       }&lt;br /&gt;
//end spheres&lt;br /&gt;
&lt;br /&gt;
//chamfer underside of lip&lt;br /&gt;
  translate([-2,-1,tub_lid_depthinto-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,0])&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [tub_width+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  translate([-2,tub_length+1,tub_lid_depthinto-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,0])&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [tub_width+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  translate([-1,-2,tub_lid_depthinto-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,90])&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [tub_length+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
  translate([tub_width+1,-2,tub_lid_depthinto-1])&lt;br /&gt;
   {&lt;br /&gt;
    rotate([45,0,90])&lt;br /&gt;
     {&lt;br /&gt;
      cube(size = [tub_length+4,sqrt(2),sqrt(2)], center=false);&lt;br /&gt;
     }&lt;br /&gt;
   }&lt;br /&gt;
//end chamfer&lt;br /&gt;
&lt;br /&gt;
//begin wire holes&lt;br /&gt;
  translate([(tub_width/2)-(spacing/2)-cage_wall-(((tub_width-(spacing*3))/2)-(cage_wall*2)),(tub_length/2)-wire_holeoffc,-1])&lt;br /&gt;
   {&lt;br /&gt;
    cylinder(r = wire_diameter/2*wire_count*1.05, h = 4);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
  translate([(tub_width/2)+(spacing/2)+cage_wall+(((tub_width-(spacing*3))/2)-(cage_wall*2)),(tub_length/2)-wire_holeoffc,-1])&lt;br /&gt;
   {&lt;br /&gt;
    cylinder(r = wire_diameter/2*wire_count*1.05, h = 4);&lt;br /&gt;
   }&lt;br /&gt;
&lt;br /&gt;
//end wire hole&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//end difference&lt;br /&gt;
 }&lt;br /&gt;
//begin union&lt;br /&gt;
&lt;br /&gt;
//begin terminal&lt;br /&gt;
    translate([tub_width/2,tub_length-30,2])&lt;br /&gt;
     {&lt;br /&gt;
      rotate([0,0,90])&lt;br /&gt;
       {&lt;br /&gt;
        terminal(3);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
//end terminal&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
//divot&lt;br /&gt;
module divot_sphere()&lt;br /&gt;
{&lt;br /&gt;
difference()&lt;br /&gt;
{&lt;br /&gt;
translate([(tub_divot_height/2)/sin(45)*sin(45),0,0])&lt;br /&gt;
{&lt;br /&gt;
sphere(r = (tub_divot_height/2)/sin(45));&lt;br /&gt;
}&lt;br /&gt;
translate([(tub_divot_height/2)/sin(45),0,0])&lt;br /&gt;
cube(size = [((tub_divot_height/2)/sin(45)*2),((tub_divot_height/2)/sin(45)*2),((tub_divot_height/2)/sin(45)*2)], center=true);&lt;br /&gt;
}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
///////////change to terminal block cleat module&lt;br /&gt;
module terminal(holed)&lt;br /&gt;
 {&lt;br /&gt;
  translate([0,-1.5,0])&lt;br /&gt;
   {&lt;br /&gt;
  difference()&lt;br /&gt;
   {&lt;br /&gt;
    union()&lt;br /&gt;
     {&lt;br /&gt;
//1&lt;br /&gt;
      translate([0,-10-holed,0])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size=[20,3,6+holed], center=false);&lt;br /&gt;
       }&lt;br /&gt;
//2&lt;br /&gt;
      translate([0,0,0])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size=[20,3,6+holed], center=false);&lt;br /&gt;
       }&lt;br /&gt;
//3&lt;br /&gt;
      translate([0,10+holed,0])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size=[20,3,6+holed], center=false);&lt;br /&gt;
       }&lt;br /&gt;
//cross&lt;br /&gt;
      translate([9,-10-holed,0])&lt;br /&gt;
       {&lt;br /&gt;
        cube(size=[3,23+(holed*2),5+holed], center=false);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
//begin difference&lt;br /&gt;
//holes&lt;br /&gt;
//1&lt;br /&gt;
    translate([8,-3.5-(holed/2),3+(holed/2)])&lt;br /&gt;
     {&lt;br /&gt;
      rotate([0,90,0])&lt;br /&gt;
       {&lt;br /&gt;
        cylinder(r=holed/2, h =5);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
//2&lt;br /&gt;
    translate([8,6.5+(holed/2),3+(holed/2)])&lt;br /&gt;
     {&lt;br /&gt;
      rotate([0,90,0])&lt;br /&gt;
       {&lt;br /&gt;
        cylinder(r=holed/2, h =5);&lt;br /&gt;
       }&lt;br /&gt;
     }&lt;br /&gt;
//end holes&lt;br /&gt;
   }&lt;br /&gt;
   }&lt;br /&gt;
 }&lt;br /&gt;
////&lt;br /&gt;
 &lt;br /&gt;
 &amp;lt;/nowiki&amp;gt;&lt;/div&gt;</summary>
		<author><name>Dorkmo</name></author>
	</entry>
</feed>