news 2026/6/15 20:45:12

基于单片机的智能水位控制系统设计(水箱+自动补水)【附代码】

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于单片机的智能水位控制系统设计(水箱+自动补水)【附代码】

📈 算法与建模 | 专注PLC、单片机毕业设计
✨ 擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导,毕业论文、期刊论文经验交流。

✅ 专业定制毕业设计

✅ 具体问题可以私信或查看文章底部二维码

智能水位控制系统广泛应用于高层建筑供水、工业冷却循环及农业灌溉中,其核心任务是维持水箱水位在设定区间,防止干烧缺水或溢出浪费。在控制器选型上,由于系统通常安装在水泵房等电磁噪声较大的环境中,单片机的抗干扰能力(EMC)是首选指标。推荐选用具有内部RC振荡器且抗噪性能优秀的工业级单片机,如STM8S系列或STC15系列,减少外部晶振电路受干扰的风险。系统电源设计通常需要从220V或380V市电获取,因此需要一个高质量的隔离型开关电源模块,将高压转换为5V或12V直流电。为了控制大功率水泵,单片机的I/O口必须通过光电耦合器(如PC817)与继电器驱动电路隔离,防止继电器线圈断电时的反向电动势或触点火花干扰干扰单片机逻辑。此外,考虑到水泵电机启动时的浪涌电流极大,可能会拉低电源电压导致单片机复位,因此PCB设计中电源走线要宽,且在单片机电源引脚处应并联大容量电解电容和高频陶瓷电容进行退耦。

(2)
水位检测传感器的选型与信号处理是系统的关键环节。常见的方案有接触式电极、浮球开关和非接触式超声波/投入式液位变送器。对于低成本民用系统,常采用三点式水位探头(高水位、低水位、公共端)或浮球开关。浮球开关结构简单,直接输出开关量,但机械结构易卡死。电极式探头利用水的导电性,成本极低,但长期使用电极容易腐蚀或结垢,导致接触不良。为了解决这个问题,设计中可采用交流信号检测法,即通过单片机I/O口产生方波信号加在电极上,避免直流电解腐蚀。对于精度要求较高的工业应用,则选用投入式液位传感器(4-20mA输出)或超声波测距模块。若使用模拟量传感器,单片机需通过ADC采集电压/电流信号,并将其换算为具体的水位高度。软件设计上,必须加入防抖动逻辑,因为水面波动会导致传感器信号在临界点频繁跳变,如果不加处理,会导致水泵频繁启停(“打嗝”现象),严重损坏电机。通常采用“软件施密特触发器”逻辑,即设定开启水位和停止水位之间有足够的“回差”。


控制逻辑与保护机制的设计旨在实现全自动化与设备安全。系统逻辑通常设定为:当水位低于“低水位”探头时,启动水泵补水;当水位上升至“高水位”探头时,停止水泵。这只是基础逻辑,更重要的是异常保护功能。首先是“水泵空转保护”,如果检测到水泵启动后一段时间内(如5分钟)水位仍无明显上升,可能意味着进水管破裂、水源缺水或水泵故障,此时系统应强制停机并报警,防止水泵烧毁。其次是“溢出保护”,若检测到水位超过“高水位”且水泵未停止(可能是继电器粘连),应触发独立的报警输出,甚至通过备用电路切断总电源。设计中还可加入“定时轮换”功能(如果是双泵系统),防止备用泵因长期不转而锈死。显示界面可采用LCD1602显示当前水位状态(低/中/高)和水泵运行状态。为了方便调试和手动应急,控制面板上应设计“自动/手动”切换开关,在手动模式下,操作人员可直接通过按钮控制水泵启停,此时单片机的自动逻辑失效,仅保留显示功能。

#include <reg52.h> #define PUMP_ON 0 #define PUMP_OFF 1 sbit PROBE_LOW = P1^0; // Low water level probe (1=No Water, 0=Water) sbit PROBE_HIGH = P1^1; // High water level probe sbit PROBE_OVER = P1^2; // Overflow probe sbit PUMP_RELAY = P2^0; // Relay Control sbit ALARM_BUZZ = P2^1; // Alarm sbit MODE_SW = P3^2; // Auto/Manual Switch bit pump_running = 0; unsigned int run_timer = 0; void Timer0_Init() { TMOD |= 0x01; // Mode 1 TH0 = 0xFC; // 1ms @ 12MHz (approx) TL0 = 0x18; ET0 = 1; TR0 = 1; EA = 1; } void Delay_ms(unsigned int ms) { unsigned int i, j; for(i=0; i<ms; i++) for(j=0; j<120; j++); } void Logic_Auto() { // Check Overflow Safety First if(PROBE_OVER == 0) { // Water touched overflow probe PUMP_RELAY = PUMP_OFF; ALARM_BUZZ = 0; // Alarm On pump_running = 0; return; } else { ALARM_BUZZ = 1; // Alarm Off } // Debounce Probes if(PROBE_LOW == 1) { // Low level not reached (Water is low) Delay_ms(100); if(PROBE_LOW == 1) { // Start Pump PUMP_RELAY = PUMP_ON; pump_running = 1; } } if(PROBE_HIGH == 0) { // High level reached (Water is full) Delay_ms(100); if(PROBE_HIGH == 0) { // Stop Pump PUMP_RELAY = PUMP_OFF; pump_running = 0; run_timer = 0; // Reset protection timer } } // Dry run / Fault protection // If pump runs too long without filling up if(pump_running && run_timer > 60000) { // > 60 seconds (scaled) PUMP_RELAY = PUMP_OFF; // Trigger Fault Alarm pattern ALARM_BUZZ = ~ALARM_BUZZ; } } void main() { PUMP_RELAY = PUMP_OFF; ALARM_BUZZ = 1; Timer0_Init(); while(1) { if(MODE_SW == 1) { // Auto Mode Logic_Auto(); } else { // Manual Mode: Pump controlled by another button (not shown) // or just kept off for safety in this snippet PUMP_RELAY = PUMP_OFF; } } } void Timer0_ISR() interrupt 1 { TH0 = 0xFC; TL0 = 0x18; static unsigned int count = 0; count++; if(count >= 1000) { // 1 second count = 0; if(pump_running) { run_timer++; // Increment seconds } else { run_timer = 0; } } }

如有问题,可以直接沟通

👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇👇

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 11:48:13

基于单片机的智能浴室换气系统设计【附代码】

&#x1f4c8; 算法与建模 | 专注PLC、单片机毕业设计 ✨ 擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅ 专业定制毕业设计✅ 具体问题可以私信或查看文章底部二维码智能浴室换气系统的设计目标是有效解决潮湿…

作者头像 李华
网站建设 2026/6/15 11:45:13

企业网盘和企业云盘的发展史你知道吗?

据《IDC全球数据存储趋势报告》显示&#xff0c;全球数据量增长速度每年超过30%&#xff0c;预计到2025年&#xff0c;总数据量将达到惊人的175 Zettabytes。这一惊人的数字不仅反映了信息时代的爆炸性发展&#xff0c;也明确地指出了各类企业在进行数据存储、共享、协作时面临…

作者头像 李华
网站建设 2026/6/15 11:49:03

从零开始训练YOLOv5:数据标注到模型导出

从零开始训练YOLOv5&#xff1a;数据标注到模型导出 在智能制造车间的一条SMT贴片生产线上&#xff0c;每秒都有数十块PCB板经过视觉检测工位。传统基于规则的图像处理方法面对日益复杂的元器件布局和新型缺陷类型时显得力不从心——划痕、偏移、漏贴等异常难以统一建模&#x…

作者头像 李华
网站建设 2026/6/15 11:45:21

dynamic_cast, static_cast以及reinterpret_cast介绍

dynamic_cast 和 static_cast 是 C 中两种完全不同的类型转换运算符&#xff0c;它们在安全性、使用场景和运行时行为上有显著区别。 一、核心区别概览 特性 static_cast dynamic_cast 转换时机 编译时 运行时 安全性 不安全&#xff08;程序员负责&#xff09; 安全&#xff0…

作者头像 李华
网站建设 2026/6/15 12:54:25

Git Commit日志分析TensorRT社区活跃度趋势

Git Commit日志分析TensorRT社区活跃度趋势 在AI模型从实验室走向生产线的过程中&#xff0c;推理效率往往成为决定产品成败的关键瓶颈。一个训练得再完美的神经网络&#xff0c;若在实际部署中延迟过高、资源消耗过大&#xff0c;也难以支撑真实业务场景的需求。正因如此&…

作者头像 李华