0 引言
随着人民生活水平的飞速发展, 生活节奏不断加快,冰箱在家庭中起的作用也越来越大,但整理起来麻烦, 同时也经常弄不清楚食品是否用完或者遗忘某些食品在冰箱而造成各种生活麻烦。
本设计采用射频识别(RFID,Radio Frequency Identification)技术,并结合互联网和信息处理技术,建立智能冰箱食品监管系统,实现对冰箱内的食品记录。那么冰箱内食品可以通过查询数据库在冰箱的液晶屏上显示,也可以通过手机发短信到冰箱查询家里的食物,并且通过手机购买冰箱食物,满足未来智能家居的需求。
随着物联网的发展, 物联网方向智能家居的投入正在迅速扩大,RFID 标签的成品也不断地降低, 将来可能取代条形码成为食品外包, 而且RFID 标签以其耐用、持久、免维护着称。随着大多数人的家庭已达到小康水平的条件,渴望着更为方便、省事得家用电器。而本系统虽然只是雏形,但价格适中,而且采用较为前沿的技术,比传统的冰箱更为省事,为都市人群忙碌的生活提供了便捷,解决众多生活琐碎事情,推向市场将为大部分人所接受。
1 系统总体方案设计
1.1 系统总体方案
根据智能冰箱终端的功能与技术要求情况, 决定采用"硬件+软件"的系统结构来设计智能冰箱终端,应用层在OS 的基础上根据项目的不同需求来编写,各部分简要介绍如下:
系统选用基于采用Intel Xscale PXA270 的硬件开发平台,该平台是以Intel XScale 架构的ARM 处理器。
嵌入式操作系统选用Windows CE 5.0.Windows CE 是高度模块化的嵌入式操作系统, 用户可以根据自己的设备需求通过Platform Builder 工具进行定制和裁减。
应用程序框架:qt-embedded-wince-opensource4.6具有丰富的标准库,动态引擎,具有Widget 样式表,强大的图形布画和多线程功能; 在Windows CE 上实现高性能、占位小等特点。
本系统是作为一个家居电器, 通过网络可随时对食品进行查询和上网, 用户可以通过短信了解到冰箱食品信息, 决定是否网上购买。系统总体方案图1 如下。
![图1 系统框图](/Uploads/2014_02/article/d5b5c4b9e4.jpg)
图1 系统框图
1.2 系统模块
根据设计方案, 我们将整个系统划分为三个主要模块,如图2 所示。
![图2 系统模块图](/Uploads/2014_02/article/98a3c5f4f0.jpg)
图2 系统模块图
1.3 模块功能详细描述
(1)食品状态模块。
表1
![表1](/Uploads/2014_02/article/b512e4489e.jpg)
(2)网上购物模块。
表2
![表2](/Uploads/2014_02/article/fecf295ef7.jpg)
(3)菜谱模块。
表3
![表3](/Uploads/2014_02/article/8e578986f1.jpg)
2.硬件设计
![图3 系统硬件框图](/Uploads/2014_02/article/4dcc0afd97.jpg)
图3 系统硬件框图
2.1 RFID 读写器、天线模块
ISO18000-6C I 系列读写器是深圳市先施科技股份有限公司自主开发的新一代远距离电子标签读写器,读写器所支持的标签主要是遵从ISO18000-6C (以下简称"6C") 协议的无源电子标签。用户可以使用本读写器对6C 电子标签进行读、写、锁定等功能操作。该读写器有主从、定时和触发三种读电子标签的工作方式,连接主机和控制器的通信接口有RS-232、RS-485 和Wiegand 接口。可以直接与具有标准韦根W26 或W34接口的控制设备连接, 也可以通过标准通信接口与控制器或PC 相连,进行数据通信与交换;另外还有四路触发信号输入接口。当压力传感器检测冰箱内压力发生变化时, 触发相应的函数使读写器扫描冰箱内的食品标签。同时,该模块提供一次读写多个标签,适合本项目设计。
2.2 GPRS/GSM 模块
该模块采用鸿鹏电子有限公司DU600, 它支持多种连接模式,可以实现手机通信的基本功能。智能冰箱的GPRS 模块只需要短信收发并且解译收到的短信信息,只需要DU600 选择唤醒模式等待接收短信并且可以通过解译短信后得到的指令发送控制指令到PXA270实现购买功能和查询功能。
![图4 读写器和电子标签的工作示意图](/Uploads/2014_02/article/b49a3a6029.jpg)
图4 读写器和电子标签的工作示意图
2.3 压力传感器模块
通过89C51 单片机,集成了LCD 模块、串口模块、24 位ADC 模块。该模块主要负责感应压力的变化,通过串口传送中断信号到中控平台。
压力传感器HX711 采用了海芯科技集成电路专利技术,是一款专为高精度电子秤而设计的24 位A/D转换器芯片。当压力传感器传来变化时候才会发送信号到核心板说明冰箱内有变化并开启RFID 扫描。
2.4 控温模块
本模块是基于单片机的制冷控制系统, 实时温度显示,制冷温度可调,最低可达零下10 度。
本模块的温度传感器采用DS18B20.根据DS18B20的通信协议,主机(单片机)控制DS18B20 完成温度转换必须经过三个步骤:每一次读写之前都要对DS18B20进行复位操作,复位成功后发送一条ROM 指令,最后发送RAM 指令, 这样才能对DS18B20 进行预定的操作。复位要求主CPU 将数据线下拉500 微秒,然后释放,当DS18B20 收到信号后等待16~60 微秒左右,后发出60~240 微秒的存在低脉冲, 主CPU 收到此信号表示复位成功。同时,本模块采用了半导体制冷片,实现模拟冰箱保鲜功能。
![图5 控温模块局部原理图](/Uploads/2014_02/article/27b6d1f11d.jpg)
图5 控温模块局部原理图
3 软件设计
3.1 系统软件框图
基于Windows CE 5.0 的智能冰箱的软件框图如图6 所示。
![图6 软件框图](/Uploads/2014_02/article/dd9cc019b6.jpg)
图6 软件框图
3.2 应用程序开发
(1)RFID 实现过程。
运用RFID 的API 函数中ReadID 读取在冰箱内的RFID 卡,连续多次读取RFID 卡。读取期间运用防碰撞算法将读取到的相同的RFID 卡信息排除,然后将得到的RFID 卡信息保存在数据结构内,以便以后用数据结构跟数据库资料核对。完成读取后,断开RFID 连接并且开始跟数据库对比资料。
这里我们采用了目前广泛的二进制树防碰撞算法。读写器与应答器之间进行数据交换时,往往要传输序列号的部分或者全部位,此时的传输顺序定义为:先发送低位,再发送高位。在读写器或者应答器内部,对数据进行比较时,遵循这样的原则,即按位依次比较,先比较低位,再比较高位,约定0<1,根据这个比较顺序,在判断大小时,低位数据优先,即两数A,B 相比较,从低位开始的第一个不相等位的大小决定了两数的大小,只有当两个数的全部位均相等时,两数才相等。二进制树算法执行过程中, 读写器会多次发送把应答器分成两组并且多次分组后得到唯一的一个应答器命令给应答器, 而且在这个分组过程中命令参数以节点的形式存储起来成一个数据的分叉树,从而形成"二进制树".智能冰箱的二进制树防碰撞算法在应答器内进行比较,因为读写器可以有多个,而最后读写器读到的数据发送给应答器, 因此选择应答器作为防碰撞算法的烧录地方, 这样可以在应答器接受了读写器读到的标签排除相同后传输标签数据到主控平台PXA270。
![图7 RFID 读取流程图](/Uploads/2014_02/article/341231ed1b.jpg)
图7 RFID 读取流程图
(2)GPRS 实现过程
当收到数据库对比后请求购物的清单,通过QT 运行以C++代码编写的GPRS 程序。首先从QT 里得到需要发送到客户的信息数据, 然后用OnBnClickedBtnOpen () 配置RS-232 串口连接配置GPRS, 等待GPRS 连接成功。
当连接成功后GPRS 会返回"AT+OPENAT=MODE:3#" 数据确认连接成功。然后通过OnBnClicked -BtnSend (string) 这个函数发送信息到GPRS, 然后GPRS 会根据信息内容发送到客户的手机内。发送成功后GPRS 会待机5 分钟等待客户发送回复确认购买。
倘若5 分钟内客户尚未回复确认购买, 则会自动取消这次食物的购买并且断开与GPRS 连接; 若5 分钟内客户回复确认购买, 则程序会返回一个确认购买的信息并且断开GPRS 连接。
![图8 GPRS 算法流程图](/Uploads/2014_02/article/e4cef7fdff.jpg)
图8 GPRS 算法流程图
![图9 压力传感器算法流程图](/Uploads/2014_02/article/79a8720295.jpg)
图9 压力传感器算法流程图
(4)控温实现过程
由于PXA270 外接插口问题, 温度传感器基于单片机操作,不需要嵌入PAX270 开发板上。温度传感器会伴随着冰箱的启动而启动。当温度传感器测到的数据发送给单片机时, 单片机会先将冰箱内的温度与设置的冰箱的温度对比, 若高于冰箱的温度则开启制冷装置。制冷期间也不断测量先冰箱的温度并且比较设定的冰箱温度值;若小于等于冰箱的设定的温度值则关闭制冷装置。单片机继续接受从温度传感器传来的冰箱的温度并且比较设定的冰箱温度值以准备随时开启制冷保持冰箱的温度。当冰箱断电时候单片机才会停止运行直接冰箱通电后再次开启并从头初始化单片机。
![图10 控温算法流程图](/Uploads/2014_02/article/66aa2969c3.jpg)
图10 控温算法流程图
(5)网上购物过程
在这一过程中, 我们指定了冰箱能够直接访问的物联网超市网站,从而进行对接。因此,我们本项目中,自己搭建了一个购物网站(ASP),为的就是与该类产品进行交互。通过调用系统自带的头文件<wininet.h>中函数HINTERNET InternetOpenUrl()来打开一个完整的FTP、Gopher 或HTTP 网址的资源, 从而可以获取商品相关信息。
另外,用户需要登录购物网站才能实现下单操作,这里, 我们默认每台智能冰箱都配有一个专用的账号来绑定登录,通过POST 方式提交页面。当冰箱登录成功后,可以实现购买商品并下单。
(6)数据库实现
通过SQLite, 冰箱保存着食物的各种资料以便于查找。
表4 NowTab1
![表4 NowTab1](/Uploads/2014_02/article/198b542a61.jpg)
NowTab1 保存着上一次冰箱的食物表格, 方便于与这次RFID 读取到得数据比对其中的变化,并且适当删除或者添加NowTab1 数据以便下一次的对比, 也可以显示出现冰箱内有的食物。
表5 HistoryTab3
![表5 HistoryTab3](/Uploads/2014_02/article/9135c02345.jpg)
HistoryTab3 保存着从冰箱曾经存放过的食物,以便于客户可以查找曾经买过的食物。
表6 SureTab2
![表6 SureTab2](/Uploads/2014_02/article/bfa3d1bc64.jpg)
SureTab2 保存着冰箱基本需求的食物表。这表是为了确认如果NowTab1 表的食物缺少一定量时跟SureTab2 对比,某食物缺少了超过界限时,就会启动购物程序并且购买缺少的食物防止冰箱食物缺少。
表7 NameTab4
![表7 NameTab4](/Uploads/2014_02/article/138de6bb99.jpg)
NameTab4 保存着与编号相对应的名称。NameTab4是为了方便从RFID 读到的信息中得出此食物的名称。
若查到不到名称, 则可以通过编号网上查找到名称并且添加到AddrTab5 表中以便以后查找之用。
表8 AddrTab5
AddrTab5 可以根据地址编号得出地址名。AddrTab5是为了方便从RFID 读到的信息中得出此食物的生产地址。若查到不到地址,则可以通过地址编号网上查找到地址并且添加到AddrTab5 表中以便以后查找之用。
表9 Cookbook5
![表9 Cookbook5](/Uploads/2014_02/article/f52bf5761b.jpg)
可以根据Cookbook5 先列出冰箱可以烹饪的食材跟菜谱。Cookbook5 是数据库存储的菜谱,方便从冰箱现有食材中查找到可以烹饪的菜谱。Cookbook5 可以通过网上下载菜谱保存到数据库中。
表10 RDCookbook6
![表10 RDCookbook6](/Uploads/2014_02/article/af8827d513.jpg)
可以通过RDCookbook6 得到推荐的食谱。RDCookbook6是冰箱现有食材根据Cookbook5 的菜谱得出现在最有可能烹饪的的菜谱罗列出来。
(7)GUI 界面设计
本系统GUI 采用QTE 实现。
①简要设计概述在主界面的左边入放置了一个groupBox 控件,里面加入了四个pushBotton,它们分别代表:主界面、食品状态、网上购物和食谱推荐。主界面的右边放置的是stackedWidget 控件, 一共添加了五个页面来实现对不同功能模块的显示。通过信号和槽连接按钮实现相应功能界面的跳转。
②主要设计实现方法。
●隐藏标题栏。
his->setWindowFlags(Qt::FramelessWindowHint);
this->setWindowModality(Qt::ApplicationModal);
●日历的显示。
//显示日期
curFile=QDateTime::currentDateTime()。toString("dd");
ui->label_9->setStyleSheet("font-size:30px");
ui->label_9->setText(curFile);
//显示年月
curFileyear=QDateTime::currentDateTime()。toString("2011-MM");
ui->label_8->setStyleSheet("font-size:18px");
ui->label_8->setText(curFileyear);
●动态更新时间。
QTimer *timer=new QTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(timerUpDate()));
timer->start(1000);
void icebox::timerUpDate()
{
curFiletime=QDateTime::currentDateTime()。toString("hh:mm:ss");
ui->label_7->setText(curFiletime);
}
4 结语
RFID 冰箱可以发挥射频识别技术的优点,为现代家庭的健康生活提供保障,减少了社会资源浪费,符合当代社会绿色环保的理念,可以应用于智能家居。但是目前,超市的商品还没使用RFID 标签,所以每一样食品都需要加贴标签,将会是一个繁琐的过程,而且标签费用也可能会超过食品本身, 这是智能冰箱投入实用遇到的难题。但是随着超市物流RFID 技术的普及,标签价格的进一步下降,智能冰箱必然会走进每个家庭,成为智能家居的主角。
![表8 AddrTab5](/Uploads/2014_02/article/0701320dc9.jpg)
(3)压力传感器实现过程当冰箱打开的时候,PXA270 对压力传感器通电。压力传感器第一次工作时会记录初始时候重力。当冰箱关闭时候, 测量压力传感器的重力并对比初始时候重力,是否变化,若未变化过则关闭压力传感器并断开压力传感ID 读写器。