欢迎光临
我们一直在努力

【STM32项目开源】STM32单片机智能水质检测系统

目录

一、设计背景和意义

1.1设计背景:

1.2设计意义:

二、实物展示

三、硬件功能介绍

2.1 硬件清单:

2.2 功能介绍:

四、软件设计流程图

五、硬件PCB展示

六、软件主函序展示

七、单片机实物资料

资料获取 查看主页介绍:兆龙电子单片机设计


一、设计背景和意义

1.1设计背景:

        在中小规模水产养殖、小型泳池水质管理、农业灌溉及家庭用水监测等场景下,多参数精准监测、风险智能预警、远程便捷管控已成为水质安全监测的核心需求。传统水质监测方式存在明显局限:高端工业级水质分析系统功能全面但成本高昂、部署复杂、生态封闭,难以普及到中小型养殖户、社区泳池及家庭用户等场景;而普通简易水质检测工具虽价格低廉,但功能单一,仅能实现单参数抽检或人工记录,缺乏多维度联动监测、数据自动存储、远程同步及故障提醒功能,无法满足现代化场景下全面、智能、高效的水质管控需求。此外,现有方案还存在功能割裂、集成度低的问题,部分高端系统后期维护成本高,低成本装置则在智能化与完整性上欠缺,无法实现与显示终端、手机APP及物联网平台的实时联动。基于此,本设计以STM32单片机为核心,融合温度、电导率、浊度、PH值等多参数水质传感器及OLED显示、按键交互、继电器执行、蜂鸣器报警、机智云物联网通信等模块,构建低成本、高集成度的水质安全监测系统,以解决传统监测方式操作繁琐、智能化程度低及管控效率低下的问题。

1.2设计意义:

        从使用体验与管控效率角度,该系统突破了传统水质监测方式的局限:一是实现水温、电导率、浊度、PH值等多维度参数实时采集与联动控制,无需人工频繁取样检测,大幅减少监测繁琐性;二是配备OLED实时显示当前水质参数及系统运行模式,数据通过机智云平台同步至手机APP,方便远程查看与历史追溯;三是用户可通过按键灵活设置各传感器阈值,异常时触发蜂鸣器报警并控制继电器执行相应操作(如启动增氧、开启过滤),同时支持按键切换自动/手动模式,手动模式下可按键控制继电器,远程也可通过APP调整阈值与设备控制,实现水质安全精细化管控。从技术实践与成本控制角度,本设计以STM32为核心,其最小系统及全部外围电路均为自主设计搭建,充分利用其低功耗、高性价比优势,搭配低成本高精度传感器,在保证监测精度与响应速度的前提下,整体成本降低40%-60%,更易普及到中小养殖场、乡镇水处理站、家庭用水等场景,且系统支持模块化扩展,具备良好的灵活性与可扩展性。

二、实物展示

下方为实物演示视频

【开源】基于STM32单片机智能水质监测系统 WIFI机智云_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV12RXYBuEdQ/?spm_id_from=333.1387.homepage.video_card.click&vd_source=2a672ca4e8794dca68cbe6d047b42ca5

下方为实物展示图片

三、硬件功能介绍

2.1 硬件清单:

  • STM32F103C8T6

  • OLED显示

  • DS18B20温度传感器

  • TDS电导率传感器

  • 浊度传感器

  • 声光报警电路

  • 继电器控制电路

  • 水泵

  • PH值传感器

  • WIFI模块机智云

2.2 功能介绍:

(1)主控芯片采用STM32单片机,最小系统及全部外围电路均为自主设计并搭建

(2)DS18B20温度传感器测量水温度

(3)TDS电导率传感器测量水的电导率

(5)浊度传感器测量水的浑浊度

(6)OLED显示屏实时显示当前水温、电导率、浊度值以及当前模式

(7)按键可设置各传感器阈值,超出阈值触发蜂鸣器报警

(8)水质异常报警下可控制继电器执行操作

(9)按键切换自动/手动模式,手动模式下可按键控制继电器执行操作

(10)PH值传感器检测水的酸碱度

(11)接入机智云平台,通过机智云手机APP远程查看水质数据信息,也可远程进行阈值调整

四、软件设计流程图

五、硬件PCB展示

六、软件主函序展示

=============================================================================
//文件名称: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);
if(set_code[19] != 66)//对比内部数据是不是以及被重新覆盖 是的话载入初始化数据
{
OLED_ShowStr(0,0,"===NO FLIASH===",2);
Writeflash(0,begin_code,0,20);//写入初始化数据
DelayMs(500);
Readflash(set_code,0,20);//读取写写入后的数据
sprintf(str,"Init System [%2d]",set_code[19]);//显示验证数据
OLED_ShowStr(0,4,(unsigned char *)str,2);
DelayMs(100);
OLED_CLS();//清屏
}
smart_config = 1;
OLED_ShowStr(0,0,"===Device Starting===",1);
OLED_ShowStr(0,1,"Wait for link Interne",1);//等待网络连接
OLED_ShowStr(0,2,"=====================",1);
OLED_ShowStr(0,3,"KE2 Skip networking",1);//跳过配网
OLED_ShowStr(0,4,"KE3 WIFI_SOFTAP_MODE",1);//热点配网模式
OLED_ShowStr(0,5,"KE4 WIFI_AIRLINK_MODE",1);//一键配网模式
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);
gizwitsSetMode(WIFI_SOFTAP_MODE);//WIFI_SOFTAP_MODE模式接入
}
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);
gizwitsSetMode(WIFI_AIRLINK_MODE);//WIFI_SOFTAP_MODE模式接入
}
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时等于0
turbidity_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);//机智云协议处理
}
}
//=============================================================================
//文件名称:Key_Init
//功能概要:GPIO初始化
//参数说明:无
//函数返回:无
//=============================================================================
void Key_Init(void) //按键引脚定义
{
//将按键接口设置为上拉电阻输入因为我们使用低电平信号触发
GPIO_InitTypeDef gpio_initstruct;
//按键引脚定义
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOC , ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
gpio_initstruct.GPIO_Mode = GPIO_Mode_IPU;
gpio_initstruct.GPIO_Pin = GPIO_Pin_13|GPIO_Pin_14|GPIO_Pin_15;
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOC, &gpio_initstruct);
//按键引脚定义
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);
gpio_initstruct.GPIO_Mode = GPIO_Mode_IPU;
gpio_initstruct.GPIO_Pin = GPIO_Pin_0;
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOA, &gpio_initstruct);
//蜂鸣器引脚定义
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO | RCC_APB2Periph_GPIOB , ENABLE);
GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable,ENABLE);
gpio_initstruct.GPIO_Mode = GPIO_Mode_Out_PP;
gpio_initstruct.GPIO_Pin = GPIO_Pin_12;
gpio_initstruct.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_Init(GPIOB, &gpio_initstruct);
bee_out = 0;//蜂鸣器开机置1 不开启
}

七、单片机实物资料

资料获取 查看主页介绍:兆龙电子单片机设计

赞(0)
未经允许不得转载:171主机测评 » 【STM32项目开源】STM32单片机智能水质检测系统
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址