STM32项目分享:基于STM32的渔场水质监测系统设计与实现
“我们不做一锤子买卖,只做技术成长的长期伙伴!”
目录
一、视频展示
二、项目简介
三、原理图设计
四、PCB硬件设计
五、程序设计
六、资料分享
一、视频展示
基于STM32的渔场水质监测系统设计与实现 -视频分享
二、项目简介
题目:基于STM32的渔场水质监测系统设计与实现
主控:STM32
显示:oled显示
传感器:
PH传感器
DS18B20温度传感器
浊度传感器
esp8266wifi透传
三按键
DC供电
声光报警:蜂鸣器+led
功能:
1、屏幕显示当前温度,PH值,浊度数据。
2、可按键设置最最大温度阈值,最大浊度阈值,和最大PH以及最小PH。
3、如果数据不在阈值范围内,则进行蜂鸣器报警。
4、手机连接wifi可查看单片机获得的数据
5、按键可调节阈值。
三、原理图设计
四、PCB硬件设计
五、程序设计
#include "stm32f10x.h" // 包含STM32F10x系列的头文件
#include "delay.h" // 包含延时函数的头文件
#include "lcd.h" // 包含OLED显示屏控制的头文件
#include "timer.h" // 包含定时器相关功能的头文件
#include "IOput.h" // 包含输入输出操作相关的头文件
#include "ds18b20.h" // 包含DS18B20温度传感器的头文件
#include "adc.h" // 包含ADC(模拟数字转换)功能的头文件
#include "usart.h"short zj; // 定义短整型变量,用于存储温度值
float wd, ph, max_ph = 9.0, min_ph = 3.0; // 定义浮点型变量,分别用于存储温度值、pH值及其上下限
u16 zd; // 定义16位无符号整型变量,用于存储浑浊度值
u8 show_flag; // 定义8位无符号整型变量,用于存储显示标志
u8 max_wd = 40, max_zd = 50; // 定义8位无符号整型变量,用于存储温度和浑浊度的上限值
u8 dat,count; // 定义8位无符号整型变量
extern u8 res;
void wifi(){if(res=='a'){OLED_Clear();res=0;set_flag=1;}else if(res=='b'){res=0;add_flag=1;}else if(res=='c'){res=0;dec_flag=1;}}
int main (void) // 主函数
{delay_init(); // 初始化延时函数NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 配置中断优先级组OLED_Init(); // 初始化OLED显示屏delay_ms(1); // 延时1毫秒,确保OLED初始化完成OLED_Clear(); // 清屏操作Adc_Init(); // 初始化ADC模块DS18B20_Init(); // 初始化DS18B20温度传感器input_init(); // 初始化输入模块output_init(); // 初始化输出模块Usart1_Init(9600);while(1) // 主循环{count++;wifi();key_scan(1, 0, 0); // 扫描按键状态if(set_flag == 1) // 判断是否进入设置模式{set_flag = 0; // 清除设置标志show_flag++; // 显示标志自增if(show_flag >= 5) // 循环切换显示页面show_flag = 0;}if(show_flag == 1) // 判断是否显示浑浊度上限设置页面{OLED_ShowCH(0, 0, " 阈 值 修 改 "); // 显示“阈值修改”标题OLED_ShowCH(0, 3, "浑浊度上限:"); // 显示“浑浊度上限”提示OLED_ShowNum(40, 5, max_zd, 3, 16); // 显示当前浑浊度上限值if(dec_flag == 1) // 判断是否按下减小键{dec_flag = 0; // 清除减小标志max_zd--; // 减小浑浊度上限值}if(add_flag == 1) // 判断是否按下增加键{add_flag = 0; // 清除增加标志max_zd++; // 增加浑浊度上限值}}if(show_flag == 2) // 判断是否显示温度上限设置页面{OLED_ShowCH(0, 0, " 阈 值 修 改 "); // 显示“阈值修改”标题OLED_ShowCH(0, 3, "温度上限:"); // 显示“温度上限”提示OLED_ShowNum(40, 5, max_wd, 3, 16); // 显示当前温度上限值if(dec_flag == 1) // 判断是否按下减小键{dec_flag = 0; // 清除减小标志max_wd--; // 减小温度上限值}if(add_flag == 1) // 判断是否按下增加键{add_flag = 0; // 清除增加标志max_wd++; // 增加温度上限值}}if(show_flag == 3) // 判断是否显示pH值上限设置页面{OLED_ShowCH(0, 0, " 阈 值 修 改 "); // 显示“阈值修改”标题OLED_ShowCH(0, 3, "ph上限:"); // 显示“pH上限”提示OLED_Showdecimal(40, 5, max_ph, 2, 1, 16); // 显示当前pH上限值if(dec_flag == 1) // 判断是否按下减小键{dec_flag = 0; // 清除减小标志max_ph -= 0.1; // 减小pH上限值}if(add_flag == 1) // 判断是否按下增加键{add_flag = 0; // 清除增加标志max_ph += 0.1; // 增加pH上限值}}if(show_flag == 4) // 判断是否显示pH值下限设置页面{OLED_ShowCH(0, 0, " 阈 值 修 改 "); // 显示“阈值修改”标题OLED_ShowCH(0, 3, "ph下限:"); // 显示“pH下限”提示OLED_Showdecimal(40, 5, min_ph, 2, 1, 16); // 显示当前pH下限值if(dec_flag == 1) // 判断是否按下减小键{dec_flag = 0; // 清除减小标志min_ph -= 0.1; // 减小pH下限值}if(add_flag == 1) // 判断是否按下增加键{add_flag = 0; // 清除增加标志min_ph += 0.1; // 增加pH下限值}}if(show_flag == 0) // 判断是否显示主页面{zj = DS18B20_Get_Temp(); // 获取温度传感器数据wd = zj / 10 + (zj % 10) * 0.1; // 计算实际温度值ph = (Get_Adc_Average(1, 10) * 3.3 / 4096) * (-5.7541) + 16.654; // 计算pH值zd = (100 - Get_Adc_Average(4, 10) * 100 / 4096-75)*4; // 计算浑浊度值if(zd<=0){zd=0;}if(zd>=200)zd=0;if(zd>=100)zd=99;OLED_ShowCH(0, 0, "水质检测系统"); // 显示“水质检测系统”标题OLED_ShowCH(0, 2, "温度:"); // 显示“温度”提示OLED_ShowCH(0, 4, "浑浊度"); // 显示“浑浊度”提示OLED_ShowCH(0, 6, "PH值:"); // 显示“pH值”提示OLED_Showdecimal(40, 2, wd, 2, 2, 16); // 显示温度值OLED_ShowNum(54, 4, zd, 3, 16); // 显示浑浊度值OLED_Showdecimal(40, 6, ph, 3, 2, 16); // 显示pH值if(ph < min_ph || ph > max_ph || wd > max_wd || zd > max_zd) // 判断是否超出阈值范围BEEP = 0; // 若超出阈值,蜂鸣器报警elseBEEP = 1; // 若在阈值内,蜂鸣器不报警}if(count>=40){count=0;UsartPrintf(USART1,"temp:%f\r\n",wd);UsartPrintf(USART1,"ph:%f\r\n",ph);UsartPrintf(USART1,"turbidity:%d\r\n",zd);}}
}
六、资料分享
点击即可查看当前资料分享。