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
7 Comments
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.