Water your plants with a Raspberry Pi

Control

If you look at commercial irrigation systems, they often seem relatively complicated to operate. In contrast, I want this system to be as simple as possible, so the DIY system remains manageable and works safely during periods of absence from home. That said, the automatic watering system does have one special trick up its sleeve: It can extend the watering time to achieve a certain level of moisture in the soil with the use of sensors that provide appropriate feedback from two different plant locations.

Capacitive sensors were chosen because they are less susceptible to corrosion than resistive sensors. Although I am talking about models with analog output, they can be connected quite easily to the Raspberry Pi in the control center through the ADC. To determine the various limits up front, I immersed the sensors in water in a test (Figure 5) and then put them in moist soil. The ADC in this setup is an ADS1115, which is addressed in Python 3 with a library by Adafruit. The easiest way to install it is to use the command:

Figure 5: To determine limits, test the humidity sensors attached to the ADC.
pip3 install Adafruit_ADS1x15

This solution relies on a central control script named watering.py, which resides in the Raspberry Pi's memory and takes care of flow control and polling the humidity sensors. The timing settings are stored there, as well. In an initial saver mode, the system now waters the plants for two minutes at 5:00pm every day. Controlled by the second solenoid valve, it then does the same thing for a little longer – five minutes. The values can be adjusted as required.

To water the plants, the Raspberry Pi always opens both solenoid valves first and then starts pumping from the tank. Once the timer for the first water delivery has expired, the system checks the first moisture sensor to discover whether the soil moisture at the plant location has reached the "wet" state; if not, follow-up is provided. The first valve then shuts off. The second line remains open for a longer time and is controlled along the same principle until the script first stops the pump and then finally shuts off the second valve.

The Python script resides in a separate folder below the home directory. Because it is called in rc.local, it runs automatically at boot time. If you like, you can also convert the script into a genuine daemon. Everything has been kept quite simple here, but it's for daily use and can be extended at any time if you feel the urge to do so. The script and the remote control PHP website described below can be found in my GitHub project [1], where the wiring and routing diagram for the water supply also reside.

Because the Raspberry Pi is connected to the local network, you can also access and maintain it there over SSH. To do so, just log in to a terminal with:

ssh pi@watering

In contrast to similar projects, however, the automatic watering device does not have a separate terminal-based menu. At the end of the day, it is a simple workhorse that always follows the same routine. The idea is to do everything else that needs to be done in the web browser.

Web-Based Remote Control

The watering system works reliably even without Internet access, but it should at least have remote access to avoid the need to read everything at the device or to install buttons and a touchscreen. You have to remember that everything needs to be pretty much waterproof.

If the irrigation system in your garden is outside the range of your router, a repeater set up halfway can help. Alternatively, during the test phase, simply disconnect the control unit from the connectors and reprogram the Raspberry Pi on your home network. A network connection is always required for remote access, so you can intervene, even when on vacation.

Some of today's commercial watering systems come with a smartphone app. I designed a web interface that also works on cell phones. Without the benefit of a vendor-operated cloud, the Raspberry Pi, including the HTTP server, needs to be accessible over a static IP address on the Internet.

However, I went for a simpler variant and located the user interface (Figure 6) in a PHP file in my own web space. After calling the URL, the interface sends predefined commands to the watering system at the push of a button. Currently, the five actions in Table 1 are implemented. The Raspberry Pi queries the corresponding commands in the control script at short intervals and triggers the matching actions if needed.

Table 1

Web Interface Functions

Name

Function

Activate

Enable watering timer (default: on).

Off

Disable timer. System remains switched on.

Water

Immediate water delivery for 10 seconds through both lines.

Restart

Reboots the system. The web interface is active again after restarting the Raspberry Pi.

Shutdown

Shut down the Raspberry Pi. A manual off-on cycle is then required.

Figure 6: Web-based control.

The basis for the implementation is a development by Christian Grieger [3]. The advantage of his method is that it does not require elaborate arrangements such as dynamic DNS. The disadvantage is that feedback arrives with a bit of a delay; however, this delay is not likely to be of much importance, although you will definitely want to secure the remote control website with a login.

Conclusions

The plant watering system does exactly what it's supposed to do, in a positive way. I ran it at home in sunny weather during the last few days of summer, and checking it for functionality was no problem (Figure 7).

Figure 7: The water outlet and the sensor spike in the plant bed.

The system will star as my vacation stand-in next year. Trying to supply the whole garden would probably be overshooting the mark, but if you are looking to rescue your most important plants in a limited area (e.g., a greenhouse, conservatory, or living room), this controller can be a real helper.

Infos

  1. Project on GitHub: https://github.com/swenae/watering
  2. English version of code and image files: https://linuxnewmedia.thegood.cloud/s/5Rzx9tQW2FJ6N3Z
  3. Electronics projects by Christian Grieger: https://elektro.turanis.de (in German)

The Author

Swen Hopfe works for a medium-sized company with a focus on smart cards and near-field communication (NFC). When he is not taking photos, in the great outdoors, or in his garden, he focuses on topics such as the Raspberry Pi, Internet of Things, and home automation.

Buy this article as PDF

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy Linux Magazine

SINGLE ISSUES
 
SUBSCRIPTIONS
 
TABLET & SMARTPHONE APPS
Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

  • Charly's Column: PomodoPi

    Charly starts the tomato and dill season aboveground with a traffic light and underground with a soaker hose, along with assistance from two gardeners and the ubiquitous Raspberry Pi board.

  • Automated Irrigation

    An automated watering system comprising a Raspberry Pi Zero W, an analog-to-digital converter, and an inexpensive irrigation kit can help keep your potted plants from dying of thirst.

  • Perl: Linux-based Gardening

    In this month’s Perl column, we will introduce a system to water your plants while you are away from home. With a little help from Perl, a friendly, Linux-based irrigation system waters your plants twice a day.

  • Charly's Column – Mi Flora

    Columnist Charly Kühnast recently attached Mi Flora humidity sensors to his potted plants. At first, they only transmitted junk on Bluetooth, but armed with the right tools and a Rasp Pi, Charly now reaps a rich harvest of data.

  • The sys admin's daily grind – Yowsup

    Sys admin Charly likes to keep up with the state of his domestic strawberry plants, so he has outsmarted WhatsApp to allow status messages to be sent through the service from a PC or Raspberry Pi.

comments powered by Disqus
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters

Support Our Work

Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.

Learn More

News