About two weeks ago we started shipping out OpenSprinkler v1.4, and I figured it is now time to write a short post to announce it. What are the new updates in v1.4?
• DS1307 RTC
The main update is that the external EEPROM (24LC128) is replaced by a DS1307 Real-Time Clock (RTC). I am aware that RTC has been requested since the beginning of OpenSprinkler, and I apologize for taking so long to add it. There are multiple reasons: the limited PCB space, the cost of DS1307, and the fact that NTP sync is often good enough. The limited PCB space is probably the biggest reason. Fortunately since the latest interval program does not use external EEPROM any more (i.e. everything is stored in internal EEPROM), there is now space to add RTC. The software has also been updated to support DS1307. Specifically, if RTC is enabled in options, the controller will not rely on NTP to get time any more. In addition, there is an on-board button cell battery which will keep the time running even when power is lost.
If you own a previous version of OpenSprinkler which does not have built-in DS1307, you can easily add an external RTC module, available in Rayshobby shop. Our module comes with a built-in rechargeable battery, pin headers, and jumper wires for easy connection to your OpenSprinkler board. Follow this link for instructions on how to connect. These modules are also available on eBay, or Adafruit, or SparkFun, but they are usually pricier and without jumper wires.
• Screw Terminals
As you may have noticed from the pictures, the screw terminals have been upgraded to the two-piece (plug and socket) type, which makes it easier for installing and uninstalling wires. Now when you need to make changes to wires, you can simply take out the plug piece, insert and tighten wires, and plug it back in. There is no need to open the enclosure.
• Pin Changes
The second update is that a few pin assignments been changed to free up analog pins A2 and A3. These pins are precious for connecting to external sensors. Also, digital pin D3 is now wired internally to the rain sensor, so you no longer need to solder a separate wire. As in previous version, if you are not use the RFM12B transceiver, digital pins D2 and D10 are also free to use.
• Surface Mount Version
The last major change is that there is now a surface mount (SMT) variant 1.4s, which uses the same circuit as the through-hole version 1.4u but most components have been changed to surface mount package. This variant is created to improve our productivity of full assembled and tested kits. So from now on, all orders of fully assembled kits will receive the SMT version, while the DIY kits will continue to use the through-hole version.
The images below are close-up views of the SMT version (front and back):
As you can see from the front image, most components are surface mount, except the peripheral components like screw terminals, connectors, buttons, and big capacitors. Two crystals and the button cell battery for RTC are on the back side. The SMT version uses the same software as the through-hole version, but it does have a few differences:
- It has two extra analog pnis A6 and A7, which are accessible in Arduino programs.
- The Ethernet connector is changed from SparkFun RJ45 jack to Hanrun 911105A, which is less expensive and more widely available.
- There is a slide switch on the top-left corner of the PCB. This is used internally by us to switch between programming ATtiny45 and ATmega328. You should keep it in the ‘INT’ position.
Future Plans
To give you a heads-up, version 1.4 is likely to be the last one in this hardware generation, and will also be the last through-hole version. The next version OpenSprinkler 2.0 will be SMT only, and will switch to a completely different microcontroller in order to accommodate new features like better user interface, on-board wifi, logging, and more sensor options. However, the development of 2.0 will likely take more than a year, so it won’t be available until after summer next year (2013). Meanwhile, feel free to send me comments and suggestions on how to improve the OpenSprinkler functionality, and I will consider them for version 2.0!
Hi Ray
Just built up a V1.4 and it works great, the on board RTC is just what I needed and now have the java scripts being served by a Raspberry PI setup as a small web server. One thing that is missing with this design is a master solonoid which I think is mandatory as it prevents multiple failure points. All commercial controllers have a master solonoid and I am wondering how to implement this feature with my V1.4 unit ( any suggestions would be great) I congratulate you in your efforts with this device and I am very impressed. Future integration with a weather station to sense excessive windspeed to not turn on lawn sprinklers, monitoring of soil moisture and temperature would also be great. I have a reasonable sized permaculture property in South Australia with two large rainwater tanks and have to be very careful with water usage due to our limited summer rainfall your controller is perfect for me. I would love to build a smart controller that can look at a set of variables and decide wether it is appropriate to water a sector or not, hence saving water.
Another application that I have thought of is modifying this device to turn on a fire pump and activate roof and perimeter sprinklers remotely in the case of a bushfire. We are in a high fire risk area and leave our property undefended during extreme fire danger days. The ability to call up the device on the 3G network and turn on the pump/ sprinklers would be brilliant. Instead of the weather page link it could be our Country fire service website where we get regular fire proximity updates. Kindest regards
Simon
Hi Simon, is the ‘master solenoid’ you mentioned the same with master station or master valve? Master station is already supported in OpenSprinkler. Any of the first 8 stations can be assigned as a master station.
-Ray
Ray,
What an excellent project. I have been following your development since 2011. The RTC was an important feature for me. USB programmability looks like another good step forward. I haven’t taken the plunge yet due to other priorities but it’s on my short list! Here are some thoughts on future capabilities (my personal wishlist: possibly not useful to to the rest of the community):
1. I plan to drive the scheduling through my own software, which will just load the matrix of on/off times to the controller. That way I can easily load seasonal changes, etc. Doing this seems possible with the existing http interface.
2. Our dishwasher sometimes runs when the sprinklers are scheduled. In the course of repairing it (it’s only four years old), I learned that some (most?) dishwashers use a timed fill and don’t rely on the float switch except as a backup shutoff. Since our water pressure is a bit low, running sprinklers result in too little water in the dishwasher. I plan to generate a logic signal corresponding to activation of the dishwasher fill valve, and want to use that to pause any sprinklers in progress until the dishwasher finishes filling.
3. Ethernet programming would be cool. That way I could load new software without taking a laptop to the garage or whatever. A (relatively) simple permanent loader could select and boot one of two images in nvram. The non-selected one could be overwritten while the selected one was active.
4. Auto-detection of number of extension boards? Not sure if that was raised in other comments, but in theory they could be counted by software. In a similar vein, the number of valve outputs should be available over the network in some machine-parseable way (perhaps it already is).
cheers,
~!paul
Hi Paul, thanks for your interests.
1. Yes I believe it’s already possible by using the manual mode and http command.
2. There are a small number of available digital/analog pins on OpenSprinkler for interfacing with components directly or use RF receiver to listen to message wirelessly.
3. Indeed Ethernet programming would be cool. This is a feature I am considering for opensprinkler 2.0
4. Sure, auto-detection of extension boards is a great suggestion. Just have to figure out what’s the best way to implement it 🙂