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

STM32项目分享:水质检测系统(升级版)

目录

一、前言

 二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

六、实验效果 ​编辑

 七、包含内容

  项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1vcWBz6EPr/?spm_id_from=333.337.search-card.all.click&vd_source=a90461cae133c0c360a3780433efae62

(资料分享见文末) 

 二、项目简介

1.功能详解

基于STM32的水质检测系统(升级版)

功能如下:

  1. 主控芯片为STM32F103C8T6单片机
  2. DS18B20温度传感器测量水温度
  3. TDS电导率传感器测量水的电导率
  4. PH值传感器检测水的酸碱度
  5. 浊度传感器测量水的浑浊度
  6. OLED显示屏实时显示当前水温、电导率、浊度和PH值
  7. 按键可设置阈值和模式切换
  8. 自动模式下水温、电导率、浊度和PH值超过阈值范围触发蜂鸣器报警,并打开继电器
  9. 手动模式下可通过按键控制继电器开关
  10. 手机机智云APP显示信息并完成控制指令下发

2.主要器件

  • STM32F103C8T6单片机
  • OLED 屏幕
  • DS18B20数字温度传感器
  • TDS电导率传感器
  • PH传感器
  • 浊度传感器
  • 继电器
  • 蜂鸣器

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

#include <stdio.h>
#include "stm32f10x.h"
#include "delay.h"
#include "stdarg.h"	 	  	 
#include "string.h"	
#include "timer.h"
#include "flash.h"
#include "usart2.h"
#include "adc.h"
#include "gizwits_product.h" 
#include "ds18b20.h"
#include "beep.h"
#include "Modules.h"
#include "jdq.h"
#include "key.h"
#include "main.h"
#include "oled.h"
#include "misc.h"/****************异方辰电子工作室*******************STM32*项目 			:    STM32智能水质监测(升级版)
*版本			:    V1.0
*MCU			:    STM32F103C8T6
*接口			:    见代码
*BILIBILI		:    异方辰电子
*小红书			:    异方辰电子
*CSDN			:    异方辰电子
*授权IP			:    辰哥单片机设计、异方辰、YFC电子、北海单片机设计**********************BEGIN***********************/#define turbidity_K 2047.19
void Key_Init(void);//按键函数声明
void display(void);
u8 eer_f;
float TDS_DAT;					
float T;																		
u8 b_1s;
extern uint8_t valueFlashFlag;
u8 smart_config;#define KEY_Long1	11#define KEY_1	1
#define KEY_2	2
#define KEY_3	3
#define KEY_4	4#define FLASH_START_ADDR	0x0801f000	//写入的起始地址SensorModules sensorData;								//声明传感器数据结构体变量
SensorThresholdValue Sensorthreshold;		//声明传感器阈值结构体变量
DriveModules driveData;									//声明驱动器状态结构体变量uint8_t mode = 1;	//系统模式  1自动  2手动  3设置//系统静态变量
static uint8_t count_a = 1;  //自动模式按键数
static uint8_t count_m = 1;  //手动模式按键数
static uint8_t count_s = 1;	 //设置模式按键数unsigned char p[16]=" ";		//显示水温数据缓冲区
unsigned char t[16]=" ";		//显示TDS数据缓冲区
unsigned char z[16]=" ";		//显示浊度数据缓冲区
unsigned char h[16]=" ";		//显示PH数据缓冲区/*** @brief  显示菜单内容* @param  无* @retval 无*/
enum 
{AUTO_MODE = 1,MANUAL_MODE,SETTINGS_MODE}MODE_PAGES;
int main(void)
{	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //配置中断优先分组usart2_init(9600);//串口2初始化	delay_init(72);			//系统延时函数初始化DelayMs(500);TIM2_Int_Init(10000,3600);//输出话定时器  这边用到定时器2作为0.5秒钟中断发生源ADC1_DMA_Config();Key_Init();				//按键引脚初始化	JDQ_Init();				//继电器初始化BEEP_Init();			//蜂鸣器初始化OLED_Init();//OLED屏幕初始化		OLED_Clear();TIM1_Int_Init(72-1,1000-1);//按键扫描DS18B20_Init();//初始化温湿度传感器DelayMs(100);Sensorthreshold.tempValue = FLASH_R(FLASH_START_ADDR);	//从指定页的地址读FLASHSensorthreshold.NTUValue = FLASH_R(FLASH_START_ADDR+2);	//从指定页的地址读FLASHSensorthreshold.PHValue_L = FLASH_R(FLASH_START_ADDR+4);	//从指定页的地址读FLASHSensorthreshold.PHValue_H = FLASH_R(FLASH_START_ADDR+6);	//从指定页的地址读FLASHSensorthreshold.TDSValue = FLASH_R(FLASH_START_ADDR+8);	//从指定页的地址读FLASHDelayMs(10);userInit();Gizwits_Init();		//机智云初始化	gizwitsHandle((dataPoint_t *)&currentDataPoint);//机智云协议处理//默认设置机智云一键配网WIFI_AIRLINK_MODE模式gizwitsSetMode(WIFI_AIRLINK_MODE);ScanGizwitsMode();delay_ms(1000);OLED_Clear();Sensorthreshold.tempValue=30;Sensorthreshold.NTUValue=500;Sensorthreshold.TDSValue=200;Sensorthreshold.PHValue_L=4;Sensorthreshold.PHValue_H=10;while (1){	do{currentDataPoint.valuetempts = Sensorthreshold.tempValue;currentDataPoint.valuePH_L =Sensorthreshold.PHValue_L;currentDataPoint.valuePH_H = Sensorthreshold.PHValue_H;currentDataPoint.valuezhuodu_ts = Sensorthreshold.NTUValue;currentDataPoint.valuetds_ts = Sensorthreshold.TDSValue;}while(0);//阈值上传机智云SensorScan();	//获取传感器数据userHandle();	//更新机智云数据点变量存储的值gizwitsHandle((dataPoint_t *)&currentDataPoint);	//数据上传至机智云switch(mode){case AUTO_MODE:	//自动模式OLED_autoPage1();	//显示主页面1固定信息SensorDataDisplay1();	//显示传感器1数据AutoControl();//自动模式控制函数/*按键1按下时切换模式*/if (KeyNum == KEY_1)//短按   //系统模式mode  1自动  2手动  3设置{KeyNum = 0;mode = MANUAL_MODE;//手动模式count_m = 1;//手动模式下key2按下的次数置一OLED_Clear();}if (KeyNum == KEY_Long1)//长按{KeyNum = 0;mode = SETTINGS_MODE;//阈值调节模式count_s = 1;//阈值调节模式下key2按下的次数OLED_Clear();}Control_Manager();//执行器执行相应的指令userHandle();	//更新机智云数据点变量存储的值gizwitsHandle((dataPoint_t *)&currentDataPoint);	//数据上传至机智云break;case MANUAL_MODE://手动模式OLED_manualOption(SetManual());//手动模式页面主信息显示ManualControl(SetManual());//手动模式下相应的标志位置一或置零if (SetManual() <= 2)		{	OLED_manualPage1();//手动模式界面1显示ManualSettingsDisplay1();//手动模式下开/关的显示}if (KeyNum == KEY_1)   //系统模式mode  0手动  1自动(默认){KeyNum = 0;mode = AUTO_MODE;//回到自动模式count_a = 1;//自动模式下key2按下的次数OLED_Clear();}Control_Manager();//执行器执行相应的指令userHandle();	//更新机智云数据点变量存储的值gizwitsHandle((dataPoint_t *)&currentDataPoint);	//数据上传至机智云break;case SETTINGS_MODE://阈值调节模式OLED_settingsOption(SetSelection());	//实现阈值设置页面的选择功能ThresholdSettings(SetSelection());	//实现阈值调节功能	if (SetSelection() <= 4)		{				OLED_settingsPage1();	//显示阈值设置界面1固定信息SettingsThresholdDisplay1();	//显示传感器阈值1数据	}else	//否则显示设置页面2{			OLED_settingsPage2();	//显示阈值设置界面2固定信息SettingsThresholdDisplay2();	//显示传感器阈值2数据	}//判断是否退出阈值设置界面if (KeyNum == KEY_1){KeyNum = 0;mode = AUTO_MODE;	//跳转到主界面count_a = 1;//自动模式下key2按下的次数OLED_Clear();	//清屏//存储修改的传感器阈值至flash内	FLASH_W(FLASH_START_ADDR, Sensorthreshold.tempValue, Sensorthreshold.NTUValue,Sensorthreshold.PHValue_L, Sensorthreshold.PHValue_H,Sensorthreshold.TDSValue);}userHandle();	//更新机智云数据点变量存储的值gizwitsHandle((dataPoint_t *)&currentDataPoint);	//数据上传至机智云break;default: break;}if (valueFlashFlag){valueFlashFlag = 0;FLASH_W(FLASH_START_ADDR, Sensorthreshold.tempValue, Sensorthreshold.NTUValue,Sensorthreshold.PHValue_L, Sensorthreshold.PHValue_H,Sensorthreshold.TDSValue);			}userHandle();	//更新机智云数据点变量存储的值gizwitsHandle((dataPoint_t *)&currentDataPoint);	//数据上传至机智云	}}

六、实验效果 

 七、包含内容

  项目分享

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

相关文章:

  • 外语教学网站开发广州计算机软件公司排名
  • 主流开源视觉语言模型(VLM)的视觉编码器架构解析
  • SGV3D:面向基于视觉的路边3D目标检测的场景泛化
  • 实现 json path 来评估函数式解析器的损耗
  • 微网站分销linux做网站哪个版本好
  • 解决Git 冲突后本地提交丢失/未推送问题
  • 企业做网站建设遇到的问题合肥长丰路网站建设
  • 【剑斩OFFER】算法的暴力美学——最小覆盖字串
  • 全屏网站模板制作教程国外网站需要备案吗
  • 免费做网站有哪些家SaaS网站可以做seo嘛
  • 14:C++:二叉搜索树
  • 「日拱一码」142 Lasso调参注意事项与技巧
  • 【OTA专题】1 OTA加密升级总览
  • 针对编程面试和算法题的基础书籍
  • 10.大模型Agent介绍与应用
  • 兵团建设环保局门户网站中交通力建设股份有限公司网站
  • seo网站程序手机网站生成app客户端
  • 做旅游网站的论文wordpress公告模板
  • 博客登陆wordpress廊坊企业网站排名优化
  • 【LLaVA-NeXT】请问,这种“auto分配”的行为具体是哪一个库的API实现的呢
  • Riverpod框架内部实现原理剖析
  • 图解Redis面试篇
  • 网站首页设计风格wap网站源码下载
  • 获取泛型信息及获取注解信息
  • 会展免费网站模板网站优化课程
  • 【赵渝强老师】Redis数据的迁移
  • Rust编程学习 - 为什么说Cow 代表的是Copy-On-Write, 即“写时复制技术”,它是一种高效的 资源管理手段
  • Rust开发完全指南:从入门到与Python高效融合
  • 石家庄免费建站模板我不想找之前做网站的续费
  • 商城网站模板 免费五个跨境电商平台