In this article, I will explain how you can make a water level controller using 8051 microcontroller. The water level controller saves the energy and it controls the water motor by sensing the water level in the tank.
Below I am mentioning a small code for 8051 microcontroller which controls the water level and blinks the led as per the water level in the tank. The water level controller using 8051 microcontroller automatically switches ON the motor whenever the tank is empty and switches OFF the motor whenever the tank is full.
Required basic components for water level indicator
- 8051 Microcontroller.
- 11.0592 MHz Quartz Crystal.
- 2 x 33pF Capacitor.
- 2 x 10KΩ Resistor (1/4 Watt).
- 10µF Capacitor.
- Push Button.
- 16 x 2 LCD Display.
- L293d (motor driver IC).
- DC Motor.
- Connecting wires.
- Power Supply.
Basic circuit diagram
C code for water level controller using 8051
#include <REGX51.H> //Led Represent water level #define ON 1 #define OFF 0 sbit LED0=P1^0; sbit LED1=P1^1; sbit LED2=P1^2; sbit LED3=P1^3; sbit LED4=P1^4; //Switch represent the //Five wire #define PRESS 1 #define NOT_PRESSED 0 sbit SW1=P3^3; sbit SW2=P3^4; sbit SW3=P3^5; sbit SW4=P3^6; sbit SW5=P3^7; // Motor and buzzer #define HIGH 1 #define LOW 0 sbit M_a=P1^5; sbit M_b=P1^6; // Lcd #define LCD P2 sbit RS =P3^0; sbit EN =P3^1; //Prototype for Lcd void lcdCommand(const char command); void displayOnLcd(const char *pszMessage); void lcdStart(void); void delay(unsigned int); /*Function to write command on Lcd*/ void lcdCommand(const unsigned char command) { LCD = command; RS = 0; EN = 1; delay(300); EN=0; } void lcdData(const unsigned char dataPrint) { LCD = dataPrint; RS=1; EN=1; delay(400); EN=0; } /*Function to Display string on Lcd*/ void displayOnLcd(const char *pData) { while(*pData) { lcdData(*pData); ++pData; delay(300); } } /*Function to Provide delay*/ void delay(unsigned int time) { unsigned int i; for(i=0; i<=time; i++); } /*Initialize the LCD*/ void lcdStart(void) { delay(500); lcdCommand(0x01); delay(500); lcdCommand(0x80); delay(500); lcdCommand(0x0C); } // Water Level Status unsigned char checkWaterLevel(void) { if(SW1==0) { LED0 = ON; if(SW2==0) { if(SW3 ==0) { if(SW4==0) { if(SW5==0) { return 100; } return 80; } return 60; } return 40; } return 20; } return 0; } void showStatusofWaterLevel(unsigned char status) { switch(status) { case 0: LED0 = OFF; LED1 = OFF; LED2 = OFF; LED3 = OFF; LED4 = OFF; displayOnLcd("0%"); break; case 20: LED0 = ON; LED1 = OFF; LED2 = OFF; LED3 = OFF; LED4 = OFF; displayOnLcd("20%"); break; case 40: LED0 = ON; LED1 = ON; LED2 = OFF; LED3 = OFF; LED4 = OFF; displayOnLcd("40%"); break; case 60: LED0 = ON; LED1 = ON; LED2 = ON; LED3 = OFF; LED4 = OFF; displayOnLcd("60%"); break; case 80: LED0 = ON; LED1 = ON; LED2 = ON; LED3 = ON; LED4 = OFF; displayOnLcd("80%"); break; case 100: LED0 = ON; LED1 = ON; LED2 = ON; LED3 = ON; LED4 = ON; displayOnLcd("100%"); break; } } void motorRun() { M_a=1; M_b=0; M_a=1; M_b=0; } void motorStop() { M_a=0; M_b=0; M_a=0; M_b=0; } int main() { unsigned char waterStatus = 0x00; unsigned char tmpWaterStatus = 0x01; while(1) { waterStatus = checkWaterLevel(); if(waterStatus != tmpWaterStatus) { lcdStart(); showStatusofWaterLevel(waterStatus); tmpWaterStatus = waterStatus; if(tmpWaterStatus != 100) { motorRun(); } else { motorStop(); } } } }
Water Level Controller using 8051 Circuit Simulation Video:
Recommended Post
- Fuel Monitoring system using 8051.
- Interfacing ADC0804 with 8051 microcontroller.
- Led blinking program in c for 8051.
- Interfacing of switch and led using the 8051
- Interfacing of Relay with 8051 microcontroller
- Moving message display on LCD using 8051
- LCD 4-bit mode c code for 8051.
- Create LCD custom characters for 16×2 alphanumeric LCD
- Interfacing of keypad with 8051
- Electronic digital lock using the 8051
- Interfacing of EEPROM with 8051 microcontrollers using I2C
- Embedded c interview questions.
- 8051 Microcontroller Pin Diagram and Pin Description.