FluidSwitch/FluidSwitch_Radial.scad

Wed, 12 Sep 2018 13:46:21 +0200

author
mdd
date
Wed, 12 Sep 2018 13:46:21 +0200
changeset 2
b677773a8097
parent 1
a159ad715fe0
permissions
-rw-r--r--

added syringe mount hole

// fluid 1-to-N-way rotation Valve
// 1 Inlet, N Outlets

// Variables:
oring_outer = 8.0;
oring_inner = 4.0;

tube_dia = 3;
hole_inner = 2;

axis_dia = 5;

// for color mixer we need 3 base colors + black + white +  additional 1 waste and 1 clean water and one output = 8 connectors
// cycle will be:
// 1) select color 1-5, load syringe, select output, unload syringe, repeat for each other color
// 2) select water, load syringe, select waste, unload syringe
outlets = 8;

// just fiddle around with the following variables:
outlet_circle_dia = 22;
base_dia = 30;

// roundness faces
fn = 10;

// calculations:
oring_dia = (oring_outer - oring_inner) / 2;
outlet_angle = 360/outlets;
base_height = 6;
base_outer_dia = base_dia + 6;
outer_thread_height = 10;
outer_height = 15;
thread_pitch = 2;
inlay_height = outlet_circle_dia / 4 + hole_inner;

// adjust this to make the center hole look nice according to whicj oring you use
base_bottom_thickness = 9 - base_height - 0.001;


// START PROGRAM
use <../libs/Threading/Threading.scad>

valve_lower();

/*
translate([0,0,base_height]) 
 valve_inlay();

rotate([180,0,0]) translate([0,0,-outer_height - 2]) 
  valve_cap();
*/

// MODULES

module valve_inlay() union() {
  difference() {  
    translate([0,0,0.0001])
    cylinder(d=base_dia, h = inlay_height);

    // cut out the connector tube
    rotate([90,0,0])
    translate([outlet_circle_dia/4,0,0])
    rotate_extrude(convexity=10)
       translate([outlet_circle_dia/4, 0]) circle(d=hole_inner, $fn=fn);
      
  //  cylinder(d=oring_inner, h=inlay_height / 2, $fn=fn);
  //  translate([outlet_circle_dia/2,0])
  //    cylinder(d=oring_inner, h=inlay_height / 2, $fn=fn);
  }

  // hex drive rod
  translate([0,0,inlay_height])
  cylinder(d=axis_dia, h=20, $fn=6);
}

module valve_cap() {
  cap_sides = 50;
  difference() {
    union() {
      translate([0,0,2])
       Threading(D = base_outer_dia + 6, pitch = thread_pitch, d=base_outer_dia, windings = (outer_thread_height/thread_pitch), angle = 55, full = true, step = 50, $fn=cap_sides); 
    
      cylinder(d=base_outer_dia + 6, h=2, $fn=cap_sides);
    }
    
    translate([0,0,-0.001])
    cylinder(d=axis_dia + 2, h=2 + 0.002, $fn=fn);
  }
}

module valve_lower() 
difference() {
  union() {
    valve_base();
    valve_casing();
     // bottom
    translate([0,0,-base_bottom_thickness]) cylinder(d=base_outer_dia, h=base_bottom_thickness);
  }
  
  // cut out the OUTLET ring on the side
  for(i = [1:outlets]) {
    a = outlet_angle * i;
    rotate([90,0,a]) {
      translate([outlet_circle_dia/2 - hole_inner/2,tube_dia/2,0])
      rotate([0,90,0])
        cylinder(d=tube_dia, h=base_outer_dia, $fn=fn);
      }
  }
  
  // cut out the syringe hole (needs to be conical to fit)
  translate([0,0,-base_bottom_thickness - 0.001])
    cylinder(d1 = 4.5, d2 = 4, h = 9, $fn=fn);
  
  // in my case the oring inner diameter corresponds to the syringe tip diameter (4 mm) - so I remove the inner unprintable walls of the center oring grove
  
  translate([0,0,base_height - oring_dia / 2])
    cylinder(d=oring_inner + oring_dia, h = 2);
  
}


module valve_casing() {
  difference() {
    union() {
      translate([0,0,0.001])
      cylinder(d=base_outer_dia, h=outer_height - outer_thread_height);
      
      translate([0,0,outer_height - outer_thread_height]) 
        threading(pitch = thread_pitch, d=base_outer_dia, windings = (outer_thread_height/thread_pitch)-1, angle = 55, full = true, $fn=fn); 
    }
    
    cylinder(d=base_dia, h = outer_height + 0.001);
  }
}

module valve_base() difference() {
  cylinder(d=base_dia, h=base_height);

  // inlet hole
  cylinder(d=hole_inner, h=base_height +0.001, $fn=fn);
  translate([0,0,base_height])
    oring();

  // cut Outlet holes and oring carves
  for(i = [1:outlets]) {
    a = outlet_angle * i;
    rotate([0,0,a]) {
      translate([outlet_circle_dia/2,0,base_height])
        oring();
      translate([outlet_circle_dia/2,0])
        cylinder(d=hole_inner, h=base_height + 0.001, $fn=fn);
      }
  }

}

module oring() {
  rotate_extrude(convexity=10, $fn=fn)
    translate([oring_inner/2 + oring_dia / 2 , 0, 0])
      circle(d=oring_dia, $fn=fn);
}

mercurial