BioLab Kitchen

Table of content

List of needs

Make your own Incubator: learning by doing

Make your own Incubator v0.1

Make your own Incubator v0.2

The Fab City model and The Fab City Hub Barcelona

From February 2020, I'm part-time hosted by the Fab City Hub in Poblenou (Barcelona) to develop projects.

Carrer de Pujades 127, 08005 Barcelona
Carrer de Pujades 127, 08005 Barcelona

The Fab City Hub is part of a bigger vision – the Fab City model. The Fab City model has challenged Barcelona, amongst other cities in the world, to become active participants in producing everything consumed by 2054. The Barcelona's Hub is working to understand, learn and experiment with projects aiming for urban self-sufficiency within food, energy and materials. The Hub is using the productive potential of Poblenou district, to become locally produced and globally connected.

The Fab City model - Fablab BCN
The Fab City model - Fablab BCN

To contribute to this movement, I am working to build The BioLab Kitchen. The aim of the project is to create a “BioHack Set Up” that anybody can easily build and use at home in order to give the possibility to everybody to reimagine all aspects of food, waste and living systems for an emerging bio-circular economy and for a bio-based future. It is about going from an extractive economy to a regenerative economy and it is questioning the way of producing and the mass production model in which we are. It is also about observing and understanding natural systems for more synergies.

The biohacking as a driver for urban resilience

As the hacking is a growing movement from the beginning of the domestic computers, it has already shown the potential to empower mass and individuals to create smart devices for themselves with, among others, the free and open-source movement, the maker culture, the open-source hardware, the FabLab movement and the DIY movement.

On the other side, the biological researches are still very conventional because the professional tools are expensive and only big private structures or institutions can afford it and they are then looking for specific results, influenced by lobbying or even corrupted.

But if we change the model, new results can appear. I believe in the hacking movement as a way to give to people the opportunity to create and explore (almost) everything and to give the possibility to anyone to learn by doing and to erase the borders between disciplines. On that way, cross-disciplinary collaboration and creativity supported by scientific research will expand, powered by global imperatives such as the urgency to develop and implement cleaner technologies. According to me, this convergence of fields, as well as the expert with the amateur, is necessary to support the ongoing effort to go against the negative impacts of the legacies of the Industrial Revolution. It will lead until the reconception of growth, sustainability and the primary design principles which is value generation. I think that the challenge of changing the story is immense, and it begin with education and awareness.

I am then developing the BioLab Kitchen as a strategy for challenges and opportunities related to future resilience, transparency and equity.

With the BioLab Kitchen we will define and document what is needed to start a biohack set-up from the BioSafety rules to the list of needs and costs, suppliers and recipes to learn by doing.

As we want to contribute in the change, we are working to keep all that informations accessible and open source as working within a community shows better and faster results and seems to be a key to resolve emergency problems.

Created 01/02/2020

Updated 01/02/2020

List of needs

Kay Aull when she was a PhD student at the University of California. For a ridiculously low price, Aull set up a laboratory in her closet in her apartment in Boston.
Kay Aull when she was a PhD student at the University of California. For a ridiculously low price, Aull set up a laboratory in her closet in her apartment in Boston.

BioSafety Level 1

  • work with well-characterized agents which do not cause disease in healthy humans
  • wash hands upon entering and exiting the lab
  • Research with these agents may be performed on standard open laboratory benches without the use of special containment equipment
  • eating and drinking are prohibited in laboratory areas
  • Potentially infectious material must be decontaminated before disposal, either by adding a chemical such as bleach or isopropanol or by packaging for decontamination elsewhere (autoclave)
  • Personal protective equipment is only required for circumstances where personnel might be exposed to hazardous material
  • BSL-1 laboratories must have a door which can be locked to limit access to the lab. However, it is not necessary for BSL-1 labs to be isolated from the general building

To know more about it :

Additional Lab Safety Rules

  • hair pulled back
  • wear closed shoes
  • wear lab coat
  • (wear googles)
  • (wear gloves)
  • labeling everything (name, date, content)
  • seal everything with parafilm
  • store them in the appropriate emplacement
  • clean everything after use

Suppliers (in Barcelona)

  • Pidiscat (Poblenou)
  • Quimics Dalmau (Eixample)
  • find a second hand stock
  • you can also find most of the things on an online shop to make your own cosmetic like Gran Velada in Catalunya or Mi Cosmetica Casera (South-West Spain) which is sometimes more affordable than professional shops.

First basics we need

MATERIALS WORKSPACE STERILISE GROW STORE
pans easy-to-clean work bench autoclave (DIY with a pressure cooker and hot plate) incubator (DIY or reptilium) sealed boxes
glass bottle gaz burner autoclave bags and tape fridge (could be a sealed box into the main fridge)
petri dishes ethanol 70% and wash bottle freezer (same)
flasks paper towel
beakers microwave
funnel oven
lab scale deshydrator
thermometer disinfectant gel
latex potholder lab coat
spoons safety rules displayed
small kitchen access to the water
scissors a DIY laminar flow or a clean transparent box
tweezers
pipettes
inoculation loop spreader
etc

Usefull links

BioHacking:

Bio-materials and bio-techniques:

Biodesigners and bio-artists:

Mycelium

More on Grow Mycelium - Library's page of this website

Schedule

  1. List of needs and costs
  2. First equipment: incubator
  3. Second equipment: a sterile workplace
  4. Dedicate and arrange a place for the BioLab Kitchen
  5. Play and upgrade little by little

Created 18/02/2020

Updated 04/11/2020

Make your own Incubator: learning by doing

I decided to play the game of building my own incubator. To do so, I will follow the BioHack Academy's instructions. I don't have a lot of experience with electronics but the instructions seem to be made to learn by doing. On this page you will find some useful links if you need a basic reminder.

These two links can also be useful to better understand how to build an incubator:

Let's play!

List of materials

I followed the Bill of Materials from the BHA instructions to harvest all components. Because I'm doing this project with the FabCity Hub, I have access to the Fablab Barcelona's electronic stock to grab some components.

To better understand, I divided the components below according to their function:

Cabinet

  • I'll use a styrofoam cooler box that I picked up (for free) from a fish shop

Heating system

  1. Heat source
    • Thermo Polyester Heating Foil Self-adhesive 12 V / DC, 12 V / AC 22 W Safety type IPX4 Ø90mm (I wanted this one but I finally order a similar one a bit cheaper)
  2. Spread the heat or cool down
    • 12V Axial Fan (caught in the fablab)

Heating Controller

  • 10K thermistor (taken from the battery of my old computer)

Brain

  • MOSFET x2 (caught in the fablab)
  • 10K resistor (I had)
  • Diode 400V (caught in the fablab)
  • arduino (I had)
  • bread board (I had)

Interface

  • Power switch (I had)
  • LCD display (caught in the fablab)
  • Button (I had)
  • Jack Adapter (I took a power plug instead in the fablab)
  • 7.5 W Power Supply (I bought in Diotronic BCN a 12V-1.5A universal power supply)

First Steps

I began by following the BioHack Academy slides I mentioned above to test each component and programming them one by one.

For visuals, check out my FabCityHub instagram stories.

Sensing the temperature

See page 11 of the slide for the schema and page 20 for the code and the tutorial (or click here)

note: the temperature was working in a reverse way for me, ~28°C for the room temp and when I touched the thermistor the temp decrease to ~22°C.. After checked the comments, I just decided to deconnect and reconnect all the wires to my breadboard with the tutorial's schema (and not the slide's schema) and then it worked in the right sense: ~19°C for the room temp and ~25°C when I touch it.

Push Buttons

See page 13 of the slide for the schema and page 20 for the code and the tutorial (or click here)

note: you have to set a second pushbutton into the code to play with 2 buttons. Here is my modified code:

// constants won't change. They're used here to set pin numbers:
const int buttonPin1 = 8;     // the number of the 1st pushbutton pin
const int buttonPin2 = 7;     // the number of the 2nd pushbutton pin
const int ledPin =  13;      // the number of the LED pin (already on the arduino)

// variables will change:
int buttonState1 = 0;         // variable for reading the pushbutton status
int buttonState2 = 0;         // variable for reading the pushbutton status

void setup() {
  // initialize the LED pin as an output:
  pinMode(ledPin, OUTPUT);
  // initialize the pushbutton pin as an input:
  pinMode(buttonPin1, INPUT);
  pinMode(buttonPin2, INPUT);
}

void loop() {
  // read the state of the pushbutton value:
  buttonState1 = digitalRead(buttonPin1);
  buttonState2 = digitalRead(buttonPin2);

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (buttonState1 == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
  if (buttonState2 == HIGH) {
    // turn LED on:
    digitalWrite(ledPin, HIGH);
  } else {
    // turn LED off:
    digitalWrite(ledPin, LOW);
  }
}

Controlling the Fan

My fan is a EverFlow R127025BU DC 12V 0.40AMP 4-pin connector

Here is a link to know more about the 4-pin connector.

Pin Wire color Function
1 Black Ground
2 Yellow 12V
3 Green Sense (tach.)
4 Blue Control (PWM)

As I read, most fans with a separate PWM-speed-control lead are designed to run at full speed if that lead is left floating. This is a safety measure so that, if the wire comes loose, the system won't overheat due to the fan stopping.

In general, all fans designed for use in PCs use the same wiring. Starting from the black wire, they are Ground/return, +power (almost always 12V but some non-PC fans use other voltages; check the label on the fan), tachometer (wire is grounded by the fan a certain number of times per revolution, usually 2 or 4) and PWM. The PWM wire is always on the end to allow a 4-wire fan to be plugged into a 3-pin connector for either no speed control or PWM control by interrupting the +power pin.

Understand more about with this link

Now I know how to connect my fan, I can follow the instructions of page 16 of the slide and page 20 for the MOSFET code and tutorial (or click here)

LCD screen

My LCD (Liquid Crystal Display) is a Lumex LCM-S01602DTR-M. Here are the spec.

But I miss the I2C interface to follow the BHA instructions.

I found here an arduino link to control LCD displays without I2C interface. I tried but didn't work.. My LCD only shows me strange characters.

After watching this video from Programming Electronics Academy, I understood it's really difficult to have all the pins well connected. I moved my LCD in different positions on my 16-pin male header to have all pin connected and it finally works!

I then modify the code to add a second message on the LCD:

// include the library code:
#include <LiquidCrystal.h>

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

void setup() {
  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // set up the cursor position:
  lcd.setCursor(0, 0);
  // Print a message to the LCD.
  lcd.print("hello, world!");
  // set up the cursor position for the second line:
  lcd.setCursor(1, 1);
  // Print a message to the LCD.
  lcd.print("let's have fun");

}

void loop() {
  // Turn off the display:
  lcd.noDisplay();
  delay(500);
  // Turn on the display:
  lcd.display();
  delay(500);
}

Intermediate steps

It's time now to use what I learned above to build step by step the final incubator system. I'll make inputs and outputs interact together.

LCD displaying current temp

I connected the LCD and the thermistor to the arduino, following my previous corresponding steps and I wrote the code below by mixing my corresponding previous codes. My LCD is now displaying the current temperature.

#include <math.h>         //loads the more advanced math functions
#include <LiquidCrystal.h> // include the library code

// initialize the library by associating any needed LCD interface pin
// with the arduino pin number it is connected to
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);


void setup() {            //This function gets called when the Arduino starts
  Serial.begin(9600);   //This code sets up the Serial port at 115200 baud rate

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);
  // Print a message to the LCD.
  lcd.print("what temp is it?");

}

double Thermister(int RawADC) {  //Function to perform the fancy math of the Steinhart-Hart equation
 double Temp;
 Temp = log(((10240000/RawADC) - 10000));
 Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
 Temp = Temp - 273.15;              // Convert Kelvin to Celsius
 //Temp = (Temp * 9.0)/ 5.0 + 32.0; // Celsius to Fahrenheit - comment out this line if you need Celsius
 return Temp;
}

void loop() {             //This function loops while the arduino is powered
  int val;                //Create an integer variable
  double temp;            //Variable to hold a temperature value
  val=analogRead(0);      //Read the analog port 0 and store the value in val
  temp=Thermister(val);   //Runs the fancy math on the raw analog value
  Serial.println(temp);   //Print the value to the serial port

  lcd.setCursor(1, 1);
  lcd.print(temp);

  delay(1000);            //Wait one second before we do it again
}

controlling the LCD with push button

I now wanted to add push buttons to the previous step. I first run this tuto to have an example of how control LCD with push buttons. Then I wrote the code below by mixing my previous code and the code I just learned:

//##LIBRARIES/////////////////////////////////////////////////////////////

#include <math.h>          //loads the more advanced math functions
#include <LiquidCrystal.h> // include the library code for the LCD


//##DEFINE////////////////////////////////////////////////////////////////

//LCD
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);

//BUTTONS
const int buttonPin1 = 7;     // the number of the 1st pushbutton pin (red)
const int buttonPin2 = 8;     // the number of the 2nd pushbutton pin (black)
const int ledPin =  13;       // the number of the LED pin (already on the arduino)

//VARIABLES
int targetTemp = 28;    // Initial target temperature
int button1State = 0;   // variable for reading the pushbutton status
int button2State = 0;   // variable for reading the pushbutton status
int val;                //Create an integer variable
double temp;            //Variable to hold a temperature value


//##SETUP/////////////////////////////////////////////////////////////////

void setup() {            //This function gets called when the Arduino starts
  Serial.begin(9600);     //This code sets up the Serial port at 9600 baud rate

  pinMode(ledPin, OUTPUT);    // initialize the LED pin as an output:
  pinMode(buttonPin1, INPUT); // initialize the pushbutton pin as an input:  
  pinMode(buttonPin2, INPUT); // initialize the pushbutton pin as an input:
}

double Thermister(int RawADC) {  //Function to perform the fancy math of the Steinhart-Hart equation
 double Temp;
 Temp = log(((10240000/RawADC) - 10000));
 Temp = 1 / (0.001129148 + (0.000234125 + (0.0000000876741 * Temp * Temp ))* Temp );
 Temp = Temp - 273.15;              // Convert Kelvin to Celsius
 //Temp = (Temp * 9.0)/ 5.0 + 32.0; // Celsius to Fahrenheit - comment out this line if you need Celsius
 return Temp;
}


//##LOOP////////////////////////////////////////////////////////////////////

void loop() {             //This function loops while the arduino is powered

  val=analogRead(0);      //Read the analog port 0 and store the value in val
  temp=Thermister(val);   //Runs the fancy math on the raw analog value
  Serial.println(temp);   //Print the value to the serial port
  delay(1000);            //Wait one second before we do it again

  button1State = digitalRead(buttonPin1); // Read the state of the pushbutton value
  button2State = digitalRead(buttonPin2);

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.setCursor(0, 0);
  lcd.print("press red");
  lcd.setCursor(1, 1);
  lcd.print("or black");

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (button1State == HIGH) {
    // print current temp on LCD:
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("current temp:");
    lcd.setCursor(1, 1);
    lcd.print(temp);
  }
  if (button2State == HIGH) {
    // print target temp on LCD:
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("target temp:");
    lcd.setCursor(1, 1);
    lcd.print(targetTemp);
  }
}

Then, I went a step further by adding to my pushbuttons the function to increase or decrease the target temperature by using if (button1State == HIGH) {targetTemp = targetTemp+1;} and if (button2State == HIGH) {targetTemp = targetTemp-1;} in my loop code.


//##LOOP////////////////////////////////////////////////////////////////////

void loop() {             //This function loops while the arduino is powered

  val=analogRead(0);      //Read the analog port 0 and store the value in val
  temp=Thermister(val);   //Runs the fancy math on the raw analog value
  Serial.println(temp);   //Print the value to the serial port
  delay(1000);            //Wait one second before we do it again

  button1State = digitalRead(buttonPin1); // Read the state of the pushbutton value
  button2State = digitalRead(buttonPin2);

  // set up the LCD's number of columns and rows:
  lcd.begin(16, 2);
  // Print a message to the LCD.
    lcd.setCursor(0, 0);
    lcd.print("Current");
    lcd.setCursor(10, 0);
    lcd.print(temp);
    lcd.setCursor(15, 0);
    lcd.print("C");
    lcd.setCursor(0, 1);
    lcd.print("Target");
    lcd.setCursor(10, 1);
    lcd.print(targetTemp);
    lcd.setCursor(15, 1);
    lcd.print("C");

  // check if the pushbutton is pressed. If it is, the buttonState is HIGH:
  if (button1State == HIGH) {
    targetTemp = targetTemp+1;
    // print on LCD:
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("set target temp:");
    lcd.setCursor(0, 1);
    lcd.print(targetTemp);
  }
  if (button2State == HIGH) {
    targetTemp = targetTemp-1;
    // print on LCD:
    lcd.clear();
    lcd.setCursor(0, 0);
    lcd.print("set target temp:");
    lcd.setCursor(1, 1);
    lcd.print(targetTemp);
  }
}

controlling the heating source with the temp

Due to CO-VID19 my heating pad is stuck somewhere between China and here. So I did a new order out of amazon, on BricoGeek which is based in Spain. The only heating system I found there is a Thermoelectric coolers (TEC or Peltier) that can be used to either warm something up or cool something down because it creates a temperature differential on each side. One side gets hot and the other side gets cool (and you can also take advantage of a temperature differential to generate electricity). You can find all the spec and info directly on Sparkfun

It is also recommended to use a heat sink on the hot side of the module otherwise it can get too hot to comfortably touch. So I bought one aswell on BricoGeek.

The step now is trying to control the fan and the heating source with the thermistor.

It was more complicated than expected.. then I decided to try the final code of the BHA first, just to see. I ran the BHA code by adapting the numbers of my pin and some other stuff like only analog temp sensor and adapt the LCD screen code, and it works! Not completely like I wanted because the fan is always working and it works half way when the heating pad is turning on.

Another thing is that the wires that connect the 12V power supply to the arduino and to the heating pad and the fan got very hot when the heating pad was heating. So I feel I have to go a step back and test the TEC by itself.

The problem with the TEC is that is using a lot of juice (till 60W!!). On the Sparkfun's documentation page, there is an arduino code file to slowly ramp up the power flowing through the MOSFET to run the TEC.

I tried by connecting my arduino and the TEC together with a MOSFET trought my breadboard like this schema below.

by ramping up the power into the serial monitor up to 50% (like explained on the arduino file) I measured with my multimeter 11,5V and 0,75A (=8,5W) instead of 11,5V and 2,15A (=25.8W) without the arduino program.

My boyfriend, who is doing the Fab Academy at the time of my writing, decided to assign his "output devices assignement" by giving me a hand. Lucky me!

peltier https://theplantbot.com/introduction-to-peltier-cooling/ https://www.trentfehl.com/projects/chamber/ https://hackaday.com/2020/01/08/engineering-your-way-to-better-sourdough-and-other-fermented-goods/

Fail

I wanted to continue where it happened, but I obviously made a wrong move and I can no longer use my arduino.. the message stk500_recv(): programmer is not responding appears when I try to load the code from my arduino IDE to my arduino Uno. After some readings on forum.arduino, stackoverflow and stackexchange, it seems to mean that something wrong is happening before the flashing actually begins.

It can be on different level and I can check from hardware to software (low level to high level):

  • if the cable and/or connectors does not have microcuts;
  • if no solder points are short circuiting (i.e. touching something metallic around), that means:
    • if there is no short circuit on the PCB between Rx and Tx (usually pins 1 and 0);
    • if there is no contact with a metallic element below the board, or tiny bits between a component's legs (like the FTDI, the ATmega chip or any other);
  • if the ATmega chip is not out of power (GND/VCC shortcut or cut or VCC input being dead…);
  • if the 1 and 0 pins of the Arduino are not being used by some shield or custom design (/!\ does not apply to the Leonardo as it has independent USB handling);
  • if the USB to UART converter does not have a problem (FTDI on older Duemilanove or ATmega16U2 on newer Arduino Unos);
  • if the ATmega328 chip is fried or wrongly installed;
  • if the bootloader has been overwritten or is failing;
  • if the right baudrate is applied for entering the bootloader;
  • if the right settings are set for the target microcontroller and Board;

If the boot loader has been crashed, the solution coulb be to reload the bootloader.

In any case, I think the problem comes from the peltier because it could use till 60W and my power supply goes to max 18W. So I guess I had a short while prototyping with the breadboard which burns one of the component of the arduino.

Created 20/02/2020

Updated 20/02/2020

Make your own Incubator v0.1

Teaming Up

To continue this journey of building my own incubator, I asked my partner in crime, Antoine J., to help me with the electronics as he has now a lot of new knowledges and skills thanks to his Fab Academy diploma ;).

I put here is some personal notes of the tests we made before we complete the v0.1 but you'll find more clearly on his documentation --incubator V0.1 where we got to with this first version.

Personal Notes

The choice of the board

arduino nano

spec: store.arduino.cc/arduino-nano

Microcontroller ATmega328
Operating Voltage 5 V
Input Voltage 7-12 V
DC Current per I/O Pins 40 mA (I/O Pins)
Power Consumption 19 mA

VS

NodeMCU Amica

spec: www.make-it.ca/nodemcu-arduino

Microcontroller ESP-8266
Operating Voltage 3.3V
Input Voltage 4.5V-10V

List of materials

  • Heating Pad Adafruit 1481 - 5-12DC (I ordered my one through a local supplier in Spain: BricoGeek)
  • 12V Axial Fan (caught in the fablab)
  • humidity and temperature sensor DHT11 > tuto
  • 2X MOSFET IRL540N (I bought in Diotronic) > spec
  • diode (caught in the fablab)
  • 3x 10K resistor (caught in the fablab)

Fan 12V powered with 9V

How to test a MOSFET with a multimeter

How to use a IRFZ44N MOSFET with 3.3V

IRL540N MOSFET

Arduino IDE

const int blue = 16;
const int green = 4;
const int red = 2;

const int pinHeat = 14;
int powerHeat = 99; // 0-99
int levelHeat = map(powerHeat, 0, 99, 0, 255);

const int pinFan = 12;
int powerFan = 85; // 80-99
int levelFan = map(powerFan, 0, 99, 218, 255);

#include <dht11.h<
const int DHT11PIN = 13;
dht11 DHT11;

int targetTemp = 28;
int tempRange = 2;

void setup() {
  Serial.begin(9600);
  pinMode(blue, OUTPUT);
  pinMode(green, OUTPUT);
  pinMode(red, OUTPUT);
  pinMode(pinHeat, OUTPUT);
  pinMode(pinFan, OUTPUT);
}


void loop() {

  int chk = DHT11.read(DHT11PIN);
  float humidity = (float)DHT11.humidity;
  float temperature = (float)DHT11.temperature;

   if (temperature <= targetTemp - tempRange) {
    analogWrite(pinHeat, levelHeat);
    analogWrite(pinFan, levelFan);
    Serial.print("Heat: on / ");
    digitalWrite(red, 1);
    digitalWrite(blue, 0);
    digitalWrite(green, 0);
  } else if (temperature >= targetTemp + tempRange) {
    analogWrite(pinFan, levelFan);
    analogWrite(pinHeat, 0);
    Serial.print("Heat: off / ");
    digitalWrite(blue, 1);
    digitalWrite(red, 0);
    digitalWrite(green, 0);
  } else {
    analogWrite(pinFan, 0);
    analogWrite(pinHeat, 0);
    digitalWrite(green, 1);
    digitalWrite(red, 0);
    digitalWrite(blue, 0);
  }

  Serial.println();

  Serial.print("Humidity (%): ");
  Serial.println(humidity);

  Serial.print("Temperature (C): ");
  Serial.println(temperature);

  Serial.print("Target Temp (C): ");
  Serial.println(targetTemp);  

  delay(5000);  
}

Interface

Sketch Arduino ide

#include <ESP8266WebServer.h>
ESP8266WebServer server(80);

// WiFi AP Config
IPAddress localIp(192,168,1,1);
IPAddress gatewayIp(192,168,1,1);
IPAddress subnet(255,255,255,0);
const char *ssid="Tempeh Maker";
const char *pwd="hola hola";

// LED
#define LED_PIN 6

void setup() {
  // Setup Wifi
  Serial.begin(9600);
  Serial.println("Initializing AP...");
  if (WiFi.softAP(ssid, pwd)) {
    Serial.println("AP ready....");
    WiFi.softAPConfig(localIp, gatewayIp, subnet);
    delay(200);

  }
  server.on("/", handle_home_page);
  server.on("/led/on", handle_led_on);
  server.on("/led/off", handle_led_off);
  server.begin();
}

void handle_led_on() {
  digitalWrite(LED_PIN, HIGH);
}

void handle_led_off() {
  digitalWrite(LED_PIN, LOW);
}

void handle_home_page() {
  char body[1024];
  sprintf(body,  "ESP8266

ESP8266

ONOFF"); server.send(200, "text/html", body); } void loop() { server.handleClient();

Created 11/10/2020

Updated 11/10/2020

Make your own Incubator v0.2

Here we are!!

After a long journey through series of tutorials, tests, fails, new tests, we completed the first satisfying version of our own Make-It-Yourself incubator.

Electronics

Antoine was in charge of making the electronics. He detailed everything through his documentation page --incubator v0.2.

The system is composed by a 12V fan, a 5-12V heating pad, a DHT11 humidity and temperature sensor, a RGB LED and the Barduino (an ESP32 development board made in Barcelona) with a custom PCB shield we made to plug on it.
The system is composed by a 12V fan, a 5-12V heating pad, a DHT11 humidity and temperature sensor, a RGB LED and the Barduino (an ESP32 development board made in Barcelona) with a custom PCB shield we made to plug on it.
Some components are soldered on the back of the PCB to ensure the robustness and therefore the longevity of the design. These are the Barduino's header, the barrel jack and the three terminals (heating pad, fan, DHT11 sensor).
Some components are soldered on the back of the PCB to ensure the robustness and therefore the longevity of the design. These are the Barduino's header, the barrel jack and the three terminals (heating pad, fan, DHT11 sensor).
The PCB is designed by Antoine, fabricated at Fablab BCN using a Roland SRM-20 milling machine and soldered at home by Antoine.
The PCB is designed by Antoine, fabricated at Fablab BCN using a Roland SRM-20 milling machine and soldered at home by Antoine.
Then, we designed and 3D printed an enclosure for this marvellous electronics.
Then, we designed and 3D printed an enclosure for this marvellous electronics.
How we arranged the electronic components inside the incubator
How we arranged the electronic components inside the incubator

Cabinet

I could then focus myself on the second step, make the cabinet.

There are several known ways to build an incubation cabinet: you can use a decommissioned refrigerator, a speed rack with a vinyl cover, styrofoam coolers, or wooden boxes. The two basic criteria for a good container are insulation and water resistance.

When we were working with the prototypes, we were using a styrofoam cooler box that I picked up (for free) in a fish shop. It was working well but we wanted to take this opportunity to make something ourselves, with the size we want and the shape we like, and have our tailored incubator as it is the main advantage of doing things yourself.

The Noma Restaurant's Fermentation Chamber made with a Covered Speed Rack
The Noma Restaurant's Fermentation Chamber made with a Covered Speed Rack
The Noma Restaurant's Fermentation Chamber made out of a styrofoam cooler
The Noma Restaurant's Fermentation Chamber made out of a styrofoam cooler
Our previous incubator made out of a styrofoam cooler
Our previous incubator made out of a styrofoam cooler
Our previous incubator made out of a styrofoam cooler
Our previous incubator made out of a styrofoam cooler

For this version, we choose to make a box out of plywood (15mm) for the following reasons:

  • we could have access to the CNC milling machine of Fablab Barcelona to manufacture it
  • we could then design it from scratch
  • by using a parametric software
  • and easily distribute the files with few instructions

We came with a simple and playful design which assembles by itself with T-bones joints (no glue, no screws), except for the front door which uses 3D printed hinges and a 3D printed lock.

sides (X2)
sides (X2)
top and bottom (X2)
top and bottom (X2)
back
back
door
door
It took ~30 min to mill the panel
It took ~30 min to mill the panel

I just sprayed varnish on the inside of the cabinet to make it easier to clean. So far, the cabinet is working like that but we observed that it took it more time to warm up till 30°C than with the styrofoam cooler. Which is normal because the cabinet's volume is larger, but we want to optimise it by insulating it from the inside. One of the idea would be to grow a thin layer of mycelium on its inner sides :-P, but we first gonna try with some ready to use natural insulation such as hemp or so.

Tempeh

In the meantime, we continue to use it to make tempeh!

black and white soy beans tempeh
black and white soy beans tempeh
black and white soy beans tempeh
black and white soy beans tempeh
black and white soy beans tempeh
black and white soy beans tempeh
chickpeas tempeh
chickpeas tempeh
lunchbowl with chickpeas tempeh
lunchbowl with chickpeas tempeh

Workshop

As a release but also to celebrate, we organised a tempeh workshop with some friends. We cooked different kinds of beans in advance and let everyone create their own tempeh, from the mix to the shape. We incubated them for about 30 hours and had lunch together two days later for tempeh tasting.

White soy bean cooked and dried as the tempeh base
White soy bean cooked and dried as the tempeh base
From the mix..
From the mix..
..to the shape
..to the shape
Everyone's tempeh after incubation
Everyone's tempeh after incubation
Degustation!
Degustation!

Created 25/11/2020

Updated 10/02/2021