In this article, we are going to make Arduino based egg incubator. With an Arduino UNO and other associative devices. To make an incubator, we need to maintain an optimum temperature and humidity with other parameters like CO2. As this is a learning project, so we’ll focus on basic incubator design. So let’s start our egg incubator circuit using Arduino.



What is Egg Incubator?

An Egg incubator is a device that maintains an optimum temperature and humidity with other parameters like CO2 as the hen maintains to hatch her eggs. It can be used in any biological sector. In common, the incubator is known in the chicken industry to help to produce a chicken from eggs. Here is a very common egg incubator that is available in the market.

A common egg incubator

And our goal to make this one our basic egg incubator:

Our Target Egg incubator

Key Points for an egg incubator:

To make an egg incubator, the first thing to maintain is the temperature. Next the humidity and then the CO2 level. Bigger the egg capacity more parameters to maintain. Then another job we need to do to get healthy chicken is turning/moving the egg position periodically. Normally each hen does this job herself while she is hatching. Also, we need to reduce the CO2 amount from the incubator room. So the key point of this project will be:

  • Temperature control.
  • Humidity control.
  • Turning.
  • CO2 level reduction.

Here we’ll make the very basic one. So that anyone can build one for himself.

Temperature Control:

To control the temperature, we need a control system that can heat, cool, and can sense temperature. We also need to spread the heat inside properly. That is why we will also need a circulating fan. So to make this system we’ll use these items:

  • A heater
  • A cooling fan
  • A circulating fan
  • Relays to turn on/off the heater and fan
  • Temperature sensor


In the big incubator, large heater elements are used but for our small one, we will use simple incandescent lamps as our heater. A 100Watt lamp for this purpose will be enough. To reduce the light intensity, we can use lamps in series which will draw the same 100Watts and will generate the same heat but the heat will be more spread than using the single lamp. If you want to use more lamps in series, it will be less intensity of light but the heat will be more spread.

Two lamps in series


For cooling, we can use cooling fans. The large system needs a large fan but we can use the very known cooling fans.

Cooling fan

This cooling fan should be positioned in the outside to the inside way[normally we use inside to outside way in most cases]. The benefits of using in this way are, that we need to cool the inside air temperature but we also need to reduce the CO2 level of the inside air. Positioning this way do these two job at the same time.

There may have a question if we use the fan in the outside to inside way then where the inside air will go? Yes, we should not make the incubator airtight. We need to heat the eggs but we must have to maintain little airflow inside from outside to supply some Oxygen to the eggs. Yes, hatching eggs need Oxygen like we breathe but not in high volume. A very small volume they need. Also, heated eggs produce CO2. This gas build-up reduces chicken production.

Circulating Fan:

We can use the cooling fan as our circulating fan. Two or Four fans will be good for our incubator. These circulating fans should be positioned inside in a circular way. This will maintain good air circulation as well as it will reduce concentrated heat build-up. A positioning like this will be enough to maintain proper air circulation.

Circulating fan and heater lamp positioning

Relay switch:

Relays are good for AC lamp switching. Although there are multiple ways to do this job as a basic one we can use a relay for both lamp and fan control.

A commercial relay

Temperature Sensor:

There are different types of temperature sensors available in the market. You can use any of that if you wish and know how to use it. But here in our project, we’ll use an LM35 Temperature sensor.

LM35 pinout

This sensor gives 10mV/’C. From that linear data, we can calculate the actual temperature.

Humidity Control:

To control the humidity of the system, we need to measure the humidity first. To measure humidity, here in our project we’ll use DHT11 as our humidity sensor.

DHT11 humidity sensor

And to add humidity we need a humidifier. But for small incubators, we can not use the available ones to humidify because those make a high amount of fogs quickly. That is why we do not need any humidifier for a small system. But if you wish to add, that can be added in a bigger system. Here in our project, we will simply use a small bowl of clean water and some cotton balls on that.

A bowl of clean water

As the inside temperature is warm and there is airflow inside, so this bowl of water will be vaporized in small amounts which will maintain the inside humidity. And the cotton ball or a piece of cotton cloth will help the process. All we need to do is to check the humidity level and water level from time to time. Although the control circuit will alarm if there is low or high humidity but we just need to check this bowl of water.


For turning purposes, you can do that yourself with your hand if you can not arrange a tray like this:

Egg Turning tray

I had this tray in stock so I used it for this project but it’s your choice. But I’ll advise using this type of tray. Here there is a bi-directional turning motor that helps the tray to turn and the interesting thing is this motor is rated 220V AC. This makes the turning system easier. We need to turn the eggs from -45′ to +45′ from the middle in 30~45minutes intervals.

Read more:

Block Diagram:

Here is the block diagram of our Arduino-based egg incubator:

Block Diagram

Control circuit:

We have all the accessories collected this far. Now it’s time to make the control circuit. We are using Arduino UNO as the controller as this is a very popular device as well as very helpful for beginners.

Egg Incubator Control Circuit

Download Proteus File.

Circuit analysis:

You can see that the control circuit is a very simple one. Relays are used to control lamps and cooling fans and turning motors. And ULN2003A is used as the relay driver. We also have a buzzer as an audio alarming system and to tune the temperature, we used a variable resistor. The power supply for this project is made with a 12V/3000mA Transformer (TR1), Bridge diode (BR1), and Capacitor C1. After that, we used a voltage regulator LM7812 to power Arduino. We used this to prevent Arduino to be damaged due to overvoltage.

Sensors (LM35 & DHT11) are connected to A1 and D13 respectively. A user pot is connected to the A0 pin of Arduino UNO.

Working principle:

After sensing the input parameters, Arduino decides when to turn on the heater and when to turn on the cooler. The temperature should be kept around 36.8’C. When the temperature is low, lamps will be turned on automatically. If the temperature is higher than 0.5’C from the setpoint, heaters will be turned off. If the temperature is higher than 1.5’C from the setpoint, the cooler will be on. At the same time, the buzzer will alarm at a temperature that is 2’C higher than the set point. The circulating fan is controlled according to the heater. When the heater is on, the circulating fan is on. When the heater is off but the temperature is higher than the setpoint, the circulating fan runs periodically(a few moments on, a few moments off).

The turning motor will be turned on for 3-4 seconds after every 30 minutes. I did not calculate this time preciously. Used just like a timer counter using timer interrupt. There is no exact timing to do turning for small incubators. A turn in around 30 minutes works fine.


Here is the Arduino coding for our Arduino-based egg incubator. Code is very simple and easy to understand.

#include <LiquidCrystal.h>
LiquidCrystal lcd(11, 10, 6, 5, 4, 3);

#define   Heater  2
#define   Cooler  8
#define   Fan     12
#define   Buzzer  7
#define   Turning 9

#define   Heater_ON   digitalWrite(Heater,HIGH);
#define   Heater_OFF  digitalWrite(Heater,LOW);
#define   Cooler_ON   digitalWrite(Cooler,HIGH);
#define   Cooler_OFF  digitalWrite(Cooler,LOW);
#define   Fan_ON      digitalWrite(Fan,HIGH);
#define   Fan_OFF     digitalWrite(Fan,LOW);
#define   Turning_ON  digitalWrite(Turning,HIGH);
#define   Turning_OFF digitalWrite(Turning,LOW);
#define   Buzzer_ON   digitalWrite(Buzzer,HIGH);
#define   Buzzer_OFF  digitalWrite(Buzzer,LOW);

#include "DHT.h"
#define DHTPIN 13
#define DHTTYPE DHT11
float Temperature = 0;
float Setpoint = 0;
unsigned int timer_counter = 0;
unsigned int counter1 = 0;

void setup()
  pinMode(Heater, OUTPUT);
  pinMode(Cooler, OUTPUT);
  pinMode(Fan, OUTPUT);
  pinMode(Buzzer, OUTPUT);
  pinMode(Turning, OUTPUT);
  lcd.begin(16, 2);
  lcd.setCursor(0, 0);//cr
  lcd.print("Egg Incubator");
  Timer1.attachInterrupt( timerIsr );

void loop()



void timerIsr()
  //Turning control
  if (timer_counter > 16200 && timer_counter < 16500)

  if (timer_counter > 16500)
    timer_counter = 0;


void Temperature_control()
  if (Temperature >= Setpoint + 0.5)
    if (counter1 > 20)
      counter1 = 0;
      if (Fan == HIGH)
      else if (Fan == LOW)

    if (Temperature >= Setpoint + 1.5)
    else if (Temperature <= Setpoint + 0.5)

    if (Temperature >= Setpoint + 2.0)
  else if (Temperature <= Setpoint - 0.5)
    if (Temperature <= Setpoint - 1.0)
void Read_temp()
  Temperature = 0;
  for (int i = 0; i < 30; i++)
    Temperature += analogRead(A1) * 0.5;
  Temperature /= 30;

void Read_setpoint()
  Setpoint = 0;
  for (int i = 0; i < 30; i++)
    Setpoint += analogRead(A0) / 25.6;
  Setpoint /= 30;

void PrintTemp()
  lcd.setCursor(9, 0);//cr
  lcd.print(Setpoint, 1);

  lcd.setCursor(0, 0);//cr
  lcd.print(Temperature-1, 1);

void Read_DHT11()
  float h = dht.readHumidity();

  lcd.setCursor(0, 1);//cr

  lcd.setCursor(9, 1);//cr


As this code is not so critical, so I think you can understand it easily.


I like to work with PCBs. So I make PCBs for all of my projects.

PCB of Egg Incubator


Here is my incubator that was finally completed. I gave this to one of my students to use. He resulted in me after one hatch is that he’s getting a 70% hatching rate. If everything is made more carefully this hatching rate will be higher. My standard commercial ones give 85% hatching on average although those are made in a standard format and with bigger capacity.

Our mini Incubator

This is an open-sourced one to help you learn. But if you are interested in professional designs like this or even more, feel free to contact me.


Hope you enjoyed the project and made one for yourself. If any help is required, feel free to ask. Thanks.

If you still need one but you can not make it yourself, then you can check out these incubators:

For Professional Designs or Help:


Read More:

Categories: ArduinoElectronicsMicrocontrollerPower Electronics


Mithun K. Das; B. Sc. in EEE from KUET; Head of R&D @ M's Lab Engineering Solution. "This is my personal blog. I post articles on different subjects related to electronics in the easiest way so that everything becomes easy for all, especially for beginners. If you have any questions, feel free to ask through the contact us page." Thanks.


Deponkor · 12/12/2020 at 1:01 pm

Nice project..
But If This project with set up button (high – low temperature & humidity & trunning motor ) manully occur is good. if u want change and modify ,I will respect u.

    Mithun K. Das · 12/12/2020 at 2:49 pm

    If you understand the working principle, you can add buttons for settings.

      Desifon Elektronik · 04/04/2022 at 4:37 am

      Hi, how are we going to set the humidity value, 55% average value should be entered in the development period, 60-65% in the last three days of hatching period… Can’t you fix the project? Thanks…

        MKDas · 04/04/2022 at 12:24 pm

        Ha ha ha. I’m a professional man. I’ve over 20 industrial designs on egg incubators and those hatch millions of eggs per month. But this site is a blog site and this is for education. to share knowledge, not full but the basic knowledge. So that you can use it. · 13/02/2021 at 10:55 am

This is something New ! · 22/02/2021 at 9:30 am

Best view i have ever seen !

Mete · 05/06/2021 at 8:31 pm

Can you share the proteus file? thanks.

    MKDas · 06/06/2021 at 4:52 am

    I’ll share it on the blog later.

      Mete · 07/06/2021 at 8:37 pm

      Please. i need urgent

        MKDas · 08/06/2021 at 6:03 am

        Check again and don’t forget to subscribe. Some awesome and useful projects are coming soon.

Steve · 23/06/2021 at 11:42 pm

Great project and well elaborated….
I tend to ask the same question as Deponkor as some of us are so new with Arduino uno and it’s working principles

    MKDas · 24/06/2021 at 6:29 am

    Yes, It’s not very complex to add buttons. But to make it simple and easy to understand I kept it simple.

GWA Michael Terungwa · 25/07/2021 at 7:12 am

Am impressed with your work.

Can the work be modify and control using network.

That is using mobile phone?

    MKDas · 25/07/2021 at 8:04 am

    Thank you. No, this one is not remote-controlled. I’ll post something with remote access in the future. IoT-based projects.

Paul · 07/02/2022 at 3:10 pm

I am making one of these and I have some doubts in the connection. How can I reach you? Is there any way?

    MKDas · 07/02/2022 at 6:52 pm

    email >> contact us

      roy · 08/02/2022 at 8:01 am

      hi sir can i have all the values of the electronic components you use ?

        MKDas · 09/02/2022 at 10:19 am

        check the circuit diagram.

tycs · 10/02/2022 at 8:42 pm

hi i cannot compile the ino.file its giving me errors

C:\Users\IANMOO~1\AppData\Local\Temp\ccKCBuBC.ltrans0.ltrans.o: In function `setup’:

C:\Users\Ian Moone\Documents\Arduino\egg_incubator/egg_incubator.ino:40: undefined reference to `DHT::begin(unsigned char)’

C:\Users\IANMOO~1\AppData\Local\Temp\ccKCBuBC.ltrans0.ltrans.o: In function `Read_DHT11′:

C:\Users\Ian Moone\Documents\Arduino\egg_incubator/egg_incubator.ino:156: undefined reference to `DHT::readHumidity(bool)’

C:\Users\IANMOO~1\AppData\Local\Temp\ccKCBuBC.ltrans0.ltrans.o: In function `__static_initialization_and_destruction_0′:

C:\Users\Ian Moone\Documents\Arduino\egg_incubator/egg_incubator.ino:22: undefined reference to `DHT::DHT(unsigned char, unsigned char, unsigned char)’

collect2.exe: error: ld returned 1 exit status

exit status 1

Error compiling for board Arduino Uno.

This report would have more information with
“Show verbose output during compilation”
option enabled in File -> Preferences.

    MKDas · 11/02/2022 at 4:25 pm

    DHT library problem. use different library.

Tycs · 11/02/2022 at 5:10 am

Hi sir I cannot compile the Ino file

tycs · 12/02/2022 at 10:00 am

hi, sir i still cannot compile can you tell me what dht library you used ? also for the timerOne. If its no too much to ask maybe you can also share with me the schematic and board file for this i also want to make a pcb. thank you sir

    MKDas · 12/02/2022 at 11:19 am

    maybe DHT_master. I can not remember right now. Kindly try altering.

      Tycs · 12/02/2022 at 8:16 pm

      Thank you

Tycs · 14/02/2022 at 11:34 am

hi, sir i have compiled the .ino file succesfully. I was wondering if you have the brd and sch file for this ? i would like to make the pcb for the circuit. I noticed that you placed the eletronics inside the incubator, will this be fine for long term use? since there is humidity inside the incubator ?

thank you

    MKDas · 15/02/2022 at 11:22 am

    Nice to know that you are successful now. I made it in PCB, but unfortunately, the file is no more, it’s already modified. & Yes, you should be careful putting the circuit inside the incubator. I put inside as it was a test purpose only. But when you are using it in a regular scenario, you should put the circuits outside the incubator.

Tycs · 15/02/2022 at 9:40 am

sir in the schematic i can’t seem to find where vdd of lcd and sensors dht11 are connected to ? i checked online dht11 is 5v.

Tycs · 22/02/2022 at 7:13 am

Hi sir, I have constructed the arduino using breadboard since I’m not sure if it will work. I noticed that in the schematic dht Data out has a resistor to vdd bit in your pcb there is no resistor is the resistor necessary?

    MKDas · 22/02/2022 at 12:33 pm

    If you use a module, you need no resistor. Because there is a resistor already in that module. But if you use only the sensor, then you need to use a pull up resistor of 4K7.

      Tycs · 23/02/2022 at 9:07 pm

      thank you very much sir. i have finished the board and it seems to be working. next i will try to construct an eclosure to test.

        MKDas · 24/02/2022 at 10:17 am

        Good to know that!!!

Tycs · 29/04/2022 at 5:40 pm

hi sir. i have finally build the incubator with the arduino controller. I i am running into some problems with the controller. first I noticed the heater fan does not turn off. second problem is i noticed that the arduino will freeze up, after turning the egg turner. The lcd will print garbled stuff and the temperature readings are all still.

    Tycs · 04/05/2022 at 4:42 pm

    some update. ok so the lcd will freeze up after sometime, there seems to be some sort of interference. but the arduino still functions fine (except for the display) I also noticed that the the code is not being followed i don’t know if this is normal after set point is reached, it drops 2.5 degress before turning on the heaters. also the cooler also turns on even if it hasn’t reached the +1.5 degrees from set point. the circulating fan does not turn off when heater is dis-engaged.

      MKDas · 04/05/2022 at 5:34 pm

      Kindly let me know the details about your circuit, components you are using and voltage readings.

        Tycs · 07/05/2022 at 6:28 pm

        Hi sir, what voltage should I measure. From your circuit I basically copied from your pcb layout except on a breadboard. I am using a 220v turning motor. For fans I’m using a 12v fan. I noticed the problem starts after around 30 mins when the turning motor start the lcd will get distorted. I don’t know if this has something to do with my wiring. I joined the a/c the heater and turning motor wires and the DC circulating fan and cooling fan in one whole. So basically they all wires came out in one whole. Would this be the problem?

          MKDas · 07/05/2022 at 7:43 pm

          Seems like your motor is creating trouble. Run without turning the motor. Check what happens. Also, on the breadboard, flying wires capture noises, try to make a PCB, and test it. Many people including my local made this project. All worked fine.

    MKDas · 04/05/2022 at 5:32 pm

    What type of cooling Fan you are using? Also what turning motor you are using? Seems like Electro-Magnetic Interference is generating anyhow.

Leave a Reply

Avatar placeholder

Your email address will not be published. Required fields are marked *