When we moved I sadly had to part with my fermentation fridge. Since then I have been trying to ferment bread either on the counter (too cold – takes forever) or in the oven with just the light on (too hot – dough comes out like soup). Today I made a mobile fermentation assistant (i.e. temp controller+heater) that I can put in the oven whilst my bread is inside. I haven’t used it with a loaf quite yet, but based on previous experience I don’t really see any risk of it not working.
The Parts, the essence.
- Arduino uno or whatever
- DS18B20 Temperature sensor + libraries for Arduino
- 4.7k ohm resistor.
- Empty paint can – 1 gallon
- Light bulb 150W – must be incandescent
- Light bulb socket
- Solid state relay – separates the 120v you need to power the heater from the control logic of the arduino which is only 5v.
Tools i used:
- Soldering iron.
- Pliers, wire strippers
Some pictures and what the hell is going on here?
Main thing on its portable plank of wood.
HEATER:
The heater is a paint can with a lightbulb in it. Light can be bad for certain types of fermentation such as beer and kombucha, hiding the bulb in a paint can helps evenly dissipate heat and shields the light.
The picture on the right shows a lightbulb on a base I found. This sits inside the paint can. I drilled a hole in the lid of the can to pass the wires through and wired those to a cable that had a plug end on it. The green wire (ground was also screwed onto the paint can so i don’t electrocute myself accidentally if my wiring sucks or something melts.
THE BRAIN:
From left to right
- plug socket (paint can heater plugs into here)
- Thicker black wire trailing off to the upper right. This is a cable with a plug end on it. It plugs into the wall. Half of it is wired to the plug socket shown, the other half is wired to the relay.
- Solid state relay – the “live wire” is broken by the relay so the lightbulb in the paint can won’t turn on without the relay switching.
- Arduino! Red and blue wires trigger the relay to connect the 120v for the plug.
- The cable going off and to the middle right is the temperature probe.
Above is a schematic. It doesn;t show the whole plug socket thing but you don’t really need that.
So I hooked this up and busted out some code. Was working as intended. I hardcoded the temp to 72. I also double checked the temp probe was working as intended by calibrating it against another thermometer.
All donezo!
The arduino code i pushed to the UNO
Also don’t forget to download that temperature sensor library.
—-
This Arduino sketch reads DS18B20 “1-Wire” digital
// temperature sensors.
// Tutorial:
// http://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html
#include <OneWire.h>
#include <DallasTemperature.h>
// Data wire is plugged into pin 3 on the Arduino
#define ONE_WIRE_BUS 3
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
// Assign the addresses of your 1-Wire temp sensors.
// See the tutorial on how to obtain these addresses:
// http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html
DeviceAddress insideThermometer = { 0x28, 0xFF, 0xA5, 0x00, 0xA4, 0x15, 0x04, 0xB3 };
//declare varibles
int ledpin = 13;
float val; // variable to read the value from the analog pin
void setup(void)
{
// start serial port
Serial.begin(9600);
// Start up the library
sensors.begin();
// set the resolution to 10 bit (good enough?)
sensors.setResolution(insideThermometer, 10);
//for the LED
pinMode(ledpin, OUTPUT);
}
float printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
Serial.print(“Error getting temperature”);
} else {
Serial.print(“C: “);
Serial.print(tempC);
Serial.print(” F: “);
Serial.print(DallasTemperature::toFahrenheit(tempC));
}
return tempC;
}
void loop(void)
{
Serial.print(“Getting temperatures…\n\r”);
sensors.requestTemperatures();
float heater = sensors.getTempF(insideThermometer);
Serial.print(“Inside temperature is: “);
printTemperature(insideThermometer);
Serial.print(“\n\r”);
//for the potentiometer to control the temp
val = map(val, 0, 1023, 0, 220); // scale it to use it with the servo (value between 0 and 180)
Serial.print(“set temperature is:”);
Serial.print(“\n\r”);
Serial.print(val);
Serial.print(“\n\r”);
Serial.print(“actual temperature is:”);
Serial.print(heater);
Serial.print(“\n\r”);
//conditional statement
if (heater < 71){
digitalWrite(ledpin, HIGH);
}
if (heater > 73){
digitalWrite(ledpin, LOW);
}
delay(3000);
}