基于51单片机超声波测液位测距仪水位监测报警设计

1 基于51单片机超声波测液位测距仪水位监测报警设计

1.1 功能介绍

本设计是一款基于STC89C52单片机的液位测量与报警系统,主要面向水箱、水池及工业液位监测场景。系统通过超声波模块HC-SR04实现非接触液位测量,并通过LCD1602液晶显示当前液位值,同时结合LED指示灯和蜂鸣器实现水位报警功能。

系统主要功能包括:

  1. 实时液位显示:使用1602液晶显示水位高度,单位为厘米,实时更新测量结果,方便用户随时查看水位情况。
  2. 高水位报警:当液位超过设定阈值(50cm)时,红灯点亮并触发蜂鸣器报警,提示用户液位过高,防止溢出。
  3. 正常水位显示:当液位低于阈值时,绿灯亮起,蜂鸣器不工作,指示水位正常。
  4. 上电复位及按键复位功能:保证系统上电后能够自动复位至初始状态,并可通过按键手动复位,保证系统稳定运行。
  5. 安全监控:通过非接触测量,避免液体直接接触传感器,提高系统安全性和可靠性。

该系统适用于家庭水箱、水池、工业储液罐及其他液位监测场合,能够实现自动液位监控和报警提示,提高安全性和管理效率。


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指示及蜂鸣器报警形成完整的水位监控系统,满足家庭及工业液位监测需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

点灯小铭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值