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

STM32项目分享:智能水产养殖系统

目录

 一、前言

 二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

六、实验效果 ​编辑

 七、包含内容

  项目分享


 一、前言

项目成品图片:

哔哩哔哩视频链接:

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

(资料分享见文末) 

 二、项目简介

1.功能详解

基于STM32的智能水产养殖系统

功能如下:

  1. 主控芯片为STM32F103C8T6单片机
  2. DS18B20温度传感器测量水温度
  3. JW01用来监测环境CO2的值
  4. 光敏传感器用来监测环境光照值
  5. PH传感器用来监测PH值
  6. 水位传感器用来监测水位
  7. OLED显示屏实时显示当前水温、CO2值、光照值、PH值和水位
  8. 按键可设置阈值和模式切换
  9. 自动模式下水温、水位、光照值和PH值超过阈值范围触发蜂鸣器报警,并打开继电器
  10. 手动模式下可通过按键控制继电器开关
  11. 蓝牙APP显示信息并完成控制指令下发

2.主要器件

  • STM32F103C8T6单片机
  • OLED 屏幕
  • DS18B20数字温度传感器
  • JW01三合一气体传感器
  • PH传感器
  • 水位传感器
  • 光敏传感器
  • 继电器
  • 蜂鸣器

三、原理图设计

四、PCB硬件设计

PCB图 

五、程序设计 

#include "stm32f10x.h"
#include "led.h"
#include "beep.h"
#include "usart.h"
#include "usart2.h"
#include "delay.h"
#include "jdq.h"
#include "ds18b20.h"
#include "LDR.h"
#include "oled.h"
#include "key.h"
#include "Modules.h"
#include "TIM2.h"
#include "TIM3.h"
#include "adcx.h"
#include "flash.h"
#include "fan.h"
#include "bump.h"
#include "water.h"
#include "ph.h"/****************异方辰电子工作室******************STM32				*文件          	 :	STM32智能水产养殖系统
*版本	   		 :	V1.0
*日期	   		 :	2025.10.14
*MCU	   		 :	STM32F103C8T6
*接口	   		 :	见代码
*BILIBILI	   	 :	异方辰电子
*小红书	    	 :	异方辰电子
*CSDN	    	 :	异方辰电子
*授权IP	   		 :	辰哥单片机设计、异方辰、YFC电子、北海单片机设计**********************BEGIN***********************/
#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	//写入的起始地址//传感器变量声明
u16 lux;//光照值变量
u16 soil_temp;//土壤温度变量
u16 soil_Humi;//土壤湿度变量
u32 dat;
u16 co2Data;//二氧化碳变量
uint16_t time_num = 0;								//10ms计时SensorModules sensorData;								//声明传感器数据结构体变量
SensorThresholdValue Sensorthreshold;		//声明传感器阈值结构体变量
DriveModules driveData;									//声明驱动器状态结构体变量
static uint8_t app_cmd = 0;   // 0 无指令  3 开  4 关
uint8_t mode = 0;	//系统模式  1自动  2手动  3设置//系统静态变量
static uint8_t count_a = 1;  //自动模式按键数uint8_t count_m = 1;  //手动模式按键数
static uint8_t count_s = 1;	 //设置模式按键数extern uint8_t usart2_buf[256];				//串口2接收数组
char display_buf[16];					        //显示数组/*** @brief  显示菜单内容* @param  无* @retval 无*/
enum 
{AUTO_MODE = 0,MANUAL_MODE,SETTINGS_MODE}MODE_PAGES;int main(void)
{ SystemInit();//配置系统时钟为72M	delay_init(72);NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //配置中断优先分组//传感器初始化LDR_Init();//光敏电阻初始化DS18B20_Init();//ds18b20初始化WATER_Init();PH_Init();//执行器初始化LED_Init();//大功率LED灯初始化FAN_Init();//风扇初始化BUMP1_Init();//水泵1初始化BUMP2_Init();//水泵2初始化BEEP_Init();//蜂鸣器初始化JDQ_Init();//加热片初始化Key_Init();//按键初始化OLED_Init();//OLED初始化USART1_Config();//串口1初始化USART2_Config();//串口2初始化USART3_Config();//串口3初始化TIM2_Init(72-1,1000-1);//定时器2初始化FLASH_ReadThreshold();//阈值读取函数
////	TIM3_Int_Init(1000-1,72-1);		//定时1ms中断OLED_Clear();//清屏while (1){SensorScan();	//获取传感器数据time_num++;												//计时变量+1if(time_num >= 5000){time_num = 0;}Bluetooth_Control();//蓝牙控制函数switch(mode){case AUTO_MODE://默认自动模式if(SetAuto() ==1 )//自动模式下按键2按下的次数等于1{OLED_autoPage1();	//显示主页面1固定信息SensorDataDisplay1();	//显示传感器1数据}else{OLED_autoPage2();	//显示主页面2固定信息SensorDataDisplay2();	//显示传感器2数据}AutoControl();//自动模式控制函数/*按键1按下时切换模式*/if (KeyNum == KEY_1)   //系统模式mode  1自动  2手动  3设置{KeyNum = 0;mode = MANUAL_MODE;//进入手动模式count_m = 1;//手动模式下按键2的次数置一OLED_Clear();}if (KeyNum == KEY_Long1){KeyNum = 0;mode = SETTINGS_MODE;//进入阈值设置模式count_s = 1;//阈值设置模式下按键2按下的次数置一OLED_Clear();}Control_Manager();//执行器执行函数break;case MANUAL_MODE://手动模式下OLED_manualOption(SetManual());//手动模式光标显示函数ManualControl(SetManual());//手动模式控制函数if (SetManual() <= 4)		//手动模式下按键2按下的次数小于等于4次{	OLED_manualPage1();//手动模式界面1显示ManualSettingsDisplay1();//手动模式界面1的开关显示}else//手动模式下按键2按下的次数大于4次{OLED_manualPage2();//手动模式界面2显示ManualSettingsDisplay2();//手动模式界面2的开关显示}if (KeyNum == KEY_1)   //系统模式mode  0手动  1自动(默认){KeyNum = 0;mode = AUTO_MODE;//进入自动模式count_a = 1;//自动模式下按键2按下的次数置一OLED_Clear();}Control_Manager();//执行器执行函数break;case SETTINGS_MODE://阈值设置函数OLED_settingsOption(SetSelection());	//实现阈值设置页面的选择功能ThresholdSettings(SetSelection());	//实现阈值调节功能	if (SetSelection() <= 4)	{OLED_settingsPage1();	//显示阈值设置界面1固定信息SettingsThresholdDisplay1();	//显示传感器阈值1数据	}else{OLED_settingsPage2();	//显示阈值设置界面2固定信息SettingsThresholdDisplay2();	//显示传感器阈值2数据}//判断是否退出阈值设置界面if (KeyNum == KEY_1){KeyNum = 0;mode = AUTO_MODE;	//进入自动模式count_a = 1;//自动模式下按键2按下的次数置一OLED_Clear();	//清屏//存储修改的传感器阈值至flash内FLASH_W(FLASH_START_ADDR, Sensorthreshold.luxValue,Sensorthreshold.tempValue_H,Sensorthreshold.tempValue_L, Sensorthreshold.co2DataValue,Sensorthreshold.PHValue_H,Sensorthreshold.PHValue_L);}break;default: break;}}
}

六、实验效果 

 七、包含内容

  项目分享

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

相关文章:

  • 网站开发线框个体营业执照网上年报
  • iPhone苹果手机拍的照片默认是heic如何换成jpg格式
  • 基于微信小程序的旅游攻略分享互动平台设计与实现-项目分享
  • Neo4j Windows桌面版安装及更改默认数据存储位置
  • 智能安防新篇章:EasyGBS助力重塑物业视频管理服务
  • ps2017做网站当阳网站建设电话
  • H5短视频SDK,赋能Web端视频创作革命
  • 如何选择温州本凡科技进行小程序开发服务?
  • 融智兴科技邀您共赴2025中国洗涤展
  • STM32上使用HAL库完美实现驱动MAX98357声卡模块(I2S+DMA+音频环形缓冲区)
  • 【React】打卡笔记,入门学习03:useState、useEffect、useRef、useMemo
  • M|烟花 (1995)
  • 平顶山网站建设2022年黄台片区
  • 人工智能的未来之路:华为全栈技术链与AI Agent应用实践
  • 基于openresty反向代理、dns劫持、实现对http请求、响应内容抓包
  • 智能体的范式革命:华为全栈技术链驱动下一代AI Agent
  • AI 边缘计算:决胜未来
  • 【Linux】网络层协议
  • 深入解析 WPF 中的 DataTemplateSelector:动态模板选择的艺术
  • svn: E155000:
  • 【C++】:C++基于微服务的即时通讯系统(2)
  • Apple Pay 与 Google Pay 开发与结算全流程文档
  • Babylon.js相机交互:从 ArcRotateCamera 输入禁用说起
  • 安徽工程建设信息网站进皖企业wordpress优酷视频插件
  • git推送操作时报错error: failed to push some refs
  • 小程序弱网 / 无网场景下 CacheManager 离线表单与拍照上传解决方案
  • 邹平做网站公司一般的美工可以做网站吗
  • Vue3.4 Effect 作用域 API 与 React Server Components 实战解析
  • 基于改进TransUNet的港口船只图像分割系统研究
  • LeetCode 4. 寻找两个正序数组的中位数(困难)