BackYard Chickens › BYC Forum › Raising BackYard Chickens › Incubating & Hatching Eggs › Starting an Arduino DIY incubator project
New Posts  All Forums:Forum Nav:

Starting an Arduino DIY incubator project

post #1 of 47
Thread Starter 

I just started an Arduino based incubator project.  I have got the basics done - I have a working set of hardware/program to measure temperature, humidity, and control a relay to turn a heat source (light bulb) on and off.  The temp, humidity, and time  are displayed on a 4 line LCD.  I have had it running for several days and it is working great.  Now I am thinking about the automatic egg turning.  I have a second board with a working stepper motor that can push the eggs to "roll" the eggs once per hour (or whatever I program the interval to be).  Not sure if the stepper motor will have enough torque to get the job done (it is a cheap one). I plan to use a Styrofoam cooler to hold the eggs and minimize the heat loss.  Any suggestions on the auto egg turner?  The relay can take almost any voltage (including 110 and 220 AC or most DC voltages).  Happy to share the code and parts list.

post #2 of 47

I don't have any suggestions but want to say that I am impressed. I've been wanting to get into Arduino so when my boys are old enough I can teach them programming. What an awesome project! Definitely would like codes/part list/pictures. Keep us updated.

post #3 of 47
Thread Starter 

Newer to soon to start learning so here is the information to get you going -

The Arduino site to get the main programming IDE -

In terms of the actual board I like to use the Arduino UNO, but any one of the Arduinos (or clones should work).

For the LCD, I bought a 20 character, 4 line lcd - hacktronics, amazon etc will have them I paid around $8

The temperature humidity sensor is a DHT22,  you can buy them on a small breakout board, but I just got the sensor since I am going to place it inside the incubator and wire it myself. 

The relay is a one channel relay.  the one I have is made by Keyes Supply, but if you search for "Arduino relay" you will find them.


As far as the code, I am a hack so I started with an LCD driver code tutorial I found here:


The driver and tutorial for the DHT22 I found here:


The main issue in getting started is that individual demos work, but when you start putting all of it together, you break the code and you can get frustratingly stuck if you are not good at coding and hardware.  Next post with some pictures and detail.

post #4 of 47
Thread Starter 

This is the display showing temperature, humidity, time since the system was turned on and days left till the eggs hatch (assuming 21 days).

post #5 of 47
Thread Starter 

Here is the whole mess with the sensor on a bread-board.  The sensor is the little white thing on lower left part of the breadboard.  The blue thing towards the bottom of the picture is the relay and of course, the upper left of the picture is the Arduino board.  The LCD is on the right.


A mess of wires right now, but will have to re-do them later anyway.  I just wanted to get the hardware working and get the code hacked together to drive it all.  All seems to be working well.  next post is the code.


post #6 of 47
Thread Starter 

Forgot, this is the actual DHT22 sensor.​  This sensor will go inside the incubator.

Edited by abqchicken - 10/24/15 at 7:38am
post #7 of 47
Thread Starter 

#include <LiquidCrystal.h>
#include "DHT.h"
#define DHTPIN 2                              // Define the temp sensor data pin
#define DHTTYPE DHT22                         // define the temp/hum sensor type
#define RELAY  0                              // define the relay control pin
DHT dht(DHTPIN, DHTTYPE);                     //initialize the temp sensor
// LCD Connections:
// rs (LCD pin 4) to Arduino pin 12
// rw (LCD pin 5) to Arduino pin 11
// enable (LCD pin 6) to Arduino pin 10
// LCD pin 15 to Arduino pin 13
// LCD pins d4, d5, d6, d7 to Arduino pins 5, 4, 3, 1
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 1);    //set up what port the LCD will use
int backLight = 13;                           // pin 13 will control the backlight
void setup()
  dht.begin();                                //start the temp sensor
  pinMode(RELAY, OUTPUT);        
  pinMode(backLight, OUTPUT);
  digitalWrite(backLight, HIGH);              // turn backlight on. Replace 'HIGH' with 'LOW' to turn it off.
  lcd.begin(20,4);                            // columns, rows.  use 16,2 for a 16x2 LCD, etc.
  lcd.clear();                                // start with a blank screen
  lcd.setCursor(0,0);                         // set cursor to column 0, row 0 (the first row)
  lcd.print("Incubator 1.0");                 // opening line
  lcd.setCursor(0,1);                         // set cursor to column 0, row 1
  lcd.print("Hatch Them!");
// Uncomment if you want more text on the 4 line LCD (not used in 2 line LCDs)
// lcd.setCursor(0,2);                        // set cursor to column 0, row 2
// lcd.print("Row 3");                        //Text for line 3
//lcd.setCursor(0,3);                         // set cursor to column 0, row 3
//lcd.print("Row 4");                         // Text for line 4
//loop to read the sensor and display
void loop(){
float h = dht.readHumidity();                 // Read the humidity
float t = dht.readTemperature();              // Read temperature in celsius
float f = dht.readTemperature(true);          // get the temperature in Fahreheit
// uncomment to compute heat index in Fahrenheit (the default)
//float hif = dht.computeHeatIndex(f, h);
// Compute heat index in Celsius (isFahreheit = false)
//float hic = dht.computeHeatIndex(t, h, false);
int is,im,ih,id,ida;                          // variables for time
float time,s1,m1,h1,d1;                       //  Set up variables to calculate time
  time=millis();                              //  Get time in milliseconds since tunit turn on
  s1=time/1000;                               //  Convert time to seconds, minutes, hours, days
  id=int(d1);                                 //  Strip out remainder to leave Days:Hours:Minutes:Seconds
// Calculate approximate days till hatch (assume 21 days to hatch)
if (isnan(h) || isnan(t) || isnan(f)){   
// if sensor can't be read
  lcd.print("failed to read");
else {
//sensor was read succesfully so print values to LCD
  lcd.clear();                                // Clear the LCD
//Print temperature and humidity in first two lines
  lcd.print(" F");
  lcd.print(" %");
// Print time in format Time: xxd:xxh:xxm:xxs
// Print days left till hatch
  lcd.print("Days left:");
//Temperature controller
  if(f<91){                         //  Set the temperature for the relay to come on (somewhere around 90-101F to get eggs to hatch)
  digitalWrite(RELAY,LOW);           // Turns ON Relay
  digitalWrite(RELAY,HIGH);          // Turns Relay Off
// Puase for 5 seconds


Credit where credit is due, I started the project with the LCD tutorial from and the sensor library example from


The code could probably be fancier and more efficient, but I am not a great coder and just wanted to make it work (at least I took the time to document a bit!).

post #8 of 47
Thread Starter 

The time keeping is not going to be very accurate due to the nature of the Arduino (probably several seconds or more inaccurate over 21 days); however, incubation is not a second by second accurate process so the time keeping is accurate enough.  I can put a real-time clock in the mix, but that would just complicate things and probably require more that just the one Arduino board since I am using most of the ports on the board already.

post #9 of 47
Thread Starter 

This is the relay.  The three screws at the bottom is where you switch the power to the heat source (light bulb) for the incubator.  Power goes into the center screw will be toggled from right (closed without power and open with power) to left (open without power and closed with power).

post #10 of 47
Thread Starter 


Here is the stepper motor I an thinking about using for turning the eggs.  It is a 28BJY-48 with a driver board.  The idea is to make a set of arms that will sweep around (like clock hands on a table) and slowly roll the eggs (I figure about every hour or two).  Again, precision in timing is probably not critical.  I may have just enough port left to get the one board to control the motor, but if I don't I will just use another board.  The egg turning does not have to be synchronized with the temperature controller!  I got the code worked out for this, just need to put something together to see if the stepper motor has enough torque to turn 6-10 eggs.

Edited by abqchicken - 10/24/15 at 8:06am
New Posts  All Forums:Forum Nav:
  Return Home
  Back to Forum: Incubating & Hatching Eggs
BackYard Chickens › BYC Forum › Raising BackYard Chickens › Incubating & Hatching Eggs › Starting an Arduino DIY incubator project