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

【STM32项目开源】基于STM32的智能养殖场环境监测系统

目录

一、设计背景和意义

1.1设计背景

1.2设计意义

二、实物效果展示

2.1实物图片

2.2实物演示视频

三、硬件功能简介

3.1项目功能详解

3.2元器件清单

四、主框图与软件流程图

五、硬件PCB展示

六、软件程序设计

七、项目资料包内容

         资料获取:查看主页介绍“充哥单片机设计”


一、设计背景和意义

1.1设计背景

        在现代农业快速发展的背景下,智能化养殖已成为推动农业产业升级的重要方向之一。传统养殖方式普遍存在人工管理强度大、实时性差、环境控制滞后等问题,特别是在温湿度、光照、水质、空气质量等关键环境因素无法实现精确调控的情况下,极易导致动物应激、饲料浪费、疫病传播等风险,从而制约了养殖效益的提升与规模化发展。当前市场上虽然存在部分商用的智能养殖解决方案,但往往存在价格高昂、系统封闭、部署复杂、定制性差等问题,难以被广大中小型养殖户广泛接受。同时,这类产品在灵活性和可扩展性方面也存在一定局限性,难以根据具体的养殖需求进行灵活配置。

1.2设计意义

        传统养殖业中,人工巡检存在效率低下、误差较大且难以实现 24 小时连续监测的问题,这往往导致环境异常不能被及时发现,进而影响养殖生物的生长甚至存活。而该系统能够实时、精准地监测养殖环境中的温湿度、空气质量、光照强度等多参数,一旦发现异常便能迅速响应,有效减少环境变化对养殖生物的不良影响,显著提高养殖生物的存活率。不仅如此,远程控制与自动调节功能的实现,大幅降低了人工干预的成本,让养殖管理不再受地域和时间的限制,极大提升了养殖管理的智能化水平。

二、实物效果展示

2.1实物图片

2.2实物演示视频

【开源】基于STM32的智能养殖环境监测系统

三、硬件功能简介

3.1项目功能详解

  1. 传感器检测:检测温湿度、氨气浓度、饲料重量、水槽水位、光照强度等数据。
  2. 数据显示:0.96OLED屏幕显示全部的传感器数据以及传感器的阈值等数据。
  3. 执行机构:控制风扇、水泵、LED灯、步进电机(喂食)。
  4. 接入云平台:系统通过ESP8266 WIFI联网后,接入机智云平台。
  5. App远程监控:通过App远程监控全部传感器数据;App远程控制LED和步进电机。
  6. 阈值数据设定:系统通过按键设定阈值,也可以通过手机App远程设定。
  7. 模式切换:可以通过按键或者手机App实现自动/手动模式的切换。
  8. 手动模式:通过手机App或小程序控制开关
  9. 自动模式: 检测到光照强度低于阈值,自动打开补光灯; 检测到水位低于阈值,自动打开水泵;检测到氨气浓度或温度超过阈值,打开风扇通风,并蜂鸣器报警;检测到饲料重量低于阈值,自动打开步进电机喂食。

3.2元器件清单

  1. 主控STM32F103C8T6最小系统板
  2. 0.96OLED显示屏幕
  3. DHT11温湿度传感器
  4. MQ-135氨气浓度传感器
  5. 光敏电阻传感器
  6. 水位传感器
  7. 称重传感器
  8. 继电器
  9. 加热片
  10. 加水水泵
  11. 风扇水泵
  12. 步进电机
  13. 蜂鸣器
  14. 按键

四、主框图与软件流程图

主框图

流程图

五、硬件PCB展示

六、软件程序设计

#include "delay.h"
#include "sys.h"
#include "bmp.h"
#include "adc.h"
#include "key.h"
#include "oled.h"
#include "usart.h"
#include "control.h"
#include "dht11.h"
#include "hx711.h"
#include "uln2003.h"
#include "timer.h"int NH3_value_door = 50;
int food_time = 0;
int food_space = 0;
int food_num = 0;
int food_high = 0;
int food_low = 0;
int water_time = 0;
int water_high = 0;
int water_low = 0;uint8_t water_mode = 0;
uint8_t food_mode = 0;uint16_t timeone = 0;
uint16_t timetwo = 0;
uint16_t timethree = 0;
uint16_t timefore = 0;
uint8_t food_flag = 0;
uint8_t water_flag = 0;
uint8_t option = 0;
uint8_t keu_num = 0;
uint8_t page_num = 1;
void LED_Init(void);
void OLED_Show_FirstPage();
void OLED_Show_SecondPage();
void OLED_Show_ThirdPage();void get_all_sensor_data();
void Sensor_Data_Handle();int value;
float weight;
int32_t reset;
u8 bufff[30];float Weights=19231.0;  //100g
int32_t Weights_100=8493860;  //100gint main(void)
{delay_init();OLED_Init();OLED_Show_FirstPage();uart3_init(9600);uart1_init(115200);
//	uart2_init(115200);HX711_Init();reset = HX711_GetData();         Uln2003_Init();TIME_Config();KEY_Init();DHT11_Init();Adc_Init();Control_Init();while(1){get_all_sensor_data();Sensor_Data_Handle();if(page_num == 1){OLED_Show_FirstPage();}else if(page_num == 2){OLED_Show_SecondPage();}else if(page_num == 3){OLED_Show_ThirdPage();}}
}void Sensor_Data_Handle()
{if(food_mode==1){if(weight<food_low*1000)food_flag=1;else if(weight>=food_high*1000)food_flag=0;if(food_flag==1)Stepper_RotateByLoop(Forward,1,1);if(timeone>=food_space*5&&food_flag==0){Stepper_RotateByLoop(Forward,food_num,1);timeone=0;}//5秒钟代替1分钟if(timetwo>=food_time*5){food_mode=0;}}if(water_mode==1){if(Water_Value<water_low)water_flag=1;else if(Water_Value>=water_high)water_flag=0;if(water_flag==1)Watertwo=1;else Watertwo=0;//5秒钟代替1分钟if(timefore>=water_time*5){water_mode=0;Watertwo=0;}}else{Watertwo=0;}if(NH3_Value>NH3_value_door)Waterone=1;else Waterone=0;if(temp>27)Wind=1;else Wind=0;}void get_all_sensor_data()
{DHT11_Read_Data(&temp,&hum);    //获取温湿度数据value = HX711_GetData();weight=(float)(value-reset)*Weights/(float)(Weights_100-reset);weight=(int)weight;Get_NH3_Value(&NH3_Value);Get_Water_Value(&Water_Value);
}void Key_event_handle(void)
{keu_num = KEY_Scan(0);switch(keu_num){case 1:if(page_num == 1){option++;if(option==4)option=0;OLED_Show_FirstPage();}else if(page_num == 2){option++;if(option==6)option=0;OLED_Show_SecondPage();}else if(page_num == 3){option++;if(option==4)option=0;OLED_Show_ThirdPage();}break;case 2:if(page_num==1&&option==2){		page_num=2;option=0;OLED_Clear();OLED_Show_SecondPage();}else if(page_num==1&&option==3){page_num=3;option=0;OLED_Clear();OLED_Show_ThirdPage();}else if(page_num==2||page_num==3){page_num=1;option=0;OLED_Clear();OLED_Show_FirstPage();}break;case 3:if(page_num==1&&option==1){NH3_value_door++;OLED_Show_FirstPage();}else if(page_num==1&&option==2){		food_mode=0;OLED_Show_FirstPage();}else if(page_num==1&&option==3){water_mode=0;OLED_Show_FirstPage();		}else if(page_num==2&&option==1){food_time+=10;OLED_Show_SecondPage();}else if(page_num==2&&option==2){food_space+=1;OLED_Show_SecondPage();}else if(page_num==2&&option==3){food_num+=1;OLED_Show_SecondPage();}else if(page_num==2&&option==4){food_low+=1;OLED_Show_SecondPage();}else if(page_num==2&&option==5){food_high+=1;OLED_Show_SecondPage();}else if(page_num==3&&option==1){water_time+=10;OLED_Show_ThirdPage();}else if(page_num==3&&option==2){water_high+=1;OLED_Show_ThirdPage();}else if(page_num==3&&option==3){water_low+=1;OLED_Show_ThirdPage();}break;case 4:if(page_num==1&&option==1){NH3_value_door--;OLED_Show_FirstPage();}else if(page_num==1&&option==2){		food_mode=1;OLED_Show_FirstPage();}else if(page_num==1&&option==3){water_mode=1;OLED_Show_FirstPage();		}else if(page_num==2&&option==1){food_time-=10;OLED_Show_SecondPage();}else if(page_num==2&&option==2){food_space-=1;OLED_Show_SecondPage();}else if(page_num==2&&option==3){food_num-=1;OLED_Show_SecondPage();}else if(page_num==2&&option==4){food_low-=1;OLED_Show_SecondPage();}else if(page_num==2&&option==5){food_high-=1;OLED_Show_SecondPage();}else if(page_num==3&&option==1){water_time-=10;OLED_Show_ThirdPage();}else if(page_num==3&&option==2){water_high-=1;OLED_Show_ThirdPage();}else if(page_num==3&&option==3){water_low-=1;OLED_Show_ThirdPage();}break;}
}/*氨(0) 气(1) 浓(2) 度(3) 温(4) 水(5) 位(6) 自(7) 动(8) 喂(9) 食(10) 补(11) 水(12) 间(13) 隔(14) 次(15)数(16) 时(17) 长(18) 开(19) 关(20) ℃(21) 饲(22) 料(23) 设(24) 置(25) 最(26) 低(27) 高(28 重(29) 量(30)
*/
void OLED_Show_FirstPage(){OLED_ShowChar(8*0,0,'T',16,1);OLED_ShowChar(8*1,0,':',16,1);				//	“:”OLED_ShowNum(16*1,0,temp,2,16,1);		//	tempOLED_ShowChinese(16*2,0,21,16,1);			//	“湿”OLED_ShowChinese(16*4-8,0,5,16,1);OLED_ShowChinese(16*5-8,0,6,16,1);OLED_ShowChar(16*6-8,0,':',16,1);OLED_ShowNum(16*6,0,Water_Value,2,16,1);OLED_ShowString(16*0,16,"NH3:",16,1);if(option==1)OLED_ShowNum(16*2,16,NH3_value_door,2,16,0);else OLED_ShowNum(16*2,16,NH3_Value,2,16,1);OLED_ShowChinese(16*4-8,16,22,16,1);OLED_ShowChinese(16*5-8,16,23,16,1);OLED_ShowChar(16*6-8,16,':',16,1);OLED_ShowNum(16*6,16,weight,4,16,1);OLED_ShowChinese(16*0,32,7,16,1);OLED_ShowChinese(16*1,32,8,16,1);OLED_ShowChinese(16*2,32,9,16,1);OLED_ShowChinese(16*3,32,10,16,1);OLED_ShowChar(16*4,32,':',16,1);if(food_mode==1)OLED_ShowChinese(16*4+8,32,19,16,1);else OLED_ShowChinese(16*4+8,32,20,16,1);OLED_ShowChinese(16*0,48,7,16,1);OLED_ShowChinese(16*1,48,8,16,1);OLED_ShowChinese(16*2,48,11,16,1);OLED_ShowChinese(16*3,48,12,16,1);OLED_ShowChar(16*4,48,':',16,1);if(water_mode==1)OLED_ShowChinese(16*4+8,48,19,16,1);else OLED_ShowChinese(16*4+8,48,20,16,1);if(option == 2){OLED_ShowChar(16*5+8,32,'<',16,1);OLED_ShowChar(16*5+8,48,' ',16,1);}else if(option == 3){OLED_ShowChar(16*5+8,32,' ',16,1);OLED_ShowChar(16*5+8,48,'<',16,1);}else{OLED_ShowChar(16*5+8,32,' ',16,1);OLED_ShowChar(16*5+8,48,' ',16,1);}OLED_Refresh();}void OLED_Show_SecondPage(){OLED_ShowChinese(16*1,0,7,16,0);OLED_ShowChinese(16*2,0,8,16,0);OLED_ShowChinese(16*3,0,9,16,0);OLED_ShowChinese(16*4,0,10,16,0);OLED_ShowChinese(16*5,0,24,16,0);OLED_ShowChinese(16*6,0,25,16,0);OLED_ShowChinese(16*0,16,17,16,1);OLED_ShowChinese(16*1,16,18,16,1);OLED_ShowChar(16*2,16,':',16,1);if(option==1)OLED_ShowNum(16*2+8,16,food_time,3,16,0);else OLED_ShowNum(16*2+8,16,food_time,3,16,1);OLED_ShowString(16*4,16,"m",16,1);OLED_ShowChinese(16*0,32,13,16,1);OLED_ShowChinese(16*1,32,14,16,1);OLED_ShowChar(16*2,32,':',16,1);if(option==2)OLED_ShowNum(16*2+8,32,food_space,2,16,0);else OLED_ShowNum(16*2+8,32,food_space,2,16,1);OLED_ShowString(16*3+8,32,"m",16,1);OLED_ShowChinese(16*4,32,15,16,1);OLED_ShowChinese(16*5,32,16,16,1);OLED_ShowChar(16*6,32,':',16,1);if(option==3)OLED_ShowNum(16*6+8,32,food_num,2,16,0);else OLED_ShowNum(16*6+8,32,food_num,2,16,1);OLED_ShowChinese(16*0,48,22,16,1);OLED_ShowChinese(16*1,48,23,16,1);OLED_ShowChinese(16*2,48,29,16,1);OLED_ShowChinese(16*3,48,30,16,1);OLED_ShowChar(16*4,48,':',16,1);if(option==4)OLED_ShowNum(16*4+8,48,food_low,2,16,0);else OLED_ShowNum(16*4+8,48,food_low,2,16,1);OLED_ShowString(16*5+8,48,"-",16,1);if(option==5)OLED_ShowNum(16*6,48,food_high,2,16,0);else OLED_ShowNum(16*6,48,food_high,2,16,1);OLED_ShowString(16*7,48,"kg",16,1);OLED_Refresh();}
void OLED_Show_ThirdPage(){OLED_ShowChinese(16*1,0,7,16,0);OLED_ShowChinese(16*2,0,8,16,0);OLED_ShowChinese(16*3,0,11,16,0);OLED_ShowChinese(16*4,0,12,16,0);OLED_ShowChinese(16*5,0,24,16,0);OLED_ShowChinese(16*6,0,25,16,0);OLED_ShowChinese(16*0+8,16,17,16,1);OLED_ShowChinese(16*1+8,16,18,16,1);OLED_ShowChar(16*2+8,16,':',16,1);if(option==1)OLED_ShowNum(16*3,16,water_time,3,16,0);else OLED_ShowNum(16*3,16,water_time,3,16,1);OLED_ShowString(16*4+8,16,"min",16,1);OLED_ShowChinese(16*0+8,32,26,16,1);OLED_ShowChinese(16*1+8,32,28,16,1);OLED_ShowChinese(16*2+8,32,5,16,1);OLED_ShowChinese(16*3+8,32,6,16,1);OLED_ShowChar(16*4+8,32,':',16,1);if(option==2)OLED_ShowNum(16*5,32,water_high,2,16,0);else OLED_ShowNum(16*5,32,water_high,2,16,1);	OLED_ShowString(16*6,32,"%",16,1);OLED_ShowChinese(16*0+8,48,26,16,1);OLED_ShowChinese(16*1+8,48,27,16,1);OLED_ShowChinese(16*2+8,48,5,16,1);OLED_ShowChinese(16*3+8,48,6,16,1);OLED_ShowChar(16*4+8,48,':',16,1);if(option==3)OLED_ShowNum(16*5,48,water_low,2,16,0);else OLED_ShowNum(16*5,48,water_low,2,16,1);		OLED_ShowString(16*6,48,"%",16,1);OLED_Refresh();}

七、项目资料包内容

         资料获取:查看主页介绍“充哥单片机设计”

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

相关文章:

  • 【Java并发】揭秘Lock体系 -- condition等待通知机制
  • 计算机网络-网络边缘网络核心
  • 安卓13_ROM修改定制化-----修改固件 去除主题防止恢复 破解主题等操作解析
  • 怎么做网站301重定向可口可乐公司的企业网站建设
  • NS4168输出音频通过ESP32C3测试
  • 24.使用 HTML 和 CSS 实现无限旋转正方形动画效果
  • 音频降噪技术:从原理到工具的完整指南(scipy librosa noisereduce soundfile pedalboard)
  • 网站建设构成技术要求wordpress书籍推荐
  • CoCoSim(2020): 连接Simulink与Lustre生态的模型检测框架
  • 第2篇|风机设计的基本原则:从“会弯的高楼”到“会自救的系统”
  • SpringSecurity详解
  • [linux仓库]深入解析Linux动态链接与动态库加载:理解背后的原理与技巧
  • 异步日志系统
  • 自监督学习在医疗AI中的技术实现路径分析(中)
  • QoS之拥塞管理两种配置方法
  • tp框架做网站的优点郑州品牌策划设计公司
  • 浅析 AC 自动机
  • Docker常见问题与解决
  • Rokid手势识别技术深度剖析
  • java web搭建商城购物车
  • 从 0 到 1 搭建 Python 语言 Web UI自动化测试学习系列 6--基础知识 2--常用元素定位 2
  • 从“端到端”到“人到人”:一种以需求直接满足为核心的新一代人机交互范式
  • C到C++(Num015)
  • 做关于车的网站有哪些网页布局的方式有哪些
  • 图漾相机C++语言---Sample_V1(4.X.X版本)完整参考例子(待完善)
  • Python数据挖掘之基础分类模型_支持向量机(SVM)
  • Java-Spring 入门指南(十六)SpringMVC--RestFul 风格
  • 益阳网站制作公司地址高端装饰公司网站设计
  • 产生式规则在自然语言处理深层语义分析中的演变、影响与未来启示
  • K230基础-摄像头的使用