目录
一、前言
项目成品图片:
哔哩哔哩视频链接:
STM32智能水质检测系统
(资料分享见文末)
二、项目简介
1.功能详解
功能如下:
- 主控芯片为STM32单片机;
- DS18B20温度传感器测量水温度
- TDS电导率传感器测量水的电导率
- PH值传感器检测水的酸碱度
- 浊度传感器测量水的浑浊度
- OLED显示屏实时显示当前水温、电导率、浊度和PH值
- 按键可设置阈值,超出阈值触发蜂鸣器报警
- 异常报警下可控制继电器执行操作
- 接入机智云平台,通过机智云手机APP远程查看水质数据信息
- 手机APP显示信息并完成控制
2.主要器件
- STM32F103C8T6单片机
- OLED 屏幕
- DS18B20数字温度传感器
- TDS电导率传感器
- PH传感器
- 继电器
- 蜂鸣器
三、原理图设计
四、PCB硬件设计
PCB图
五、程序设计
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();//清屏
OLED_ShowCC(0,0,"====LOADING====");//显示标题
mod = 0;//开机显示开机界面
DS18B20_Init();//初始化温湿度传感器
DelayMs(100);
Readflash(set_code,0,20); //读取内部保存数据
DelayMs(10);
if(set_code[19] != 66)//对比内部数据是不是以及被重新覆盖 是的话载入初始化数据
{
OLED_ShowStr(0,0,"===NO FLASH===",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();//清屏
}
gizwitsHandle((dataPoint_t *)¤tDataPoint);//机智云协议处理
gizwitsSetMode(WIFI_AIRLINK_MODE);//WIFI_SOFTAP_MODE模式接入
DelayMs(1000);
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 *)¤tDataPoint);//机智云协议处理
}
}
六、实验效果
七、资料内容