Intro: Arduino Chicken Coop Controller
Over the last few years my family has been keeping ex-battery hens - they are about 18 months old and have lived their entire lives within a caged environment. As much as we love these little bundles of joys and eggs it can be a drudge getting up in the early morning letting them out to roam the garden because the sun is up and bright at 5.00am!!
It would be great if we could have an automated door that could open just after sun rise and close half an hour after sunset where hopefully they are all cosying up to each other in the coop. Sadly there have been times we have forgotten to lock them safely away and discover the horrible consequences when a fox has attacked and killed some of them.
This instructable brings together a number of ideas I have seen on the web to create an Arduino Chicken Coop Controller (ACCC) to automate a chicken coop door and where possible I will give direct credit to those people designs/code I have adapted to create this personal sleep saving device. Many thanks to those who have shared their great ideas which has spawned this device.
The main features of the ACCC:
- Based on the Arduino architecture for easy prototyping and adaptation to your coop requirements
- Uses common parts easily found at you local DIY/hardware store/shop such as cheap electric screw drivers
- Uses a real time clock to maintain time even when the device is temporary disconnected from power
- Adjusts the opening and closing times of the door according to the current month - you can set it to your own timezones
- Provides a manual override just in case one of your lovely darlings misses sunset!
- Provides a min and max temperature reading inside the coop from midnight so you can keep an eye on your brood's welll-being
- A display which can be switched on and off to read out the current ACCC status and will not disturb your feathered friends sleep at night
Most of the electronic components were sourced from eBay and I estimate the whole device excluding the wood was under £30
Step 1: Building the Door
Clint didn't actually provide the plans on his YouTube link so I set about to recreate them and I have attached a PDF file which you can scale to your needs. I hope from the series of pictures and my video file you can see how the door assembles and works.
- I would advise using the acrylic sheet facing plate rather than plywood as it provides a frictionless face for the pieces to move freely
- You really need to see it moving to make sure it works freely and you know where to make any tweaks
- It really looks cool and you should show off your handy work
Use brass screws/stainless steel bolts where possible and treat the ply with a suitable wood preserve - I wouldn't use a vanish as this might over time cause the workings to foul. When fixing the perspex cover use brass screw cups to spread the load and will hopefully stop the cover from shattering.
I found loosely fitting the door lock levers ensured they worked even if they were damp from the outside weather. I made two doors to test. One has been in manual use to see how it would stand the damp and cold english weather - which it did! So hats off to you Clint it is a very practical design.
I have taken loads of pictures so you can see from all angles the design and how it is constructed and assembled. I haven't commented on every picture as I think it is reasonably self explanatory - well I hope!
Step 2: Motor Assembly
I wanted to source a motor and gear assembly that was under £10-15 which isn't easy. I came across a cheap electric screw driver for less than £6 and when I stripped it discovered I had all the components I needed. Including a:
- 3.5v-4.5v Motor which could be hot wired to a chunky 6v battery
- planetary plastic gear box which was going to provide enough torc to raise the plywood door
- chuck and screw driver bit to attached a wooden real pulling the door opening cord
- rechargeable battery pack to test the door assembly
- plug transformer to trickle charge the motor battery - eventually substituted it for a 9 volt plug PSU so I could trickle charge the 6 volt lead acid battery and the 5 volt arduino regulator.
I mounted my motor on some formed wooden support pieces and left plenty of space for the motor controller and regulators. I housed the motor assembly so no moving parts would be pecked by my feathered friends - my coop isn't a tall shed. The pulley is an old wooden cotton real but any real would suffice - make sure you can drill a hole through it for the chord. As the real would only be moving for a few seconds up and down I didn't go overboard on bearings and tried to keep things simple.
I attached the real to the motor via a screw bit and some very strong double bubble glue- it goes rock hard when cured.
Step 3: Testing the Door
I am sure there are better ways to mount everything but I must say the assembly has been working now for over 3 months and seems to be holding up well.
Step 4: Power - Arduino, Motor and Battery
In testing I found that the motor was producing far too much noise and was severely affecting the arduino through its regulated supply. Fortunately the PCB is designed in such a way that I could separate the regulator section and feed it directly with a 9V plug power supply which immediately resolved my noise issues. I have also read elsewhere folks not recommending using the same battery for the motor and arduino.
Again this H-Bridge could be scratch built or bought as an arduino shield but do make sure the power output cables are robust enough to take the high current. I wanted to keep the heavy current unregulated circuits away from the arduino so this is why I went for this option. It is all nicely tucked behind an airy box which hides the sealed lead acid battery.
I sourced a simple and intelligent trickle charge circuit to keep the 6V battery topped up. This I managed to mount all the components on a small square of vero board. The preset pot needs to be set to provide 7.2V on the charger output (no battery attached) and will charge the battery up to 0.5A which is usually the maximum charge manufacturers recommend for 6V batteries. The motor can withstand short burst of 6-7V and in fact really helps when pulling up the door assembly.
All regulators and power amps I placed heat sinks on as the:
- H-Bridge does get warm when lifting up the door as it takes a whooping 2.5A for 3-4 seconds. I could use both channels together to provide 4A capacity but the current is only for short bursts and within the manufactures specs
- 5V regulator on the RKL298 board does get warm when the arduino display LCD light is on for viewing ACCC status
- LM137T can get warm if for any reason the 6V battery has been drained - max output is 0.5A
Step 5: Building the Arduino Electronics
You can short circuit the work involved by choosing some excellent Arduino prototyping boards which provides RTC and connectors for probes. Do check out eBay or other distributors. The basic digital electronics needs to provide:
- Ardunio processor board based on either Atmega328P or Atmega168 (£7-£10)
- Real Time Clock based on the DS1302 or equivalent (£4)
- Onewire digital thermal DS18B20 temp probe (£4)
- Keypad Shield 4Bit 1602 LCD Module Display with an ISP header for programming using the Arduino IDE ver1.0 (£5)
- A couple of pull-up resistors and micro switches for door sensors, IDC connectors and ribbon cable (£2)
Step 6: Testing the Logic
Before running the full code it is worth testing the microswitches by moving the door up and down with the spare battery you have left over from the dismantled screw driver. Stick an AVO meter across the mirco-switch cable and check you get continuity about 20 mm from hitting the bottom or the top.
The code has some natural latency so by the time it stops the motor the door will be well and truly fully up or down! Once you are happy the micros switches working fine and in place do put an additional screw through the perspex holder to stop any future movement.
I found that producing a simple wooden cover for the bottom microswitch stopped the occasional failure when the door closed. I suspect my feathered friends took a liking to the wires and connectors and also thought it was a good target for their daily movements!!
Step 7: The Code Is the Glue
I used the latest Arduino IDE 1.0 which I must say has been brilliant especially as you can now programme using the ISP programmer and not have to worry about USB dongles or circuitry. One thing I would say you still need to burn the boot loader onto your blank ATmega328 chip otherwise debugging becomes a bit of a challenge as the Arduino environment hasn't been set up properly!!!
The code I have compiled is 8,346 bytes in size so you can use the ATmega168 chip if you have a few kicking around.
Arduino.h - the standard and very large library
DS1302.h - Real time clock library
LCD4Bit_mod.h - Library supplied to support the LCD/Keyboard - very similar to the Standard library
OneWire.h - Provides communication to the temperature probe
Pinout Allocation and Global Variables:
This is where you need to set your own sunset and sunrise depending on your location. We have summer savings here in the UK but I decided to keep my system on GMT which means when I look at the clock in the summer saving time period it is an hour behind so the sunset and sunrise times need to be set accordingly.
- Sets the pinouts for the motor
- Sets the display back light which is switched off on reset.
- The current MotorState is set to STOP
- The top line of the display is initialised with the status headings.
- At this point we check the temperature to initialise the min/min max settings and display it.
In the code you will notice a commented out routine 'set_time()' to set the RTC. This should be uncommented for the first time programming so the clock can be set. Comment it out and reprogramme the ATmega328 again this way if the board is reset or further changes to the code are made the RTC always has the correct time.
You need to experiment on setting the RTC in sync with the laptop time. I discovered on a Mac environment you need to allow 40 seconds for compiling and uploading to make sure the times where exactly synced.
- Print the current time
- Pause for 0.5 second so the display can be read.
- Print the bedtime which is in total minutes with the '^' symbol in front of it.
- Print the minimum temperature with the 'v' symbol in front of it.
- Pause for 0.5 second so the display can be read.
- Print the wake time which is in total minutes with the 'v' symbol in front of it.
- Print the maximum temperature with the '^' symbol in front of it.
- Pause for 0.5 second so the display can be read.
- Print the current time
- Check the door activation button (display on/off, close door or open door manually)
- Change the Motor State according to activation button
- Check to see if it is wake time if so set Motor State to DoorUp
- Check to see if it is bed time if so set Motor State to DoorDown
- While the State Motor isn't 'Stop' call door_change to either close the door or open it and display status on screen
As you can see from the code I have created a state motor variable which ensures actions are completed before the main loop code goes back on itself.
Step 8: Installing Into the Coop
I was fortunate enough to design the coop opening to take this size door and to provider two uprights to give a strong fixing see diagrams below.
Make sure the battery is nicely tucked away from the reach of the hens and the 9V input cable is securely attached to the door which is behind the motor housing.
I would reset the door and check the time is correct and the right sunset and sunrise minutes are displayed for that month. At the time of taking the photo's we were in March which meant the time section would display:
Actual Time Sunset Sunrise
Coop ^Coop vCoop
15:30 1140 345
Note - 1140/60 = 19:00 and 345/60 = 05:45
I left the sunrise and sunset times in mins from 12.00pm as it made a clear display distinction and was easier to translate to an opening and closing time. I was being a little lazy!!
Step 9: What Would I Improve?
Reflecting over the build there are some improvements I will do over the next few months and no doubt publish ACCC v2.0:
- Look at putting the arduino to sleep thus conserving power. I tried running it on a rechargeable battery but the code was eating power at a rate of 40mA which meant it drained rechargeables overnight. I believe I can get it down to 10mAh or less when asleep and then normal rate for the duration of opening and closing the door
- If power can be conserved I will put a small solar panel up on the roof to trickle charge the motor and arduino batteries so it can be completely off the grid
- I would like to add an LDR (Light Detection Resistor) to one of the spare analogue lines and combine the reading to fine tune the opening and closing times. I wouldn't trigger the door opening or closing on light detection alone as it could be volatile to poor weather or the garden flood light as the fox enters our garden!
- Alternatively instead of one fixed opening and closing time each month create an algorithm that takes current and next month and works out the daily increments to the times for opening and closing
- Integrate the microswitches into the pine side rails for extra protect from nosey hens
- Create a pair of flashing LEDs to show when the door is down. At the moment we are still checking by going out to the garden. It also acts as a deterrent to vermin as they don't like anything with flashing eyes