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

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

Creative Commons License
This work is licenced under a Creative Commons Licence.