Project:Plant Watering: Difference between revisions
NitramLegov (talk | contribs) (Further details on measurement possibilities.) |
m (clarification in InfoBox title) |
||
(4 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
''Disclaimer: This page is work in progress! Right now, it is more or less a notepad for {{NL}}.'' | |||
{{ProjectInfoBox | |||
|project title=Automated Plant Watering | |||
|image=Plantmonitoring RackTest.jpg | |||
|status=in progress (since a looong time now) | |||
|date=Most likely during dinner at the Milliways... | |||
|initiator=[[Martin]] | |||
|team= | |||
|materials=[[Wood]],[[Microcontroller]] | |||
|tools= | |||
|software=[https://www.home-assistant.io/ Home Assistant] | |||
|cost= | |||
}} | |||
As many others, {{NL}} is quite lazy. Unfortunately, he also likes to have fresh herbs and other plants on his balcony. | As many others, {{NL}} is quite lazy. Unfortunately, he also likes to have fresh herbs and other plants on his balcony. | ||
Line 9: | Line 23: | ||
In addition, it should be possible to build it from standard components which you can get from your local hardware store. | In addition, it should be possible to build it from standard components which you can get from your local hardware store. | ||
Using jardinieres which are | Using jardinieres which are arranged on top of each other with a self-built rack was the perfect solution for this.<br/> | ||
In my case, I am using 4 jardinieres to grow plants in and a 5th one on top which is just being used to store water | In my case, I am using 4 jardinieres to grow plants in and a 5th one on top which is just being used to store water (see the project picture) | ||
==Supplying Water== | ==Supplying Water== | ||
Line 39: | Line 52: | ||
When this project started (in 2014), these sensors were quire expensive. However, in the meantime they got a lot cheaper and are not much more expensive than the resistive ones. I am using [https://www.aliexpress.com/item/NEW-Capacitive-soil-moisture-sensor-not-easy-to-corrode-wide-voltage-wire-for-arduino/32832538686.html these] ones, which provide the moisture level as an analogue voltage. Dependent on the microcontroller / computer they get attached to, an analogue-digital-converter (ADC) might be needed in order to read them (the raspberry pi has no ADC, the ESP8266 has 1, but can only handle up to 1V input, the ESP32 has two ADC with multiple channels being able to get 3 volt input (though you cannot use the second ADC when Wifi is on..... )). | When this project started (in 2014), these sensors were quire expensive. However, in the meantime they got a lot cheaper and are not much more expensive than the resistive ones. I am using [https://www.aliexpress.com/item/NEW-Capacitive-soil-moisture-sensor-not-easy-to-corrode-wide-voltage-wire-for-arduino/32832538686.html these] ones, which provide the moisture level as an analogue voltage. Dependent on the microcontroller / computer they get attached to, an analogue-digital-converter (ADC) might be needed in order to read them (the raspberry pi has no ADC, the ESP8266 has 1, but can only handle up to 1V input, the ESP32 has two ADC with multiple channels being able to get 3 volt input (though you cannot use the second ADC when Wifi is on..... )). | ||
==System Architecture== | ==System Architecture Decision== | ||
As most projects, there are different possibilities in regards of the system architecture. These can mainly be differentiated by the integration with other automation projects and the degree of flexibility. Of course, the different possibilities require different implementation efforts. | |||
===Microcontroller Side=== | |||
{| class="wikitable" | |||
|- | |||
! !! !! Description !! Pro !! Con | |||
|- | |||
| Microcontroller Only || || This means the microcontroller has to do everything: read the moisture, decide on when to water|| | |||
* No Server needed -> no single point of failure | |||
|| | |||
* Code Adjustments needed for each plant | |||
* No History | |||
* No remote control (e.g. water now) | |||
|- | |||
| rowspan="2"| Microcontroller plus central server|| Dumb microcontroller || Microcontroller would just read the moisture, send it to the server, "business logic" on the server decides on watering time || | |||
* No code adjustments needed | |||
* Logic adjustments could be done centrally | |||
* History available | |||
|| | |||
* Server controls everything --> single point of failure | |||
|- | |||
| "Smart" microcontroller|| Microcontroller would get config from the server, then read the moisture and decide on watering time itself. Server could be used for analytical purposes || | |||
* No Server needed for core functionality --> No SPoF | |||
* No code adjustments needed | |||
* History could be available | |||
|| | |||
* Possibility for persistent storage of config needed | |||
|} | |||
===Server Side=== | |||
{| class="wikitable" | |||
|- | |||
! Option !! Details !! Description !! Pro !! Con | |||
|- | |||
| Custom Server development|| || Custom software which contains the business logic regarding when to water the plant. High level of DIY and flexibility, but also high effort (dev and maintenance)|| | |||
* Cool project | |||
|| | |||
* Quite some effort | |||
|- | |||
|rowspan="2"| Standard server Software || OpenHab|| Less DIY, but more integrated with other automation projects. Are analytical features provided out of the box? || | |||
* Less error prone | |||
* Software could be used for home automation in general | |||
* Most likely more resource intense than custom software | |||
|| | |||
* Less cool | |||
|- | |||
| HomeAssistant|| || | |||
* Python | |||
* Very active development | |||
* Lots of other integrations available | |||
|| | |||
* No Version 1 yet | |||
|} | |||
For this project, [[Martin]] decided to go for a smart microcontroller, which uses HomeAssistant as a server. | |||
==Software Setup== | |||
Since the decision on the server side was to use Home Assistant, the microcontroller can run ESP Home. ESP Home automatically creates a [[PlatformIO]] project based on a configuration file. As an example, the config file for this project looks as follows: | |||
<nowiki> | |||
esphome: | |||
name: test_platform_1 | |||
platform: ESP32 | |||
board: nodemcu-32s | |||
wifi: | |||
ssid: !secret wifi_ssid | |||
password: !secret wifi_password | |||
# Enable logging | |||
logger: | |||
# Enable Home Assistant API | |||
api: | |||
sensor: | |||
- platform: adc | |||
pin: GPIO36 | |||
name: "Plant1" | |||
update_interval: 1s | |||
attenuation: 11db | |||
- platform: adc | |||
pin: GPIO39 | |||
name: "Plant2" | |||
update_interval: 1s | |||
attenuation: 11db | |||
- platform: adc | |||
pin: GPIO34 | |||
name: "Plant3" | |||
update_interval: 1s | |||
attenuation: 11db | |||
- platform: adc | |||
pin: GPIO35 | |||
name: "Plant4" | |||
update_interval: 1s | |||
attenuation: 11db | |||
switch: | |||
- platform: gpio | |||
pin: GPIO2 | |||
name: "GPIO2 Switch" | |||
</nowiki> |
Latest revision as of 21:24, 22 September 2022
Disclaimer: This page is work in progress! Right now, it is more or less a notepad for Martin.
ProjectInfoBox Automated Plant Watering | |
---|---|
Status: | in progress (since a looong time now) |
Release Date: | Most likely during dinner at the Milliways... |
Initiator: | Martin |
Materials Used: | Wood,Microcontroller |
Software Used: | Home Assistant |
As many others, Martin is quite lazy. Unfortunately, he also likes to have fresh herbs and other plants on his balcony.
Since this combination led to many dead plants, it was pretty clear that there needs to be some automated solution for this.
Vertical Farming
On a normal balcony, space is a very limited resource. Therefore, a solution was needed which allows to make use of vertical space rather than using up a lot of horizontal space.
In addition, it should be possible to build it from standard components which you can get from your local hardware store.
Using jardinieres which are arranged on top of each other with a self-built rack was the perfect solution for this.
In my case, I am using 4 jardinieres to grow plants in and a 5th one on top which is just being used to store water (see the project picture)
Supplying Water
In a first tests of the system, I thought using water pumps would be a good idea. Therefore, I got these 12V pumps and tested them. While they worked, they were pretty loud, so there would need to be logic which prevents the system from watering during night hours. Therefore, a more silent system was needed.
When thinking of how to achieve this, the idea of vertical farming came up, which allows the water storage to be the highest point of the system. With this, I can just use valves and let gravity do the work (isn´t gravity awesome?). I found some random 12V magnetic valves in the internet which I got for my system. Unfortunately, I cannot find them anymore.
Soil Moisture Sensor
In order to control the whole system, sensors are needed which are able to measure the soil moisture in a reliable way. If you want to measure soil moisture, there are in general two ways:
Resistive Measurement
Resistive measurement of soil moisture is a very easy thing. In principle, you put two electrodes into the soil, put power on one of them and measure how much power arrives at the second one.
With this, you have a very basic measurement of the soils resistance. The more power arrives at the second electrode (and thus the lower resistance), the more water is in the soil.
There are very cheap sensors which can measure the moisture this way.
The "controller" board they come with is capable of either providing the analogue value or provide a digital value which indicates the moisture to be above/below a certain threshold (adjustable by a potentiometer).
While these sensors provide you with correct values, they have a big disadvantage which is unfortunately in their underlying priciple: The electrodes need have direct contact to the soil. Applying power to the electrodes leads to corrosion, which leads to the sensor not working anymore. While this would not be super critical (you could just get a new one, since they are so cheap), most of these electrodes consist of cupper. The cupper will make its way into the soil and thus into the plants. Since we are talking about herbs and other plants I am planning to eat, this is pretty bad.
Capacitive Measurement
Another possibility of measuring soil moisture is capacitive measurement. Basically you are measuring the capacitance of a capacitor consisting of your sensor and the soil. A more detailed explanation can be found here.
The big benefit of these sensors is that there is no corrosion. Therefore, there is no danger for the plants and the health of the person eating them.
When this project started (in 2014), these sensors were quire expensive. However, in the meantime they got a lot cheaper and are not much more expensive than the resistive ones. I am using these ones, which provide the moisture level as an analogue voltage. Dependent on the microcontroller / computer they get attached to, an analogue-digital-converter (ADC) might be needed in order to read them (the raspberry pi has no ADC, the ESP8266 has 1, but can only handle up to 1V input, the ESP32 has two ADC with multiple channels being able to get 3 volt input (though you cannot use the second ADC when Wifi is on..... )).
System Architecture Decision
As most projects, there are different possibilities in regards of the system architecture. These can mainly be differentiated by the integration with other automation projects and the degree of flexibility. Of course, the different possibilities require different implementation efforts.
Microcontroller Side
Description | Pro | Con | ||
---|---|---|---|---|
Microcontroller Only | This means the microcontroller has to do everything: read the moisture, decide on when to water |
|
| |
Microcontroller plus central server | Dumb microcontroller | Microcontroller would just read the moisture, send it to the server, "business logic" on the server decides on watering time |
|
|
"Smart" microcontroller | Microcontroller would get config from the server, then read the moisture and decide on watering time itself. Server could be used for analytical purposes |
|
|
Server Side
Option | Details | Description | Pro | Con |
---|---|---|---|---|
Custom Server development | Custom software which contains the business logic regarding when to water the plant. High level of DIY and flexibility, but also high effort (dev and maintenance) |
|
| |
Standard server Software | OpenHab | Less DIY, but more integrated with other automation projects. Are analytical features provided out of the box? |
|
|
HomeAssistant |
|
|
For this project, Martin decided to go for a smart microcontroller, which uses HomeAssistant as a server.
Software Setup
Since the decision on the server side was to use Home Assistant, the microcontroller can run ESP Home. ESP Home automatically creates a PlatformIO project based on a configuration file. As an example, the config file for this project looks as follows:
esphome: name: test_platform_1 platform: ESP32 board: nodemcu-32s wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable logging logger: # Enable Home Assistant API api: sensor: - platform: adc pin: GPIO36 name: "Plant1" update_interval: 1s attenuation: 11db - platform: adc pin: GPIO39 name: "Plant2" update_interval: 1s attenuation: 11db - platform: adc pin: GPIO34 name: "Plant3" update_interval: 1s attenuation: 11db - platform: adc pin: GPIO35 name: "Plant4" update_interval: 1s attenuation: 11db switch: - platform: gpio pin: GPIO2 name: "GPIO2 Switch"