《物联网通信技术》课程设计
项目名称 车载环境监测系统 学 院 信息科学与技术学院 专业班级 物联网工程2011级 学 号 姓 名 任课教师
目录
第1章 绪论............................................................................................... 3 1.1 选题的背景与意义 ....................................................................... 3 第2章 需求分析 ...................................................................................... 3 2.1 功能................................................................................................ 3 第3章 系统总体设计 .............................................................................. 5 3.1 方案的选择 ................................................................................... 5 3.2 系统总体设计 ............................................................................... 5 3.3 任务分工 ....................................................................................... 6 第4章 模块设计与实现 .......................................................................... 7 4.1 模块功能 ....................................................................................... 7 4.2 模块流程 ....................................................................................... 7 4.3 模块实现 ....................................................................................... 8 第5章 总结............................................................................................. 11
第1章 绪论
1.1 选题的背景与意义
每年夏天,都会发生很多在汽车内窒息死亡的案例。但是很多人不知道,在车内关闭门窗开空调睡觉也会导致窒息死亡。 汽车的空调有两种模式,一是内循环模式,比较节约汽油。内循环状态是关闭了车内外的气流通道(车内的门窗),不开风机就没有气流循环,开风机时吸入的气流也仅来自车内,形成车辆内部的气流循环。
车内冷气如果只是开内循环模式,那么,在密闭条件下,车内的空气通过空调进行内部循环,得不到更新,车内的一氧化碳浓度会越来越高,同时,车内人员呼出大量二氧化碳,导致车内氧气急剧减少,几小时就会使人恶心、昏迷,严重者甚至窒息而死亡。
为了减少相应悲剧的发生,我们小组决定开发一种可以检测车内二氧化碳浓度,并在达到危险浓度之前给车内的乘客发出警告的装置,可以称为车载环境监测系统。
第2章 需求分析
2.1 功能
功能编号:1(协调器模块)
功能需求:主模块的功能有三个,一是协调各个传感器组成网络,
二是接收来自温度感应模块和二氧化碳感应模块发来的信息并且通过串口传给PC 机,三是接收来自PC 机发来的数据并通过广播发送给网内的所有传感器节点。
功能编号:2(温湿度感应模块)
功能需求:温度感应模块主要功能是感应外界的温度并把温度值
实时传达给主模块;
功能编号:3(二氧化碳感应模块)
功能需求:二氧化碳感应模块的主要功能是感应外界的二氧化碳
浓度并且把浓度值传递给主模块。
功能编号:4(报警模块)
功能需求:报警模块有两种状态,待命状态和报警状态,平时处
于待命状态,如果协调器模块广播的信息中存在浓度超标的命令,则转为报警状态,使蜂鸣器发声进行报警。
功能编号:5(通风模块)
功能需求:通风模块也有两种状态,待命状态和通风状态, 平时
处于待命状态,如果协调器模块广播的信息里有浓度超标而且node id 为Motor 的命令,则转为通风状态,使电机转动模拟通风。
功能编号:6(PC 模块)
功能需求:PC 模块通过串口接收到来自协调器模块的信息,将数
据处理后显示到桌面上,并把历史数据存到数据库中,当当前数据发生异常的时候,通过串口向协调器模块发送异常指令。
第3章 系统总体设计
3.1 方案的选择 3.2 系统总体设计
1,首先由二氧化碳模块中的二氧化碳传感器每隔2s 感应一次空气中二氧化碳的浓度,再由其中的zigbee 通信模块发送给协调器模块模块。
2,同样,温度感应模块中的温度传感器每隔2s 感应一次空气温度后通过zigbee 通信模块发送给协调器模块。
3,协调器模块接收到两个子模块发来的环境数据后,将数据通过串口传给PC 机,如果接收到PC 机发送来的异常信息,则协调器将向报警模块发送异常信息,向通风模块发送电机启动信息,如果PC 机没有发送异常信息,则向报警模块和通风模块发送这正常信息。 4,PC 机接收到协调器发送来的数据包后,分析数据包的内容,提取出有效的数据并且显示,并将数据存入数据库,如果数据发生异常,则向协调器发送异常信息。
5,报警模块和通风接受来自协调器的广播信息,如果是异常信息,则发出报警、打开电机,如果是正常信息,则处于待命状态。
3.3 任务分工
图中红色的部分是本人负责的模块。
第4章 模块设计与实现
4.1 模块功能
负责模块:温湿度传感器、二氧化碳传感器(使用超声波传感器模拟数据)
温度感应模块主要功能是感应外界的温度并把温度值实时传达给
主模块;
二氧化碳感应模块的主要功能是感应外界的二氧化碳浓度并且把浓度值传递给主模块。
4.2 模块流程
4.3 模块实现
超声波传感器和温湿度传感器的代码并没有太大的改动,系统使用的消息协议也是使用了实验系统给出的协议。报告中主要选取两个传感器消息收发事件的相关代码进行简要的分析。我在源码的基础上进行了一定的精简工作,如删除没用的周期消息等以减少网络中所要手法消息的数量,以此减轻网络负担,提高系统效率,降低能耗。使用超声波传感器模拟二氧化碳传感器向协调器发送采集到的数据,具体的数据处理在发送到协调器之后由PC 段进项相关的模拟数据处理,该部分由赵晗同学完成。 超声波传感器主要代码解析:
UINT16 SerialApp_ProcessEvent( uint8 task_id, UINT16 events ) {
(void)task_id; // Intentionally unreferenced parameter
//事件处理函数如下。判断事件类型并进行相应的处理。
if ( events & SYS_EVENT_MSG ) {
afIncomingMSGPacket_t *MSGpkt;
while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SerialApp_TaskID )) ) {
switch ( MSGpkt->hdr.event ) {
case KEY_CHANGE:
//SerialApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break;
case AF_INCOMING_MSG_CMD:
SerialApp_ProcessMSGCmd( MSGpkt ); break; default: break; }
osal_msg_deallocate( (uint8 *)MSGpkt ); }
return ( events ^ SYS_EVENT_MSG ); }
if ( events & SERIALAPP_SEND_EVT )
//调用消息发送函数发送温超声波传感器采集到的数据。
{
SerialApp_OTAData(&SerialApp_TxAddr,SERIALAPP_CLUSTERID1, sizeof(UART_Format));
return ( events ^ SERIALAPP_SEND_EVT ); }
&UART0_Format,
if ( events & DOPPLER_READ_EVT ) //查看超声波传感器当前状态 {
DopplerStatusOld = DopplerStatusNow; //保存当前状态 if(DOPPLER_GPIO == HIGH) {
DopplerStatusNow = DOPPLER_YES; }
else if(DOPPLER_GPIO == LOW) {
DopplerStatusNow = DOPPLER_NO; }
if(DopplerStatusNow != DopplerStatusOld)
//超声波传感器监测到当前状态和上一个状态发生变化就会调用消息发送函数,将消息发送给网关
{
UART0_Format.Command = 0x01;
if(DopplerStatusNow == DOPPLER_YES) {
UART0_Format.Data[0] = 0x01; UART0_Format.Data[1] = 0x00; }
else if(DopplerStatusNow == DOPPLER_NO) {
UART0_Format.Data[0] = 0x00;
UART0_Format.Data[1] = 0x00; }
osal_set_event(SerialApp_TaskID, SERIALAPP_SEND_EVT); }
osal_start_timerEx(SerialApp_TaskID, DOPPLER_READ_EVT, 200);
return ( events ^ DOPPLER_READ_EVT ); }
return ( 0 ); // Discard unknown events. }
温湿度传感器主要代码简析:
温湿度传感器和超声波传感器代码内容相似,再次就不再具体赘述。传感器代码如下。
UINT16 SerialApp_ProcessEvent( uint8 task_id, UINT16 events ) {
(void)task_id; // Intentionally unreferenced parameter
if ( events & SYS_EVENT_MSG ) {
afIncomingMSGPacket_t *MSGpkt;
while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SerialApp_TaskID )) ) {
switch ( MSGpkt->hdr.event ) {
case KEY_CHANGE:
//SerialApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break;
case AF_INCOMING_MSG_CMD:
SerialApp_ProcessMSGCmd( MSGpkt ); break;
default: break; }
osal_msg_deallocate( (uint8 *)MSGpkt ); }
return ( events ^ SYS_EVENT_MSG ); }
if ( events & SERIALAPP_SEND_EVT ) {
SerialApp_OTAData(&SerialApp_TxAddr,SERIALAPP_CLUSTERID1, &UART0_Format, sizeof(UART_Format));
return ( events ^ SERIALAPP_SEND_EVT ); }
if ( events & TEMPANDHUM_READ_EVT ) //读取温湿度 {
Temperature = ReadSHT10(TEMPERATURE); UART0_Format.Command = 0x01;
UART0_Format.Data[0] = Temperature>>8; UART0_Format.Data[1] = Temperature; Humidity = ReadSHT10(HUMIDITY); UART0_Format.Data[2] = Humidity>>8; UART0_Format.Data[3] = Humidity;
osal_set_event(SerialApp_TaskID,SERIALAPP_SEND_EVT);
osal_start_timerEx(SerialApp_TaskID, TEMPANDHUM_READ_EVT, 1000);
return ( events ^ TEMPANDHUM_READ_EVT ); }
return ( 0 ); // Discard unknown events. }
《物联网通信技术》课程设计
项目名称 车载环境监测系统 学 院 信息科学与技术学院 专业班级 物联网工程2011级 学 号 姓 名 任课教师
目录
第1章 绪论............................................................................................... 3 1.1 选题的背景与意义 ....................................................................... 3 第2章 需求分析 ...................................................................................... 3 2.1 功能................................................................................................ 3 第3章 系统总体设计 .............................................................................. 5 3.1 方案的选择 ................................................................................... 5 3.2 系统总体设计 ............................................................................... 5 3.3 任务分工 ....................................................................................... 6 第4章 模块设计与实现 .......................................................................... 7 4.1 模块功能 ....................................................................................... 7 4.2 模块流程 ....................................................................................... 7 4.3 模块实现 ....................................................................................... 8 第5章 总结............................................................................................. 11
第1章 绪论
1.1 选题的背景与意义
每年夏天,都会发生很多在汽车内窒息死亡的案例。但是很多人不知道,在车内关闭门窗开空调睡觉也会导致窒息死亡。 汽车的空调有两种模式,一是内循环模式,比较节约汽油。内循环状态是关闭了车内外的气流通道(车内的门窗),不开风机就没有气流循环,开风机时吸入的气流也仅来自车内,形成车辆内部的气流循环。
车内冷气如果只是开内循环模式,那么,在密闭条件下,车内的空气通过空调进行内部循环,得不到更新,车内的一氧化碳浓度会越来越高,同时,车内人员呼出大量二氧化碳,导致车内氧气急剧减少,几小时就会使人恶心、昏迷,严重者甚至窒息而死亡。
为了减少相应悲剧的发生,我们小组决定开发一种可以检测车内二氧化碳浓度,并在达到危险浓度之前给车内的乘客发出警告的装置,可以称为车载环境监测系统。
第2章 需求分析
2.1 功能
功能编号:1(协调器模块)
功能需求:主模块的功能有三个,一是协调各个传感器组成网络,
二是接收来自温度感应模块和二氧化碳感应模块发来的信息并且通过串口传给PC 机,三是接收来自PC 机发来的数据并通过广播发送给网内的所有传感器节点。
功能编号:2(温湿度感应模块)
功能需求:温度感应模块主要功能是感应外界的温度并把温度值
实时传达给主模块;
功能编号:3(二氧化碳感应模块)
功能需求:二氧化碳感应模块的主要功能是感应外界的二氧化碳
浓度并且把浓度值传递给主模块。
功能编号:4(报警模块)
功能需求:报警模块有两种状态,待命状态和报警状态,平时处
于待命状态,如果协调器模块广播的信息中存在浓度超标的命令,则转为报警状态,使蜂鸣器发声进行报警。
功能编号:5(通风模块)
功能需求:通风模块也有两种状态,待命状态和通风状态, 平时
处于待命状态,如果协调器模块广播的信息里有浓度超标而且node id 为Motor 的命令,则转为通风状态,使电机转动模拟通风。
功能编号:6(PC 模块)
功能需求:PC 模块通过串口接收到来自协调器模块的信息,将数
据处理后显示到桌面上,并把历史数据存到数据库中,当当前数据发生异常的时候,通过串口向协调器模块发送异常指令。
第3章 系统总体设计
3.1 方案的选择 3.2 系统总体设计
1,首先由二氧化碳模块中的二氧化碳传感器每隔2s 感应一次空气中二氧化碳的浓度,再由其中的zigbee 通信模块发送给协调器模块模块。
2,同样,温度感应模块中的温度传感器每隔2s 感应一次空气温度后通过zigbee 通信模块发送给协调器模块。
3,协调器模块接收到两个子模块发来的环境数据后,将数据通过串口传给PC 机,如果接收到PC 机发送来的异常信息,则协调器将向报警模块发送异常信息,向通风模块发送电机启动信息,如果PC 机没有发送异常信息,则向报警模块和通风模块发送这正常信息。 4,PC 机接收到协调器发送来的数据包后,分析数据包的内容,提取出有效的数据并且显示,并将数据存入数据库,如果数据发生异常,则向协调器发送异常信息。
5,报警模块和通风接受来自协调器的广播信息,如果是异常信息,则发出报警、打开电机,如果是正常信息,则处于待命状态。
3.3 任务分工
图中红色的部分是本人负责的模块。
第4章 模块设计与实现
4.1 模块功能
负责模块:温湿度传感器、二氧化碳传感器(使用超声波传感器模拟数据)
温度感应模块主要功能是感应外界的温度并把温度值实时传达给
主模块;
二氧化碳感应模块的主要功能是感应外界的二氧化碳浓度并且把浓度值传递给主模块。
4.2 模块流程
4.3 模块实现
超声波传感器和温湿度传感器的代码并没有太大的改动,系统使用的消息协议也是使用了实验系统给出的协议。报告中主要选取两个传感器消息收发事件的相关代码进行简要的分析。我在源码的基础上进行了一定的精简工作,如删除没用的周期消息等以减少网络中所要手法消息的数量,以此减轻网络负担,提高系统效率,降低能耗。使用超声波传感器模拟二氧化碳传感器向协调器发送采集到的数据,具体的数据处理在发送到协调器之后由PC 段进项相关的模拟数据处理,该部分由赵晗同学完成。 超声波传感器主要代码解析:
UINT16 SerialApp_ProcessEvent( uint8 task_id, UINT16 events ) {
(void)task_id; // Intentionally unreferenced parameter
//事件处理函数如下。判断事件类型并进行相应的处理。
if ( events & SYS_EVENT_MSG ) {
afIncomingMSGPacket_t *MSGpkt;
while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SerialApp_TaskID )) ) {
switch ( MSGpkt->hdr.event ) {
case KEY_CHANGE:
//SerialApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break;
case AF_INCOMING_MSG_CMD:
SerialApp_ProcessMSGCmd( MSGpkt ); break; default: break; }
osal_msg_deallocate( (uint8 *)MSGpkt ); }
return ( events ^ SYS_EVENT_MSG ); }
if ( events & SERIALAPP_SEND_EVT )
//调用消息发送函数发送温超声波传感器采集到的数据。
{
SerialApp_OTAData(&SerialApp_TxAddr,SERIALAPP_CLUSTERID1, sizeof(UART_Format));
return ( events ^ SERIALAPP_SEND_EVT ); }
&UART0_Format,
if ( events & DOPPLER_READ_EVT ) //查看超声波传感器当前状态 {
DopplerStatusOld = DopplerStatusNow; //保存当前状态 if(DOPPLER_GPIO == HIGH) {
DopplerStatusNow = DOPPLER_YES; }
else if(DOPPLER_GPIO == LOW) {
DopplerStatusNow = DOPPLER_NO; }
if(DopplerStatusNow != DopplerStatusOld)
//超声波传感器监测到当前状态和上一个状态发生变化就会调用消息发送函数,将消息发送给网关
{
UART0_Format.Command = 0x01;
if(DopplerStatusNow == DOPPLER_YES) {
UART0_Format.Data[0] = 0x01; UART0_Format.Data[1] = 0x00; }
else if(DopplerStatusNow == DOPPLER_NO) {
UART0_Format.Data[0] = 0x00;
UART0_Format.Data[1] = 0x00; }
osal_set_event(SerialApp_TaskID, SERIALAPP_SEND_EVT); }
osal_start_timerEx(SerialApp_TaskID, DOPPLER_READ_EVT, 200);
return ( events ^ DOPPLER_READ_EVT ); }
return ( 0 ); // Discard unknown events. }
温湿度传感器主要代码简析:
温湿度传感器和超声波传感器代码内容相似,再次就不再具体赘述。传感器代码如下。
UINT16 SerialApp_ProcessEvent( uint8 task_id, UINT16 events ) {
(void)task_id; // Intentionally unreferenced parameter
if ( events & SYS_EVENT_MSG ) {
afIncomingMSGPacket_t *MSGpkt;
while ( (MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( SerialApp_TaskID )) ) {
switch ( MSGpkt->hdr.event ) {
case KEY_CHANGE:
//SerialApp_HandleKeys( ((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys ); break;
case AF_INCOMING_MSG_CMD:
SerialApp_ProcessMSGCmd( MSGpkt ); break;
default: break; }
osal_msg_deallocate( (uint8 *)MSGpkt ); }
return ( events ^ SYS_EVENT_MSG ); }
if ( events & SERIALAPP_SEND_EVT ) {
SerialApp_OTAData(&SerialApp_TxAddr,SERIALAPP_CLUSTERID1, &UART0_Format, sizeof(UART_Format));
return ( events ^ SERIALAPP_SEND_EVT ); }
if ( events & TEMPANDHUM_READ_EVT ) //读取温湿度 {
Temperature = ReadSHT10(TEMPERATURE); UART0_Format.Command = 0x01;
UART0_Format.Data[0] = Temperature>>8; UART0_Format.Data[1] = Temperature; Humidity = ReadSHT10(HUMIDITY); UART0_Format.Data[2] = Humidity>>8; UART0_Format.Data[3] = Humidity;
osal_set_event(SerialApp_TaskID,SERIALAPP_SEND_EVT);
osal_start_timerEx(SerialApp_TaskID, TEMPANDHUM_READ_EVT, 1000);
return ( events ^ TEMPANDHUM_READ_EVT ); }
return ( 0 ); // Discard unknown events. }