1 基于51单片机超声波测液位测距仪水位监测报警设计
1.1 功能介绍
本设计是一款基于STC89C52单片机的液位测量与报警系统,主要面向水箱、水池及工业液位监测场景。系统通过超声波模块HC-SR04实现非接触液位测量,并通过LCD1602液晶显示当前液位值,同时结合LED指示灯和蜂鸣器实现水位报警功能。
系统主要功能包括:
- 实时液位显示:使用1602液晶显示水位高度,单位为厘米,实时更新测量结果,方便用户随时查看水位情况。
- 高水位报警:当液位超过设定阈值(50cm)时,红灯点亮并触发蜂鸣器报警,提示用户液位过高,防止溢出。
- 正常水位显示:当液位低于阈值时,绿灯亮起,蜂鸣器不工作,指示水位正常。
- 上电复位及按键复位功能:保证系统上电后能够自动复位至初始状态,并可通过按键手动复位,保证系统稳定运行。
- 安全监控:通过非接触测量,避免液体直接接触传感器,提高系统安全性和可靠性。
该系统适用于家庭水箱、水池、工业储液罐及其他液位监测场合,能够实现自动液位监控和报警提示,提高安全性和管理效率。
2 系统电路设计
系统电路设计以STC89C52单片机为核心,包含液晶显示模块、超声波测距模块、LED指示灯模块、蜂鸣器报警模块和电源模块。
2.1 主控模块——STC89C52单片机
STC89C52单片机是系统的核心控制单元,负责液位测量、液晶显示、报警逻辑及状态控制:
- 功能:通过GPIO口控制LED灯和蜂鸣器,通过定时器捕获超声波测距脉冲宽度,计算水位高度,并输出至液晶显示屏;
- 接口:提供丰富的GPIO口用于LED灯、蜂鸣器和LCD接口,同时提供外部中断口以实现按键复位功能;
- 上电复位与按键复位:系统通过复位电路保证上电自动复位,并可通过按键实现手动复位,确保系统长期稳定运行。
2.2 液晶显示模块——LCD1602
液晶显示模块用于实时显示液位高度:
- 功能:显示当前水位的数值,并可显示提示信息,如“水位正常”或“水位过高”;
- 接口:通过数据总线(D0-D7)与单片机连接,结合RS、RW、E控制引脚实现数据写入与显示控制;
- 刷新逻辑:定时刷新液位显示内容,使用户能够随时获取最新水位信息。
2.3 超声波测距模块——HC-SR04
HC-SR04模块实现非接触液位测量:
- 工作原理:模块通过发送超声波脉冲,遇到水面后返回反射波,单片机通过计时脉冲宽度计算水面距离;
- 接口:Trig引脚用于触发超声波发送,Echo引脚用于接收回波信号;
- 功能:根据测得距离计算水位高度,数据传输至单片机进行处理和显示,同时判断是否触发报警。
2.4 LED指示灯模块
LED指示灯用于直观显示水位状态:
- 数量与类型:绿灯和红灯各一个,分别指示水位正常与水位过高状态;
- 驱动方式:通过单片机GPIO口直接驱动,或通过三极管进行电流增强;
- 功能:当水位低于阈值,绿灯亮起;当水位高于阈值,红灯亮起并触发蜂鸣器报警,提示用户采取措施。
2.5 蜂鸣器报警模块
蜂鸣器用于液位报警提示:
- 类型:有源蜂鸣器,通过单片机输出高电平即可驱动发声;
- 触发逻辑:当水位高于设定阈值50cm时蜂鸣器响起;低于阈值时关闭;
- 功能:提供声光报警,提高系统可视性和响应性,避免溢出风险。
2.6 电源模块
系统电源为各模块提供稳定电压:
- 电压要求:5V DC供电,稳定驱动单片机、LCD、LED灯及蜂鸣器;
- 电源管理:使用稳压芯片和滤波电容保证系统电压稳定,防止电源波动影响测量精度和报警可靠性。
3 程序设计
程序设计采用模块化思路,包括超声波测距、液晶显示、LED灯控制、蜂鸣器报警及按键复位处理模块。
3.1 超声波测距模块
超声波模块通过发送Trig脉冲并接收Echo回波,计算液位高度:
#include <reg52.h>
#include <intrins.h>
sbit Trig = P1^0;
sbit Echo = P1^1;
unsigned int distance;
void Delay_us(unsigned int us) {
while(us--) {
_nop_(); _nop_(); _nop_(); _nop_();
}
}
unsigned int Measure_Distance() {
unsigned int t = 0;
Trig = 0;
Delay_us(2);
Trig = 1;
Delay_us(10);
Trig = 0;
while(!Echo); // 等待高电平
while(Echo) { t++; Delay_us(1); } // 计时脉冲宽度
distance = t * 0.034 / 2; // 超声波速度计算水面距离
return distance;
}
该模块实现精确测量水面距离,并将测量值传递给液晶显示和报警判断模块。
3.2 液晶显示模块
LCD1602液晶显示模块显示水位高度及状态提示:
#include "lcd1602.h"
void Display_Level(unsigned int distance) {
LCD_Clear();
LCD_ShowString(1,1,"Water Level:");
LCD_ShowNum(1,14,distance,3); // 显示水位数值
if(distance > 50)
LCD_ShowString(2,1,"HIGH ALERT");
else
LCD_ShowString(2,1,"Normal");
}
实时刷新液位信息,使用户能够直观了解水位情况。
3.3 LED指示灯控制模块
根据水位判断LED灯亮灭状态:
sbit Green_LED = P2^0;
sbit Red_LED = P2^1;
void LED_Control(unsigned int distance) {
if(distance > 50) {
Red_LED = 1;
Green_LED = 0;
} else {
Red_LED = 0;
Green_LED = 1;
}
}
提供视觉化水位提示,配合蜂鸣器形成声光报警系统。
3.4 蜂鸣器报警模块
蜂鸣器报警根据水位状态触发:
sbit Buzzer = P2^2;
void Buzzer_Control(unsigned int distance) {
if(distance > 50)
Buzzer = 1;
else
Buzzer = 0;
}
当液位超出安全阈值时发出声音警告,提高安全性。
3.5 按键复位模块
按键复位用于手动恢复系统初始状态:
sbit Reset_Key = P3^2;
void Key_Reset(void) {
if(Reset_Key == 0) { // 检测按键按下
distance = 0;
LCD_Clear();
Green_LED = 0;
Red_LED = 0;
Buzzer = 0;
}
}
保证系统可以手动复位,方便维护和操作。
3.6 主程序逻辑
主程序循环检测水位并控制显示及报警:
void main() {
unsigned int water_distance;
LCD_Init();
Green_LED = 0;
Red_LED = 0;
Buzzer = 0;
while(1) {
water_distance = Measure_Distance();
Display_Level(water_distance);
LED_Control(water_distance);
Buzzer_Control(water_distance);
Key_Reset();
}
}
通过主循环实现液位检测、显示和报警的实时处理,确保系统长期稳定运行。
本设计充分利用STC89C52单片机的GPIO、定时器及中断功能,结合HC-SR04超声波模块实现非接触水位测量,并通过液晶显示、LED指示及蜂鸣器报警形成完整的水位监控系统,满足家庭及工业液位监测需求。
1072

被折叠的 条评论
为什么被折叠?



