Watering pump

How to water a lemon tree with Arduino PRO MINI, a RTC and a pump.

Dec 26, 2019

18170 views

9 respects

Components and supplies

1

Water barrel

1

12V 24W power supply

1

Linear Regulator (7805)

4

Screw terminal with 4 pins

3

Resistor 100 ohm

4

Nylon spacers M3

1

DC Power Connector, Jack

1

12V= mini water pump

8

Resistor 10k ohm

1

Arduino Pro Mini 328 - 5V/16MHz

1

DIP / SIP Switch, 1 Circuits

1

I2C 16x2 Arduino LCD Display Module

3

Screw terminals with 2 pins

1

Power MOSFET N-Channel

2

Female header 12 positions, 1 row, 0,1"

1

Custom PCB

1

1N4007 – High Voltage, High Current Rated Diode

1

Cable, USB to TTL Serial Converter 5V

1

High Accuracy Pi RTC (DS3231)

1

Tactile Switch, Top Actuated

Tools and machines

1

Soldering Station Power Supply, For Weller WX Soldering System

1

Circuit Board Holder, Rework

1

Fume Extraction, 2.5 m Arms

Project description

Code

Untitled file

arduino

Watering system (one pump)

arduino

Although the PCB is suitable to drive two pumps, I needed only one. So I developed the code to drive only pump 1. Obviously you can modify the code to drive both pumps with different operational times. You can also extend scheduling selections using pins 7 and 8 of the DIP switch, that I didn't use yet. In the header you will find the schedule table.

Untitled file

arduino

Downloadable files

Schematics and circuits drawn using FRITZING

Schematics and circuits drawn using FRITZING

Geerber files for the PCB

Geerber files for the PCB

Schematics and circuits drawn using FRITZING

Schematics and circuits drawn using FRITZING

Geerber files for the PCB

Geerber files for the PCB

Comments

Only logged in users can leave comments

kana003

8 months ago

hi, what a great project. Im doing a similar project for school and having a hard time getting the water pump to work with a soil mositure sensor. Could you please show you're attemt with a moisture sensor. thank you

Anonymous user

2 years ago

Thank you for your kind explanation, I have a question I want to run the pump every 6 months. How do I set it up? .please answer about my question. thank you...

mbraccagni

2 years ago

I used the subroutine readDS3231time(byte *second,byte *minute,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month,byte *year) to read seconds, minutes, hours, the day of the week. The easiest solution, I think, is to use pin 8 or pin 9 or both as multipliers to set more then 8 days. If you modify line 98 as follow giorni = (4*digitalRead(5) + 2*digitalRead(6) + digitalRead(7) +1) * (digitalRead(8)*10 +1); you will count from 1 to 8 days (giorni) setting pin 8 = LOW, or 10, 20, 30, ... 80 days setting pin 8 = HIGH. 6 months are 180 days, so if you modify line 98 as follow giorni = (4*digitalRead(5) + 2*digitalRead(6) + digitalRead(7) +1) * (digitalRead(8)*10 + 1) * (digitalRead(9)*3 + 1); and set pins 5 = HIGH, 6 = LOW, 7 = HIGH, 8 = HIGH, 9 = HIGH, you will obtain 6 x 10 x 3 = 180. But if you don't need any regulation, you can also write: giorni = 180; and that's it! ATTENTION: the variable minutiMancanti is defined as integer! maybe you must redefine it as long integer, because 6 months are many more the 32000 minutes!!!!!!

jmajid

4 years ago

Thanks for sharing this project... it's very close to something I am looking to implement also, except instead of watering a plant, I am looking to add de-chlorinator to a pond and this has given me some ideas and a starting point. Much appreciated!

mbraccagni

2 years ago

I'm happy to be of service!

Anonymous user

5 years ago

Thank you for your kind explanation, I have a question I want to run the pump every 6 months. How do I set it up? .please answer about my question. thank you...

mbraccagni

2 years ago

I used the subroutine readDS3231time(byte *second,byte *minute,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month,byte *year) to read seconds, minutes, hours, the day of the week. The easiest solution, I think, is to use pin 8 or pin 9 or both as multipliers to set more then 8 days. If you modify line 98 as follow giorni = (4*digitalRead(5) + 2*digitalRead(6) + digitalRead(7) +1) * (digitalRead(8)*10 +1); you will count from 1 to 8 days (giorni) setting pin 8 = LOW, or 10, 20, 30, ... 80 days setting pin 8 = HIGH. 6 months are 180 days, so if you modify line 98 as follow giorni = (4*digitalRead(5) + 2*digitalRead(6) + digitalRead(7) +1) * (digitalRead(8)*10 + 1) * (digitalRead(9)*3 + 1); and set pins 5 = HIGH, 6 = LOW, 7 = HIGH, 8 = HIGH, 9 = HIGH, you will obtain 6 x 10 x 3 = 180. But if you don't need any regulation, you can also write: giorni = 180; and that's it! ATTENTION: the variable minutiMancanti is defined as integer! maybe you must redefine it as long integer, because 6 months are many more the 32000 minutes!!!!!!