Code for Arduino Chicken Coop Door

Posted by:

The Code for Arduino Chicken Coop Door

NOTE: To hopefully save you some time, I’ll let you in on the trick that FINALLY got this door to work with the light levels, debouncing the switches and *the chickens*. (as you’ll see in the code)

Check the light levels every 10 minutes to avoid the readings bouncing back and forth between dark/twilight/light during those dawn/dusk minutes. Then, when “dark” is reached (for me i chose >= 0 && <= 3 based on when my chickens actually went & stayed in the coop) enable motor dir down > debounce the switches > stop. Then do the opposite for morning. I’m sure there are different, maybe more efficient methods, but this code has been running flawlessly for a while now and I’m feeling confident enough to go out at night without worrying about predators. Although I still somehow find a reason to check the ChickenCam from time to time. (currently waiting for my new servo motors and night vision web cam to arrive in the mail)

David Naves

David Naves

I’m hoping that if you use or modify my code or ideas, you will share *your* coop project with me and the world (pictures, whatever) I’m big on sharing.


I guess there has been some issue with copy and pasting the code, so I zipped up
the latest clean .ino for you here

I guess there has been some issue with copy and pasting the code, so I zipped up
the latest clean .ino for you here

Parts Used

(my affiliate links)

The Wiring Diagram for the Automatic Chicken Coop Door

Arduino Automatic Chicken Coop Door Fritzing Wiring Diagram

Arduino Automatic Chicken Coop Door Fritzing Wiring Diagram

The Installed Arduino Chicken Door

How I built the Automated Chicken Coop Door

Testing the door with the Arduino

Lessons Learned

What I’ve learned about the door, Arduino, light and construction:

  • Best to check the light levels every 10 minutes to avoid the readings bouncing back and forth between dark/twilight/light during those dawn/dusk minutes
  • Test your door with your chickens to see if any of them like to hang outside after hours
  • Testing the actual light values outside is very important (many variables involved: light from neighbor’s house, clouds, internal/external coop lights etc.)
  • Debouncing of your switches within your Arduino code is important (door will jump around and fail as electronic readings vary greatly by the millisecond)
  • Reach out for help on the Arduino Forums before pulling out your hair. (be nice, do your homework and ask very specific questions)
  • I changed from micro-switches to reed switches (magnets) because I didn’t want the mechanics of the micro-switches to fail over time

What I’ve learned about the chickens:

  • Keeping on a light within the coop can keep chickens outside longer (I think b/c the ambient light shines outside) And that’s important when it comes to automating this door, so they won’t get accidentally locked out.
  • They can jump and fly (high and far)
  • They love to roost in safety at night, but want nothing more than to get OUT as soon as it’s light out
David Naves

About the Author:

Hi, I'm Dave Naves... a daddy, a drummer, a web nerd and currently live evain Grass Valley, California with a dog, 2 cats, and 8 chickens. You can typically find me making noise out on Google+, Twitter and Facebook


  1. Joe Walburn  January 15, 2016


    My wife has been demanding to know who the heck Dave Naves is, and WHY her husband carries with him, 24-7, a tattered, smudged multi-page document with computer code all over it! So PLEASE, I need just a little counsel on fixing this code problem. My problem is this: When I copy and paste your code into my arduino, and then use the check box to see if the code will compile, it NEVER does without various error messages, and at this point, I’m going crazy and more crucial, my chickens aren’t as safe as they could be with an operating Dave Naves Arduino Door. WHY do you think it might not be compiling. Thanks much, Dave.
    Joe Walburn

    • David Naves
      David Naves  January 25, 2016

      Hiya Joe,

      Please let your wife know that ~my~ wife is president and founder of The “Why is this #$%^&*!@#$%^ Chicken Coop More Important Than Family?” Support group. Membership is growing internationally and weekly meetings include plenty of wine and delicious bread. =)


      As far as the compiling, the error messages are most definitely important. Believe me, I’ve dealt with many hours of hair-pulling/frustration. (all part of the learning curve) Hint: typically the very 1st line in the message is the culprit… and sometimes there are multiple.

      Also note: make ~sure~ you have all of the libraries installed (they are listed at the very top of the code and if not installed, will definitely throw errors)

      If you copy/paste the errors to this thread of comments, I’d be happy to take a peek (and others here often like to chime in as well)

      Dave “The Relationship Whisperer” Naves

    • David Naves
      David Naves  January 25, 2016


      Please let your wife know that ~my~ wife is both founder and president of the now International “Why is this Chicken Coop so !@#$%^ Important” Support Group. Memberships are still free and typically include plenty of wine and fresh sour dough. =)

      Sorry to hear about the errors. (hint: the error messages are infinitely important – typically the culprit is the very first line printed in the message itself… and sometimes there are multiple) If you copy and paste them into this comment thread, I (and i’m sure a few others would be willing to help)

      Also, make sure to have all of the Arduino “libraries” installed… they are a common reason for errors.

      Talk soon,
      Dave “The Relationship Whisperer” Naves

  2. Gil  December 4, 2014

    Hi Dave,

    all but great work done so far, congrats…
    I´m duplicating your coop door project with two mods, the switches and the way that the door is opened and closed, and for that I´m having a problem…

    in my system the 24v (30rpm) motor is connected to the sliding door by a axle like a screw so as it turns it opens or closes very slowly (avoiding hurting the ladies… just in case and to avoid the lock system that you have, witch is great by the way) but as it closes/opens very slowly the motor doesn´t stop at the limit switch (my variation is a magnetic swicth(x2) connected to a relay(x2) when the top or bottom position is reached on the door and the both relays are connected to the same input pins of the mega as yours.

    the only problem is that the motor doesn´t stop when the switch indicate the presence of the door, maybe because the door movement is too slow..I´m totally new to arduino and code,

    So please can you help me out…

    Thanks and best regards… and keep up the excellent job.

    p.s Sorry for my poor English
    Gil, Luxembourg

    • David Naves
      David Naves  January 7, 2015

      Great question, Gil…

      (and your English is perfect) =)

      I’m not 100%, but I’d venture to guess it’s not debouncing properly. (meaning the switch is reading on/off/on/off very quickly and essentially bypassing a constant reading) I had exactly the same problem and it was driving me nuts! Take a careful look at my code within the debouncing section:

      // bottom switch (for example- lines 56 – 60)

      int bottomSwitchPinVal; // bottom switch var for reading the pin status
      int bottomSwitchPinVal2; // bottom switch var for reading the pin delay/debounce status
      int bottomSwitchState; // bottom switch var for to hold the switch state

      and lines 122 – 138
      //debounce bottom reed switch

      void debounceBottomReedSwitch() {

      //debounce bottom reed switch
      bottomSwitchPinVal = digitalRead(bottomSwitchPin); // read input value and store it in val
      bottomSwitchPinVal2 = digitalRead(bottomSwitchPin); // read input value again to check or bounce

      if (bottomSwitchPinVal == bottomSwitchPinVal2) { // make sure we got 2 consistant readings!
      if (bottomSwitchPinVal != bottomSwitchState) { // the switch state has changed!
      bottomSwitchState = bottomSwitchPinVal;
      Serial.print (” Bottom Switch Value: “); // display “Bottom Switch Value:”
      Serial.println(digitalRead(bottomSwitchPin)); // display current value of bottom switch;

      also read this, to get a better understanding of the importance of debouncing:

      Hope that helps,

  3. Mark Cummins  September 10, 2014

    I am try to follow and duplicate your process on the Coop Door. You list ZITRADES New IIC/I2C/TWI 1602 Serial LCD Module Display for the LCD. I ordered this unit and got an I2C device that appears to need the SDA and SCL lines of the Ardunio Mega board. I am trying very hard to understand how to use this device as the ‘LCD” library appears to need a discreet connected device. Any help you can give I would much appreciate.

    I love your project and your efforts. I will provide information on my project as it gels more. Currently I am just building the coop for my Son and his Wife. I have the coop door control on the burner as well. Put I must have a coop first.

    • David Naves
      David Naves  September 28, 2014

      Hi Mark,

      Thanks for the comment. Not sure exactly what part was sent to you without an image, but as my code shows, all you would need is to make the following connections:

      LiquidCrystal lcd(38, 37, 36, 32, 33, 34, 35); // lcd pin assignments
      int backLight = 13; // pin 13 controls backlight

      LCD Pin > arduino Pin

      lcd pin 1 VSS > gnd arduino pin
      lcd pin 2 VDD > +5v arduino pin
      lcd pin 3 VO(contrast) > 330 ohm resistor to gnd arduino pin
      lcd pin 4 RS arduino pin 38
      lcd pin 5 R/W arduino pin 37
      lcd pin 6 Enable arduino pin 36
      lcd pin 7 –
      lcd pin 8 –
      lcd pin 9 –
      lcd pin 10 –
      lcd pin 11 (Data 4) > arduino pin 32
      lcd pin 12 (Data 5) > arduino pin 33
      lcd pin 13 (Data 6) > arduino pin 34
      lcd pin 14 (Data 7) > arduino pin 35
      lcd pin 15 Backlight + > arduino pin 13 (built-in resistor)
      lcd pin 16 Backlight > arduino gnd pin

      Let me know if the labeling is different on your LDC display.


      • Dave  December 31, 2014

        He got a LCD I2C unit, not just an LCD. I haven’t researched them much, but you send the screen info to it via I2C. You don’t use all the pins, just +,-, SDA,SCL. Ther must be a library available for these beasts, I just haven’t looked for it. It is basically a serial in / parallel out (to the LCD unit). Nice for low pin count, probably not terribly hard to use if the I2C comm is handled for you in the lib.

        Mark: search for I2C 1602 LCD Library, and I’ll bet you get something…well, at least I did!


  4. matt  January 19, 2014

    Great site, my son and i are building an automatic chicken door for a science project. This site will be a great Guide!



Add a Comment