课程设计说明书
课程名称:
课程设计题目:
专 业: 班 级:
姓 名: 学 号:
2016年 7月 22日
指导教师评语 成绩: 指导教师(签章): 年 月 日 |
目录
1需求分析说明 1
1.1设计背景 1
1.2组成部分 1
1.3功能需求 1
2概要设计说明 2
2.1各模块功能描述 2
2.2模块调用图 2
2.3系统执行流程图 3
3详细设计说明 5
3.1温湿亮度检测模块 5
3.2棚顶异物检测模块 6
3.3危险区域保护模块 6
3.4防盗监控模块 7
3.5蓄水罐液面高度监测模块 8
3.6火灾监控模块 8
3.7串口控制模块 9
3.8灯光控制模块 10
3.9遮阳网控制模块 14
3.10灌溉模块 15
4调试分析 17
4.1终端节点与协调器之间通信测试 17
4.2协调器与开发板之间通信测试 18
5用户使用说明 19
6课程设计总结 19
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*/
void MainWindow::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));
}
void MainWindow::processMsgFromSerial(QByte msg)//协调器消息解析
{
if(msg.length() < 6)
return;
//温湿亮度模块
if(msg[3] == 0x02 && msg[4] == 0x01)
{
temp_humi_light->setValue(msg);
updateTempHumiLig();
}
}
/*temp_humi_light*/
void Temp_Humi_Light::setValue(QByte& byte)
{
unsigned char adc_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;
}
使用温湿度光电传感模块对智慧农业大棚内的温度、湿度、亮度进行实时监测,温湿度光电传感模块把监测的信息发送给协调器,协调器把信息通过串口发送到运行着智慧农业大棚监控系统的开发板,监控系统void MainWindow::processMsgFromSerial(QByte msg)对接收到的信息进行解析并实时显示在监控系统的界面上。
3.2棚顶异物检测模块
/*mainwindow.c*/
//振动事件
else if(msg[3] == 0x03 && msg[4] == 0x01)
{
if(msg[5] == 0x01)
{
shake->setState(1);
ui->label_shake->setPalette(pe_red);
ui->label_shake->setText("棚顶有异物");
}
else if(msg[5] == 0x00)
{
shake->setState(0);
ui->label_shake->setPalette(pe_black);
ui->label_shake->setText("棚顶安全");
}
}
使用震动传感模快对智慧农业大棚的棚顶进行异物检测,震动传感模块不断向协调器发送消息,协调器通过串口向运行着智慧农业大棚监控系统的开发板发送消息,监控系统对消息进行解析。未检测到震动,在监控系统界面上显示棚顶安全;检测到震动,在监控系统界面上显示棚顶有异物。
3.3危险区域保护模块
/*mainwindow.c*/
//触摸模块
else if(msg[3] == 0x07 && msg[4] == 0x01)
{
if(msg[5] == 0x01)
{
touch->setState(1);
ui->label_touch->setPalette(pe_red);
ui->label_touch->setText("有人进入危险区域");
}
else if(msg[5] == 0x00)
{
touch->setState(0);
ui->label_touch->setPalette(pe_black);
ui->label_touch->setText("无人进入危险区域");
}
}
使用触摸传感模块对存放药品等危险房间进行保护,触摸模块可安装在房间门把手上。一旦有人触碰该模块,监控系统会立刻从协调器发送的消息中解析出,并显示“有人进入危险区域”在监控系统的界面上;没有人触碰该模块,监控系统界面上显示“无人进入危险区域”。
3.4防盗监控模块
/*mainwindow.c*/
//热释红外传感模块
else if(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("违法者进入");
}
else if(msg[5] == 0x00)
{
infray->setState(0);
ui->label_inf_ray->setPalette(pe_black);
ui->label_inf_ray->setText("安全");
}
}
使用热释红外传感模块对智慧农业大棚进行防盗监控,热释红外传感模块通过协调器不断向智慧农业大棚监控系统发送消息,当监测到有人进入大棚时,监控系统界面上显示“违法者进入”;没有检测到周围有人时,监控系统界面上显示“安全”。
3.5蓄水罐液面高度监测模块
/*mainwindow.c*/
//超声波测距模块
else if(msg[3] == 0x08 && msg[4] == 0x01)
{
int len = 1000 - msg[5] * 256 + msg[6];//应用于液面检测
ui->label_ultra->setText(QString::number(len));
ultra->setState(len);
}
emit addLog(msg.toHex());
使用超声波测距模块对智慧农业大棚蓄水罐液面高度进行监测,假定蓄水罐高度1000mm(10m),液面高度即为1000mm减去安装在蓄水罐顶部的超声波测距模块测出的距离,并实时显示在监控系统的界面上。
3.6火灾监控模块
/*mainwindow.c*/
//烟雾模块
else if(msg[3] == 0x04 && msg[4] == 0x01)
{
if(msg[5] == 0x01)
{
smoke->setState(1);
ui->label_fire->setPalette(pe_red);
ui->label_fire->setText("发生火灾");
}
else if(msg[5] == 0x00)
{
smoke->setState(0);
ui->label_fire->setPalette(pe_black);
ui->label_fire->setText("没有火灾");
}
}
使用烟雾模块对智慧农业大棚的火灾情况进行监测,并通过协调器向智慧农业大棚监控系统发送消息。没有检测到烟雾时,监控系统界面上显示“没有火灾”;当检测到烟雾时,监控系统界面上显示“发生火灾”。
3.7串口控制模块
/*mainwindow.c*/
void MainWindow::changeSerial(int state)//串口打开关闭操作
{
//对传入的参数取反操作
if(1 == state)
{
if(serial_server->closeCom())
{
ui->btn_serial->setText("打开");
ui->btn_serial->setStyleSheet(BACKGROUND_COLOR_WHITE);
emit addLog("close---success");
}
else
emit addLog("warning!!---close---failed");
}
else if(0 == state)
{
if(serial_server->openCom())
{
ui->btn_serial->setText("关闭");
ui->btn_serial->setStyleSheet(BACKGROUND_COLOR_GREEN);
emit addLog("open---success");
}
else
emit addLog("warning!!---open---failed");
}
}
控制协调器与运行智慧农业大棚监控系统间的通信,只有在打开串口的状态下,用户才可以通过监控系统控制各个模块。
3.8灯光控制模块
/*mainwindow.c*/
void MainWindow::on_btn_light_1_clicked()//A区灯光打开
{
if(-1 == serial_server->writeToSerial(Motor::MSG_LIGHT_AON))
{
emit addLog("warning!!---lightA on---failed");
return;
}
ui->btn_light_1->setStyleSheet(BACKGROUND_COLOR_GREEN);
emit addLog("lightA on---success");
lighta=1;
}
void MainWindow::on_btn_light_5_clicked()//A区灯光关闭
{
if(lighta = 0)
{
emit addLog("warning!!---lightA off---already");
return;
}
if(-1 == serial_server->writeToSerial(Motor::MSG_LIGHT_AOFF))
{
emit addLog("warning!!---lightA off---failed");
return;
}
ui->btn_light_1->setStyleSheet(BACKGROUND_COLOR_GREEN);
emit addLog("lightA off---success");
lighta = 0;
}
void MainWindow::on_btn_light_2_clicked()//B区灯打开
{
if(-1 == serial_server->writeToSerial(Motor::MSG_LIGHT_BON))
{
emit addLog("warning!!---lightB on---failed");
return;
}
ui->btn_light_2->setStyleSheet(BACKGROUND_COLOR_GREEN);
emit addLog("lightB on---success");
lightb=1;
}
void MainWindow::on_btn_light_6_clicked()//B区灯关闭
{
if(lightb = 0)
{
emit addLog("warning!!---lightB off---already");
return;
}
if(-1 == serial_server->writeToSerial(Motor::MSG_LIGHT_BOFF))
{
emit addLog("warning!!---lightB off---failed");
return;
}
ui->btn_light_6->setStyleSheet(BACKGROUND_COLOR_GREEN);
emit addLog("lightB off---success");
lightb = 0;
}
void MainWindow::on_btn_light_3_clicked()//c区灯打开
{
if(-1 == serial_server->writeToSerial(Motor::MSG_LIGHT_CON))
{
emit addLog("warning!!---lightC on---failed");
return;
}
ui->btn_light_3->setStyleSheet(BACKGROUND_COLOR_GREEN);
emit addLog("lightC on---success");
lightc=1;
}
void MainWindow::on_btn_light_7_clicked()//c区灯关闭
{
if(lightc = 0)
{
emit addLog("warning!!---lightC off---already");
return;
}
if(-1 == serial_server->writeToSerial(Motor::MSG_LIGHT_COFF))
{
emit addLog("warning!!---lightC off---failed");
return;
}
ui->btn_light_7->setStyleSheet(BACKGROUND_COLOR_GREEN);
emit addLog("lightC off---success");
lightc = 0;
}
void MainWindow::on_btn_light_4_clicked()//D区灯打开
{
if(-1 == serial_server->writeToSerial(Motor::MSG_LIGHT_DON))
{
emit addLog("warning!!---lightD on---failed");
return;
}
ui->btn_light_4->setStyleSheet(BACKGROUND_COLOR_GREEN);
emit addLog("lightD on---success");
lightc=1;
}
void MainWindow::on_btn_light_8_clicked()//D区灯关闭
{
if(lightd = 0)
{
emit addLog("warning!!---lightD off---already");
return;
}
if(-1 == serial_server->writeToSerial(Motor::MSG_LIGHT_DOFF))
{
emit addLog("warning!!---lightD off---failed");
return;
}
ui->btn_light_8->setStyleSheet(BACKGROUND_COLOR_GREEN);
emit addLog("lightD off---success");
lightd = 0;
}
void MainWindow::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();
}
void MainWindow::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*/
void MainWindow::changeMotor(int state)
{
if(0 == state)//电机停止
{
if(-1 == serial_server->writeToSerial(Motor::MSG_MOTOR_STOP))
{
emit addLog("warning!!---emergency stop---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);
emit addLog("emergency stop---success");
}
else if(1 == state)//电机正转
{
if(-1 == serial_server->writeToSerial(Motor::MSG_MOTOR_FORE))
{
emit addLog("warning!!---light cover pack up---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);
emit addLog("light cover pack up---success");
}
else if(2 == state)//电机反转
{
if(-1 == serial_server->writeToSerial(Motor::MSG_MOTOR_BACK))
{
emit addLog("warning!!---light cover put down---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->setStyleSheet(BACKGROUND_COLOR_WHITE);
emit addLog("light cover put down---success");
}
}
使用电机控制模块的灯光部分对智慧农业大棚的A、B、C、D四个区进行灯光控制,用户在智慧农业大棚监控系统界面上的灯光控制区通过点击“开启”、“关闭”等按钮发送控制指令,指令通过串口发送到协调器并由协调器进行广播。添加“一键开灯”、“一件关灯”按钮。
3.10灌溉模块
/*mainwindow.c*/
void MainWindow::changeRelay(int state)//继电器模块操作
{
//对传入的参数取反操作
if(1 == state)
{
if(-1 == serial_server->writeToSerial(Relays::MSG_RELAY_CLOSE))
{
emit addLog("warning!!---stop irrigate---failed");
return;
}
relays->setState(0);
ui->btn_relay->setStyleSheet(BACKGROUND_COLOR_WHITE);
ui->btn_relay->setText("开始灌溉");
emit addLog("stop irrigate---success");
}
else if(0 == state)
{
if(-1 == serial_server->writeToSerial(Relays::MSG_RELAY_OPEN))
{
emit addLog("warning!!---start irrigate---failed");
return;
}
relays->setState(1);
ui->btn_relay->setStyleSheet(BACKGROUND_COLOR_GREEN);
ui->btn_relay->setText("停止灌溉");
emit addLog("start irrigate---success");
}
}
使用继电器模块对智慧农业大棚的灌溉进行控制,用户可以通过智慧农业大棚监控系统界面上的按钮发送指令,控制灌溉的开始和停止。
4调试分析
4.1终端节点与协调器之间通信测试
图1.3 通信测试一
首先打开协调器,等协调器初始化完毕后,打开红红外热释电传感器模块、电机控制模块、继电器控制模块、震动传感器模块、触摸传感器模块、温湿度光电传感器模块、烟雾传感器模块、超声波测距传感器模块。等待几个传感器模块初始化完毕后,开始逐渐加入ZigBee网络,并开始向协调器不断发送消息。
4.2协调器与开发板之间通信测试
图1.4 通信测试二
将协调器用串口和运行智慧农业大棚监控系统的开发板连接,点击串口按钮,打开串口,监控系统界面上显示温度、湿度、光照、火灾监控等信息。窗口显示协调器不断发送来的字符串,监控系统正是解析这些字符串的内容得到的各种信息。
5用户使用说明
用户使用该智慧农业大棚系统时,首先将协调器打开,等待协调器灯1亮起,表示协调器初始化完毕。这是打开各个模块,等待各个模块初始化完毕并加入ZigBee网络。在开发板上运行智慧农业大棚监控系统,用串口线将开发板和协调器连接。打开智慧农业监控系统界面上的串口按钮,此时协调器可以与监控系统进行通信。保持串口按钮打开的状态下,协调器通过各个节点监测到的大棚内的各种信息显示在监控系统界面上。用户可以通过点击监控系统界面上的控制区的各个按钮控制各个节点模块。
6课程设计总结
通过这次物联网感知与通信综合实训,是我对物联网试验箱有一个整体的认识,初步掌握了试验箱中各个模块的使用方法。第一次亲自动手构建一个ZigBee网络,对构建ZigBee网络,节点加入网络,协调器与节点通信等方面有了一个感性的认识。学习过程中也遇到很多问题,例如redhat的环境变量控制、QT编写的系统移植到开发板中,通过向别人学习依次解决了这些问题,深切的感受到学习中要多问的道理。最后终于做出了这个智慧农业大棚系统,非常有成就感。
本文来源:https://www.2haoxitong.net/k/doc/c8201bfe52d380eb63946d33.html
文档为doc格式