基于51单片机超声波测液位测距仪水位监测报警设计
基于51单片机超声波测液位测距仪水位监测报警设计
1. 系统功能介绍
本设计是一款基于 STC89C52 单片机的智能水位监测与报警系统。系统主要利用 超声波测距原理 对水箱或储水池中的液位进行实时监测,通过 LCD1602 液晶显示屏 显示测得的水位高度。当水位超过设定阈值(50cm)时,系统自动点亮红色指示灯并启动蜂鸣器报警;当水位低于阈值时,系统点亮绿色指示灯并停止报警。
该系统结构简单、测量精确、响应迅速,具有较强的实用性与稳定性,可广泛应用于家庭水箱、农业灌溉、工业液位监测等场景。
系统的主要功能如下:
- 实时液位检测:通过 HC-SR04 超声波模块测量水位高度。
- 数值显示:LCD1602 实时显示水位值(以厘米为单位)。
- 状态指示:当水位低于50cm时,绿色LED点亮;当水位高于50cm时,红色LED点亮并蜂鸣器报警。
- 报警功能:超过阈值时自动报警,低于阈值时自动解除报警。
- 系统自复位:单片机具有上电复位与按键复位功能,确保系统运行可靠。
整个设计以低成本的硬件为基础,通过软硬件结合实现自动水位监测、显示与报警的智能控制系统。
2. 系统电路设计
系统整体电路以 STC89C52 单片机 为核心,外围电路包括超声波测距模块、LCD1602 显示模块、LED 指示灯电路、蜂鸣器报警电路以及电源稳压电路。各模块之间相互配合,实现液位检测、数据处理、显示与报警等功能。
2.1 单片机主控电路
本系统采用 STC89C52RC 单片机作为核心控制器,它是 8051 系列的增强型芯片,内部集成 8K Flash 程序存储器和 512B RAM,具备较强的运算与控制能力。
其主要功能如下:
- 负责超声波模块的触发与回波时间测量;
- 计算距离并换算为水位高度;
- 控制 LCD1602 显示数值;
- 控制 LED 指示灯和蜂鸣器工作状态。
复位与时钟电路设计说明:
- 上电复位电路:通过电容与电阻组成 RC 延时复位电路,在系统上电时自动产生复位信号,使单片机进入初始状态。
- 按键复位电路:外接复位按键,当按下时可人工复位系统。
- 晶振电路:使用 12MHz 晶体振荡器及两个 30pF 电容提供稳定时钟信号,保证单片机的工作频率。
2.2 超声波测距模块电路
系统采用常见的 HC-SR04 超声波模块 进行水位检测。模块内部包括超声波发射器、接收器及信号处理电路。工作原理是:
- 当单片机给模块的 Trig 引脚 发送一个 10μs 的高电平脉冲时,模块发出 8 个 40kHz 的超声波脉冲;
- 声波遇到液面反射回来后,由 Echo 引脚 输出一个与距离成正比的高电平脉冲;
- 单片机通过测量此高电平的持续时间计算出距离值。
测距公式为:
距离(cm) = (高电平时间 × 声速) / 2
由于声速约为340m/s,若使用定时器测得时间为 t
微秒,则:
距离(cm) = t / 58
系统通过测得超声波到液面的距离,再结合容器总高度即可换算出液位值。
2.3 LCD1602 液晶显示模块
LCD1602 是一款常用的字符型液晶显示器,可显示两行共32个字符。
其接口简单,显示稳定,非常适合单片机数据输出。
在本系统中,LCD1602 的主要作用为:
- 实时显示测得的液位高度(单位:cm);
- 显示状态提示信息(如“水位正常”“水位过高”等)。
LCD 的 RS、RW、E 三个控制引脚与单片机相连,数据端口接 P0 口。显示信息通过程序控制实现动态刷新。
2.4 LED 指示灯电路
LED 指示灯电路用于直观显示当前水位状态。系统设计两个LED灯:
- 绿色LED:水位低于50cm时点亮;
- 红色LED:水位高于50cm时点亮。
LED 通过限流电阻与单片机 I/O 口连接,当输出高电平时点亮对应指示灯。
2.5 蜂鸣器报警电路
蜂鸣器模块采用有源蜂鸣器,由单片机 I/O 控制。当检测到液位超过阈值时,单片机输出高电平驱动蜂鸣器发声,起到警示作用。
该电路具有结构简单、响应快速的特点,可有效提醒用户及时关闭进水或排水。
2.6 电源电路
系统供电采用 DC 5V 稳压电源,可由 USB 接口、电池或外部适配器供电。电源电路使用 AMS1117-5.0 稳压芯片,将输入电压稳定为 5V,为单片机、LCD、HC-SR04 等模块供电。
同时在电源输入端增加电解电容(100μF)与瓷片电容(104)进行滤波,确保系统工作稳定。
3. 程序设计
系统的软件部分以 C 语言编写,主要包括 主程序模块、超声波测距模块、LCD 显示模块、报警控制模块 四部分。
程序结构清晰,采用模块化设计思想,便于阅读与维护。
3.1 主程序设计
主程序是整个系统的控制核心,负责协调各模块工作。主要流程如下:
- 系统初始化(端口、LCD、定时器、超声波模块等);
- 启动超声波测距模块测量距离;
- 计算当前水位;
- 判断水位是否超过阈值;
- 控制LED与蜂鸣器状态;
- 刷新LCD显示内容。
主程序示例如下:
#include <reg52.h>
#include "lcd1602.h"
#include "hcsr04.h"
#include "delay.h"sbit RedLed = P2^0;
sbit GreenLed = P2^1;
sbit Buzzer = P2^2;float distance;void main()
{LCD_Init();LCD_ShowString(0,0,"Water Level Sys");while(1){distance = HCSR04_GetDistance(); // 获取距离值LCD_ShowString(0,1,"Level:");LCD_ShowNum(6,1,(unsigned int)distance,3);if(distance > 50) // 超过阈值报警{RedLed = 0;GreenLed = 1;Buzzer = 0;LCD_ShowString(11,1,"HIGH ");}else{RedLed = 1;GreenLed = 0;Buzzer = 1;LCD_ShowString(11,1,"LOW ");}Delay_ms(500);}
}
3.2 超声波测距程序设计
超声波模块通过 Trig 触发信号与 Echo 回波信号测距。程序利用单片机定时器精确测量高电平持续时间,从而计算距离。
测距函数如下:
#include <reg52.h>
#include "delay.h"sbit Trig = P1^0;
sbit Echo = P1^1;unsigned int HCSR04_GetDistance()
{unsigned int time = 0;float distance = 0;Trig = 1; // 发送触发信号Delay_us(10);Trig = 0;while(!Echo); // 等待回波开始TR0 = 1;while(Echo); // 等待回波结束TR0 = 0;time = (TH0<<8) | TL0;TH0 = 0; TL0 = 0;distance = (float)time * 0.017; // 换算为厘米return (unsigned int)distance;
}
程序逻辑说明:
- 向 Trig 口发送 10 微秒高电平;
- 等待 Echo 口返回高电平,并测量持续时间;
- 根据时间计算距离值。
3.3 LCD 显示程序设计
LCD 模块用于显示系统状态与实时水位。
采用标准 4 位或 8 位接口驱动,显示函数如下:
#include "lcd1602.h"void LCD_Display(float distance)
{LCD_ShowString(0,0,"Water Level:");LCD_ShowNum(13,0,(unsigned int)distance,3);LCD_ShowString(0,1,"cm");
}
通过循环刷新实现实时更新显示,使用户直观了解当前水位高度。
3.4 报警与指示控制程序设计
系统通过判断测量值控制 LED 与蜂鸣器状态,核心逻辑如下:
void Alarm_Control(float distance)
{if(distance > 50){RedLed = 0; // 红灯亮GreenLed = 1; // 绿灯灭Buzzer = 0; // 蜂鸣器响}else{RedLed = 1;GreenLed = 0;Buzzer = 1;}
}
该模块可扩展为分级报警,例如:
- 超过60cm连续报警;
- 超过80cm启动断水保护装置等。
4. 系统总结
本设计基于 STC89C52 单片机,通过超声波测距实现水位实时检测,并结合 LCD 显示、LED 指示与蜂鸣器报警功能,构建了一个完整的 水位智能监测系统。
系统的优点如下:
- 结构简单、成本低廉:采用常见电子元器件即可实现;
- 测量精度高:HC-SR04 测距精度可达±0.3cm;
- 反应灵敏:实时刷新显示与报警,无明显延迟;
- 安全可靠:具备复位保护与电源稳压设计;
- 可扩展性强:可增加继电器自动控制水泵等功能。
本设计不仅可作为学生实验与毕业设计项目,也具有实际工程应用价值,为液位智能监测领域提供了一种经济、可靠的实现方案。