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

【STM32项目开源】STM32单片机智能农业大棚控制系统

目录

一、设计背景和意义

1.1设计背景:

1.2设计意义:

二、实物展示

三、硬件功能介绍

2.1 硬件清单:

2.2 功能介绍:

四、软件设计流程图

五、硬件PCB展示

六、软件主函序展示

七、单片机实物资料

资料获取 查看主页介绍:兆龙电子单片机设计


一、设计背景和意义

1.1设计背景:

在温室大棚日常种植管理、作物生长状态监护及精准农业生产等场景中,大棚环境参数监测与智能调控是基础且核心的需求。传统温室大棚管理方式多依赖人工巡检或功能单一的简易监测工具,这类工具存在明显局限:一方面,专业农业环境监测设备(如大型多参数环境分析仪、高精度土壤检测站)体积庞大、操作复杂,且成本高昂,难以普及到中小农户家庭温室或小型种植基地场景,同时数据需人工记录整理,易出现记录误差与数据丢失,导致无法及时响应作物生长的环境需求;另一方面,普通简易监测工具(如手持温湿度计、手动光照表)虽便携性提升,但大多仅能监测单一环境指标(如仅测空气温度或仅测土壤湿度),缺乏多指标协同监测、数据实时传输及自动调控功能,无法满足现代化精准农业场景下对温室环境全方位、智能化管理的需求。

现有温室大棚控制方案还存在功能割裂与集成度低的问题:部分高端农业物联网设备虽具备多指标监测与数据存储功能,但依赖特定品牌生态系统,兼容性差,且设备与维护成本较高,难以覆盖中老年农户或低收入种植群体;而低成本的监测工具又往往在数据精度与功能完整性上有所欠缺,无法实现环境数据与移动端 APP、云端管理平台的联动,导致数据难以高效分析与长期管理,无法为作物生长规律总结及后续种植优化提供数据支撑。基于此,本设计以 STM32 单片机为核心,融合高精度环境参数采集模块(如温湿度传感器、光照传感器、土壤湿度传感器、CO₂浓度传感器)、LCD 显示模块、数据存储模块及继电器控制与报警模块,构建低成本、高集成度的 STM32 单片机智能温室大棚控制系统,以解决传统温室管理中指标单一、智能化程度低、数据利用效率低及普及性差的问题。

1.2设计意义:

本设计通过整合 STM32 单片机的高效数据处理能力与多模块协同工作机制,在智能温室大棚种植管理领域具有多重实用价值,具体体现在以下三方面:

从使用体验与管理效率角度,该系统突破了传统温室管理工具的局限:一是实现了多环境指标同步监测(如支持空气温湿度、土壤湿度、光照强度、CO₂浓度等核心指标),无需人工频繁使用不同工具巡检,减少操作繁琐性;二是配备 LCD 实时显示模块,直观呈现当前各项环境数据、数据采集时间及作物适宜生长范围,同时支持数据自动存储(可通过 SD 卡或 WiFi 传输至手机 APP / 云端平台),方便农户长期追溯环境变化趋势,为作物生长规律分析与种植方案优化提供完整数据支撑;三是新增环境异常预警与自动调控功能,当监测到某项环境指标超出预设适宜范围(如温度过高、土壤湿度过低、光照不足)时,系统自动触发声光报警,同时联动继电器开启风扇、水泵、补光灯等设备,无需人工干预即可及时调整环境,大幅提升了温室管理的便捷性与作物生长安全性。

从技术实践与成本控制角度,本设计以 STM32 单片机为核心,充分利用其低功耗、高性价比的优势,搭配低成本的高精度环境参数传感器(如 DHT11 温湿度传感器、BH1750 光照传感器、FC - 28 土壤湿度传感器、MG - 811 CO₂传感器)与通用外围模块,在保证数据精度(温度测量误差可控制在 ±0.5℃以内,土壤湿度测量误差可控制在 ±3% 以内)的前提下,有效降低了系统整体成本,相比同功能的高端农业物联网设备成本降低 40%-60%,更易普及到中小农户、家庭温室及小型种植基地场景。同时,系统支持模块化扩展(如后续可新增土壤酸碱度监测模块、蓝牙远程控制功能),为后续功能升级预留了空间,具备良好的灵活性与可扩展性。

从应用场景与行业价值角度,该系统可广泛适配多类种植场景:在家庭温室种植中,可作为花卉、蔬菜等作物的智能管理工具,实时调控生长环境,提升种植成功率;在高校农业工程与电子信息相关专业教学中,可作为单片机应用与农业环境监测的实践案例,帮助学生理解嵌入式系统与农业传感器协同工作原理;在中小规模经济作物种植基地(如草莓园、蔬菜大棚)中,可为农户提供低成本的精准管理方案,减少人工成本与水资源、电力资源浪费,提升作物产量与品质。此外,本设计探索了 STM32 单片机在低成本智能温室领域的应用方案,推动传统温室管理从 “单一指标、人工调控” 向 “多指标协同、智能监测、自动调控” 升级,为低成本智能化农业设备的开发提供了可参考的集成思路,具有较好的实践应用与行业推广价值。

二、实物展示

下方为实物演示视频

【开源】基于STM32单片机智能农业大棚控制系统

下方为实物展示图片

三、硬件功能介绍

2.1 硬件清单:

  • STM32F103C8T6
  • LCD1602显示
  • 光照采集
  • DHT11温湿度采集
  • 土壤湿度采集
  • 声光报警电路
  • 继电器控制电路与
  • 水泵
  • 风扇
  • 台灯
  • ESP8266 WIFI模块

2.2 功能介绍:

(1)检测功能: 系统检测周围环境温度数据、土壤湿度数据、光照强度
(2)显示功能: 将检测到的环境数据显示在oled屏幕上
(3)控制功能: 当光照强度低于设定值时,开启灯光;温度高于设定值,开启风扇;蜂鸣器报警土壤湿度低于设定值,开启水泵;蜂鸣器报警
(4)无线通信:通过WiFi模块与手机APP可实时检测环境
(5)自动模式:自动模式可根据阈值工作
(6)手动模式:手动模式用户可自由控制开关

四、软件设计流程图

五、硬件PCB展示

六、软件主函序展示


#include "sys.h"
#include "adc.h"
#include "delay.h"
#include "lcd1602.h"
#include "ds18b20.h"
#include "timer.h"
#include "gpio.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>unsigned int  light=0;
unsigned char temperature=0;
unsigned char setTempValue=35;        //温度设置值
unsigned int  setSoilMoisture=10;
unsigned char setLightValue=20;       //光照设置值
unsigned int  soilMoisture;           //土壤湿度bool shuaxin  = 0;
bool shanshuo = 0;
bool mode = 0;               //0是自动模式,1是手动模式unsigned char setn=0;//记录设置键按下的次数void displayLight(void)//显示光照
{u16 test_adc=0;/////////////获取光线值test_adc = Get_Adc_Average(ADC_Channel_8,10);//读取通道9的5次AD平均值light = test_adc*99/4096;//转换成0-99百分比light = light >= 99? 99: light;//最大只能到百分之99if(light<=setLightValue && shanshuo){LCD_Write_Char(3,1,' '); 
LCD_Write_Char(4,1,' '); }
else{
LCD_Write_Char(3,1,light/10+'0'); 
LCD_Write_Char(4,1,light%10+'0'); }
}void displaySoilMoisture(void)//显示土壤湿度
{float voltage = 0.0;voltage = Get_Adc_Average(ADC_Channel_9,10)*3.3/4096;if(voltage > 3.3)voltage = 3.3;if(voltage < 1.0) soilMoisture=99;else{soilMoisture = (3.3 - voltage) / 0.023;  if(soilMoisture > 99)soilMoisture = 99;        //最大取百分之99}if(soilMoisture<=setSoilMoisture && shanshuo){LCD_Write_Char(9,0,' '); LCD_Write_Char(10,0,' ');}
else{LCD_Write_Char(9,0,soilMoisture/10+'0'); LCD_Write_Char(10,0,soilMoisture%10+'0');}
}void displayTemperature(void)//显示温度
{temperature=ReadTemperature();if(temperature>=setTempValue && shanshuo){LCD_Write_Char(12,1,' '); LCD_Write_Char(13,1,' ');}
else{if(temperature!=0){LCD_Write_Char(12,1,temperature/10+'0'); LCD_Write_Char(13,1,temperature%10+'0');}}
}void displaySetValue(void)
{
if(setn == 1){
LCD_Write_Char(7,1,setSoilMoisture/10+'0'); LCD_Write_Char(8,1,setSoilMoisture%10+'0');}if(setn == 2){
LCD_Write_Char(7,1,setTempValue/10+'0'); LCD_Write_Char(8,1,setTempValue%10+'0');}if(setn == 3){
LCD_Write_Char(7,1,setLightValue/10+'0'); LCD_Write_Char(8,1,setLightValue%10+'0');}
}void keyscan(void)
{
if(KEY1 == 0)//模式切换按键{
delay_ms(20);//消抖if(KEY1 == 0){
while(KEY1 == 0);//等待按键松开
if(setn == 0){mode = !mode;
if(mode==0)LCD_Write_String(13,0,"ZD");else LCD_Write_String(13,0,"SD");}}}if(KEY2 == 0){
delay_ms(20);//消抖if(KEY2 == 0){
while(KEY2 == 0);BEEP=0;
if(mode==0){setn ++;}
if(mode==1){RELAY3=~RELAY3;;}if(setn == 1){
LCD_Write_String(0,0,"set the Moisture");//显示字符串
LCD_Write_String(0,1,"       00%      ");}if(setn == 2){
LCD_Write_String(0,0,"  set the Temp  ");//显示字符串
LCD_Write_String(0,1,"       00 C     ");LCD_Write_Char(9,1,0xdf);}if(setn == 3){
LCD_Write_String(0,0,"  set the Light ");//显示字符串
LCD_Write_String(0,1,"       00%      ");}displaySetValue();if(setn >= 4){setn = 0;LCD_Write_String(0,0,"Moisture:  %    ");//显示字符串
LCD_Write_String(0,1,"Gx:  % Temp:   C");
LCD_Write_Char(14,1,0xdf);if(mode==0)LCD_Write_String(13,0,"ZD");else LCD_Write_String(13,0,"SD");}}}
if(KEY3 == 0)//加键{
delay_ms(20);//消抖if(KEY3 == 0 ){
while(KEY3 == 0);
if(setn == 0 && mode==1){RELAY1=~RELAY1;}if(setn == 1){
if(setSoilMoisture<99)setSoilMoisture++;}if(setn == 2){
if(setTempValue<99)setTempValue++;}if(setn == 3){if(setLightValue<99)setLightValue++;}displaySetValue();}}if(KEY4 == 0)//减键{
delay_ms(20);//消抖if(KEY4 == 0 ){
while(KEY4 == 0);if(setn == 0 && mode==1){RELAY2=~RELAY2;}if(setn == 1){
if(setSoilMoisture>0)setSoilMoisture--;}if(setn == 2){
if(setTempValue>0)setTempValue--;}if(setn == 3){if(setLightValue>0)setLightValue--;}displaySetValue();}}
}unsigned char temp_=0;int main(void)
{	
delay_init();	    //延时函数初始化	  NVIC_Configuration();
delay_ms(500);       //上电瞬间加入一定延时在初始化DS18B20_GPIO_Init();Adc_Init();          //ADC初始化KEY_GPIO_Init();    //按键初始化
LCD_Init();         //屏幕初始化DS18B20_Init();LCD_Write_String(0,0,"   loading...   ");LCD_Write_String(0,0,"Moisture:00% ZD ");//显示字符串LCD_Write_String(0,1,"Gx:00% Temp:00 C");LCD_Write_Char(14,1,0xdf);
TIM3_Init(99,719);   //定时器初始化,定时1ms
//Tout = ((arr+1)*(psc+1))/Tclk ; 
//Tclk:定时器输入频率(单位MHZ)
//Tout:定时器溢出时间(单位us)
while(1){  keyscan();if(setn == 0){if(shuaxin == 1){shuaxin = 0;displayLight();   //显示光照displaySoilMoisture(); //显示土壤湿度displayTemperature();  //显示温度if(mode==0)   {if(light<=setLightValue)RELAY1=1;else RELAY1=0;              //光线暗开灯if(soilMoisture<=setSoilMoisture)RELAY2=1;else RELAY2=0;         //湿度低开水泵if(temperature>=setTempValue)RELAY3=1;else RELAY3=0;         //温度高开风扇if(light<=setLightValue||temperature>=setTempValue||soilMoisture<=setSoilMoisture)BEEP=1;else BEEP=0;  //蜂鸣器提醒}else{BEEP=0;}}}delay_ms(20);}	
}void TIM3_IRQHandler(void)   //TIM3中断,50毫秒一次中断
{
static u16 timeCount1 = 0;if(TIM_GetITStatus(TIM3, TIM_IT_Update) != RESET) //检查指定的TIM中断发生与否:TIM 中断源 {
TIM_ClearITPendingBit(TIM3, TIM_IT_Update);  //清除TIMx的中断待处理位:TIM 中断源 timeCount1++;if(timeCount1 >= 300)  //300ms{timeCount1 = 0;shanshuo = !shanshuo;shuaxin = 1;}}
}

七、单片机实物资料

资料获取 查看主页介绍:兆龙电子单片机设计

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

相关文章:

  • github开源笔记应用程序项目推荐-Joplin
  • 【Swift】LeetCode 438. 找到字符串中所有字母异位词
  • 【SoC】【W800】基于WM IoT SDK的环境搭建
  • BFS 与 DFS——力扣102.二叉树的层序遍历
  • 使用IOT-Tree的OPC UA Client连接器对接OPC UA Server获取数据到系统中
  • 优质网站建设在哪里wordpress分类目录名称
  • 专题一 之 【双指针】
  • 将Windows应用上架至Microsoft Store
  • 对LlamaFactory的一点见解
  • 紫金保险车险官方网站关键词优化营销
  • 大模型-智能体-【篇一:单智能体框架】
  • LLMs之MultiAgent:OpenAgents(创建AI智能体网络)的简介、安装和使用方法、案例应用之详细攻略
  • IDEA 中 Tomcat 部署 Java Web 项目(2)
  • [SCADE编译原理] 状态机到数据流的源到源翻译(2005)
  • 小迪安全v2023学习笔记(一百三十四讲)—— Windows权限提升篇数据库篇MySQLMSSQLOracle自动化项目
  • 2023年10月份04741计算机网络原理真题及答案
  • Room 概要
  • 元宇宙中的数字身份与数据主权:个体权益的守护与边界
  • 函数模板与类模板:C++泛型编程核心解析
  • [GO]Go语言包访问控制与导入机制
  • Flink细粒度滑动窗口性能优化与解决方案深度解析
  • Flink SQL 窗口函数详细
  • 成都网站建设的公司哪家好网站怎么推广出去
  • 【Go】--gin框架基本使用
  • [优选算法专题四.前缀和——NO.25一维前缀和]
  • openharmony之分布式相机开发:预览\拍照\编辑\同步\删除\分享教程
  • LeetCode 402 - 移掉 K 位数字
  • 皮卡丘XSS
  • 思维|栈
  • 关于网站建设方案的案例数码产品销售网站建设策划书