本文是对我在github上面ECTM项目中我设计出的核心算法的介绍,ECTM是一个国家级的大学生创新训练项目,因此本文仅仅为大家提供一种思路,而且算法有很大的改进余地,故而请读者请勿转载。
ETCM项目简介
ECTM:the Environment Control of Tobacco Mellowing,中文名:基于无线传感技术的烟叶醇化过程监测研究。
项目背景
烟叶在自然醇化中对环境的要求很高,若没有控制好环境的温湿度,烟叶很容易产生霉变;据了解烟叶醇化后的损失达0.8%,一个中型卷烟厂年造成的直接经济损失达2000多万元并且还会严重影响烟叶的内外在品质。为了减少损失,许多卷烟厂花费了大量的人力物力,但是收效甚微,为了解决烟草公司的实际需求,方便智能化的管理控制烟垛的温湿度,本项目在进行了实地考察的基础上设计了自组织无线传感器网络。
研究内容
研制出了一套可灵活应用于烟草醇化过程无线温湿度监测系统。
该系统包括无线传感监测网络和上位机管理及分析软件系统两个部分:
无线传感监测网络部分包括:无线温湿度采集节点,自组织无线传感器网络协议,无线传感器网络与上位机无线数据传输模块。
上位机管理及分析软件系统包括:上位机监测数据接收、存储、拓扑显示、管理、分析功能,以及根据无线采集节点位置变化的拓扑结构自适应重构功能。
在组网协议方面,我们先认真学习研究了已有的无线传感器网络组网协议,然后总结出各个协议的优势与不足,在这基础上,我们开发出了一套适合本项目的自己的协议。
根据协议,我们在硬件方面选择了功耗较低的STM32单片机作为处理器,自行搭建硬件系统。
本文介绍的内容
本文主要介绍的内容是我负责的部分:组网协议的设计、仿真与实现。针对本项目我基于leach、SEP这些经典的无线自组织网络协议进行改进。
简单来说,Leach协议是一个簇头自选举的协议,以循环的方式随机选择簇头节点,将整个网络的能量负载平均分配到每个传感器节点中,从而达到降低网络能源消耗、提高网络整体生存时间的目的。但是leach协议的前提是所有节点都能互通,不满足我们的项目要求,而SEP协议是在leach协议的基础上,提高了高能量节点作为簇头的几率,然而SEP协议的前提也是所有节点均能互通。由于我们的节点并不是全部可见的,另外我们需要的是多级树簇网络,所以需要进行多跳路由的设计。
无线自组织多跳树簇网络
设计思路
本项目中无线节点(使用电池)主要模块由温湿度传感器,stm32微处理器以及无线射频芯片,并安放于空间中不同的位置,每个节点都需要进行温湿度数据记录,并找到一条路径将自己的数据上传给汇聚节点(使用有线电源,位置不变),汇聚节点再将数据使用gprs或者数传电台方式传输给pc终端。
如何设计出一个网络,使其能够有如下特性,便是该项目的核心问题:
- 多跳树簇网络:由于位置关系,并不是所有节点都能够与汇聚节点通信,所以必须设计一个多跳树簇网络。
- 网络自组织:无线节点位置有变动的可能,随着位置的变动,网络拓扑必然会随着变动,否则将可能产生功耗过大甚至数据传输失败。
- 网络能量均衡:节点若作为路由节点,消耗能量会较大,设计网络时应尽量使节点能量均衡,以保证节点的电池寿命大致相同,从而减少更换电池的次数。
组网数据包
组网数据包的数据格式如下图
算法描述
对于汇聚节点
组网开始(从睡眠中唤醒):
- 设置自己id=0,自己的网络深度为0;
- 监听,收到组网数据包"入网广播"(以后简称"入网广播"信令),则将该节点放入邻接表中;
- 等待一定时间,根据配置的第一层次网络节点最大数目N,以及节点的能量和链路强度选取最合适的前N个节点(若超时仍不够N个则选取全部),回复"主节点加入"信令;
- 等待节点回复"允许加入ack"信令,若超时,则抛弃该节点;
- 进入数据传输循环。
对于普通节点
组网开始(从睡眠中唤醒),进入组网循环:
- while(t<T)发送"入网广播",并监听回包:若回包为"主节点允许加入"信令,则直接进入4,其他回包,则将回包节点放入邻接表;接受"入网广播",回复"入网广播ack";
- 开始入网,从网络深度为0开始,选取链路强度最大值作为自己的父节点,发送"请求加入你"信令;若没有则网络深度加一继续寻找;
- 收"允许加入"包,设置该包主人为父节点,网络深度为其主人网络深度+1,返回"允许加入ack",退出组网循环,进入数据传输循环;
数据传输循环:
- 仍然需要接受组网数据包,相应的包处理如组网循环一样;
- 接受(子节点)数据包,子节点数据包转发给自己父节点;
- 自己有数据上传时,发送数据包给父节点。
ydjia原创,谢绝转载