Automated Plant Watering Jar
by crafttech in Circuits > Microcontrollers
412 Views, 1 Favorites, 0 Comments
Automated Plant Watering Jar
It is a microcontroller-based smart-home equipment for watering two plants. It starts automatically the watering of the plants when the moisture sensors indicate the need for it. It was created from a broken-handle water filter jar and it is an upgrade and improvment of a former plant monitoring system. The former gadget is completed with a peristraltic pump, a water tank and watering pipes in a new and compact form. The water tank is the lower/outer part of the jar, the circuit and the pump is placed in the inner part.
Supplies
The used items:
- reused broken water filter jug
- mini peristraltric pump 6V
- Wio Lite W600 - ATSAMD21 Cortex-M0 wireless development board
- Grove Shield for Wio Lite
- 2 Grove Soil Moisture Sensors
- Grove - 16x2 LCD (White on Blue)
- grove cables
- USB-C cable
- silicone cable
- some bolts and nuts to fix
- electric power supply
The Circuit
The above circuit was assembled.
Assembly
1 - Setting the jar - cutting off the rest of the broken handle
2 - Mounting the pump into the bottom of the inner part of the jar
3 - Mounting the circuit (board, relay, lcd panel) into the top of the inner part of the jar
4 - Attaching cables, sensors and pipes and sealing the inner part of the jar
5 - Placement sensors and pipes in the plant's pot
This smart gadget can work with a 5V power bank, or any 5V adapter.
Code Preparation
Before uploading the code in Arduino IDE, Seeed SAMD boards should be installed. Instructions can be found here: https://wiki.seeedstudio.com/Wio-Lite-W600/
For upload the Seeeduino Zero board among the Seeed SAMD Boards have to be selected as board type.
Upload Code
/*Plant irrigation 1.0 VI 2023 */
#include <Wire.h>
#include "rgb_lcd.h"
rgb_lcd lcd;
void pump(){
digitalWrite(D5, HIGH); // turn relay on
Serial.println("Relay on");
delay(8000);
digitalWrite(D5, LOW); // turn relay off
Serial.println("Relay off");
}
void setup()
{
pinMode(D5, OUTPUT);
lcd.begin(16, 2); // set up the LCD's number of columns and rows
lcd.print("Starting..."); // Print initialization message to the LCD
delay(2000);
lcd.clear();
}
void loop(){
float moist1 = analogRead(A0);
float moist2 = analogRead(A3);
Serial.println("Moisture, palmtree: ");
Serial.println(moist1);
if (moist1 > 300){
Serial.println("Palmtree: Alright.");
lcd.setCursor(0, 0); //set the cursor to column 0, line
lcd.println("Palm: Alright.");
}
else if (300 >= moist1){
Serial.println("Palmtree: Irrigation is required!");
lcd.setCursor(0, 0);
lcd.println("Palm: Irrigate!");
}
Serial.println("Moisture, avokado: ");
Serial.println(moist2);
if (moist2 > 300){
Serial.println("Avokado:Alright.");
lcd.setCursor(0, 1);
lcd.println("Avok.:Alright.");
}
else if (300 >= moist2){
Serial.println("Avokado: Irrigation is required!");
lcd.setCursor(0, 1);
lcd.println("Avok.:Irrigate!");
}
if ((300 >= moist2)||(300 >= moist1)){
pump();
}
delay(10000);
}