I successfully mounted all key blocks in a suitable box and have it running. Probably next weekend I will connect it to the sprinkler system and give it a try in a real setup.
My configuration/hardware looks like this:
1. Arduino Mega2560 R3 (sainsmart.com version)
2. Standard Ethernet shield with WizNet5100
3. Large size LCD 1602 (the same as standard 1602 but almost twice bigger - easy to read at a distance)
4. 4-channel Relay module
5. Power supply module (it takes 24VAC and produces adjustable stable DC)
6. Four buttons and power switch
7. Standard 24VAC brick






All this is mounted in a plastic box with clear cover. LCD module is mounted inside the box but is clearly visible through the transparent box cover. All modules are mounted on a piece of FR4 plastic installed inside the box.

Right now I have only one 4-channel relay module installed which allows me to connect 4 zones, however the design allows more channels and the box has space for 3 more relay modules (or a few bigger ones) - it should allow me to have 16 channels controlled by the timer directly.
All together it looks like this:

Some observations/learnings
To my big surprise WizNet 5100 tends to get rather hot when the box is closed. The chip is always quite warm, but in a box it gets rather hot. I ended up gluing small radiator to the chip to ensure it will be stable and reliable on a hot day.
Also I was surprised to see the large-screen 1602 module to draw quite a lot of power - 250 milliamp. When trying to connect it to Arduino Mega onboard power supply it gets pretty hot - this was one of the motivations for installing separate power supply module rather than using common 9V power brick. All this power is required for LCD back-light - spec sheet mentions 240milliamp power. I ended up installing 24VAC->5V DC power module, and I also added resistor to limit LCD back-light current to about 120 milliamp - it produces sufficiently bright back light but is easier on the power supply circuit, to ensure that power module stays cool.
Another big surprise was with control buttons - I installed standard pushbuttons (bought it from Jameco), but then I found out that these buttons are NC (normally closed)! This is quite unusual, I guess I did not check when ordering. Good thing is that I was able to work around it in the code, just changing the button detection logic.
There were also bugs in the firmware (the relay version, obtained here) - the relay control output code was confused with the way how OpenSprinkler handles multiple boards (even inactive extension boards), and with the order of bits vs order of stations. But it was easy to fix.
I was able to run the system for a few days with a basic program configured, and I can see in the log that zones were correctly turned On and Off as programmed.
Next Steps
I'm planning to install this sprinkler timer (together with my 4-channel voltage converter box) to run a section of my irrigation system, to get a feel of how well it works in a real life.
Also I'm planning to enhance firmware a bit - I want to add local (on the device) manual controls, to allow simple on-demand runs (e.g. "start zone 2 and run it for 10min) - this is quite useful for irrigation system tuning/maintenance.
Once this is done I will add more channels to the irrigation timer and install it for daily use.
Future Enhancements/Projects Ideas
I'm planning to put together few enhancements/new things to expand OpenSprinkler capabilities. I would like to add master/slave mode, to allow one OpenSprinkler timer to control several remote modules, connected via RS485 or other suitable link. Also I would like to add sensors (humidity sensor, temperature sensor, water flow counter) to the remote module to track the weather, soil condition and actual water use counters.
Another interesting option to try - I'm planning to experiment with Arduino module based on AtMega 1280p - a more powerful version of MCU, it has less IO than Mega, but RAM is 16KB - double of Mega. This will be helpful in adding all the extra features. Another option to consider is BeagleBone Black.
My configuration/hardware looks like this:
1. Arduino Mega2560 R3 (sainsmart.com version)
2. Standard Ethernet shield with WizNet5100
3. Large size LCD 1602 (the same as standard 1602 but almost twice bigger - easy to read at a distance)
4. 4-channel Relay module
5. Power supply module (it takes 24VAC and produces adjustable stable DC)
6. Four buttons and power switch
7. Standard 24VAC brick






All this is mounted in a plastic box with clear cover. LCD module is mounted inside the box but is clearly visible through the transparent box cover. All modules are mounted on a piece of FR4 plastic installed inside the box.

Right now I have only one 4-channel relay module installed which allows me to connect 4 zones, however the design allows more channels and the box has space for 3 more relay modules (or a few bigger ones) - it should allow me to have 16 channels controlled by the timer directly.
All together it looks like this:

Some observations/learnings
To my big surprise WizNet 5100 tends to get rather hot when the box is closed. The chip is always quite warm, but in a box it gets rather hot. I ended up gluing small radiator to the chip to ensure it will be stable and reliable on a hot day.
Also I was surprised to see the large-screen 1602 module to draw quite a lot of power - 250 milliamp. When trying to connect it to Arduino Mega onboard power supply it gets pretty hot - this was one of the motivations for installing separate power supply module rather than using common 9V power brick. All this power is required for LCD back-light - spec sheet mentions 240milliamp power. I ended up installing 24VAC->5V DC power module, and I also added resistor to limit LCD back-light current to about 120 milliamp - it produces sufficiently bright back light but is easier on the power supply circuit, to ensure that power module stays cool.
Another big surprise was with control buttons - I installed standard pushbuttons (bought it from Jameco), but then I found out that these buttons are NC (normally closed)! This is quite unusual, I guess I did not check when ordering. Good thing is that I was able to work around it in the code, just changing the button detection logic.
There were also bugs in the firmware (the relay version, obtained here) - the relay control output code was confused with the way how OpenSprinkler handles multiple boards (even inactive extension boards), and with the order of bits vs order of stations. But it was easy to fix.
I was able to run the system for a few days with a basic program configured, and I can see in the log that zones were correctly turned On and Off as programmed.
Next Steps
I'm planning to install this sprinkler timer (together with my 4-channel voltage converter box) to run a section of my irrigation system, to get a feel of how well it works in a real life.
Also I'm planning to enhance firmware a bit - I want to add local (on the device) manual controls, to allow simple on-demand runs (e.g. "start zone 2 and run it for 10min) - this is quite useful for irrigation system tuning/maintenance.
Once this is done I will add more channels to the irrigation timer and install it for daily use.
Future Enhancements/Projects Ideas
I'm planning to put together few enhancements/new things to expand OpenSprinkler capabilities. I would like to add master/slave mode, to allow one OpenSprinkler timer to control several remote modules, connected via RS485 or other suitable link. Also I would like to add sensors (humidity sensor, temperature sensor, water flow counter) to the remote module to track the weather, soil condition and actual water use counters.
Another interesting option to try - I'm planning to experiment with Arduino module based on AtMega 1280p - a more powerful version of MCU, it has less IO than Mega, but RAM is 16KB - double of Mega. This will be helpful in adding all the extra features. Another option to consider is BeagleBone Black.