题目基于TinyOS光感传感器的图书馆座位管理系统学院计算机学院专业物联网工程班级14058911学号14051437姓名张旗一项目背景及应用前景TinyOS具有微型化支持轻量级并发操作灵活低功耗等优点已经被成千上万的研发人员采用应用于范围广阔的无线传感器网络中每个TinyOS程序至少应该具有一个用户组件该用户组件通过接口调用下层组件提供的服务实现程序的功能如数据采集数据处理数据收发等用户组件的开发为TinyOS程序设计的重点TinyOS提供一些常用组件如执行组件传感器组件通信组件执行组件用于控制LED指示灯继电器步进电机等硬件模块传感器组件用于采集环境数据如温度亮度等通信组件则实现与其它节点通信TinyOS提供两种通信组件通过无线电收发器通信的组件和通过UART口通信的组件后者则应用于槽节点中硬件抽象层对上层组件屏蔽了底层硬件的特性从而实现上层组件的硬件无关性以方便程序移植二功能描述本组选题为基于TinyOS光感传感器的图书馆座位管理系统程序启动后节点终端有规律的在一段时间内接收光感信号如果处于接收时段收到一个遮掩信号则向中转节点发送一个代表有人的信息包否则发送一个代表无人的信息包然后通过串口与PC连接使用监听工具对应的在PC上表示出有人或者无人的信息三结构描述通信结构从通信的结构来说系统共分为3个部分终端节点收发数据根据收到的数据让某个灯亮中转节点中转计算机端和终端节点收发的数据计算机端接收到中转节点发来的数据并进行处理系统结构概念如图31所示图31系统结构概念图四系统的设计与实现本系统由三个部分组成计算机端1个中转节点和4个终端节点系统具体设计为计算机端从程序一开始的时候通过中转节点分别向四个节点发送reset信息终端节点接收到数据后把所有座位置为空终端节点定期检测光强变化并判断是否有人占据座位相应的改变亮灯位置向中转节点发送数据计算机端通过端口监听得到数据并进行处理并在屏幕上显示41终端节点终端节点是我进行效果演示的部分它负责发数据感应外界对它进行的操作光感强度的变化实现这个部分的功能代码如下voidsendToHostuint16toperateifbusyMsgbtrpktMsgcallPacketgetPayloadamppktsizeofMsgifbtrpktNULLreturnbtrpktnodeidTOSNODEIDbtrpktoperateoperateifcallAMSendsendAMBROADCASTADDRamppktsizeofMsgSUCCESSbusyTRUEvoidsucceedcallLedsled1OnsendToHost2voidfailedcallLedsled1OffsendToHost1表41DeskCnc部分代码42中转节点对于中转节点的代码主要是基于BlinkToRadio实现的部分代码如表42所示typedefnxstructMsgnxuint16tnodeidnxuint16tresetnxuint16toperateMsgvoidresetRatsscoreAll0score0ifbusyMsgbtrpktMsgcallPacketgetPayloadamppktsizeofMsgifbtrpktNULLreturnbtrpktnodeidTOSNODEIDbtrpktoperate0btrpktreset1ifcallAMSendsendAMBROADCASTADDRamppktsizeofMsgSUCCESSbusyTRUEprintfTimeoutClearallinformationprintfflush表42Controlnc部分代码3将1对应id号烧入4个节点终端将2烧入中转节点终端节点只需在准备通信前装上电池42中转节点中转节点是数据转发的中心它通过数据线与计算机端相连双向转发来自计算机端的数据和终端节点的数据43计算机端计算机端是系统数据处理的主要部分首先由它向中转节点发送reset信息再由中转节点转发给终端节点终端节点收到数据后将处理后的数据发给中转节点计算机端通过端口监听得到数据并进行处理显示当前的各个座位信息在屏幕上为了实现这个功能需要调用在opttinyos210supportsdkjavanettinyostools文件夹中的Printfclientjava文件让用户看到具体的信息44系统使用完成程序烧录之后确保所有终端节点装有电池以及中转节点与计算机端成功相连接下来的步骤如下1编译并运行Printfclientjava向命令行输入javacPrintfclientjava编译成功后再向命令行输入javanettinyostoolsPrintfclient运行java文件可以看到目前各座位的信息2运行中转节点的reset信号使座位信息清空3用手遮掩使光强变化观察节点变化和屏幕上显示的信息五测试在测试过程中我发现当传回的是无人的信号时并不会立刻就在屏幕上显示出来而是经过一段时间之后才在屏幕上显示多个座位无人的信息我猜测是中转节点代码不完善导致信息拥堵测试数据如图所示83JHOF4X6GQSFBQS79ER六总结与收获61遇到的问题和解决方法1如何判断光强在编写代码时首先考虑找到发送信息的光强字段然后通过判断光强进行下面一系列的操作但是没找到参考了BlinkToRadio例子后发现这个信息在eventvoidReadreadDoneerrortresultuint16tdata中的data中经过考虑我把阈值定为25以判断此时有人无人2检测时间的确定之前确定检测时间定为20秒发现时间过长不利于观察我又把数值定在了5秒