A couple of weeks ago, I published a great little controller module that provided 6 relays able to be controlled from a computer via a network. After I published it, I got to thinking that the same basic design, with a couple of changes could be pressed into service as a garden watering system controller. So, I got to work, modified the design, and here you have it… A sprinkler controller that runs by itself, that can be programmed and monitored from your computer via your home network.
This specific version of my sprinkler controller obeys some simple rules that have had to be implemented where I live. I live in Australia, or more specifically in an inland region called the A.C.T, where our government have implemented an ODDS and EVENS watering regime. Under the system if you live in an odd numbered house, you may water on an odd day of the month. Likewise, if you live in an even numbered house, you may water on an even day of the month. Everybody may water on the 31st.
This system, along with the mandatory replacement of sprinklers for dripper systems has sucesfully reduced the load on the cities limited inland water supply so that more drastic measures were not required.
Unfortunately, this system was unable to be implemented on my commercial water controller, it wanted to water on a Monday, or a Wednesday, so I was breaking the law, and subjecting myself to a potential fine every other week… So I had to build my own controller.
This instructable shows how I built it – there certainly is enough detail shown so that you can make it yourself if you are enthusiastic, and willing to give it a go.
Update: the full source tree for the Kicad project is located here
Step 1: How do you drive the solenoids?
The sprinkler controller is built on the base of my Adruino Ethernet controller. The Arduino ethernet controller provided a basic network connected ATMega328 chip, and had a number of spare I/O lines.
I extended the PCB design to provide 6 solid state outputs, each able to drive +12v at 300mA, which is enough for a watering solenoid.
Each solenoid output is driven from a NPN transistor, as shown by the attached picture. To turn on the transistor, the port pin is simply driven high. I decided to use individual transistors, as they cost $0.03 each, and if they are destroyed, they are individually replaceable easily.
There is also a DS1302 RTC chip on the PCB – it is simply driven directly off 3 pins of the Arduino.
The whole board is driven by a 12VDC plug pack transformer.
It is not sensible to describe the full details of the Ethernet controller here, just check out the Arduino Ethernet controller (which is basically an Arduino and a NuElectronics shield) for info.
You will find the full schematic diagram attached as a PDF.
Step 2: Making the board
To make the PCB, I used press-n-peel and toner transfer, as I do for all of my projects.
Essentially, I print the PCB layout onto some toner transfer paper. I use Press-n-peel Blue, which costs a bit of money, but is beautifully reliable. That is then laminated onto some clean PCB stock the paper is removed, and the layout is touched up using a permanent marker where there are dust spots.
Then I etch the board using a mixture of 120mL Hydrochloric Acid, and 240mL of Hydrogen Peroxide (20%) – The excess copper is dissolved in about 5 minutes, then the board is thoroughly washed to ensure that all acid is removed.
Then I scrub the toner material off the board using steel wool, and protect the board using a solder through spray lacquer.
Finally, I drill the board using my trusty Dremmel (Which has been working great for 20 years)
I have made hundreds of boards using this method, and it works really well. Just be very careful using acids – wear eye protection, old clothes, and gloves. And make sure that you protect your stainless steel laundry sink. I protect mine by filling it with 10Litres of water, that way when a couple of drops of acid end up in it while I am rinsing off a board, it is diluted by lots and doesn’t damage anything. 🙂
AtMega168 micro (DIP) x 1
DS1302 RTC (DIP) x 1
ENC28J60 Ethernet (DIP) x 1
74HC08 AND Gate (SOIC) x 1
For more detail: A watering controller that can be home networked using an Arduino