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

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);}}
}

六、资料分享

点击即可查看当前资料分享。

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

相关文章:

  • 百度怎样发布作品百度seo排名优化软件
  • 2025-2031年全球工业高温电热元件市场全景分析报告
  • 手机常用网站两学一做专栏网站
  • CentOS 7上离线部署MySQL 8.0.X操作指南(二进制压缩包部署+独立目录部署,不在自动默认路径配置下安装)
  • 花卉网站建设策划方案百度推广的定义
  • 一万并发量的视频网站建设女生学网站建设好学吗
  • 涪陵网站设计wordpress插表格
  • 大凤号 网站建设Wordpress热门评论插件
  • 手机免费建设网站社交网站建设需求分析
  • 文献阅读笔记:机载火控雷达工作模式
  • 【MySQL_SpringBoot】mysql删除表中所有数据但不删除表结构以及表中id自增跳跃较大数字问题解决
  • 网站的建设与规划wordpress无辜跳出广告
  • 个人做论坛网站有哪些常用的网站推广
  • 【读书笔记】架构整洁之道 P6 实现细节
  • 古籍版面分析新SOTA:HisDoc-DETR如何助力AI赋能古籍数字化难题
  • 浙江省网站icp备案多久oa协同办公系统
  • 伊朗声称以色列核计划数据遭重大泄露
  • 自适应平台(Adaptive Platform)标准 ——Specification of Sensor Interfaces
  • LeetCode热题--200. 岛屿数量--中等
  • 营销型网站试运营调忧北京海淀房管局网站
  • 网站建设与制作与维护ppt网站百度排名怎么做快
  • SSM飞机售票管理系统63z52(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
  • [论文阅读] 人工智能 + 软件工程 | 当传统调试遇上LLM:CodeHinter为新手程序员打造专属辅助工具
  • 亚马逊网站做外贸网站是可以做的吗
  • Kimi推出全新Agent模式OK Computer,基于K2模型的端到端任务执行,已开启灰度测试
  • 用vs2010做网站视频教程高端网站制作报价
  • react-native集成PDF预览组件react-native-pdf
  • Dify笔记 知识库
  • 模板建站服务器网页打不开的解决方法
  • 女生做网站前台设置自动删除的wordpress