Go Down

Topic: chicken egg incubator control code (Read 12845 times) previous topic - next topic


Jul 28, 2017, 03:21 am Last Edit: Jul 31, 2017, 02:14 pm by gpop1
This is a simply complicated code that covers what most people would require in a fully automated incubator setup.

As with most controller that are using a 20x4 lcd most of the code is controlling the display or trying to save space. This should according to the compiler fit on a uno but was written on a mega.

The hardware:

4x20 display
keypad 4 button
1307 rtc
dht22 temp/humidity sensor
8 ohm speaker (optional)
5 relays arduino type (optional depending on settings)
micro switchs (optional depending on turner design)
uno or meg

so what does it do:

controls temp, humidity, turner, alarms and more (about 40 options)

link to library for rtc


main project write up including pictures will be posted on backyard chickens web site and linked back to here.
I will add the link when I have added all of the pictures and wiring diagrams there.

updated program please use incmaincode5.ino posted further down


link to byc with the pics and wiring explained



There are some small problems in the code posted

I used a pin that was reserved in case you wanted to use a uno instead of a mega. Also there was a typo on one screen so I will be double checking my work and posting a update in the next few days. If you are using a mega then it shouldn't make much difference


update to fix pin usage for a uno: moved humidity relay to pin 10 to free up A4

added code to make the unit safe while in edit mode.

still looking for a hot spot probe that is plug and play as the DS18B20 requires some programming knowledge. I may just post a second code with this option for more advanced users


gpopl Thanks.

Your code are very good.
Will try to do in prototype "missing the display", if succeed next step are to do an standalone board.


gpopl im working on device, thanks again for you job.
bugs found so far:

Clock can set false data as 30/2/2018  next day 00/3/2018 this preaphes are whit the rtc library.
good also are when set the clock by definition show the current data
set_minute constrain(set_minute159); let say we are at minute 50 and want to set 52 already start in 50, i didnt find an solution.

missing some function to check the alarms values high lower temp; ex. set alarm high temp = 32Ç and lower 38 and the set_point are 37
i did this to set temp alarm
     case 26:
      if (
highTempSetPoint <= temp_setpoint)
highTempSetPoint = (temp_setpoint 2); 
highTempSetPoint highTempSetPoint 0.1;
      if (
highTempSetPoint <= lowTempAlarmPoint)
highTempSetPoint = (lowTempAlarmPoint 5);
highTempSetPoint highTempSetPoint 0.1;
highTempSetPoint highTempSetPoint 0.1;


Thanks again, anything else i will post i love this code


not sure why I added


in the min edit code

should have been

 lcd.print (F("set minute"));

That may be causing confusion as the first line would be what the rtc is set to and its not updated until you leave the menu.

not sure what the problem is with high and low temp set points as the code looks ok

void alarmcheck () {

  alarm_active = 0;
  if (adj_temp >= highTempSetPoint ) {
    alarm_active = 1;
    if (tempalarm == 1) {
      soundalarm = 1;
    } else {
      soundalarm = 0;
  if (adj_temp <= lowTempAlarmPoint) {
    alarm_active = 2;
    if (tempalarm == 1) {
      soundalarm = 1;
    } else {
      soundalarm = 0;

Your code looks like you are checking set points rather than adj_temp ( temp reading + or - calibration )

If the tempalarm is set to on then it should set of the alarm.


ok I see what you are saying. I thought than when you changed from F to C it should load the defaults as

temp_setpoint = 37.5;
highTempSetPoint = 39;
lowTempAlarmPoint = 33;

I never added no code to prevent the user from setting a point where it would be in alarm


Hello. I want to start this chicken egg incubator project but i could not get the library working. I am novice on programming and i understand nothing on c++. Someone can help to have all this ds1307 library as .zip file then i can include it to my library folder. Or someone can help me how to have this working? Thanks in advance


Sep 10, 2018, 10:58 pm Last Edit: Sep 10, 2018, 11:53 pm by hogen
hi together,

At first big thanks for the coding.
I hope this project is still alive.
Is that code also on github?

I found some issues, maybe copy and paste. --> sie the marked area  (2 times)

Code: [Select]
case 24:

          while (escape == 0) {
            set_month = constrain(set_[b]day[/b], 1, 12);
            lcd.setCursor(0, 0);
            lcd.print (F("set month"));
            lcd.setCursor(0, 1);
            lcd.setCursor(0, 2);
            lcd.print (F("enter month"));
            lcd.print (set_month);
            lcd.setCursor(0, 3);
          editMode = 0;
          clock_update = 1;
        case 25:

          while (escape == 0) {
            set_year = constrain(set_[b]day[/b], 2017, 2030);
            //set year here
            lcd.setCursor(0, 0);
            lcd.print (F("set year"));
            lcd.setCursor(0, 1);
            lcd.setCursor(0, 2);
            lcd.print (F("enter year"));
            lcd.setCursor(0, 3);

then i have an other problem mybe someone can support me in that case --> see Picture
is it possible to clear it first?

When you start the turner test it didnt start at counter 0 and increase to the target. It depends when you start the turner test  

I add my sketch. i changed the dht22 to an si7021 sensor.


Olá ... referente ao esquema elétrico fiquei na duvida de como montar ...Alguém consegui ?
Muito Obrigado


Sep 20, 2018, 11:40 am Last Edit: Sep 20, 2018, 12:00 pm by manhoosbilli1
Hi sir.
first of all thanks for your code. i wish i had found it earlier would have saved me 5 months of tinkering and failing.
I have been trying to make an incubator and i have been trying to understand each aspect of your code. however i wasn't able to do so.. because i am very new to programming

My requirements

are a little different which makes it hard for me to copy the code.
I want to use a 16x2 lcd display instead of the one you have used. its a shield so its pins are fixed. which range from pin 8 to 13
that shield also have 6 button on the shield. they are differentiated based on their analog value and since all of the buttons have different resistors its always different and it works on a single A0 pin(the library for the button has a pre written switch case statement which when the button is pressed perform a task. i also want to use dht22..
a heater,
RTC 1307
a buzzer and that is it.
no dehumidifer or any other appliances.

i am currently using a separate attiny85 as a controller for the turner. i have used this turner:


This has 2 limit switches which tell it to stop and reverse direction after delay.

Turner Problem
    I would love to use your code for turner since you said you can customize it to any turner. plus it would me save an attiny85. but i couldn't really understand what that part of the code means and how it works( i don't even remember finding it) *Sigh* its me, i'm a newbie. if you could explain the way to fit your code into my application that would be very helpful.

    About the display it seems like the LCD rows are buried in too deep into each line of code and replacing that with 16x2 would be a nightmare. do you recommend an easy way of doing that?
Q1: I don't understand the concept of swing of temp and humidity
Q2: i don't know what a set point is and how it affects the code.
Q3; The code is hard to understand for a newbie like me. you have added enough comments but adding some more after a few code lines would clear it up for us and learn.


Sep 27, 2018, 02:23 pm Last Edit: Sep 27, 2018, 02:56 pm by hogen
I'm also a beginner but i can read the code, but ist is not so easy to change it.
on the beginning of the code there are the definitions of the Pin's. so i think that is the easy part to change it to your layout. First i try also to use a different display (Oled with I2c protocol) but it is not so easy.

It seems that the programmer didn't follow that project so it would be difficult. I would say to you, buy that display. It is easier.

Can you correct your Picture for the egg turner?

Here are some explanations from the programmer for the egg turner function.

wish you good luck


Sep 27, 2018, 02:33 pm Last Edit: Sep 28, 2018, 02:15 pm by hogen
Olá ... referente ao esquema elétrico fiquei na duvida de como montar ...Alguém consegui ?
Muito Obrigado
I cant read it (because Pourtoguese, i'm German), but i use google translator.
Wiring of the pins is written in the code, for the relais it must be clear what you have to do, other wise it could be to dangerous (high voltage)


Bug found in turnerCountForDisplay

if (prev_clock_day != clock.dayOfMonth) {
hatchDays hatchDays hatchCountUp;

let say hatch days are 19

first day:
hatchDays = 19
 hatchCountUp = 0

secound day:
hatchDays = 19
 hatchCountUp = 1

third day:
hatchDays = 18
 hatchCountUp = 2

in fact exist there an variable u isn't in use
int t1_hatch_days = 15;

Go Up