Inkubator
Introduction
This page will contain information about a DIY incubator project using the Arduino development board. Basically it keeps the temperature at a certain value by measuring the temperature and sending a signal to a Solid State Relay to turn on the heater if needed.
This project is currently in development, when I have all the hardware/software working correctly I will transfer everything to a dedicated PCB and put it into a proper housing.
Updates
7/1/10
Currently working on putting the project in a permanent housing. I have soldered the LCD, buttons with pull-up resistors and the RTC circuitry on a piece of perfboard. I am using ribbon cable from an old floppy cable for the various cabling coming from the pcb. The pieces of ribbon cable are soldered to pin headers wich plug into the Arduino board.
The Solid State Relay will also be put in the housing, in a shielded-off area since we are working with mains voltage here.
I am still working on some issues with the code. I need to store some data in EEPROM but this isn’t working yet. The menu I have implemented works fine and can be easily used to change night and day temperature, day and night times and set the RTC to the proper time without having to hookup a computer.
History
I started this project because my father keeps various kinds of freshwater tortoises (mainly Trachemys scripta elegans, Kinosternon subrubum subrubum/hippocrepis, Chrysemys picta picta / dorsalis)and I suggested to build an incubator that has accurate temperature control and a night/day mode.
The current incubator used by my father is of the “aquarium” type. Temperature control is done by looking at a small thermometer and adjusting the thermostat on a submerged heater accordingly.
This is of course far from accurate so I thought I could implement something better.
Using the Arduino platform it is really easy to hookup a temperature sensor, a LCD and a Solid State Relay. First I used a LM35 as the temperature sensor, but it was less than satisfactory because measurements are not accurate and easily influenced by cabling.
I also used a Sensirion SHT71 temperature and relative humidity sensor at some point but this sensor is quite expensive and the RH measurement just saturates to 100% when put in the incubator housing. No point in measuring air saturated with water vapor.
Currently the incubator does everything as planned. During the day it hovers at about 27.5 degrees C and at night it lowers the temperature to around 22.5 deg C. It stays on temperature really well, within 0.2 deg C most of the time.
Temperature and the night/day timer can be adjusted by reuploading the software to the Arduino with changd values. However, I want to implement adjusting of the temperature in software using pushbuttons so that the computer is not required for adjustments.
Features
- Thermostat with night and day mode (lower temperature at night)
- LCD for displaying various information
- Serial output for data logging
- Accurate digital temperature sensor
Technical specifications
- Arduino board with Atmega328
- Dallas Semiconductor DS18B20 1-Wire digital temperature sensor
- PCF8583 I2C real-time clock for timekeeping and timestamping serial output
- HD44870-compatible 16×2 LCD display
- Sharp S202T02 250V 3A Solid State Relay
Pictures
Pictures can be found on http://fotoalbum.dds.nl/vagevuur/inkubator
Code
A quick explanation of the code:
The main loop looks like this:
void loop(){
set_time_serial(); // listen for time input on serial
get_time(); // get current time from rtc
get_temp(); // get current temp
thermostat(); // check temp and turn heater on/off
printlcd(); // print various data to lcd
if (millis() - timer_1 > interval){ // dump various data to serial after each interval
timer_1 = millis();
serial_dump();
}
}
set_time_serial waits for time input on the serial console. At the time this is the only way to set the internal real-time clock. Since the RTC is battery backed-up you only need to set the time once.
get_time and get_temp obviously read out time and temperature
thermostat checks whether the temperature is correct or if heating or cooling is required. It also looks at the time to determine whether the incubator is in night or day mode.
printlcd prints various data to the LCD
serial_dump is run every 5 seconds. It outputs all available data to the serial port for monitoring and/or logging of data. Since there are no sudden/large changes in temperature and settings an interval of 5 seconds is sufficient.
The current code.
Schematic
Block diagram:
Acknowledgements
This project would not have been possible without the following libraries (thanks for coding!):
edebill’s PCF8583 library
Miles Burton’s Dallas Temperature library
Licensing

This work is licenced under a Creative Commons Licence.
