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的智能水产养殖系统
功能如下:
- 主控芯片为STM32F103C8T6单片机
- DS18B20温度传感器测量水温度
- JW01用来监测环境CO2的值
- 光敏传感器用来监测环境光照值
- PH传感器用来监测PH值
- 水位传感器用来监测水位
- OLED显示屏实时显示当前水温、CO2值、光照值、PH值和水位
- 按键可设置阈值和模式切换
- 自动模式下水温、水位、光照值和PH值超过阈值范围触发蜂鸣器报警,并打开继电器
- 手动模式下可通过按键控制继电器开关
- 蓝牙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;}}
}
六、实验效果 
七、包含内容

