智能鸡蛋盒的设计与实现
扫描二维码
随时随地手机看文章
引 言
智能鸡蛋盒作为智能家居的一类产品,它解决了人们一直烦恼的忘记家里鸡蛋数量和忘记鸡蛋是否新鲜的问题。本论文实现了把鸡蛋数量和储存时间等数据传输到Android 客户端,并记录的功能,用户可以随时查看鸡蛋盒里鸡蛋的数量并检查鸡蛋是否新鲜。
1 智能鸡蛋盒的设计
1.1 硬件电路的设计
在设计硬件方案时,需要考虑以下几个因素:
(1) 该智能鸡蛋盒在低温封闭的环境中工作,所以芯片以及其它元器件必须具备能在低温环境下正常工作的能力;
(2) 由于是在冰箱内工作,所以无线网络要有一定的无线穿透能力。
经过一系列调研后,发现 RT5350 这款自带无线功能的主控芯片能满足本项目的基本要求,而其他元器件如电阻、电容、LED 灯也能在低温下正常工作。RT5350 是Ralink 公司在 2010 年左右推出的一款单芯片,其内部集成了基带处理器、射频、功率放大器以及一颗高性能的 MIPS 24Kc CPU 内核(最高主频为 360 MHz),一个基于 Ralink RT5350 的五端口百兆以太网交换机[1],所以仅需很少的外围元器件就可以实现低成本的2.4GHz 802.11n 无线产品。本文将RT5350 作为主控芯片, 采用距离传感器检测鸡蛋是否存在,不使用压力传感器的原因在于压力传感器的功能是检测压力大小,无法直接检测鸡蛋的有无,而距离传感器可以比较直接的检测出一定距离内是否有物体存在。
智能鸡蛋盒与手机客户端建立TCP/IP 连接,通过距离传感器检测鸡蛋数量,同时将这些数据通过引脚口的高低电平传递给主控芯片,主控芯片经过简单处理后将这些信息通过 TCP 传输给手机客户端。总设计框图如图 1 所示。
1.2 Android客户端的设计
智能鸡蛋盒Android 客户端整体的框架设计采用状态栏 ActionBar、 切换页面, 使用 ViewPager 与 Fragment 进行界面显示,使用ListView 和自定义的 Adapter 展示数据列表,采用popWindow 组件显示鸡蛋盒里鸡蛋存放的时间[2], 选择在 Android3.0 之后出现的 ActionBar 来实现标题显示, 为了能够让 ActionBar 的标题居中显示,我们采用自定义的ActionBar。
在底部栏的选项卡里,文字采用TextView,图片采用自定义的开源框架SVGView,原因在于传统的 Bitmap(位图)通过在每个像素点上存储色彩信息来表达图像,而SVG 是一个绘图标准。与Bitmap 相比,SVG 放大后不会失真,且Bitmap 需要为不同的分辨率设计多套图标,而矢量图则不需要。
2 智能鸡蛋盒的实现
2.1 硬件电路的实现
本软件设计是在虚拟机上的UBUNTU 系统上对OpenWrt 系统进行裁剪,并通过编写程序来完成。首先要构建编译环境,然后下载并配置 OpenWrt,完成基本的配置后,编译利用UBUNTU 系统自带的VI 编辑器编写驱动、程序以及MAKEFILE,最后对整个 OpenWrt 系统进行编译,编译完成后生成一个固件,利用串口调试助手SecureCRT 和tftpd32 软件将固件烧录到RT5350 芯片上[3]。
2.2 硬件程序的编写
硬件程序的编写需先打开设备驱动节点并初始化,等待手机端连接,创建子进程发送心跳包并判断连接是否断开, 实时监控接收到的指令并解析,实时监控鸡蛋数量变更并发送鸡蛋数量变更数据给手机端。程序整体框架图如图 2 所示。
开机后,稳压电路会对电源电压进行转换,把电源电压转换成适合RT5350 芯片工作的 3.3 V 电压,之后RT5350 芯片开始工作;OpenWrt 系统启动后,立即启动 Shell 开机启动脚本,对本软件程序进行启动;驱动程序会建立一个设备节点并对硬件电路进行初始化,此时硬件电路各部分开始工作,程序启动时会打开字符设备驱动的节点,从而使程序能够对硬件进行操作,同时再对硬件所映射的寄存器进行初始化,使各硬件电路开始工作;初始化完成后,建立 Socket,程序填充 TCP/IP 网络协议信息[4],并开放特定端口等待手机端的连接 ;创建子进程发送心跳包并判断连接是否断开,子进程会不断向手机端发送心跳包 ;程序实时接收手机端发送过来的信息并对信息进行指令解析,再根据相应的指令采取相应的动作;程序通过 I/O 口对 ST188 光电传感器发送的信号进行采集,从而对鸡蛋盒上存放的鸡蛋数量进行监控,只要鸡蛋数量发生变化,程序会立即识别并将鸡蛋变更后的数量发送到手机端[5]。
2.3 Android客户端的实现
Android 客户端的主要核心模块是和硬件通讯以及把硬件采集的数据显示到客户端。该模块主要技术包括Socket 通讯、Service 后台、BrodcastReceiver 通讯、Thread 线程以及Java 语言的反射技术。目前暂时定位 8 个鸡蛋的原因是Socket 通讯时,在硬件上的开发语言是 C,而C 的一个字符为 8 个字节,因此暂时定位发送一个通讯逻辑。根据需求分析,在与智能鸡蛋盒通讯时,我们需要采用 Socket 长连接通讯机制, Socket 基于TCP/IP 协议,为 Client、Service(C/S)连接方式。智能鸡蛋盒硬件电路作为 Server 端,而App 作为 Client 端, Client 需要保持长连接,就需要通过发送心跳包来与Server 保持长连接,并且 Android 系统的机制不能堵塞 UI 线程,无法在主线程操作网络访问,因此使用Service 和 Thread 作为Socket 通讯的线程,使用Timer 定时器与Server 端通讯发送心跳包。设备模块实现图如图 3 所示。
3 智能鸡蛋盒的测试
3.1 硬件电路的测试
系统测试设备见表 1 所列,硬件测试分为如下几步进行:
(1) 检查该模块电路的焊接是否正确,用万用表针对每条线路与每个可疑的断线点进行逐一排查,看是否有短路和断路的地方。
(2) 连接 5V电源,静态检查单片机 RT5350芯片的电压是否为5V,是否正常工作,并检查各元件是否有异常发热现象。检查距离传感器是否正常工作,灵敏性是否达标。
(3) 使用数字万用表测量电源模块,将电源电压稳定在3.3V左右。
(4) 将编译好的OpenWrt固件烧录到RT5350 核心板上, 在确保程序正常后插上电源对鸡蛋盒进行功能检测,检测的内容主要有鸡蛋数量能否被正常检测,鸡蛋数量发生变化时能否及时将信号传递给手机端[6]。测试结果符合要求。
3.2 Android 客户端的测试
使用 Android[7] 手机进行测试,打开Android 客户端,连接硬件,查看App 显示的鸡蛋数量和储存时间是否与实际符合。所使用的手机为HM NOTE 2(红米 Note 2),Android 系统版本为Android 4.4.4。测试结果符合要求。
4 结 语
智能鸡蛋盒硬件电路的主芯片选择了具有 WiFi功能模块的 RT5350芯片, 在嵌入式 Linux系统上进行软件编译, 运用TCP/IP通讯技术实现主芯片和手机客户端的连接。智能鸡蛋盒 Android 客户端主要实现和硬件电路的通信,把硬件 电路采集的鸡蛋库存及存放时间等参数传输到客户端,方便 用户实时查看。