基于STM32的自动水满报警系统设计
目录
- 引言
- 系统设计
- 硬件设计
- 软件设计
- 系统功能模块
- 水位检测模块
- 报警模块
- 自动控制模块
- 控制算法
- 水位检测逻辑
- 报警触发逻辑
- 代码实现
- 水位检测模块
- 报警控制模块
- 自动控制逻辑
- 系统调试与优化
- 结论与展望
1. 引言
水满报警系统在家庭、农业、工业等领域广泛应用,通过实时检测水位高度,当水位达到预设阈值时触发报警,避免因溢水导致资源浪费或设备损坏。本文设计了一款基于STM32的自动水满报警系统,通过水位传感器检测水位,结合报警器发出提示,并支持自动控制水泵的启停。
2. 系统设计
2.1 硬件设计
- 主控芯片:STM32F103,用于水位数据采集与处理、控制报警和水泵。
- 水位传感器:如浮子开关、超声波水位传感器,实时检测水位高度。
- 继电器模块:控制水泵的开关。
- 蜂鸣器模块:当水位达到设定阈值时,发出声光报警。
- LCD显示模块:实时显示水位高度和系统状态。
- 按键模块:用户可手动控制报警或切换模式。
- 电源模块:提供稳定的电源供给。
2.2 软件设计
- 水位检测模块:通过ADC或GPIO读取水位传感器的数据,判断当前水位高度。
- 报警控制模块:当水位超过预设值时,触发蜂鸣器和LED进行报警。
- 自动控制模块:根据水位数据,自动控制水泵的启停。
- 显示与交互模块:显示当前水位和报警状态,并通过按键切换工作模式。
3. 系统功能模块
3.1 水位检测模块
- 水位传感器:通过电压变化或数字信号判断水位高度。
- 采样与滤波:通过ADC采集水位传感器的信号,结合滤波算法减少噪声。
3.2 报警模块
当水位达到设定阈值时:
- 蜂鸣器报警:发出警报音提示用户。
- LED提示:通过LED闪烁提示当前水满状态。
3.3 自动控制模块
- 水泵控制:当水位低于设定值时启动水泵;当水位达到设定值时关闭水泵。
- 模式切换:支持自动模式和手动模式。
4. 控制算法
4.1 水位检测逻辑
通过水位传感器的输出信号判断当前水位:
- 如果水位低于低阈值,启动水泵。
- 如果水位高于高阈值,关闭水泵并触发报警。
4.2 报警触发逻辑
当水位超过高阈值:
- 激活蜂鸣器和LED。
- 在LCD上显示报警信息。
5. 代码实现
5.1 水位检测模块
#include "stm32f1xx_hal.h"#define WATER_SENSOR_PIN GPIO_PIN_0 // 水位传感器连接到ADC通道
#define ADC_MAX_VALUE 4096 // ADC分辨率
#define HIGH_WATER_THRESHOLD 3000 // 高水位阈值(ADC值)
#define LOW_WATER_THRESHOLD 1000 // 低水位阈值(ADC值)ADC_HandleTypeDef hadc1;void ADC_Init() {ADC_ChannelConfTypeDef sConfig = {0};hadc1.Instance = ADC1;hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;hadc1.Init.ContinuousConvMode = ENABLE;hadc1.Init.DiscontinuousConvMode = DISABLE;hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion = 1;HAL_ADC_Init(&hadc1);sConfig.Channel = ADC_CHANNEL_0;sConfig.Rank = ADC_REGULAR_RANK_1;sConfig.SamplingTime = ADC_SAMPLETIME_1CYCLE_5;HAL_ADC_ConfigChannel(&hadc1, &sConfig);
}uint16_t read_water_level() {HAL_ADC_Start(&hadc1);if (HAL_ADC_PollForConversion(&hadc1, 1000) == HAL_OK) {return HAL_ADC_GetValue(&hadc1); // 返回ADC值}return 0;
}
5.2 报警控制模块
#define BUZZER_PIN GPIO_PIN_1
#define LED_PIN GPIO_PIN_2void trigger_alarm() {HAL_GPIO_WritePin(GPIOB, BUZZER_PIN, GPIO_PIN_SET); // 打开蜂鸣器HAL_GPIO_WritePin(GPIOB, LED_PIN, GPIO_PIN_SET); // 打开LED
}void stop_alarm() {HAL_GPIO_WritePin(GPIOB, BUZZER_PIN, GPIO_PIN_RESET); // 关闭蜂鸣器HAL_GPIO_WritePin(GPIOB, LED_PIN, GPIO_PIN_RESET); // 关闭LED
}
5.3 自动控制逻辑
#define PUMP_PIN GPIO_PIN_3void control_pump(uint16_t water_level) {if (water_level < LOW_WATER_THRESHOLD) {HAL_GPIO_WritePin(GPIOB, PUMP_PIN, GPIO_PIN_SET); // 启动水泵} else if (water_level > HIGH_WATER_THRESHOLD) {HAL_GPIO_WritePin(GPIOB, PUMP_PIN, GPIO_PIN_RESET); // 关闭水泵trigger_alarm(); // 触发报警} else {stop_alarm(); // 停止报警}
}
5.4 主函数
int main() {HAL_Init();ADC_Init();while (1) {uint16_t water_level = read_water_level(); // 读取水位control_pump(water_level); // 控制水泵HAL_Delay(500); // 延时500ms}
}
⬇帮大家整理了单片机的资料
包括stm32的项目合集【源码+开发文档】
点击下方蓝字即可领取,感谢支持!⬇
点击领取更多嵌入式详细资料
问题讨论,stm32的资料领取可以私信!
6. 系统调试与优化
- 传感器校准:根据实际使用环境校准传感器阈值,确保检测精度。
- 滤波处理:加入均值滤波或中值滤波算法,减少传感器输出的噪声干扰。
- 实时性优化:优化水位检测和报警响应时间,确保系统实时性。
- 低功耗设计:在非工作状态下,关闭部分模块,延长系统电池续航时间。
7. 结论与展望
本文设计的基于STM32的自动水满报警系统,通过水位检测、自动控制和报警功能实现了智能化水位管理,具有操作简便、功能齐全和精度高的特点。未来可以扩展系统功能,如增加手机APP远程监控、无线数据传输模块,以及基于云平台的历史数据分析,进一步提升系统的实用性与智能化水平。
相关文章:

基于STM32的自动水满报警系统设计
目录 引言系统设计 硬件设计软件设计系统功能模块 水位检测模块报警模块自动控制模块控制算法 水位检测逻辑报警触发逻辑代码实现 水位检测模块报警控制模块自动控制逻辑系统调试与优化结论与展望 1. 引言 水满报警系统在家庭、农业、工业等领域广泛应用,通过实时…...

C语言 数组编程练习
1.将数组A的内容和数组B中的内容进行交换。(数组一样大) 2.创建一个整形数组,完成对数组的操作 实现函数Init()初始化数组全为0 实现print()打印数组的每个元素 实现reverse()函数完成数组元素的逆置 //2.创建一个整形数组,完…...

Windows 远程桌面连接Ubuntu操作 可以自由相互复制文件 粘贴板等
1.windows不用动,用IP和用户密码直接连 Ubuntu设置 详细参考:https://blog.csdn.net/qq_22370409/article/details/88914093 新建的用户需要加入sudo 使有权限。 效果 可以自由相互复制文件 粘贴板等。...

链表OJ题(一)
(一)轮转数组 . - 力扣(LeetCode) 题目描述:给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例一: 方法一:暴力求解 先用一个变量存储数组中的最后…...

C/C++中new/delete与malloc/free的区别及对象管理
C/C++中new/delete与malloc/free的区别及对象管理 在C/C++编程中,动态内存管理是一个核心且复杂的话题,其中new、delete、malloc和free是四个经常用于此目的的工具。尽管它们都涉及到内存的分配和释放,但它们在处理对象时的方式和效果却大相径庭。本文将通过示例来说明这些工…...

我的nvim的init.lua配置
nvim的配置文件路径在~/.config/nvim路径下: 一、目录如下: coc-settings.json文件是配置代码片段路径的文件init.lua配置文件的启动脚本lua/config.lua 全局配置文件lua/keymaps.lua 快捷键映射键文件lua/plugins.lua 插件的安装和配置文件…...
2025第1周 | JavaScript中的正则表达式
目录 1. 正则表达式是个什么东东?1.1 怎么定义正则1.2 对象字面量方式1.3 类创建方式 2. 怎么使用2.1 实例方法2.1.1 exec方法2.1.2 test方法 2.2 字符串中的方法2.2.1 match/matchAll2.2.2 replace/replaceAll2.2.3 split2.2.4 search 3. 规则3.1 修饰符3.2 字符类…...

基于 Python Django 的西西家居全屋定制系统(源码+部署+文档)
博主介绍:✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇…...
【Leetcode 热题 100】74. 搜索二维矩阵
问题背景 给你一个满足下述两条属性的 m n m \times n mn 整数矩阵: 每行中的整数从左到右按非严格递增顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 t a r g e t target target,如果 t a r g e t target target 在矩阵中&…...

讯方技术入库深圳市第一批建设培育产教融合型企业
产教融合是指产业与教育的紧密结合,是现代职业教育体系的重要组成部分。通过企业与学校之间的合作,使学生在学校所学的知识和技能能够更好地满足企业和社会的实际需求,同时也为企业提供高素质的技术人才,促进产业升级和经济发展。…...

阿里云代理商热销产品推荐
在数字化浪潮的推动下,企业对于云计算的依赖日益加深。阿里云,作为中国领先的云计算服务提供商,为企业提供了丰富多样的云产品和服务。本文将聚焦于阿里云代理商热销产品推荐,探讨其如何帮助企业高效利用云资源,加速数…...

海外云服务器能用来做什么?
海外云服务器不仅服务种类繁多,而且能满足多行业的需求,方便了越来越多的企业与个人。本文将探讨海外云服务器的核心服务及其适用领域,帮助企业更好地了解这一技术资源。 云存储:安全高效的数据管理 海外云服务器为用户提供了稳定…...
LeetCode 704 如何正确书写一个二分查找
题目链接 中文版:https://leetcode.cn/problems/binary-search/description/ 题目描述 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标…...

基于springboot+vue的餐饮连锁店管理系统的设计与实现
开发语言:Java框架:springbootJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工具:Navicat11开发软件:eclipse/myeclipse/ideaMaven包:…...

transfomer深度学习实战水果识别
本文采用RT-DETR作为核心算法框架,结合PyQt5构建用户界面,使用Python3进行开发。RT-DETR以其高效的实时检测能力,在多个目标检测任务中展现出卓越性能。本研究针对水果数据集进行训练和优化,该数据集包含丰富的水果图像样本&#…...
【CPU】堆栈和堆栈指针(个人草稿)
详细的 CPU 中堆栈指针(Stack Pointer, SP)及相关知识介绍 1. 什么是堆栈? 堆栈(Stack) 是一种后进先出(LIFO, Last In First Out)的数据结构,广泛用于计算机系统中,尤…...

BMS应用软件开发 — 2 单体电池的基本结构和工作原理
目录 1 单体电池基本组成 2 单体电池封装形式 3 电池充放电过程 4 不同电池材料性能差异 1 单体电池基本组成 单体电池其基本组成包括以下几个关键部分: 正极:正极材料通常由锂的金属氧化物构成,如锂钴氧化物(LiCoO2…...
uni-app开发-习惯养成小程序/app介绍
目录 一:功能概述 二:功能部分代码和截图 一:功能概述 1 习惯目标生成 创建习惯:用户可以添加新的习惯目标,每个习惯可以包含名称、描述、图标、目标天数。 关联习惯完成:用户通过设定达成目标以后,生成习惯养成记录。 2 习惯打卡 简单快捷的打卡:提供一个直观的界面…...

鸿蒙HarmonyOS开发:拨打电话、短信服务、网络搜索、蜂窝数据、SIM卡管理、observer订阅管理
文章目录 一、call模块(拨打电话)1、使用makeCall拨打电话2、获取当前通话状态3、判断是否存在通话4、检查当前设备是否具备语音通话能力 二、sms模块(短信服务)1、创建短信2、发送短信 三、radio模块(网络搜索&#x…...

Netty中用了哪些设计模式?
大家好,我是锋哥。今天分享关于【Netty中用了哪些设计模式?】面试题。希望对大家有帮助; Netty中用了哪些设计模式? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty 是一个高性能的网络通信框架,广泛…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...

CMS内容管理系统的设计与实现:多站点模式的实现
在一套内容管理系统中,其实有很多站点,比如企业门户网站,产品手册,知识帮助手册等,因此会需要多个站点,甚至PC、mobile、ipad各有一个站点。 每个站点关联的有站点所在目录及所属的域名。 一、站点表设计…...

从0开始学习R语言--Day17--Cox回归
Cox回归 在用医疗数据作分析时,最常见的是去预测某类病的患者的死亡率或预测他们的结局。但是我们得到的病人数据,往往会有很多的协变量,即使我们通过计算来减少指标对结果的影响,我们的数据中依然会有很多的协变量,且…...