logo

Open Source Bioreactor

Bioreactors are vessels that have been designed and produced to provide an effective environment for enzymes or whole cells to transform biochemicals into products. In some cases, inactivation of cells or sterilization is carried out in the bioreactor such as in water treatment. Many different bioreactors and bioreactor applications are described, including those for cell growth, enzyme production, biocatalysts, food production, milk processing, extrusion, tissue engineering, algae production, protein synthesis, and anaerobic digestion. Methods to classify bioreactors are presented, including operational conditions and the nature of the process. The emphasis is on reactors that are produced commercially rather than on reactors that have evolved in the natural world. Bioreactors used for DNA and protein synthesis (biomolecular synthesizers) are included. Commodity products include all substances that are produced in bioreactors and marketed; however, the emphasis is on general principles and more widely used bioreactor types and products.

Bioreactors transform raw materials into biochemical products and/or less undesirable by-products. The microbial cell itself is a miniature bioreactor; other examples include shake flasks, Petri dishes, and industrial fermenters. Diagnostic products based on enzymatic reactions, farm silos for silage fermentations, bread pans with fermenting yeast, and the soil in a Kansas wheat field may also be viewed as bioreactors. While the bioreactor may be simple or highly instrumented, the important consideration is the ability to produce the desired product or result. The bioreactor is designed and operated to provide the environment for product formation selected by the scientist, baker, or winemaker. It is the heart of many biotechnological systems that are used for agricultural, environmental, industrial, and medical applications.

Industrial bioreactors may be operated as batch reactors or continuously, aerobically or anaerobically, and with pure or mixed cultures. In many bioreactors, three phases (gas, liquid, and solid) are present and mass transfer is an important consideration. Biofilms and immobilized cells can be used to retain microbial biomass in a flow bioreactor. Sensors, instrumentation, and control systems are essential for industrial bioreactors.

Fermentation systems are used to provide an optimal growth environment for many different types of cell cultures. The ability afforded by fermenters to carefully control temperature, pH, and dissolved oxygen concentrations in particular makes them essential to efficient large-scale growth and expression of fermentation products.

Basic fermentation technology is an extension of the simple shake flask technique for growing cultures. It grew out of the desire to control growth environments for live cultures in a more complete and quantitative way. Batch culture shake flasks are usually limited by imprecise control of temperature. Temperature uniformity in an incubated shaker or warm room is highly variable, sometimes straying 5 °C or more from the intended setpoint. Since the shake flask is normally agitated at a fixed speed, oxygen uptake and gas exchange are limited. Once the available ambient oxygen is depleted, most cultures fail to thrive. There is no pH control in shake flasks. In many cases, if the culture is not limited by feed stock, it becomes acidic to the point of detriment to the culture and respiration slows dramatically. Most shake flask cultures are also run as a 'batch', which means that they are fed only once at or near the beginning of the culture’s inoculation.  
After this initial carbon source is consumed, the culture stops growing. In some cases, its metabolism may shift and begin to consume other metabolites in the culture broth, sometimes changing the characteristics of the resultant biomass or protein. Shake flasks are also usually subject to media evaporative loss in warmer culture environments, typically 10% of volume per 24 hr at 37 °C. This loss changes the density of the culture and prohibits longer term operation of the system. Finally, the user may encounter foaming from the media after agitation. The occurrence of foam in the headspace above the culture will limit gas exchange and further stifle growth.
The basic fermentation system is designed to address all of these limitations. Careful temperature control is achieved in fermentation vessels by the use of impeller agitation and a heating jacket. A sensor inserted into the vessel and feedback control of heating and cooling of this jacket usually results in temperature control ±0.1 °C around the setpoint. Tabletop fermenters generally provide control of pH via liquid reagent addition through a pump. The pH value is continuously monitored in an effort to keep the environment optimal for cell growth.

  Periodic addition of antifoam surfactant is actuated by a conductivity probe in the culture, reducing foam on the surface and allowing gas exchange. The vessel, with all probes, fittings, impellers, harvest pipes, and tubes, is assembled and sterilized in a standard autoclave. After final probe calibrations and stabilization to operating environment, the culture is added to the vessel. The system can then be used to characterize the culture in a way that is more quantitative and precise than with a shake flask method. Tight control of temperature, pH, oxygen content, feed consumption, liquid evaporation, and foam levels all contribute to a much higher biomass and better protein yield.

Components

Things used in this project

Hardware components
Arduino UNO x 1
Le Parfait 2L Preserving Jar x 1
SparkFun Stepper Motor with Cable x 1
Flow-through Photometer x 2
pH probe for Arduino with a driver x 1
Peristaltic pump x 3
3D Printed Mounts x 1
3L Preserving Jar x 1
Adaptars 12V DC x 3
Air Pump x 1
Beakers x 2
Cartridge heater x 1
Circuit Boards / BreadBoards x 1
DC 12V 4 Channel Relay Module x 1
3DHT11 Tempearature Sensor x 1
ESP 8266 x 1
Familie Wiss LID x 1
Jumper Wires
LCD 16x2 With I2C x 1
PH Sensor With Probes x 1
Switch x 1

CODE

        
            #include < LiquidCrystal.h >
            #define BLYNK_PRINT Serial
            #include < ESP8266WiFi >
            #include < BlynkSimpleEsp8266.h >
            #include < Wire.h >
            #include < DallasTemperature.h >
            #include < WiFiClient.h >
            #include < ESP8266WebServer.h >
            #include < ArduinoJson.h >
            #include < SPI.h >
            #include < DHT.h >
            
            char auth[] = " _lYjpYS7MHcTD7U7OdrrufWS7jreA5iV";
            char ssid[] ="Redmi Note 7 Pro";
            char pass[] = "sashi123";
            
            #define DHTPIN 2
            #define DHTTYPE DHT11
            
            DHT dht(DHTPIN, DHTTYPE);
            SimpleTimer timer;
            ESP8266WebServer server(80);
            calibration_value = 6.50;
            float data1;
            OneWire oneWire(2);
            DallasTemperature temp_sensor(&oneWire);
            float phval = 0;
            float R=7;
            unsigned long int avgval;
            int buffer_arr[10], temp;
            WidgetLED led1(V0);
            WidgetLED led2(V1);
            WidgetLCD lcd(V2);
            
            void sendSensor()
            {
                float h = dht.readHumidity();
                float t = dht.readTemperature(); // or dht.readTemperature(true) for Fahrenheit
                if (isnan(h) || isnan(t))
                 {
                    Serial.println("Failed to read from DHT sensor!");
                    return;
                 }
            
            // You can send any value at any time.
            // Please don't send more that 10 values per second.
            
            Blynk.virtualWrite(V5, h); //V5 is for Humidity
            Blynk.virtualWrite(V6, t); //V6 is for Temperature
            
                if(t<30){
                     digitalWrite(D1,HIGH);//heater
                    }
                else if(t>40){
                    digitalWrite(D1,LOW);
                    }
                }
            
            void setup()
            {
                Serial.begin(115200);
                Blynk.begin(auth, ssid, pass);
                lcd.clear();
                lcd.print(4, 0, "WELCOME");
                delay(2000);
                lcd.clear();
                lcd.print(3, 0, "WATER");
                lcd.print(2, 1, "MONITORING");
                delay(2000);
                lcd.clear();
                lcd.print(0, 0, "CONNECTED TO");
                lcd.print(0, 1, ssid);
                delay(2000);
                lcd.clear();
                dht.begin();
                timer.setInterval(1000L, sendSensor);
            }
            
            StaticJsonBuffer<1000> jsonBuffer;
            JsonObject& root = jsonBuffer.createObject();
            
            void loop()
            {
                digitalWrite(D2,HIGH);
                delay(1000);
                Blynk.run();
                
                for (int i = 0; i < 10; i++)
                {
                    buffer_arr[i] = analogRead(A0);
                    delay(30);
                }
                
                for (int i = 0; i < 9; i++)
                {
                    for (int j = i + 1; j < 10; j++)
                    {
                        if (buffer_arr[i] > buffer_arr[j])
                        {
                            temp = buffer_arr[i];
                            buffer_arr[i] = buffer_arr[j];
                            buffer_arr[j] = temp;
                        }
                    }
                }
                avgval = 0;
               
                for (int i = 2; i < 8; i++)
                    avgval += buffer_arr[i];
                    float volt = (float)avgval * 5.0 / 1024 / 6;
                    float ph_act = 5.0 * volt + calibration_value;
                    Serial.println("");
                    data1 = ph_act;
                    server.handleClient();
                    String h= String(data1);
                    if(ph_act <= R )
                    {
                        Serial.println("safe");
                        led1.on();
                        led2.off();
                        lcd.print(0,0,"SAFE");
                        lcd.print(0,1,"PH VALUE:" +h);
                        digitalWrite(D0,LOW);
                        digitalWrite(D3,LOW);
                    }
                    else
                    {
                        Serial.println("danger");
                        led1.off();
                        led2.on();
                        lcd.print(0,0,"XX DANGER XX");
                        lcd.print(0,1,"PH VALUE:" +h);
                        digitalWrite(D0,HIGH);
                        digitalWrite(D3,HIGH);
                    }
                Serial.println(data1);
                Blynk.virtualWrite(V3,ph_act);
                Blynk.run(); // Initiates Blynk
                timer.run(); // Initiates SimpleTimer
            }