设施农业(大棚种植)远程监控系统设计 STM32+51单片机 含pcb 上下位机源码 原理图

目录

摘要

1. 引言

2. 系统方案

3.   系统硬件设计

4. 系统软件设计

5. 系统创新

6. 评测与结论

7、实物图 

8、原理图

​9、程序

10、资料内容

资料下载地址:设施农业(大棚种植)远程监控系统设计 STM32+51单片机 含pcb 上下位机源码 原理图 论文

摘要

        该系统将自动控制技术与设施农业相结合,采集温室的光照度、温度和湿度,同时实现上位机的存储和监控。该系统的应用可以节省大量的劳动力,提高蔬菜的品质,增加产量,节约水肥,形成生态友好型的棚膜经济,不仅对我省乃至整个东北寒区的温室蔬菜生产都具有重要的意义。

1. 引言

        近年来,温室蔬菜种植的规模在我国北方发展十分迅速,成为城市居民菜篮的主要途径,也是农户增产创收的捷径之一。然而温室大棚普遍存在着自动化水平较低、人力消耗大以及水肥资源浪费严重等诸多问题。针对上述问题,本团队设计了北方温室蔬菜设施环境远程监控系统。该系统采用STM32F407探索板作为主控制器,布置在大棚内部的传感器可实时检测室内温度、湿度、光照强度,同时单片机还将通过光敏传感器检测室外光照强度以控制大棚外卷帘机卷起或放下保温层,不仅如此,本系统中还加入了上位机控制系统,用户足不出户就能监视并控制大棚内部的情况,一定程度上的实现了农业生产的自动化,使农作物始终生长在适宜的环境中,不但解放了人力,节约了资源,同时还能提高作物的经济效益,为农户增产增收。

2. 系统方案

        本团队的作品针对我国北方农村温室大棚运行现状,对目前的温室大棚产品进行了深入的调查与研究,设计出一套切实可行的智能温室远程控制系统。本系统可以实现对温室大棚室内部环境因素的实时监测,同时用户还可以通过远程群控系统实时监控多个温室大棚内的情况,操作方便快捷。

3.   系统硬件设计

        本作品中,系统由五个单片机系统组成的,其中51系列的单片机四个,STM32F407单片机一个,各个子系统之间通过NRF24L01无线模块进行通信,如下图所示:

        主控制板主要由STM32F407探索板、无线通信模块以及USB转串口模块组成。主控制板负责对两个大棚传递上来的信息进行处理,打包之后发送给上位机,同时还负责将上位机下达的指令传递给两个大棚。 

        大棚控制板主要由STC12C5A60S2单片机、12864LCD显示、光耦隔离、继电器、无线通信模块组成。大棚控制板负责控制大棚内部装置以及转发大棚采集板采集上来的数据,一旦收到主控制板发送的信号,大棚控制板将对相应的装置进行控制。 

        大棚采集板主要由STC12C4052AD单片机、光照强度传感器、土壤湿度传感器、空气温湿度、无线通信模块以及供电电池组成。大棚采集板负责采集大棚内部的各项数据,之后发送给大棚控制板。 

4. 系统软件设计

        系统软件主要由四个部分组成,分别是上位机软件、主控制板、大棚控制板和大棚采集板。

上位机软件使用微软公司的Visual Basic语言编写。上位机界面通过USB转串口模块与主控制板进行通信,以获取两个大棚内部的环境数据和对大棚内部设施进行控制,同时上位机软件还可以将环境数据保存到数据库中,以便日后的查询。

 

        主控制板在Keil MDK环境下开发,所用语言为C语言。在程序中使用了ST的库函数,使得开发思路更加的流畅。当主控制板接收到大棚控制板发送上来的信号时,首先通过读取无线模块内部寄存器的值判断是哪个大棚发送上来的信号。

        由于在无线通信模块中,不同模块之间是由通道地址来进行区分的,所以在要通过不同的接收通道地址来实现多通道接收,当接收到大棚控制板发送上来的数据时,主控制板读取无线模块中的通道标志位来判断是哪个大棚发送的数据。同理当主控制板收到上位机发送下来的控制信号时,也先判断是控制哪个大棚的信号,然后加载不同的发送地址,以发送给指定的大棚。

        大棚控制板和大棚采集板也是在Keil开发环境下使用C语言进行编程的。

        大棚采集板的程序比较简单,只有重复采集传感器参数和将数据发送出去这两项工作。

        在大棚控制板的程序中,包括液晶显示、按键扫描、继电器控制、数据接收以及数据发送。大棚控制板将采集板发送过来的数据,通过无线传送到主控制器中,同时还接收主控制器发送下来的控制信号。

5. 系统创新

系统的创新之处有以下几个方面:
  • 系统使用无线通信模块组成小型局域网,无需现场布线,安装方便;
  • 上位机软件使用简单、方便,实时性好;
  • 数据可以保存在数据库中,供日后的查询和调用;

6. 评测与结论

        系统测试采取人工测试方式,主要包括:系统运行的可靠性测试、无线数据传输可靠性测试、大棚控制板继电器开关测试、大棚采集板电池使用时间测试等。

测试结果如下表所示:

测试的项目

达到的指标

系统运行的可靠性测试

整套系统连续运行48小时无异常

无线数据传输正确率测试

传输距离<5米 传输正确率100%

传输距离<10米 传输正确率90%

传输距离<20米 传输正确率60%

大棚控制板继电器开关测试

继电器连续开关动作1小时无异常

大棚采集板电池使用时间测试

在电池供电情况下

采集板连续工作7天无异常

7、实物图 

8、原理图

大棚采集板硬件图 原理图: 

大棚丛机下位机pcb图: 

大棚控制板硬件图 原理图:

大鹏丛机下位机pcb图:

 9、程序

主控制板源码的主程序

#include "main.h"u8 flag,j,ii,tf,temp;
u8 TxBuf[13]={0x0f,0x0f,0x0f,0x0f,0x0f,0x00,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa,0xaa};
u8 RxBuf0[13];
u8 RxBuf1[13]={50,50,50,50,50,50,50,50,50,50,50,50,50};
u8 RxBuf[26];
u8 RX0_flag=0,RX1_flag=0;int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);        //中断向量配置LED_Init();                        //初始化LED               COM3Init(9600);                //串口3初始MY_SPI_Init();if(NRF24L01_Check()){GPIO_SetBits(GPIOD, GPIO_Pin_14);}else{GPIO_SetBits(GPIOD, GPIO_Pin_13);        }        NRF24L01_Init();NRF24L01_TxPacket(TxBuf);NRF24L01_Write_Reg(WRITE_REG_NRF+STATUS,0XFF);tf=0;while(1){if(flag)                                //如果PC给它发了指令,则往下发送{USART_Cmd(USART3, DISABLE);        //关串口NRF24L01_Write_Reg(WRITE_REG_NRF+CONFIG, 0x0e);//配置为发送for(ii=0;ii<7;ii++){temp=(j&0x80);j=(j<<1);if(temp)TxBuf[ii]=0xf0;else TxBuf[ii]=0x0f;                                       }NRF24L01_TX_Mode(TxBuf[5]);NRF24L01_TxPacket(TxBuf);NRF24L01_Write_Reg(WRITE_REG_NRF+STATUS,0XFF);delay_ms(10);NRF24L01_Init();//当发送完毕后,重新把通道0配置为1号大棚,通道1为2号大棚flag=0;USART_Cmd(USART3, ENABLE);}NRF24L01_Write_Reg(WRITE_REG_NRF+CONFIG, 0x0f);tf=NRF24L01_switch();                                //判断通道switch (tf){case 0: NRF24L01_RxPacket(RxBuf0);        //0通道为一号大棚RX0_flag=1;break;case 1: NRF24L01_RxPacket(RxBuf1);        //1通道为二号大棚RX1_flag=1;break;                                                         }if(RX0_flag|RX1_flag){for(ii=0;ii<13;ii++)RxBuf[ii]=RxBuf0[ii];for(ii=13;ii<26;ii++)RxBuf[ii]=RxBuf1[ii-13];for(ii=0;ii<26;ii++){USART_SendData(USART3,RxBuf[ii]);while(!USART_GetFlagStatus(USART3,USART_FLAG_TC));USART_ClearFlag(USART3,USART_FLAG_TC);}RX0_flag=0;RX1_flag=0;               }
//                 GPIO_SetBits(GPIOD, GPIO_Pin_15);
//                 delay_ms(300);
//                 GPIO_ResetBits(GPIOD, GPIO_Pin_15);
//                 delay_ms(300);}               }

 大棚采集板源码

#include"display.h"uchar xdata data_txt[64]={"光照强度:12.3% 空气湿度:78.9% 土壤湿度:45.6% 空气温度:+ab.c  "};
//汉字数组字符指示               0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
uchar xdata set_txt[64]={"泵:关  风扇;关卷帘上:关      电磁阀:关      卷帘下:关      "};
//汉字数组字符指示              0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdefuchar xdata txt_set3[4]={"开关"};void display_data(void)                //显示数据界面
{uchar i;if(display_flag)                //每次切换界面显示一次界面{        lcd_com(0x80);for(i=0;i<64;i++) lcd_dat(data_txt[i]);display_flag=0;}lcd_three_date(0x85,RX_CJ,0);        //根据收到的数据显示lcd_three_date(0x8d,RX_CJ,6);lcd_three_date(0x95,RX_CJ,3);lcd_com(0x9c);lcd_dat(':');lcd_dat(RX_CJ[9]);lcd_three_date(0x9d,RX_CJ,10);
}void display_set(void)                //显示设置界面
{uchar j;if(display_flag)            //每次切换界面显示一次界面{lcd_com(0x80);for(j=0;j<64;j++) lcd_dat(set_txt[j]);display_flag=0;}lcd_com(0x0c);display_flash(0x82,water_pump);display_flash(0x87,feng_shan);display_flash(0x94,water_button);display_flash(0x8c,!juan_up);display_flash(0x9c,!juan_down);if(s_flag){
//                lcd_com(0x0e);                //开光标set_home();delay_ms(100);if(ok_flag){set_ok_key();ok_flag=0;}        }}//*****************设置界面-开关量显示子函数******************
void display_boole(uchar b)
{lcd_dat(txt_set3[b]);lcd_dat(txt_set3[b+1]);
}void display_flash(uchar add,bit b)
{lcd_com(add);if(b){display_boole(2);               }else{               display_boole(0);}        
}

大棚主机板 一号丛机的部分源码:

#include"12864.h"///显示物理量需要一个带二维参数的函数,一维节点号,一维物理量序号
/*需要读取的数组是:iic-------iic_12_out[12]---读取历史数据用---由函数iic_read_ndate()得到ds13------get_ds13_date[7]-显示时间用-------由函数get_ds13_time()得到12864-----lcd_date[4][9]---3个节点36个物理量的仓库
*/
//********************大棚上电首页************************
uchar xdata txt_1[64]={"欢迎使用本系统:长春工程学院    版本号:401.5.1.1      401 工作室"};
uchar xdata txt_2[64]={"大棚主机控制板  及开关量控制界面包括显示界面                    "};
//汉字数组字符指示            0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef
//*********************************************************     void lcd_com(uchar a)
{rs=0;rw=0;en=0;P0=a;delay_ms(1);en=1;delay_ms(1);en=0;               
}
void lcd_dat(uchar b)
{rs=1;rw=0;en=0;P0=b;delay_ms(1);en=1;delay_ms(1);en=0;        
}
void lcd_two_date(uchar add,uint date) //调节目标值和开关状态用 显示2个字符
{lcd_com(add);                         //设定指针        lcd_dat(0x30+date/10);                  //送十位lcd_dat(0x30+date%10);           //送个位               
}void lcd_three_date(uchar add,uchar *date,uchar p)        //显示 xx.x
{lcd_com(add);lcd_dat(date[p]);lcd_dat(date[p+1]);lcd_dat('.');lcd_dat(date[p+2]);
}void lcd_init()
{uchar i1;lcd_com(0x30);//8位界面基本指令集delay_ms(1);lcd_com(0x02);//地址归位delay_ms(1);lcd_com(0x0c);//显示打开,光标关,反白关lcd_com(0x0f);//光标闪烁0x0e只显示光标不闪烁delay_ms(1);lcd_com(0x01);                //清屏lcd_com(0x80);          //写 系统版本相关for(i1=0;i1<64;i1++)        lcd_dat(txt_1[i1]);delay_ms(1000);                        //延时一段时间lcd_com(0x01);                //清屏lcd_com(0x80);          //写 系统提示for(i1=0;i1<64;i1++)        lcd_dat(txt_2[i1]);delay_ms(1000);                        //延时一段时间}

10、资料内容

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/691277.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交互验证和人机识别对抗升级,AIGC如何应用在验证安全?保证用户体验才是王道

交互验证和人机识别对抗再升级&#xff0c;滑动拼图、文字点选、语义空间和人工智能的对抗&#xff0c;俗话说&#xff0c;道高一尺&#xff0c;魔高一丈&#xff0c; 图形验证可以挑战人工智能吗&#xff1f; AIGC如何应用在身份验证业务 &#xff1f; 1 交互验证被破解现状 …

Oracle SQL优化案例-查询Null值走索引

网友发来一个SQL&#xff0c;说他们公司的一个SQL要优化帮忙看一下&#xff0c;执行计划如下&#xff1a; -------------------------------------SELECT * FROM (SELECT * FROM TXS C WHERE C.A ISNULL OR C.A ORDER BY ID_TXS DESC) WHERE ROWNUM<100​---------------…

【全开源】Java知识付费教育付费资源付费平台公众号小程序源码

特色功能&#xff1a; 多样化的内容呈现&#xff1a;资源付费平台小程序支持图文、音视频、直播等多种形式的内容呈现&#xff0c;为用户提供了丰富的学习体验。直播课程&#xff1a;专家或讲师可以通过小程序进行在线授课&#xff0c;与用户实时互动&#xff0c;增强了学习的…

设计模式-结构型-桥接模式-Bridge

矩阵类 public class Matrix {private String fileName;public Matrix(String fileName) {this.fileName fileName;}public String getFileName() {return fileName;} } 图片抽象类 public abstract class Image {protected ImageImp imp;public void setImp(ImageImp imp)…

如何使用Tushare+ Backtrader进行股票量化策略回测

数量技术宅团队在CSDN学院推出了量化投资系列课程 欢迎有兴趣系统学习量化投资的同学&#xff0c;点击下方链接报名&#xff1a; 量化投资速成营&#xff08;入门课程&#xff09; Python股票量化投资 Python期货量化投资 Python数字货币量化投资 C语言CTP期货交易系统开…

IT服务台的优势

我们谈谈IT服务台的一些好处&#xff0c;以更好地了解其重要性。IT 服务台为所有利益相关者&#xff08;技术人员和最终用户&#xff09;提供服务带来了效率。例如&#xff0c;三层 IT 服务台可以在第 0 层拥有自助服务门户&#xff0c;在第 1、2 和 3 层拥有技术人员&#xff…

SpringAMQP Work Queue 工作队列

消息模型: 代码模拟: 相较于之前的基础队列&#xff0c;该队列新增了消费者 不再是一个&#xff0c;所以我们通过代码模拟出两个consumer消费者。在原来的消费者类里写两个方法 其中消费者1效率高 消费者2效率低 RabbitListener(queues "simple.queue")public voi…

二维数组 和 变长数组

在上一期的内容中&#xff0c;为诸君讲解到了一维数组&#xff0c;在一维数组的基础上&#xff0c;C语言中还有着多维数组&#xff0c;其中&#xff0c;比较典型且运用较为广泛的就是我们今天的主角——二维数组 一 . 二维数组的概念 我们把单个或者多个元素组成的数组定义为一…

React 第三十一章 前端框架的分类

现代前端框架&#xff0c;有一个非常重要的特点&#xff0c;那就是基于状态的声明式渲染。如果要概括的话&#xff0c;可以使用一个公式&#xff1a; UI f&#xff08;state&#xff09; state&#xff1a;当前视图的一个状态f&#xff1a;框架内部的一个运行机制UI&#xff1…

LNMP环境部署WordPress——使用源码包安装方式部署环境

目录 一.前提准备 二.源码安装Mysql 1.MySQL类型 2.MySQL 版本说明 3.MySQL 安装方式 3.1 yum 安装 3.2 编译安装 3.3 二进制安装 3.4 rpm 安装 4. 编译安装MySQL5.7 4.1 清理安装环境 4.2 创建mysql用户 4.3 从官网下载tar包 4.4 安装编译工具 4.5 解压 4.6 …

专业130+总分400+哈尔滨工程大学810信号与系统考研哈工程水声电子信息通信工程,真题,大纲,参考书。

毕业设计刚搞完&#xff0c;总结一下去年考研的复习经历&#xff0c;希望对大家复习有帮助&#xff0c;考研专业课810信号与系统130总分400&#xff0c;如愿上岸哈工程水声。专业课&#xff1a;130 哈工程水声院810专业课信号与系统难度适中&#xff0c;目前数一难度很高&…

【全开源】Java洗衣清洁服务同城清洗服务小程序源码

特色功能&#xff1a; 在线预约与支付&#xff1a;用户可以直接通过小程序预约洗衣时间和地点&#xff0c;同时还可以在线支付洗衣费用&#xff0c;从而避免了排队等待的时间&#xff0c;提高了效率。订单查询与服务评价&#xff1a;用户可以通过小程序实时查询洗衣订单的状态…