Open bioreactor : Différence entre versions

De Nicelab
Aller à : navigation, rechercher
(Mechanical parts)
(Mechanical parts)
Ligne 38 : Ligne 38 :
 
* a 1 or 2 liter jar
 
* a 1 or 2 liter jar
 
* a windscreen washer's pump (optional)
 
* a windscreen washer's pump (optional)
 +
 
<br><br>
 
<br><br>
  

Version du 11 juin 2013 à 13:58

Open Bioreactor

A polyvalent bioreactor

"A bioreactor [...] refer to a device or system meant to grow cells or tissues in the context of cell culture. These devices are being developed for use in tissue engineering or biochemical engineering." wikipedia
the proposed design is a plug&play unique diver's, low cost and will insure those functions:

  • Soft brewing of cells, sucked up by air reflux, no helix requiered.
  • Oxygenation and CO2 control via Arduino
  • Photosynthesis
  • Controlled heating


Openbioreacteur.jpg
His all in one design allows raw material economy, contaminant resistant by the lack of mobile jointure and adaptable to many jar. I/O signals are treated by an Arduino.

Initial volume 'll be 1 or 2 liters. More would be costly, and in accordance to many literature it's the standard lab's volume. By the way, by renewing the nutritive solution, a production mode is possible. An outside PHmeter could check the acidity of the solution by taking sample via a peristaltic pump.

It would be easy to build. All parts are easy to find and cheap. A printable version exists. For the emerging countries thoughts on models based on recycled raw materials must be done.
OpenBioreactor v2.png

Mechanical parts

For the first prototype the following elements should be necessary:

  • 2 plastic pipes ∅22 et ∅35
  • Crystal tube, about 2 meters
  • a fish tank pump
  • a no return valve
  • HEPA filters from a vaccum
  • a tupperware box
  • an arduino
  • heat resistant epoxy glue
  • a thermoresistor CTN type
  • a computer's power suplly
  • T5 neon
  • a 7w lightbulb starter
  • heating wire or halogen lamp
  • 4 mosfets and 4 schotty diodes
  • a 1 or 2 liter jar
  • a windscreen washer's pump (optional)



Openscad

difference() {	
	cylinder(h=200,r=11,center=true);
	cylinder (h=240,r=10,center=true);		}

difference() {
	union(){cube([2,21,160],center=true);
		rotate(120,0) cube([2,21,160],center=true);
		rotate(60,0) cube([2,21,160],center=true);}
	cylinder(h = 200, r = 8.1, center = true);
}

difference(){
 	difference() {
		translate([0,0,40]) cylinder(h= 100,r= 15);
 		translate([0,0,38]) cylinder(h= 110,r= 14);}
	translate([0,-5,60]) rotate([90,90,0]) cylinder(h=15,r =1.5);
}

translate([-3,10,40]) cube([6,4,40]);

difference() {
	translate([-3,-14,40]) cube([6,4,40]);
	translate([0,-5,60]) rotate([90,90,0]) cylinder(h=15,r =1);
}

difference() {
	translate ([0,0,90]) cylinder(h=27,r=11.1);
	translate ([0,0,89.9]) cylinder(h=27.2,r=7.5);}

difference() {
translate([0,0,-88]) cylinder(h=5,r=16,center=true);
translate ([0,0,-80]) cylinder (h=30,r=10,center=true);		}

difference() {
translate ([0,0,-100]) metric_thread(26, 2, 12);
translate ([0,0,-95]) cylinder (h=20,r=10,center=true);		}

pi = 3.14159265;

function segments(diameter) = min(50, ceil(diameter*6));

module metric_thread(diameter=8, pitch=1, length=1, internal=false, n_starts=1)
{
 
   n_turns = floor(length/pitch);
   n_segments = segments(diameter);
   h = pitch * cos(30);

   union() {
      intersection() {
         for (i=[-1*n_starts : n_turns-1]) {
            translate([0, 0, i*pitch]) {
               metric_thread_turn(diameter, pitch, internal, n_starts);
            }
         }

         translate([0, 0, length/2]) {
            cube([diameter*1.1, diameter*1.1, length], center=true);
         }
      }

      if (internal) {
         cylinder(r=diameter/2 - h*5/8, h=length, $fn=n_segments);
      } else {

         cylinder(r=diameter/2 - h*5.3/8, h=length, $fn=n_segments);
      }
   }
}

module english_thread(diameter=0.25, threads_per_inch=20, length=1,
                      internal=false, n_starts=1)
{
   mm_diameter = diameter*25.4;
   mm_pitch = (1.0/threads_per_inch)*25.4;
   mm_length = length*25.4;

   echo(str("mm_diameter: ", mm_diameter));
   echo(str("mm_pitch: ", mm_pitch));
   echo(str("mm_length: ", mm_length));
   metric_thread(mm_diameter, mm_pitch, mm_length, internal, n_starts);
}

module metric_thread_turn(diameter, pitch, internal, n_starts)
{
   n_segments = segments(diameter);
   fraction_circle = 1.0/n_segments;
   for (i=[0 : n_segments-1]) {
      rotate([0, 0, i*360*fraction_circle]) {
         translate([0, 0, i*n_starts*pitch*fraction_circle]) {
            thread_polyhedron(diameter/2, pitch, internal, n_starts);
         }
      }
   }
}

function z_fct(current_radius, radius, pitch)
   = 0.5*(current_radius - (radius - 0.875*pitch*cos(30)))
                                                       /cos(30);

module thread_polyhedron(radius, pitch, internal, n_starts)
{
   n_segments = segments(radius*2);
   fraction_circle = 1.0/n_segments;

   h = pitch * cos(30);
   outer_r = radius + (internal ? h/20 : 0); 

   inner_r = radius - 0.875*h; 

   x_incr_outer = outer_r * fraction_circle * 2 * pi * 1.005;
   x_incr_inner = inner_r * fraction_circle * 2 * pi * 1.005;
   z_incr = n_starts * pitch * fraction_circle * 1.005;
   x1_outer = outer_r * fraction_circle * 2 * pi;
   z0_outer = z_fct(outer_r, radius, pitch);  
   z1_outer = z0_outer + z_incr;
   polyhedron(
      points = [
                [-x_incr_inner/2, -inner_r, 0],                                    
                [x_incr_inner/2, -inner_r, z_incr],                    
                [x_incr_inner/2, -inner_r, pitch + z_incr],           
                [-x_incr_inner/2, -inner_r, pitch],                               
                [-x_incr_outer/2, -outer_r, z0_outer],                             
                [x_incr_outer/2, -outer_r, z0_outer + z_incr],         
                [x_incr_outer/2, -outer_r, pitch - z0_outer + z_incr], 
                [-x_incr_outer/2, -outer_r, pitch - z0_outer]                     
               ],

      triangles = [
                [0, 3, 4],  
                [3, 7, 4], 
                [1, 5, 2],  
                [2, 5, 6],  
                [0, 1, 2],  
                [0, 2, 3],  
                [4, 6, 5],  
                [4, 7, 6],  
                [7, 2, 6], 
                [7, 3, 2], 
                [0, 5, 1],  
                [0, 4, 5]   
               ]
   );
}


prototype

Prototype open bioreacteur.jpg

Electronic

Coming soon

Links

The biohackerspace "La paillasse" is working on a similar project, I invite you to see: http://www.lapaillasse.org/news/475/nom-de-code-bioreacteur/