'One year master program of embedded systems' 实践项目

来源:互联网 发布:按键精灵安卓淘宝滑动 编辑:程序博客网 时间:2024/06/16 21:48

智能家居系统

特性:

Java编写的服务器和基于TCP协议的Socket通讯,多线程技术(安卓手机和Kinect可同时手势控制电器,一台主服务器接显示器展示系统状态。多台子服务器通过蓝牙技术接收和传送各负责的设备的指令,使用多台子服务器是为了无线连接多个房间考虑)。

我属于服务器组参与服务器实现。要让安卓手机或者Kinect直接控制电器并不像遥控器控制电视(输出进制相同)。

“服务器”的重要作用一是扮演信息处理的角色。为了便于监控数据流(Kinect和手机发来指令相应界面会做出反馈,

比如我通过手机控制让房间1的落地灯亮,可以观察到本来是不亮的。【插嘴一句,本来这里设计是开关亮和不亮两个按钮,经过用户体验测试,觉得开关式设计[1]比较好】然后当手机的指令传到服务器,服务器几乎同时将指令分发到电器,在毫秒间界面同步更新状态如下图待补图待补服务器端指令分发代码片段)特地设置系统状态界面。


重要作用二是使指令有一定的逻辑顺序而且简化了从手机或者Kinect发到服务器的指令。

就拿手机操作来说吧,来自手机的操作指令以A开头,使用时首先点选控制房间1内的电器,这时会自动加入R1进入指令,接着选择落地灯1,这时候Android手机端程序会添加落地灯1的代码FL,最后通过手势控制使陀螺仪偏转量达到某一方向的阈值然后会输出状态码比如1。这样A:R1:FL:1 然后就传送到服务器端了。服务器端程序重新将这条指令根据协议解读成16进制指令驱动电器。这就像中药房找药材,比如要找藏红花,首先根据特征判断是花还是非花,然后根据药性选择温性还是凉性,然后根据相应分类的花名快速找到目标,并且组织清晰,意义分明。


布置任务后,我首先做的工作是用蓝牙连接落地灯,需要实现这一部分的连通。由于此时大家的任务是齐头并进,所以我需要模拟上游数据输入,并且根据上游数据进行反馈,发送转义指令到电器,先让它点亮的思路。这条思路通了就使指令多一点,接着迁移到其他设备中。根据串口调试助手测试模拟服务器端发送到电路的过程中,这时和电器组同学沟通确定初步的服务器到电器的指令格式。在蓝牙这块也碰到一些问题,首先进行手机到服务器端传输模拟时,使用的是两台电脑,发现蓝牙传输时不仅连接慢而且需要手动连接,便纠结做一个能自动连接的程序,之后发现性价比不高,将这个问题通报给全班,大家遂定下来使用TCP/IP 模拟手机到电器的连通,与之前的连接耗时相比,使用TCP/IP 仅需确定主机IP地址和填写端口号就可以实现[2]。蓝牙与电器连接时碰到的问题首先搜索特定电器的蓝牙,碰到连接错误的电器,没有连接某些电器,无法自动连接电器等问题,这部分测试由我负责,修复bug由服务器组另一个组员主要完成。


因为服务器端是通过串口通信的方式发送指令到电器的。而电子设备之间串口数据通信的本质是单位时间内的电压高低进行传输(高电平位1,低电平位0 也相当于汇编二进制。我们这里用的是16进制表示电压。为什么用16进制而不用二进制,十进制呢?举一个例子十进制255,用16进制表示FF,用二进制表示1111 1111。这样看若使用二进制会表示冗长不便,为什么不用十进制呢?因为16进制可以方便的看出并转化为二进制)



[1] 初始设定灯泡未亮,相应界面状态未使能,发送一次指令A使灯泡亮,再发送一次指令A使灯泡灭。就像摁开关一样,节省了指令数量,提升用户体验(对于老年人来说设计得越易用越好,指令多操作难度就上升了)。

[2] 先是通过另外一台电脑模拟手机使用TCP/IP协议发送消息到服务器所在的电脑,连通。之后将这一过程结合开源代码写进伺服器(伺服器需填写主服务器的IP地址)作为模拟器,连通。测试指令协议。待服务器与电灯进行蓝牙连通后(因为电器端的Ardunio板没有网卡,只能通过蓝牙连接),涉及串口通信,蓝牙传输过程。


V1:Android,Kinect,Equipment,sensor,break point 开始部署程序。Server 分配任务研究部署TCP/IP 和 测试蓝牙连通电灯。

V2:Android,Kinect,Equipment,sensor,break point 部署中。

V3:

V4:

。。。像搭积木一样。服务器组测试连接一个电器开始,然后是多个电器,然后等Android和Kinect完成demo后,使之替代模拟器进行连通。然后重新测试使用Android和Kinect使用一个简单指令使一个电器工作,Android和Kinect开始研究多个手势指令。然后传感器组将一个传感器的数据传入服务器,测试连通后服务器组开始制作用户界面。电器组着手部署其他电器。Android,Kinect,Server, Equipment开始测试完成一个初步的demo,完成控制一个房间内所以电器。传感器组和Break point组完成接口衔接。各组一起测试一个房间内的控制电器反馈情况和用户界面的相应反馈情况。之后部署到三个房间内。然后最后完成的系统进行系统测试。


系统状态界面:



接收到的传感器数据:



系统结构图:



小组会议以及指令设计:






系统组件:

Kinect 一台,Android 手机一部,加入Ardunio改装的落地灯(改)三座,射灯(改)三组,风扇(改)三组,烧录器若干,电动窗帘一部,温湿度传感器一台,二氧化碳传感器一台,超声探测器(检测进出门人数)一组,电脑(服务器)若干,以及其他电源等配件。


[1] 初始设定灯泡未亮,相应界面状态未使能,发送一次指令A使灯泡亮,再发送一次指令A使灯泡灭。就像摁开关一样,节省了指令数量,提升用户体验(对于老年人来说设计得越易用越好,指令多操作难度就上升了)。
0 0
原创粉丝点击