Automated Chicken Coop

Introduction: Automated Chicken Coop

This will guide you through the basics of automating a chicken coop. I'm leaving out some of the specifics as far as door design and gearing, assuming that everyone's coop will be a little bit different. This will cover the sensors and Raspberry Pi front end. You'll need a few things:

Step 1: Wire the Motor Controller Shield

Wire the motor controller as shown.

  1. Attach the power supply.
  2. Attach the motor to one of the outputs. Make a note of which GPIO pins correspond to that motor output, as you may have to modify the code to make it work.
  3. Mount the motor controller to the GPIO header.

Step 2: Piece Together the Circuits

Assemble the sensors and Pi board as illustrated. The important parts are:

  1. The output pin for each IR sensor goes to an input pin
  2. The SDA and SCL pins on the temperature sensor go to their respective inputs. These pins are connected to the I2C bus of the Pi. The board I used isn't identical to the one in the Fritzing illustration, but it serves.

Note that the motor controller board isn't included in this schematic. If you use the same one referenced in the intro, it should sit directly on top of the Pi and you can use the power and I2C pins as shown.

Step 3: Enable the I2C Bus

Install an OS (I used Raspbian) and either set up SSH access for your Pi or hook up a screen and keyboard. We won't cover that in depth here, but there are ample tutorials online. There are a couple small configurations we need to handle first.

  1. Enable I2C: With Raspian, this is as easy as turning it on with the raspi-config tool. Type 'sudo raspi-config' and then select Advanced > I2C. Confirm the prompts.
  2. Edit the modules file. Type 'sudo nano /etc/modules' and add the following, one each per line: i2c-bcm2708 i2c-dev
  3. Install some packages: 'sudo apt-get install -y python-smbus i2c-tools'
  4. Reboot your Pi.
  5. To make sure I2C is working, type 'sudo i2cdetect -y 1' - You should see a grid of available I2C bus addresses with an address enabled

Step 4: Install the Temperature Sensor Libraries

Next we'll grab the Adafruit libraries for our temperature sensor.

  1. Get all the dependencies: sudo apt-get install build-essential python-dev python-pip python-smbus git
  2. Clone the sensor library: git clone
  3. Open the repository directory and install the package: sudo python install

Step 5: Installing the RPIO Module

The RPIO module extends RPi.GPIO with a few cool features. We utilize the GPIO interrupts to be quickly notified each time a proximity sensor is activated. One important thing to note is the support for threaded callback functions. This way, we can run callbacks concurrently (in case one sensor changes state while in the other’s callback function). This is distinguishable from the RPi.GPIO’s add_event_detect(...) because of support for multiple threads, rather than a single thread for all callbacks.

There is no inherent support for the model B+, but it’s easy to workaround. Simple install CorCornelisse’s modified version, and you’re ready to go! Just follow these steps:

$ git clone

$ cd RPIO

$ sudo python install

Otherwise, you can install the normal version with:

$ sudo apt-get install python-setuptools

$ sudo easy_install -U RPIO

Be sure to check out the documentation at: Note that you can use everything from the RPi.GPIO module by replacing "GPIO" with "RPIO".

Step 6: Set Up the Database Backend

The database is the layer between the script that manages the sensors and the web interface.

First, you will need to make sure you have the proper sqlite dev libraries: 'sudo apt-get install sqlite3 libsqlite3-dev'. Then, install the pysqlite Python library. I find pip to be the easiest tool: 'sudo pip install pysqlite'

Create your database: 'sqlite3 coop.db'. Now you are in the sqlite command line interface. Run 'create table coop_data(id integer primary key, count tinyint(2), temp float(4,3), door tinyint(1));' to create your main data table. Run '.tables' to list tables and verify that it exists. '.exit' quits the sqlite CLI.

Step 7: Run Your Code

Install the Flask framework. If you have pip installed, 'sudo pip install flask.'

You can obtain a complete copy of my code at GitHub: This code should work if you have wired things up the same way as I illustrated in step 1. If you used different GPIO pins, adjust the pin variables accordingly.

The web server and the sensor script run separately. There are several ways you can multitask in Linux, but I generally just use screen (sudo apt-get install screen - it wasn't on my base Raspbian install). Type 'screen' to switch to a new terminal screen, then 'python' to start the web server. Hit ctrl+a to enter screen command mode, then hit d to detach from the screen. You're now back in your base terminal, but you can use 'screen -r' to return to the server screen any time. Now run 'sudo python' to start the main sensor script. The sudo is important here, since the script needs root access to read the i2c bus. This is definitely fixable, but I can't be bothered at the moment. You should see some debug text. The coop is running!

Step 8: Mount Your Setup on Your Coop

You have a lot of latitude here, depending on the final form of your hardware and the configuration of your coop. I haven't yet transitioned from breadboard to a permanent PCB, but I will then likely build a permanent enclosure for the Pi, PCB, temperature sensor and IR sensors. The most important part is that you attach one IR sensor inside and one outside the coop.

As a prototype, I have a simple motor mounted to a foamcore door to demonstrate the motor firing and opening/closing the door. A final version would likely be mounted to a vertical sliding door with a locking mechanism to support it when opened.

Be the First to Share


    • Digital Fabrication Student Design Challenge

      Digital Fabrication Student Design Challenge
    • Cardboard Speed Challenge

      Cardboard Speed Challenge
    • Electronics Contest

      Electronics Contest



    Question 1 year ago on Step 4

    I know that this is long done but I am looking over your skematics. Now, what is the temperature sensor for? I don't see how the whole assembly works


    7 years ago on Introduction

    Very cool!

    Aside from the door you mentioned, will you be automating any other aspects of your coop? I don't have any chickens, but I'm curious where else a person may go with this idea. Good stuff, thanks for sharing this!


    Reply 2 years ago

    I have a "build once so I can be lazy later" attitude. My "CoopPi" wish list includes:

    - Daily open/close based on light intensity and/or sunset time from web
    - Day/night surveilance cam in coop
    - Automagic predator detection (been researching TensorFlow and other image recognition software)
    - Temp/humidity sensor
    - Ammonia sensor (I am REALLY bad about not changing wood chips, see first line)
    - Automagic vent opening at bottom and automagic vent fan at roof line based on high temp, humidity and ammonia (thinking about a bathroom vent/heat/light combo unit), will require 120v relays.
    - Automagic heater based on low temp, will require 120v relays
    - Automagic water bowl, flush and fill daily or every other day
    - Wireless monitoring of CoopPi video and stats on MagicMirror in house

    I haven't figured out automagic egg collection. But, I figure I need to visit the girls at least once daily, or send the animal loving 10 y.o. out to do it. Food can be topped up and lasts several days if kept dry.

    As I mentioned, I'm lazy. I'm doing a lot of research on Pi programming, haven't gotten off my duff enough to do any of it yet. I have a Pi 3B+ and Pi 4B that I am playing around with.


    Reply 7 years ago on Introduction

    Yep, I think I am going to hook up a wifi enabled outlet on the power strip I have out there, mostly for the purposes of controlling a heat lamp in the winter. The idea would be that below 20 deg or so, the heat lamp would come on, stay on for minimum 30 minutes, then recheck the temperature and decide to stay on or turn off. My fun budget has run out for now, so I'll probably pick this up again later in the summer.