智慧农业大棚系统设计.docx
《智慧农业大棚系统设计.docx》由会员分享,可在线阅读,更多相关《智慧农业大棚系统设计.docx(23页珍藏版)》请在冰点文库上搜索。
智慧农业大棚系统设计
从天空俯瞰荷兰,你会发现奇迹般的景观——地面被一块块不同的田地拼凑着,由于荷兰
的农业标准,其中大多数的田地都非常小,并且还会被喧闹的城市与郊区分割开。
在荷兰
核心的农业种植地,摩天大楼和制造业工厂的附近,就是马铃薯地、蔬菜大棚和猪舍。
可
以说,荷兰超过一半的国土都被用于了农业与园艺。
当然,最显著的就是蔬菜大棚建筑群,有的大棚建筑群占地面积高达175公顷(2625
亩)。
他们就像巨型镜子一样蔓延在荷兰国土上,在阳光的照耀下闪闪发光,到了夜晚则
会从内部发出光芒。
1需求分析说明
1.1设计背景
智能化控制系统应用到大棚种植上,利用最先进的生物模拟技术,模拟出最适合棚内植物生长的环境,采用温度、湿度、CO2、光照度传感器等感知大棚的各项环境指标,并通过微机进行数据分析,由微机对棚内的水帘、风机、遮阳板等设施实施监控,从而改变大棚内部的生物生长环境。
智能大棚是自动化控制程序用于在温室大棚智能控制的结果:
比较人工的控制来说,智能控制最大的好处就是能够相对恒定的控制大棚内部的环境,对于环境要求比较高的植物来说,更能避免因为人为因素而造成生产损失。
相对生产来说,将智能化控制系统应用到大棚生产以后,产量与质量比人工控制的大棚都有极大的提高,对于不同的种植品种而言,提高产量与质量相对不同,对于档次较高的经济作物来说,生产效率可以提高30%以上。
相对运行成本来的核算,对于有一定规模的种植企业来说,极大的降低了劳动力成本,设备的投入与运行,可以完全由节约下来的劳动力成本中核算出来,使用时间越长,光节约的劳动力成本就是一笔巨大的利润。
1.2组成部分
现代化经济的迅速发展,促使了人们对机械智能化的强烈认知。
现代化智能温室也称作自动化温室,是指配备了由计算机控制的可移动天窗、遮阳系统、保温、湿窗帘/风扇降温系统、喷滴灌系统或滴灌系统、移动苗床等自动化设施,基于农业温室环境的高科技“智能”温室。
智能温室的控制一般由信号采集系统、中心计算机、控制系统三大部分组成。
1.3功能需求
(1)对大棚内温度、湿度、光照情况等基本信息的采集并显示。
(2)实现灌溉远程化、自动化,大大节省人力成本。
(3)对大棚整体结构情况的监测、火灾等突发事件的检测并发出警报。
(4)实现大棚内灯等基本电器的远程化、自动化控制,使系统更加智能,用户体验感更好。
(5)实现遮阳网等蔬菜保护机制的远程化、自动化控制。
(6)对于监测到的大棚内的各种信息输出到客户端的显示屏上。
2概要设计说明
2.1各模块功能描述
(1)主函数模块:
初始化系统界面,调用各个模块实现各种功能。
(2)协调器模块:
接收各个节点发送的数据并通过串口进行转发到客户端,通过串口接收客户端发送的指令并转发给各个节点。
(3)温、湿、亮度监测模块:
使用温湿度光电传感模块对智慧农业大棚内的温度、湿度、亮度进行监测并实时显示到控制系统界面上。
(4)棚顶异物监测模块:
使用震动传感器模块对智慧农业大棚的棚顶进行实时监测并实时显示到控制系统界面上。
(5)危险区域保护模块:
使用触摸传感器模块对存放药品等危险区域、仓库进行监测,一旦监测到有人触摸门把手,立刻在控制系统界面上给出警报。
(6)防盗监控模块:
使用红外热释电传感器模块对智慧农业大棚内进行实时监测,有人进入,控制系统界面立刻显示警报。
(7)蓄水罐液面高度监测模块:
使用超声波测距模块对智慧农业大棚的蓄水罐中水的剩余量进行监测,实时显示在控制系统界面上。
(8)火灾监控模块:
使用烟雾传感器模块对智慧农业大棚内进行实时监测,一旦检测到烟雾,控制系统界面上立刻给出警报。
(9)串口控制模块:
控制COM1串口的开启和关闭。
(10)遮阳网控制模块:
使用电机控制模块实现智慧农业大棚遮阳网的收起、放下、紧急停止功能。
(11)灌溉模块:
使用继电器控制模块实现开始智慧农业大棚的开始灌溉和停止灌溉功能。
(12)灯光控制模块:
使用电机控制模块的灯光部分实现对智慧农业大棚A、B、C、D四个区的灯光控制。
2.2模块调用图
图1.1模块调用图
2.3系统执行流程图
图1.2系统执行流程图
3详细设计说明
3.1温湿亮度检测模块
/*mainwindow.c*/
voidMainWindow:
:
updateTempHumiLig()//温湿亮度
{
ui->lcd_temp->display(temp_humi_light->getTemperature());
ui->lcd_humi->display(temp_humi_light->getHumidity());ui->lcd_lig->display(QString:
:
number(temp_humi_light->getLight(),'f',1));
}
voidMainWindow:
:
processMsgFromSerial(QByteArraymsg)//协调器消息解析
{
if(msg.length()<6)
return;
//温湿亮度模块
if(msg[3]==0x02&&msg[4]==0x01)
{
temp_humi_light->setValue(msg);
updateTempHumiLig();
}
}
/*temp_humi_light*/
voidTemp_Humi_Light:
:
setValue(QByteArray&byte)
{
unsignedcharadc_value[2];
temperature=(byte[5]<<8)+byte[6];
humidity=(byte[7]<<8)+byte[8];
adc_value[0]=byte[10];
adc_value[1]=byte[9];
adc_value[0]=adc_value[0]>>2;
light=(adc_value[1]*256+adc_value[0])*3.3/8192;
light=light/4;
light=light*913;
}
使用温湿度光电传感模块对智慧农业大棚内的温度、湿度、亮度进行实时监测,温湿度光电传感模块把监测的信息发送给协调器,协调器把信息通过串口发送到运行着智慧农业大棚监控系统的开发板,监控系统voidMainWindow:
:
processMsgFromSerial(QByteArraymsg)对接收到的信息进行解析并实时显示在监控系统的界面上。
3.2棚顶异物检测模块
/*mainwindow.c*/
//振动事件
elseif(msg[3]==0x03&&msg[4]==0x01)
{
if(msg[5]==0x01)
{
shake->setState
(1);
ui->label_shake->setPalette(pe_red);
ui->label_shake->setText("棚顶有异物");
}
elseif(msg[5]==0x00)
{
shake->setState(0);
ui->label_shake->setPalette(pe_black);
ui->label_shake->setText("棚顶安全");
}
}
使用震动传感模快对智慧农业大棚的棚顶进行异物检测,震动传感模块不断向协调器发送消息,协调器通过串口向运行着智慧农业大棚监控系统的开发板发送消息,监控系统对消息进行解析。
未检测到震动,在监控系统界面上显示棚顶安全;检测到震动,在监控系统界面上显示棚顶有异物。
3.3危险区域保护模块
/*mainwindow.c*/
//触摸模块
elseif(msg[3]==0x07&&msg[4]==0x01)
{
if(msg[5]==0x01)
{
touch->setState
(1);
ui->label_touch->setPalette(pe_red);
ui->label_touch->setText("有人进入危险区域");
}
elseif(msg[5]==0x00)
{
touch->setState(0);
ui->label_touch->setPalette(pe_black);
ui->label_touch->setText("无人进入危险区域");
}
}
使用触摸传感模块对存放药品等危险房间进行保护,触摸模块可安装在房间门把手上。
一旦有人触碰该模块,监控系统会立刻从协调器发送的消息中解析出,并显示“有人进入危险区域”在监控系统的界面上;没有人触碰该模块,监控系统界面上显示“无人进入危险区域”。
3.4防盗监控模块
/*mainwindow.c*/
//热释红外传感模块
elseif(msg[3]==0x05&&msg[4]==0x01)
{
if(msg[5]==0x01)
{
infray->setState
(1);
ui->label_inf_ray->setPalette(pe_red);
ui->label_inf_ray->setText("违法者进入");
}
elseif(msg[5]==0x00)
{
infray->setState(0);
ui->label_inf_ray->setPalette(pe_black);
ui->label_inf_ray->setText("安全");
}
}
使用热释红外传感模块对智慧农业大棚进行防盗监控,热释红外传感模块通过协调器不断向智慧农业大棚监控系统发送消息,当监测到有人进入大棚时,监控系统界面上显示“违法者进入”;没有检测到周围有人时,监控系统界面上显示“安全”。
3.5蓄水罐液面高度监测模块
/*mainwindow.c*/
//超声波测距模块
elseif(msg[3]==0x08&&msg[4]==0x01)
{
intlen=1000-msg[5]*256+msg[6];//应用于液面检测
ui->label_ultra->setText(QString:
:
number(len));
ultra->setState(len);
}
emitaddLog(msg.toHex());
使用超声波测距模块对智慧农业大棚蓄水罐液面高度进行监测,假定蓄水罐高度1000mm(10m),液面高度即为1000mm减去安装在蓄水罐顶部的超声波测距模块测出的距离,并实时显示在监控系统的界面上。
3.6火灾监控模块
/*mainwindow.c*/
//烟雾模块
elseif(msg[3]==0x04&&msg[4]==0x01)
{
if(msg[5]==0x01)
{
smoke->setState
(1);
ui->label_fire->setPalette(pe_red);
ui->label_fire->setText("发生火灾");
}
elseif(msg[5]==0x00)
{
smoke->setState(0);
ui->label_fire->setPalette(pe_black);
ui->label_fire->setText("没有火灾");
}
}
使用烟雾模块对智慧农业大棚的火灾情况进行监测,并通过协调器向智慧农业大棚监控系统发送消息。
没有检测到烟雾时,监控系统界面上显示“没有火灾”;当检测到烟雾时,监控系统界面上显示“发生火灾”。
3.7串口控制模块
/*mainwindow.c*/
voidMainWindow:
:
changeSerial(intstate)//串口打开关闭操作
{
//对传入的参数取反操作
if(1==state)
{
if(serial_server->closeCom())
{
ui->btn_serial->setText("打开");
ui->btn_serial->setStyleSheet(BACKGROUND_COLOR_WHITE);
emitaddLog("close---success");
}
else
emitaddLog("warning!
!
---close---failed");
}
elseif(0==state)
{
if(serial_server->openCom())
{
ui->btn_serial->setText("关闭");
ui->btn_serial->setStyleSheet(BACKGROUND_COLOR_GREEN);
emitaddLog("open---success");
}
else
emitaddLog("warning!
!
---open---failed");
}
}
控制协调器与运行智慧农业大棚监控系统间的通信,只有在打开串口的状态下,用户才可以通过监控系统控制各个模块。
3.8灯光控制模块
/*mainwindow.c*/
voidMainWindow:
:
on_btn_light_1_clicked()//A区灯光打开
{
if(-1==serial_server->writeToSerial(Motor:
:
MSG_LIGHT_AON))
{
emitaddLog("warning!
!
---lightAon---failed");
return;
}
ui->btn_light_1->setStyleSheet(BACKGROUND_COLOR_GREEN);
emitaddLog("lightAon---success");
lighta=1;
}
voidMainWindow:
:
on_btn_light_5_clicked()//A区灯光关闭
{
if(lighta=0)
{
emitaddLog("warning!
!
---lightAoff---already");
return;
}
if(-1==serial_server->writeToSerial(Motor:
:
MSG_LIGHT_AOFF))
{
emitaddLog("warning!
!
---lightAoff---failed");
return;
}
ui->btn_light_1->setStyleSheet(BACKGROUND_COLOR_GREEN);
emitaddLog("lightAoff---success");
lighta=0;
}
voidMainWindow:
:
on_btn_light_2_clicked()//B区灯打开
{
if(-1==serial_server->writeToSerial(Motor:
:
MSG_LIGHT_BON))
{
emitaddLog("warning!
!
---lightBon---failed");
return;
}
ui->btn_light_2->setStyleSheet(BACKGROUND_COLOR_GREEN);
emitaddLog("lightBon---success");
lightb=1;
}
voidMainWindow:
:
on_btn_light_6_clicked()//B区灯关闭
{
if(lightb=0)
{
emitaddLog("warning!
!
---lightBoff---already");
return;
}
if(-1==serial_server->writeToSerial(Motor:
:
MSG_LIGHT_BOFF))
{
emitaddLog("warning!
!
---lightBoff---failed");
return;
}
ui->btn_light_6->setStyleSheet(BACKGROUND_COLOR_GREEN);
emitaddLog("lightBoff---success");
lightb=0;
}
voidMainWindow:
:
on_btn_light_3_clicked()//c区灯打开
{
if(-1==serial_server->writeToSerial(Motor:
:
MSG_LIGHT_CON))
{
emitaddLog("warning!
!
---lightCon---failed");
return;
}
ui->btn_light_3->setStyleSheet(BACKGROUND_COLOR_GREEN);
emitaddLog("lightCon---success");
lightc=1;
}
voidMainWindow:
:
on_btn_light_7_clicked()//c区灯关闭
{
if(lightc=0)
{
emitaddLog("warning!
!
---lightCoff---already");
return;
}
if(-1==serial_server->writeToSerial(Motor:
:
MSG_LIGHT_COFF))
{
emitaddLog("warning!
!
---lightCoff---failed");
return;
}
ui->btn_light_7->setStyleSheet(BACKGROUND_COLOR_GREEN);
emitaddLog("lightCoff---success");
lightc=0;
}
voidMainWindow:
:
on_btn_light_4_clicked()//D区灯打开
{
if(-1==serial_server->writeToSerial(Motor:
:
MSG_LIGHT_DON))
{
emitaddLog("warning!
!
---lightDon---failed");
return;
}
ui->btn_light_4->setStyleSheet(BACKGROUND_COLOR_GREEN);
emitaddLog("lightDon---success");
lightc=1;
}
voidMainWindow:
:
on_btn_light_8_clicked()//D区灯关闭
{
if(lightd=0)
{
emitaddLog("warning!
!
---lightDoff---already");
return;
}
if(-1==serial_server->writeToSerial(Motor:
:
MSG_LIGHT_DOFF))
{
emitaddLog("warning!
!
---lightDoff---failed");
return;
}
ui->btn_light_8->setStyleSheet(BACKGROUND_COLOR_GREEN);
emitaddLog("lightDoff---success");
lightd=0;
}
voidMainWindow:
:
on_btn_light_9_clicked()//一键打开
{
on_btn_light_1_clicked();
on_btn_light_2_clicked();
on_btn_light_3_clicked();
on_btn_light_4_clicked();
}
voidMainWindow:
:
on_btn_light_10_clicked()//一键关闭
{
on_btn_light_5_clicked();
on_btn_light_6_clicked();
on_btn_light_7_clicked();
on_btn_light_8_clicked();
}
3.9遮阳网控制模块
/*mainwindow.c*/
voidMainWindow:
:
changeMotor(intstate)
{
if(0==state)//电机停止
{
if(-1==serial_server->writeToSerial(Motor:
:
MSG_MOTOR_STOP))
{
emitaddLog("warning!
!
---emergencystop---failed");
return;
}
motor->setState(0);
ui->btn_motor_stop->setStyleSheet(BACKGROUND_COLOR_GREEN);
ui->btn_motor_b->setStyleSheet(BACKGROUND_COLOR_WHITE);
ui->btn_motor_f->setStyleSheet(BACKGROUND_COLOR_WHITE);
emitaddLog("emergencystop---success");
}
elseif(1==state)//电机正转
{
if(-1==serial_server->writeToSerial(Motor:
:
MSG_MOTOR_FORE))
{
emitaddLog("warning!
!
---lightcoverpackup---failed");
return;
}
motor->setState
(1);
ui->btn_motor_f->setStyleSheet(BACKGROUND_COLOR_GREEN);
ui->btn_motor_b->setStyleSheet(BACKGROUND_COLOR_WHITE);
ui->btn_motor_stop->setStyleSheet(BACKGROUND_COLOR_WHITE);
emitaddLog("lightcoverpackup---success");
}
elseif(2==state)//电机反转
{
if(-1==serial_server->writeToSerial(Motor:
:
MSG_MOTOR_BACK))
{
emitaddLog("warning!
!
---lightcoverputdown---failed");
return;
}
motor->setState
(2);
ui->btn_motor_b->setStyleSheet(BACKGROUND_COLOR_GREEN);
ui->btn_motor_f->setStyleSheet(BACKGROUND_COLOR_WHITE);
ui->btn_motor_stop->setSty