DIY Automatic plant watering system
This project is about a moisture-sensing automatic plant watering system using 8051 microcontroller. The system simply senses the moisture level and switches on the irrigation pump when the moisture is below the set limit. The system switches off the pump when the moisture rises above the set point. The moisture level threshold can be set using a trim pot on the system. The status of the pump (whether ON or OFF) is displayed on a 16×2 LCD display. The system can be divided into three section as follows.
Sensing prob.
YL 69 moisture sensing probe is used to sense the moisture here. It is simply a fork-shaped PCB with tracks running on both sides of the legs. Â Just plug this probe into the soil where you want to sense the moisture. Image of the YL 69 sensing probe is given below.
Comparator circuit.
YL 38 comparator module is used in this project. It is a single channel opamp comparator based on L393 IC. This module just compares the output voltage of the sensing probe with a reference voltage and switches its voltage appropriately for the microcontroller to read. Circuit diagram of the YL 38 comparator module is shown below.
The output voltage of the sensing probe is connected to the inverting input of the opamp. When the moisture level is high more current passes through the sensing probe and so the voltage at the inverting pin will be higher than the reference. The reference can be set using the trim pot R2. At this condition output of the opamp goes low and sinks the LED D1 to make it glow. When the moisture is lower than the set point, the opposite happens. So in simple words, a LOW output of the opamp indicates a high moisture and a HIGH output of the opamp indicates a low moisture. The output of the opamp is marked as pin D0 on the sensor YL 38 module. This pin is connected to the microcontroller for further processing. LED D2 is just a power ON indicator. Capacitors C1 and C2 are noise filters.
Microcontroller section.
Microcontroller section senses the status of the comparator module and switches the irrigation motor appropriately. It also displays the status of the pump on the LCD screen. The power supply unit and the motor driver unit are incorporated in this section. Full circuit diagram of the project is given below.
Output pin of the comparator module (D0) is connected to P3.5 pin of the 8051 microcontroller. The microcontroller monitors the moisture level by polling the status of the P3.5 pin which is the output of the comparator.
Supporting Tutorials
Interfacing LCD Module to 8051 – read this tutorial to learn how to interface 16×2 LCD module to 8051.
Motor to 8051 – Â this tutorial teaches how to interface a DC motor to 8051.
Program
RS EQU P2.7
RW EQU P2.6
E EQU P2.5
ORG 00H
SETB P3.5
MOV TMOD,#00000001B
MAIN:ACALL DINT
ACALL TEXT1
JB P3.5, NEXT
ACALL LINE2
ACALL TEXT2
CLR P2.0
SJMP EXIT
NEXT:ACALL LINE2
ACALL TEXT3
SETB P2.0
EXIT:ACALL DELAY1
SJMP MAIN
DELAY1:MOV R0,#15D
BACK1: MOV TH0,#00000000B
MOV TL0,#00000000B
SETB TR0
HERE2: JNB TF0,HERE2
CLR TR0
CLR TF0
DJNZ R0,BACK1
RET
TEXT1: MOV A,#"M"
ACALL DISPLAY
MOV A,#"o"
ACALL DISPLAY
MOV A,#"i"
ACALL DISPLAY
MOV A,#"s"
ACALL DISPLAY
MOV A,#"t"
ACALL DISPLAY
MOV A,#"u"
ACALL DISPLAY
MOV A,#"r"
ACALL DISPLAY
MOV A,#"e"
ACALL DISPLAY
MOV A,#" "
ACALL DISPLAY
MOV A,#"C"
ACALL DISPLAY
MOV A,#"o"
ACALL DISPLAY
MOV A,#"n"
ACALL DISPLAY
MOV A,#"t"
ACALL DISPLAY
MOV A,#"r"
ACALL DISPLAY
MOV A,#"o"
ACALL DISPLAY
MOV A,#"l"
ACALL DISPLAY
RET
TEXT2: MOV A,#"["
ACALL DISPLAY
MOV A,#"O"
ACALL DISPLAY
MOV A,#"K"
ACALL DISPLAY
MOV A,#"]"
ACALL DISPLAY
MOV A,#" "
ACALL DISPLAY
MOV A,#"P"
ACALL DISPLAY
MOV A,#"u"
ACALL DISPLAY
MOV A,#"m"
ACALL DISPLAY
MOV A,#"p"
ACALL DISPLAY
MOV A,#" "
ACALL DISPLAY
MOV A,#"O"
ACALL DISPLAY
MOV A,#"F"
ACALL DISPLAY
MOV A,#"F"
ACALL DISPLAY
RET
TEXT3: MOV A,#"["
ACALL DISPLAY
MOV A,#"L"
ACALL DISPLAY
MOV A,#"o"
ACALL DISPLAY
MOV A,#"w"
ACALL DISPLAY
MOV A,#"]"
ACALL DISPLAY
MOV A,#" "
ACALL DISPLAY
MOV A,#"P"
ACALL DISPLAY
MOV A,#"u"
ACALL DISPLAY
MOV A,#"m"
ACALL DISPLAY
MOV A,#"p"
ACALL DISPLAY
MOV A,#" "
ACALL DISPLAY
MOV A,#"O"
ACALL DISPLAY
MOV A,#"N"
ACALL DISPLAY
RET
DINT:MOV A,#0CH
ACALL CMD
MOV A,#01H
ACALL CMD
MOV A,#06H
ACALL CMD
MOV A,#80H
ACALL CMD
MOV A,#3CH
ACALL CMD
RET
LINE2:MOV A,#0C0H
ACALL CMD
RET
CMD: MOV P0,A
CLR RS
CLR RW
SETB E
CLR E
ACALL DELAY
RET
DISPLAY:MOV P0,A
SETB RS
CLR RW
SETB E
CLR E
ACALL DELAY
RET
DELAY: CLR E
CLR RS
SETB RW
MOV P0,#0FFH
SETB E
MOV A,P0
JB ACC.7,DELAY
CLR E
CLR RW
RET
END
About the program.
will be added soon



sir/mam, in which software the programm will run.
Hi, the 8051 codes has problems and cannot function, can send me the correct codes? Thank you so much.
Hi. I have found this information very useful. Thank you.
I would like to know a few things regarding the code. Why is the input from the sensor attached to the timer T1 pin? Any specific reason?Also what is the exact output expected out of this code?
I put the same circuit and entered the program using multisim for simulation but it’s showing error for code mov a,#”m”
Could you help us how to fix it
Thanks for the useful information.
I used TC54VC as comparators in many different projects. It is extremely simple and least expensive.
Rusting of the probe is a real problem. The carbon rod inside the batteries can be used. They are very good conductors and do not rust.
In my distant past and in a less sophisticated manner I tried this sort of thing and found that the probes corroded or in some other way changed with time and exposure to soil. Think I tried various metals with little success.
Also read that impressing AC on the probes would mitigate this corrosion but never ‘played’ with it.