Introduction: Temperature Controlled Incubator Using Arduino

An incubator is used in biology to grow bacteria or yeast for example. It is a pricey equipment for no reason. Luckily we can make one for very cheap (under $20 US).

This simple project uses a light to increase the temperature inside a Styrofoam enclosure. The temperature is monitored via a DS18B20 sensor that is connected to an Arduino UNO. The light is turned on/off via a solid state relay also controlled by the Arduino. This allows for really quiet operation.

When the temperature is below the target, the light turns on. Once the target is reached, the light turns off.

An LCD display indicates the actual temperature and the set target.

To make the temperature more even, a fan can be added.


  • Styrofoam enclosure
  • Arduino (UNO) - ~$5 for a clone
  • Solid State Relay - ~$3.50
  • DS18B20 temperature sensor with 4.7kohm resistor ~2$
  • Light bulb socket

Except the electronics, you could find everything else for free if you look around.

Step 1: Light Bulb Socket Installation and Solid State Relay

Make a hole smaller than the socket you want to use. For that I use a propane torch to heat a hole saw. Then I just press it against the foam. Next you can press fit the socket and make a small hole on the other side to pass the wires. I use a washer to secure everything in place by making a knot with the wires.

Next step, you need to connect the AC part of the solid state relay (SSR).

I installed a piece of wood to hold the SSR. It is not ideal, since a SSR is supposed to dissipate its heat on a metallic surface. From experience, lighting a bulb won't generate much heat. Therefore it is ok.

Step 2: Circuitry

The LCD display is connected via I2C. I recommend you get yourself this model as it will save you some trouble for wiring.

For the DS18B20, I have added a 4.7kohm resistor between the VCC and Data pin.

Step 3: The Code

The target temperature is hard-coded since it is not something that you need to change very often. It also offers the advantage of resuming correctly in case of a power outage. That being said, you could add a knob to set this temperature and save that in the eeprom. I didn't do it to keep the code as simple as possible.

Another improvement that you could make would be to flicker the light when you get closer to the target temperature.

I use the following libraries :

For the LCD display

  • LiquidCrystal_I2C_Hangul (tested with v. 2.0.0)
  • Wire

For the DS18B20

  • OneWire (tested with v. 2.3.5)
  • DallasTemperature (tested with v. 3.9.0)

My first version of the code was pretty simple compared to what it is now. I have added a few conditions to make it safer. For instance, I don't let the light on for too long without taking a short break. This will prevent melting the foam. I also monitor that the DS18B20 is still connected.

About security, you never know what could cause a problem. This setup was not tested for a very long time, you may want to keep an eye on this thing.

Arduino IDE version : 1.8.10

Step 4: 3d Printed Parts

I use the following 3d printed parts :

Both are optional...

I have not chosen a casing for the Arduino yet. Feel free to give your suggestions in the comments.