Our project is part of the growing global movement of Biofabrication which intersects Design, Architecture and Biology, and aims to build open-source and low-cost equipment for the development of biomaterials. In this case the project will complement an ongoing research project focused on the cultivation of wood decomposing fungi mycelia to explore its possibilities as a textile material, something similar to a mushroom leather. For this it is necessary to have a programmable incubator to test, program and standardize growing recipes and controlled environmental parameters (e.g. humidity and temperature becomes the key factors for the growth of these organisms). The incubator will make possible the generation of protocols (or recipes) for growing open source materials, allowing its replication and the evolution of new biotextiles that can be replicable at low cost.
What will you find here?
This project is still on development and in this page you will find the instructions to:
- Build an incubator prototype enclosure
- Build the cooling/heating system by using Termoelectric Peltier modules
- Build the humidifier by using an ultrasonic piezoelectric.
- Control a range between 20°C to 30°C so we can reach de 25°C ideal temperature in summer and winter season. (Arduino code)
- Take the data and send it via wifi to a friendly graphical viewing platform to store and review the experiments. (Code)
Process and experiments
The development of the project focused in a first stage on testing the cooling system, this being the most difficult to cultivate mycelium (summer months). For the peltier plates there are no major problems in generating heat and a relay was chosen as the alternative for switching them on and off. In the case of cooling, multiple experiments were made to see how many degrees we managed to low down T°. We started with 12 litre models (expanded polystyrene box) to see how to optimise the peltier sandwich+dissipators+fans. Then we jumped to 30 litre models and in this one we tested 1 and 2 peltier sandwiches. The best results obtained were to keep a delta of 5.0 - 5.2°C under ambient temperature, thanks to the use of air coolers on the hot sides of the peltier (outer side of the incub) which is good but still the system needs slack in its capacity.
In parallel we have been developing the data visualization platform which has been tested with the controller NodeMCU ESP8266 and the sensor HDC1080, we have also done other tests to take data with the same sensor but with Arduino UNO, sending a signal to a Raspberry pi that stores data T° and H° and upload them to another platform.
As for the design of prototype #1 the following requirements were defined:
Volume to be conditioned: 40.5 Lts / T° Ideal interior: 25°C/ Indoor humidity: 65-80% / Outdoor temperature in case most unfavorable: >30°C.
Simulation www.tinkercad.com
In this simulation we represent the operation of the incubator, where the user can set the desired temperature and humidity. If the desired temperature is higher than that of the incubator (sensor), it will send a signal to the transmitter so that the negative function is executed, generating heat. Otherwise, with the reverse current, removing heat.
The humidifier will remain off, otherwise it will be treated.
In the simulation it was generated randomly for the incubator data, and the available sensor was not available.
// include the library code:
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//simulate data in incubator
int temp = random(20, 30);
int hum = random(50, 80);
//potentiometer, set Temperature
int inputPotTemp = 0; // value read from the pot
int outputPotValueT = 0; // value output to the PWM (analog out)
int inputPotHum = 0; // value read from the pot
int outputPotValueH = 0; // value output to the PWM (analog out)
void setup() {
// set up the LCD's number of columns and rows:
lcd.begin(16, 2);
// Print a message to the LCD.
pinMode(10,OUTPUT);
pinMode(13,OUTPUT);
}
void loop() {
inputPotTemp = analogRead(A3);
outputPotValueT = map(inputPotTemp, 1000, 0, 20, 40);
inputPotHum = analogRead(A2);
outputPotValueH = map(inputPotHum, 1000, 0, 50, 100);
// set the cursor to column 0, line 1
// (note: line 1 is the second row, since counting begins with 0):
lcd.setCursor(0, 1);
// print the number of seconds since reset:
lcd.clear();
lcd.print("TUs:"+ String(outputPotValueT) + " ");
lcd.print("TInc:"+ String(temp));
lcd.setCursor(0, 1);
lcd.print("HUs:" + String(outputPotValueH) + " ");
lcd.print("HInc:" + String(hum));
//if the hum that the user sets is lower that the incubator humedad
if(outputPotValueH <= hum){ //If h2 <= h1 - 5
if(hum <= outputPotValueH - 5){
//humidificador on
hum++;
}else{
//humidificador off
hum--;
}
if(outputPotValueH == hum){
hum = hum - 5;
}
}
//if the hum that the user sets is higher that the incubator humedad
if(outputPotValueH >= hum){//If h2 <= h1 + 5
if(hum <= outputPotValueH + 5){
//humidificador on
hum++;
}else{
//humidificador off
hum--;
}
if(outputPotValueH == hum){
hum = hum + 5;
}
}
//if the temp that the user sets is lower that the incubator t
if(outputPotValueT <= temp){
//turn heating peltier
digitalWrite(13,HIGH);
delay(1000); // waits for a second
//simulates going down
if(outputPotValueT == temp)
{
delay(3000);
temp = temp -5;
}
temp --;
}
//if the temp that the user sets is higher that the incubator t
if(outputPotValueT > temp){
//turn cooling
digitalWrite(13, LOW); // sets the digital pin 13 off
delay(1000);
//simulates going up
if(outputPotValueT == temp)
{
delay(3000);
temp = temp + 5;
}
temp ++;
}
digitalWrite(10,HIGH);
delay(1000); // waits for a second
digitalWrite(10, LOW); // sets the digital pin 13 off
delay(1000);
}
Comments