This DIY project is used to automate water delivery to plants keeping them hydrated and refreshed, its a must have for people going on frequent vacations and or having second home where administrating water daily is not feasible.
Step 1: List of Materials
- 3v to 5v DC pump
- Arduino Uno
- BC547 Transistor
- 2K 1/4W 1pcs
- 560K 1/4W 2pcs
- 1N4007 general purpose diode for clamping EMF
- Male to Male header wires
- Salin Piping (any medical store)
- Container for Water tank
- M3 mounting screws
- Power bank Larger the better
Total cost approx:500 INR or 7$ to 8$ excluding arduino and power bank
Step 2: Assembly
The whole project is based on 2 sub parts:
1)Timed water pump
2)Water level tank
1)Timed water pump:
The basic necessity of the given project was to deliver certain amount of water at predefined time, to achieve this i simply put a submersible water pump inside a water reservoir ie the water container now for the quantity of the water delivered i choose time as my unit as it simplifies the design. To deliver it in a timely fashion ie: in this case daily i simply wrote Arduino sketch with a large sleep in the loop function which basically does the following:
Switch the pump on for 10 Seconds
Sleep for 2 hours
The problem with approach was the pump would run even when the water was not present and giving no indication to user to refill the water container. there comes the next part to play:
2)Water level tank:
There had to be some way to notify Arduino that there was no water in the tank to stop the watering cycle and beep or blink to the user to refill the water.
As simple circuit can be made to check this Resistive method: when water is present between 2 electrodes current will pass through it this happens cause of impurities in the water. when water is absent between the electrodes no current flows air is bad conductor of electricity thus open circuit. though this can easily be read by ADC pins of Arduino but i wanted to conserve those pins for future sensors upgrades to this projects so wanted to convert this digital inputs, i choose the simple method of pulldown resistors 560K which gave me a fair digital output.
Thus now Ardunio knowns when the tank is dry this helps it to stop the watering cycle and Beep a buzzer or Blink an led to indicate its dry.
Combined these two functions in sketch pseudo code for the same looks like below:
Check water level in tank;
Is it empty then beep to the user:
Else it has water then switch on the pump:
Wait for 10 seconds:
Stop the pump
Sleep for another 2 Hours
Step 3: Water Level Sensor
Step 4: Soil Moisture Sensor
Step 5: Soil Temperature Sesor
Step 6: Learnings and Improvements
1)Hydrostatic force inside the tank decreases as the level of water drops which doesn't make water delivery consistent compared when tank is full.
2)Placing the water tank above the level where it has to deliver water makes water to be delivered continuously simple physics at play here but i tend to forget it always placing the tank a level above the plants.
3)Need to port this to ESP8266 which will make it IOT project after which it can be monitored by freeboard.io
4)Need compact and elegant case design for this
5) Convert it to Solar charging
6)Improve the water delivery algorithm using soil moisture level, outside temperature and soil temperature parameters.
7)Deep Sleep Mode to conserve battery.
8)Better water level measurement contact-less using IR or Ultrasonic Sensors(Current method creates electrolysis which will erode the metal soon)
Step 7: Pump Driver Circuit
Step 8: Ambient Light Sensor
Step 9: Case Design
There are 4 parts to this projects
1)Tank with pump and water level sensor.
2)All electronics, controller and battery.