当前位置: 首页 > news >正文

【STM32项目开源】基于STM32的智能水质检测系统

目录

一、设计背景和意义

1.1设计背景

1.2设计意义

二、实物效果展示

2.1实物图片

2.2实物演示视频

三、硬件功能简介

3.1项目功能详解

3.2元器件清单

四、主框图与软件流程图

五、硬件PCB展示

六、软件程序设计

七、项目资料包内容

         资料获取:查看主页介绍“充哥单片机设计”


一、设计背景和意义

1.1设计背景

        水质安全问题直接关系到人类健康与生态环境的可持续发展。随着水资源污染情况日益严峻,尤其是在农村饮水、城市河道、水产养殖、农业灌溉等领域,迫切需要建立一套高效、实时、智能的水质监控系统,以提升水环境治理与风险预警的能力。传统水质检测主要依赖人工定时采样与实验室分析,不仅耗时耗力,而且难以满足连续监测与远程管理的需求。同时,现有部分工业级水质监控系统价格昂贵、体积庞大,限制了其在中小型场景中的推广应用。

1.2设计意义

        本课题以STM32F103C8T6单片机为核心控制单元,集成温度传感器(DS18B20)、PH值传感器和TDS-300b浊度传感器,实现对水体关键参数的实时采集,并通过ESP8266模块接入“机智云”物联网平台,实现手机APP远程查看、报警阈值设置与历史数据管理。系统在水质异常时能主动发出声光报警提示,从而实现智能化、人性化、高响应的水质管理模式。项目在成本、结构与功能上具备高度集成与实际落地能力,特别适合在中小型环境中推广应用。

二、实物效果展示

2.1实物图片

2.2实物演示视频

【开源】基于STM32的智能水质监测系统

三、硬件功能简介

3.1项目功能详解

  1. DS18B20温度传感器检测水温
  2. PH传感器检测水的酸碱度
  3. 浊度传感器检测当前水的浑浊度
  4. 数据显示:0.96OLED屏幕显示全部的传感器数据以及传感器的阈值等数据。
  5. 接入云平台:系统通过ESP8266 WIFI联网后,接入机智云平台。
  6. App远程监控:通过App远程监控全部传感器数据
  7. 阈值数据设定:系统通过按键设定阈值

3.2元器件清单

  1. 主控采用STM32F103C8T6最小系统板
  2. PH传感器
  3. DS18B20水温传感器
  4. 浊度传感器
  5. TDS电导率传感器
  6. 继电器
  7. 蜂鸣器

四、主框图与软件流程图

主框图

流程图

五、硬件PCB展示

六、软件程序设计

												
//=============================================================================
//文件名称:KEY
//功能概要:按键服务
//参数说明:无
//函数返回:VOID
//=============================================================================
void key(void)
{if(KEY1==0) {DelayMs(5);if(KEY1==0)//{while(KEY1==0);			switch(mod){case 0://待机mod = 1 ;//切换到菜单设置set_f = 0;OLED_CLS();//清屏		break;case 1://参数设置if(set_f>5) set_f = 0;else set_f++;							break;}}	}//////////////////////////////////////////++if(KEY2==0) {DelayMs(5);if(KEY2==0)//{while(KEY2==0);switch(mod){case 1://设置参数switch(set_f){case 1:	set_code[set_f]++;if(set_code[set_f]>80) set_code[set_f] = 0;break;case 2:	  set_code[set_f] = set_code[set_f] + 10;if(set_code[set_f]>=2000) set_code[set_f] = 0;break;case 3:set_code[set_f]++;if(set_code[set_f]>14) set_code[set_f] = 1;break;case 4:	set_code[set_f]++;if(set_code[set_f]>14) set_code[set_f] = 1;break;case 5:	set_code[set_f] = set_code[set_f]+10;if(set_code[set_f]>999) set_code[set_f] = 10;break;}break;}					}}	//////////////////////////////////////////--if(KEY3==0) {DelayMs(5);if(KEY3==0){while(KEY3==0);switch(mod){case 1://设置参数switch(set_f){case 1:if(set_code[set_f]==0) set_code[set_f] = 80;else set_code[set_f] = set_code[set_f] - 1;break;case 2:	  if(set_code[set_f]<=0) set_code[set_f] = 2000;else set_code[set_f] = set_code[set_f]-10;break;case 3:	if(set_code[set_f]==0) set_code[set_f] = 14;else set_code[set_f] = set_code[set_f]-1;break;case 4:	 if(set_code[set_f]==0) set_code[set_f] = 14;else set_code[set_f] = set_code[set_f]-1;break;case 5:	if(set_code[set_f]==0) set_code[set_f] = 1000;else set_code[set_f] = set_code[set_f]-10;break;}								break;}			}}//////////////////////////////////////////返回if(KEY4==0) {DelayMs(5);if(KEY4==0)//{while(KEY4==0);switch(mod){case 1://参数设置Writeflash(0,set_code,0,20);//写入初始化数据mod = 0 ;//切换到菜单设置OLED_CLS();//清屏						break;}			}}
}void display(void)
{int i;switch(mod){case 0://待机界面OLED_ShowCC(0,0,"==水质检测系统==");//显示标题sprintf(str,"水温:%02d.%d℃    ",(u16)temperature/10,(u16)temperature%10);//显示温湿度数据OLED_ShowCC(0,2,(unsigned char *)str);sprintf(str,"TDS :%03dppm  ",(int)TDS_DAT) ;//显示phOLED_ShowCC(0,4,(unsigned char *)str);sprintf(str,"浊度:%03d PH:%.1f ",(int)turbidity,PH) ;//显示phstr[16] = '\0';OLED_ShowCC(0,6,(unsigned char *)str);break;///////////////////////////////////////////////////////////////////////////case 1://参数设置界面OLED_ShowCC(0,0,"====参数设置====");//显示标题				sprintf(str,"水温:%02d℃  TDS  ",(int)set_code[1]) ;	//显示水温参数if(set_f==1) i = 3; else  i = 0;OLED_ShowCC_S(0,2,(unsigned char *)str,6,i);//根据设置参数的位置反白sprintf(str,"浊度:%04d %04d  ",(int)set_code[2],(int)set_code[5]) ;//显示浊度参数if(set_f==2) {i = 4;} else if(set_f==5) i = 4; else  i = 0;		OLED_ShowCC_S(0,4,(unsigned char *)str,6+(set_f-2)*1.7,i);//根据设置参数的位置反白sprintf(str,"PH_L:%02d PH_H:%02d",(int)set_code[3],(int)set_code[4]) ;//显示PH值下限 与上限if((set_f>=3)&(set_f<=4)) i = 2; else  i = 0;OLED_ShowStr_S(0,6,(unsigned char *)str,6+(set_f-3)*8,i,2);//根据设置参数的位置反白break;}
}void run(void)
{ if(turbidity>set_code[2]){eer_f = 10;//高于设定值响10声}else if(temperature > set_code[1]*10){eer_f = 10;//高于设定值响10声}	else  if((PH<=set_code[3])||(PH>=set_code[4])){eer_f = 10;		 }else if(TDS_DAT > set_code[5]){eer_f = 10;		 }else{eer_f = 0;//解除报警} }//=============================================================================
//文件名称:main
//功能概要:主函数
//参数说明:无
//函数返回:int
//=============================================================================
//	RCC_ClocksTypeDef get_rcc_clock;//定义一个结构体检查系统时钟int main(void)
{	u8 i;DelayInit();//系统延时函数初始化DelayMs(500);usart2_init(9600);//串口2初始化	ADC1_DMA_Config();Gizwits_Init();//机智云初始化	Key_Init();//按键引脚初始化	TIM2_Int_Init(10000,3600);//输出话定时器  这边用到定时器2作为0.5秒钟中断发生源TIM_Cmd(TIM2, ENABLE);//开启定时器2	OLED_Init();//OLED屏幕初始化OLED_CLS();//清屏		mod = 0;//开机显示开机界面DS18B20_Init();//初始化温湿度传感器Readflash(set_code,0,20);  //读取内部保存数据DelayMs(10);while(smart_config)//配网标志{gizwitsHandle((dataPoint_t *)&currentDataPoint);//机智云协议处理if(KEY2 == 0) smart_config = 0;if(KEY3 == 0) {OLED_CLS();//清屏OLED_ShowStr(0,0,"===Device Starting===",1);OLED_ShowStr(0,1,"==WIFI smart_config==",1);OLED_ShowStr(0,2,"WIFI_SOFTAP_MODE",1);OLED_ShowStr(0,3,"SSID:XPG-GAgne-   ",1);//热点名称OLED_ShowStr(0,4,"password:123456789",1);//连接的热点WiFi密码OLED_ShowStr(0,5,"Operation on app",1);}if(KEY4 == 0) {OLED_CLS();//清屏OLED_ShowStr(0,0,"===Device Starting===",1);OLED_ShowStr(0,1,"==WIFI smart_config==",1);OLED_ShowStr(0,2,"WIFI_AIRLINK_MODE",1);OLED_ShowStr(0,3,"Distribution network",1);OLED_ShowStr(0,4," by broadcasting",1);OLED_ShowStr(0,5,"Operation on app",1);}OLED_ShowStr(i*8,6,">",1);i++;	if(i>=15){OLED_ShowStr(0,6,"                     ",1);i = 0;}DelayMs(500);}userInit();OLED_CLS();//清屏	while (1){	PH = (float)ADCConvertedValue[1];		//PH对应的AD值PH = PH * (3.3/4096) * 2;//PH数据处理PH = PH * (-5.7541) + 16.654;//PH = PH * (-5.7541) + 16.654 +15 ; 	//PH数据处理		//if ((PH > 14) || (PH <= 0))//PH数据判断是否在此范围  超过PH=7//PH = 7;if(PH > 14.0) PH = 14.0;if(PH < 0) PH = 0.0;PH_temp = PH ;//赋值给临时变量turbidity  = (float)ADCConvertedValue[0]*3.3/4096;//浊度对应的AD值  数据处理turbidity  = turbidity_K - turbidity*865.68; 
//		turbidity = 100 - turbidity;//数据转化turbidity = turbidity-200;//数据转化if(turbidity<35) turbidity = 0;	//浊度小于0时等于0turbidity_temp  = turbidity;//赋值给临时变量			TDS_DAT = (ADCConvertedValue[2]/4095.0)*3.3;TDS_DAT = 66.71*TDS_DAT*TDS_DAT*TDS_DAT-127.93*TDS_DAT*TDS_DAT+428.7*TDS_DAT;if(TDS_DAT<20) TDS_DAT = 0;temperature =	DS18B20_Get_Temp();//读取温湿度temperature_temp = (float)temperature/10;//赋值给临时变量			display();//显示程序key();//按键程序			if(mod==0)run();//逻辑控制userHandle();		//用户数据采集gizwitsHandle((dataPoint_t *)&currentDataPoint);//机智云协议处理}
}

七、项目资料包内容

         资料获取:查看主页介绍“充哥单片机设计”

http://www.dtcms.com/a/531874.html

相关文章:

  • 设计模式-迭代器模式(Iterator)
  • GitHub等平台形成的开源文化正在重塑天热e
  • 做网站需要用什么开发软件有哪些制作视频的软件
  • github中获得Personal Access Token
  • 从RDPDD!DrvEscape到RDPWD!ShareClass::UPSendOrders
  • RiPro数据转换CeoMax插件
  • IA复习笔记4 路由
  • 邯郸手机网站建设服务常见的网络推广工具
  • NTRU 加密系统原理及示例:NTRU、CTRU以及ITRU
  • k8s高频面试题汇总
  • 一篇文章理解LRC校验:
  • 石家庄免费网站建设百度收录入口提交查询
  • 专业提供网站建设服务培训学校 网站费用
  • 找做网站公司需要注意什么条件国外网站建设什么价格
  • 阮一峰《TypeScript 教程》学习笔记——tsconfig.json 文件
  • python如何做声音识别
  • 解决Docker磁盘空间不足导致MySQL启动失败
  • 【微服务组件】Springboot结合Dubbo实现RPC调用
  • One-Shot Federated Learning with Classifier-FreeDiffusion Models
  • powershell终端在ide里默认位置不对
  • 探索Linux进程:从理论到实践
  • 正则化机制解析:L2 的约束逻辑与 L1 的特征选择
  • 股票与期货战法理论发展路径
  • 用Python手写一个能识花的感知器模型——Iris分类实战详解
  • MySQL笔记16
  • gRPC通信流程学习
  • 百度站长平台有哪些功能网站做权重的好处
  • 数据科学复习题2025
  • 牛客网 AI题​(二)机器学习 + 深度学习
  • 拆解AI深度研究:从竞品分析到出海扩张,这是GTM的超级捷径