基于STM32的智能抽水灌溉系统设计(蓝牙版)

✌️✌️大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是基于《基于STM32的智能抽水灌溉系统设计》。

目录

1、系统功能

2.1、硬件清单

2.2、功能介绍

2.3、控制模式

2、演示视频和实物

3、系统设计框图

4、软件设计流程图

5、原理图

6、主程序

7、总结

1、系统功能

2.1、硬件清单

STM32F103C8T6 最小核心控制板 + 继电器 + 风扇模块 + 0.96 寸 OLED 显示屏 + 蜂鸣器 + 土壤湿度传感器 + DHT11 温湿度传感器 + 蓝牙模块 + 4 个按键

2.2、功能介绍

(1)STM32F103C8T6 最小核心控制板:作为系统核心,负责协调和控制各硬件模块运行,处理传感器数据并执行相应控制逻辑。
(2)继电器:控制水泵的启停,当系统触发水泵开启条件时,通过继电器接通水泵电路。
(3)风扇模块:在自动模式下,当环境温度大于设定阈值时自动启动,用于散热或调节环境温度;手动模式下可通过按键直接控制。
(4)0.96 寸 OLED 显示屏:实时显示土壤湿度、环境温度湿度等传感器数据,以及系统当前工作模式(手动 / 自动)和各阈值设置信息。
(5)蜂鸣器:当土壤湿度大于设定阈值时触发报警,提醒用户土壤湿度过高;支持通过蜂鸣器报警开关取消报警。
(6)土壤湿度传感器:检测土壤的湿度值,为系统判断是否需要开启水泵灌溉提供数据依据。
(7)DHT11 温湿度传感器:检测环境的温度和湿度,用于触发风扇启停等相应控制动作。
(8)HC-05蓝牙模块:连接手机,实现手机与系统的数据交互,用户可通过手机查看传感器数据或远程控制。
(9)4 个按键:第 1 个按键:模式切换按键,用于在手动模式和自动模式之间切换。第 2-4 个按键:在自动模式下,用于设置土壤湿度、温度、湿度的阈值;在手动模式下,用于直接控制外设(如水泵、风扇等)。

2.3、控制模式

(1)自动模式:
   上电默认模式,系统根据传感器检测值与设定阈值的对比自动执行动作:
     当土壤湿度<设定阈值时,打开水泵进行灌溉;
     当环境温度>设定阈值时,打开风扇;
     当土壤湿度>设定阈值时,触发蜂鸣器报警(可通过报警开关取消)。
     支持通过第 2-4 个按键进入阈值设置界面,调整土壤湿度、温度等参数的触发阈值。
(2)手动模式:
     通过第 1 个按键切换至手动模式,此时可通过按键直接控制外设启停。

2、演示视频和实物

基于STM32的智能抽水灌溉系统设计

 

3、系统设计框图

4、软件设计流程图

5、原理图

 

6、主程序

#include "sys.h"                //头文件
/***********************************************************************************************
同学好!我们是5132单片机设计,定制单片机设计,实物和说明书均可定制,欢迎大家咨询。VX:lwfw123456789
其他项目演示视频和说明请大家移步哔哩哔哩、CSDN和公众号等。
淘宝:5132单片机设计
哔哩哔哩:5132单片机设计
CSDN:    5132单片机设计
公众号:  5132单片机设计
抖音  :  5132单片机设计
小红书:  5132单片机设计
咸鱼:    5132单片机设计
************************************************************************************************/
#include "delay.h"
#include "led.h"
#include "Key.h"
#include "Buzzer.h"
#include "OLED.h"
#include "AD.h"
#include "MyRTC.h"
#include "dht11.h"
#include "Serial.h"char result[100];
uint32_t bufe[5];           //存储传感器采集的数据
uint16_t AD4;    //存储4路ADC值
uint8_t RxData;      //蓝牙接收到的数据
uint32_t WenYu = 40;   //光照强度阈值上限
uint32_t ShiYu = 40;     //光照强度阈值下限
uint32_t TuShiYu = 40;     //光照强度阈值下限u8 temp, humi;                //存放温湿度
u8 state, state2, state2_1,state2_2,state3;         //按键状态标志
u8 t = 0;                       //传感器读取时间间隔
uint8_t KeyNum;                      //存储按键值void shoudong()
{if (KeyNum == 2)        //按键{delay_ms(20);if (KeyNum == 2){state2++;if (state2 > 1){state2 = 0;}}}if (state2 == 0){FengShan_ON();}if (state2 == 1){FengShan_OFF();}if (KeyNum == 3)        //按键{delay_ms(20);if (KeyNum == 3){state2_1++;if (state2_1 > 1){state2_1 = 0;}}}if (state2_1 == 0){ShuiBen_ON();}if (state2_1 == 1){ShuiBen_OFF();}if (KeyNum == 4)        //按键{delay_ms(20);if (KeyNum == 4){state2_2++;if (state2_2 > 1){state2_2 = 0;}}}if (state2_2 == 0){Buzzer_Turn();}if (state2_2 == 1){Buzzer_OFF();}if (Serial_GetRxFlag() == 1){RxData = Serial_GetRxData();     //蓝牙接收switch (RxData){case 1:state2++;if (state2 > 1){state2 = 0;}break;case 2:state2_1++;if (state2_1 > 1){state2_1 = 0;}break;case 3:state2_2++;if (state2_2 > 1){state2_2 = 0;}break;default:break;}}
}
void zhidong()
{ if(bufe[2]<TuShiYu){ShuiBen_ON();		   }else{ShuiBen_OFF();		  		}if(bufe[0]>WenYu){FengShan_ON();	   }else{FengShan_OFF();	  		}	if(bufe[1]>ShiYu){Buzzer_Turn();	   }else{Buzzer_OFF();	  		}				if (KeyNum == 2)                          //自动模式下PB0按键控制阈值切换{delay_ms(20);if (KeyNum == 2){state3++;if (state3 > 2){state3 = 0;}}}if (state3==1){if (KeyNum == 3)WenYu++;         //光照强度上限加if (KeyNum == 4)WenYu--;            //光照强度上限减}if (state3==2){if (KeyNum == 3)ShiYu++;if (KeyNum == 4)ShiYu--;}if (state3==0){if (KeyNum == 3)TuShiYu++;if (KeyNum == 4)TuShiYu--;}		
}
int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级delay_init();      //延时函数初始化LED_Init();            //初始化与LED连接的硬件接口DHT11_Init();Buzzer_Init();             //下面为外设初始化OLED_Init();Key_Init();AD_Init();Serial_Init();   //串口1初始化MyRTC_Init();OLED_ShowChinese(2, 1, 63);OLED_ShowChinese(2, 2, 64);OLED_ShowChinese(2, 3, 65);OLED_ShowChinese(2, 4, 66);OLED_ShowString(2, 9, ":");		OLED_ShowChinese(3, 1, 26);OLED_ShowChinese(3, 2, 28);OLED_ShowString(3, 5, ":");	OLED_ShowChinese(3, 5, 27);OLED_ShowChinese(3, 6, 28);OLED_ShowString(3, 13, ":");OLED_ShowChinese(4, 1, 67);OLED_ShowChinese(4, 2, 68);OLED_ShowString(4, 5, ":");	OLED_ShowString(1, 5, "XX:XX:XX");	while (1){MyRTC_ReadTime();    //读取时间(每一个页面都有时间显示)OLED_ShowNum(1, 5, MyRTC_Time[3], 2);    //时OLED_ShowNum(1, 8, MyRTC_Time[4], 2);    //分OLED_ShowNum(1, 11, MyRTC_Time[5], 2);   //秒DHT11_Read_Data(&temp,&humi);   //读取温湿度并显示在OLED上bufe[0]=temp;	bufe[1]=humi;OLED_ShowNum(3, 6, bufe[0], 2);OLED_ShowNum(3, 14, bufe[1], 2);OLED_ShowNum(4, 6, TuShiYu, 2);OLED_ShowNum(4, 10, WenYu, 2);OLED_ShowNum(4, 14, ShiYu, 2);if (t % 10 == 0){				bufe[2] = TS_GetData(ADC_Channel_4);    //土壤传感器     PA4
//            if (AD4 > 4000)AD4 = 4000;
//            bufe[2] = (u8)(100 - (AD4 / 40));OLED_ShowNum(2, 10, bufe[2], 3);OLED_ShowString(2, 13, "%");       }t++;Serial_SendString(result);	sprintf(result, " Wen=%d, Shi=%d,\n TuRangShiDu=%d", bufe[0], bufe[1],  bufe[2]);KeyNum = Key_GetNum();if (KeyNum == 1){delay_ms(20);if (KeyNum == 1){state++;if (state > 1){state = 0;}}}if (state == 0)    //自动模式{OLED_ShowChinese(1, 7, 51);OLED_ShowChinese(1, 8, 52);zhidong();}if (state == 1)    //手动模式{OLED_ShowChinese(1, 7, 18);OLED_ShowChinese(1, 8, 52);shoudong();}	 }
}

7、总结

本文介绍了一个基于STM32F103C8T6的智能抽水灌溉系统设计。系统硬件包括核心控制板、继电器、传感器(土壤湿度、DHT11温湿度)、OLED显示屏、蜂鸣器和蓝牙模块等。系统支持两种工作模式:自动模式下根据传感器数据自动控制水泵和风扇;手动模式下可通过按键或蓝牙远程控制外设。软件设计采用模块化编程,实现数据采集、阈值设置、设备控制等功能。该项目实现了智能化农业灌溉,具有实时监测、自动控制和远程管理等特点,为现代农业灌溉提供了实用解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.tpcf.cn/web/88929.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CISSP知识点汇总- 通信与网络安全

CISSP知识点汇总 域1---安全与风险管理域2---资产安全域3---安全工程域4---通信与网络安全域5---访问控制域6---安全评估与测试域7---安全运营域8---应用安全开发一、安全网络架构和保护网络组件 1、OSI 7层协议模型 应用层:SMTP、HTTP、SNMP 、TELNET、 FTP、SFTP、POP3、IM…

C++怎么将可变参数传递给第三方可变参数接口

文章目录&#x1f527; 1. 使用 va_list 转发&#xff08;兼容C/C的传统方案&#xff09;⚙️ 2. 模板参数包转发&#xff08;C11 类型安全方案&#xff09;&#x1f9e9; 3. 替代方案&#xff1a;参数封装与适配**方案A&#xff1a;使用 std::initializer_list (同类型参数)**…

服务端实现阿里云OSS直传

介绍 阿里云上传 OSS 有两种方式&#xff0c;一种是普通上传&#xff0c;一种是客户端直传。 普通上传&#xff0c;就是需要先将文件上传到服务端&#xff0c;然后调用接口将文件上传到阿里云。 当然这种方案经常出现不合理的使用方式&#xff0c;即客户端充当服务端的角色&…

on-policy和offpolicy算法

一句话总结On-policy&#xff08;同策略&#xff09;&#xff1a;边学边用&#xff0c;用当前策略生成的数据更新当前策略。例子&#xff1a;演员自己演完一场戏后&#xff0c;根据观众反馈改进演技。Off-policy&#xff08;异策略&#xff09;&#xff1a;学用分离&#xff0c…

CA-IS3082W 隔离485 收发器芯片可能存在硬件BUG

RT&#xff0c;这个RS485 隔离收发器芯片基本上不可用。本来要买CA-IS3082WX&#xff0c;不小心在某宝买到了没有X 的CA-IS3082W。立创上说没有X 的版本已经停产&#xff0c;连对应的数据手册都找不到&#xff0c;全换成WX 了。 这类半双工485 收发器芯片电路一般都直接把DE 和…

dockerfile 笔记

# 设置JAVA版本 FROM openjdk:20-ea-17-jdk MAINTAINER aaa # 指定存储卷, 任何向/tmp写入的信息都不会记录到容器存储层 VOLUME /tmp # 拷贝运行JAR包 ARG JAR_FILE COPY app.jar /app.jar RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo "Asia/…

高德开放平台携手阿里云,面向开发者推出地图服务产品MCP Server

高德开放平台携手阿里云&#xff0c;面向开发者推出地图服务产品MCP Server&#xff0c;通过技术能力与生态资源的深度协同&#xff0c;助力开发者高效构建标准化地图服务&#xff0c;加速智能化场景落地。 高德开放平台携手阿里云&#xff0c;面向开发者推出MCP Server技术融合…

【论文阅读】AdaptThink: Reasoning Models Can Learn When to Think

AdaptThink: Reasoning Models Can Learn When to Think3 Motivation3.1 理论基础3.2 NoThinking在简单问题中的优势3.3 动机总结4. AdaptThink4.1 约束优化目标数学建模基本定义原始优化问题惩罚项转换归一化处理策略梯度实现优势函数定义PPO风格损失函数4.2 重要性采样策略问…

Redis高可用集群一主从复制概述

一、环境概述在分布式集群系统中为了解决服务单点故障问题&#xff0c;通常会把数据复制出多个副本部署到不同的机器中&#xff0c;满足故障恢复和负载均衡等需求。Redis也是如此&#xff0c;它为我们提供了复制功能&#xff0c;实现了相同数据的多个Redis副本。复制功能是高可…

Java 树形结构、层级结构数据构建

目录前言一、树状结构数据库存储二、工具类三、测试四、自定义树节点返回类型&#xff08;只保留部分字段&#xff09;1. 新增 TreeNodeDTO 类2.修改TreeUtil 类3.测试4.输出前言 有时候&#xff0c;开发过程中我们会遇到一些树状层级结构。 比如&#xff0c;公司部门组织架构…

求解线性规划模型最优解

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 既然选择了远方&#xff0c;当不负青春…

达梦国产数据库安装

打开ISO 、文件点击运行接受选择安装路径数据初始化 新数据库要创建数据库实例 选择一般用途数据库位置 选择所以系统用户&#xff0c;设置初始密码创建示例库可以选可以不选查找最近添加文件登录

互斥锁与同步锁

1. 锁的本质&#xff1a;解决并发问题的基石在多线程/多进程环境中&#xff0c;临界区&#xff08;Critical Section&#xff09; 是访问共享资源的代码段。锁的核心目标是确保互斥访问——任意时刻仅有一个执行单元能进入临界区。// 典型临界区示例 pthread_mutex_lock(&m…

高密度PCB板生产厂商深度解析

在电子制造领域&#xff0c;高密度PCB&#xff08;印制电路板&#xff09;作为核心基础元件&#xff0c;其技术精度与生产稳定性直接影响终端产品性能。本文精选五家具备核心技术优势的国内厂商&#xff0c;通过实地调研与行业数据验证&#xff0c;为读者呈现真实可信的供应商选…

力扣 hot100 Day44

98. 验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树 //自…

【基础架构】——软件系统复杂度的来源(低成本、安全、规模)

目录 一、软件系统复杂度的来源之低成本二、软件系统复杂度的来源之安全2.1、功能安全2.2、架构安全2.3、规模2.3.1、功能越来越多,导致系统复杂度指数级上升2.3.2、数据越来越多,系统复杂度发生质变本文来源:极客时间vip课程笔记 一、软件系统复杂度的来源之低成本 当我们设…

机器学习 YOLOv5手绘电路图识别 手绘电路图自动转换为仿真软件(如LT Spice)可用的原理图,避免人工重绘

以下是对《手绘电路图识别》论文的核心解读&#xff0c;结合技术方案、实验数据和创新点进行结构化总结&#xff1a;研究目标 解决痛点&#xff1a;将手绘电路图自动转换为仿真软件&#xff08;如LT Spice&#xff09;可用的原理图&#xff0c;避免人工重绘。 关键挑战&#xf…

一般的非线性规划求解(非凸函数)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 每一个裂缝都是为透出光而努力&#x…

CTFHub————Web{信息泄露[Git泄露(Stash、Index)]}

Web 信息泄露 Git泄露 Stash 首先&#xff0c;我们先读题&#xff0c;由题可知我们可以用BugScanTeam或GitHack完成该题那么我们先开题&#xff0c; 好吧&#xff0c;他问我们flag在哪里&#xff0c;我怎么知道fag在哪里。 先打开GitHack 使用 py GitHack.py http://challenge-…

缺乏实际里程碑管控项目进度,如何设定关键节点

要通过实际里程碑管控项目进度&#xff0c;核心措施包括&#xff1a;设定可量化的关键节点、明确交付标准与责任人、同步风险与资源计划、基于阶段目标拆解任务、建立节点验证与复盘机制。例如&#xff0c;设定可量化的关键节点能让团队清晰理解“何时完成了什么”并及时调整方…