Open bioreactor
Sommaire
Open Bioreactor
June 2013""
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
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.
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
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/
June 2013