隨著人民生活水平的飛速發展,生活節奏不斷加快,冰箱在家庭中起的作用也越來越大,但整理起來麻煩,同時也經常弄不清楚食品是否用完或者遺忘某些食品在冰箱而造成各種生活麻煩。
本設計采用射頻識別(RFID,RadioFrequencyIdentification)技術,并結合互聯網和信息處理技術,建立智能冰箱食品監管系統,實現對冰箱內的食品記錄。那么冰箱內食品可以通過查詢數據庫在冰箱的液晶屏上顯示,也可以通過手機發短信到冰箱查詢家里的食物,并且通過手機購買冰箱食物,滿足未來智能家居的需求。
隨著物聯網的發展,物聯網方向智能家居的投入正在迅速擴大,RFID標簽的成品也不斷地降低,將來可能取代條形碼成為食品外包,而且RFID標簽以其耐用、持久、免維護著稱。隨著大多數人的家庭已達到小康水平的條件,渴望著更為方便、省事得家用電器。而本系統雖然只是雛形,但價格適中,而且采用較為前沿的技術,比傳統的冰箱更為省事,為都市人群忙碌的生活提供了便捷,解決眾多生活瑣碎事情,推向市場將為大部分人所接受。
1系統總體方案設計
1.1系統總體方案
根據智能冰箱終端的功能與技術要求情況,決定采用"硬件+軟件"的系統結構來設計智能冰箱終端,應用層在OS的基礎上根據項目的不同需求來編寫,各部分簡要介紹如下:
系統選用基于采用IntelXscalePXA270的硬件開發平臺,該平臺是以IntelXScale架構的ARM處理器。
嵌入式操作系統選用WindowsCE5.0.WindowsCE是高度模塊化的嵌入式操作系統,用戶可以根據自己的設備需求通過PlatformBuilder工具進行定制和裁減。
應用程序框架:qt-embedded-wince-opensource4.6具有豐富的標準庫,動態引擎,具有Widget樣式表,強大的圖形布畫和多線程功能;在WindowsCE上實現高性能、占位小等特點。
本系統是作為一個家居電器,通過網絡可隨時對食品進行查詢和上網,用戶可以通過短信了解到冰箱食品信息,決定是否網上購買。
2.1RFID讀寫器、天線模塊
ISO18000-6CI系列讀寫器是深圳市先施科技股份有限公司自主開發的新一代遠距離電子標簽讀寫器,讀寫器所支持的標簽主要是遵從ISO18000-6C(以下簡稱"6C")協議的無源電子標簽。用戶可以使用本讀寫器對6C電子標簽進行讀、寫、鎖定等功能操作。該讀寫器有主從、定時和觸發三種讀電子標簽的工作方式,連接主機和控制器的通信接口有RS-232、RS-485和Wiegand接口。可以直接與具有標準韋根W26或W34接口的控制設備連接,也可以通過標準通信接口與控制器或PC相連,進行數據通信與交換;另外還有四路觸發信號輸入接口。當壓力傳感器檢測冰箱內壓力發生變化時,觸發相應的函數使讀寫器掃描冰箱內的食品標簽。同時,該模塊提供一次讀寫多個標簽,適合本項目設計。
2.2GPRS/GSM模塊
該模塊采用鴻鵬電子有限公司DU600,它支持多種連接模式,可以實現手機通信的基本功能。智能冰箱的GPRS模塊只需要短信收發并且解譯收到的短信信息,只需要DU600選擇喚醒模式等待接收短信并且可以通過解譯短信后得到的指令發送控制指令到PXA270實現購買功能和查詢功能。
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收到此信號表示復位成功。同時,本模塊采用了半導體制冷片,實現模擬冰箱保鮮功能。
{$page$}
3軟件設計
3.1系統軟件框圖
3.2應用程序開發
(1)RFID實現過程。
運用RFID的API函數中ReadID讀取在冰箱內的RFID卡,連續多次讀取RFID卡。讀取期間運用防碰撞算法將讀取到的相同的RFID卡信息排除,然后將得到的RFID卡信息保存在數據結構內,以便以后用數據結構跟數據庫資料核對。完成讀取后,斷開RFID連接并且開始跟數據庫對比資料。
這里我們采用了目前廣泛的二進制樹防碰撞算法。讀寫器與應答器之間進行數據交換時,往往要傳輸序列號的部分或者全部位,此時的傳輸順序定義為:先發送低位,再發送高位。在讀寫器或者應答器內部,對數據進行比較時,遵循這樣的原則,即按位依次比較,先比較低位,再比較高位,約定0<1,根據這個比較順序,在判斷大小時,低位數據優先,即兩數A,B相比較,從低位開始的第一個不相等位的大小決定了兩數的大小,只有當兩個數的全部位均相等時,兩數才相等。二進制樹算法執行過程中,讀寫器會多次發送把應答器分成兩組并且多次分組后得到唯一的一個應答器命令給應答器,而且在這個分組過程中命令參數以節點的形式存儲起來成一個數據的分叉樹,從而形成"二進制樹".智能冰箱的二進制樹防碰撞算法在應答器內進行比較,因為讀寫器可以有多個,而最后讀寫器讀到的數據發送給應答器,因此選擇應答器作為防碰撞算法的燒錄地方,這樣可以在應答器接受了讀寫器讀到的標簽排除相同后傳輸標簽數據到主控平臺PXA270。
(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連接。
(3)壓力傳感器實現過程當冰箱打開的時候,PXA270對壓力傳感器通電。壓力傳感器第一次工作時會記錄初始時候重力。當冰箱關閉時候,測量壓力傳感器的重力并對比初始時候重力,是否變化,若未變化過則關閉壓力傳感器并斷開壓力傳感ID讀寫器。
(4)控溫實現過程
由于PXA270外接插口問題,溫度傳感器基于單片機操作,不需要嵌入PAX270開發板上。溫度傳感器會伴隨著冰箱的啟動而啟動。當溫度傳感器測到的數據發送給單片機時,單片機會先將冰箱內的溫度與設置的冰箱的溫度對比,若高于冰箱的溫度則開啟制冷裝置。制冷期間也不斷測量先冰箱的溫度并且比較設定的冰箱溫度值;若小于等于冰箱的設定的溫度值則關閉制冷裝置。單片機繼續接受從溫度傳感器傳來的冰箱的溫度并且比較設定的冰箱溫度值以準備隨時開啟制冷保持冰箱的溫度。當冰箱斷電時候單片機才會停止運行直接冰箱通電后再次開啟并從頭初始化單片機。
(5)網上購物過程
在這一過程中,我們指定了冰箱能夠直接訪問的物聯網超市網站,從而進行對接。因此,我們本項目中,自己搭建了一個購物網站(ASP),為的就是與該類產品進行交互。通過調用系統自帶的頭文件中函數HINTERNETInternetOpenUrl()來打開一個完整的FTP、Gopher或HTTP網址的資源,從而可以獲取商品相關信息。
另外,用戶需要登錄購物網站才能實現下單操作,這里,我們默認每臺智能冰箱都配有一個專用的賬號來綁定登錄,通過POST方式提交頁面。當冰箱登錄成功后,可以實現購買商品并下單。
(6)數據庫實現
通過SQLite,冰箱保存著食物的各種資料以便于查找。
NowTab1保存著上一次冰箱的食物表格,方便于與這次RFID讀取到得數據比對其中的變化,并且適當刪除或者添加NowTab1數據以便下一次的對比,也可以顯示出現冰箱內有的食物。
HistoryTab3保存著從冰箱曾經存放過的食物,以便于客戶可以查找曾經買過的食物。
{$page$}
SureTab2保存著冰箱基本需求的食物表。這表是為了確認如果NowTab1表的食物缺少一定量時跟SureTab2對比,某食物缺少了超過界限時,就會啟動購物程序并且購買缺少的食物防止冰箱食物缺少。
NameTab4保存著與編號相對應的名稱。NameTab4是為了方便從RFID讀到的信息中得出此食物的名稱。
若查到不到名稱,則可以通過編號網上查找到名稱并且添加到AddrTab5表中以便以后查找之用。
AddrTab5可以根據地址編號得出地址名。AddrTab5是為了方便從RFID讀到的信息中得出此食物的生產地址。若查到不到地址,則可以通過地址編號網上查找到地址并且添加到AddrTab5表中以便以后查找之用。
可以根據Cookbook5先列出冰箱可以烹飪的食材跟菜譜。Cookbook5是數據庫存儲的菜譜,方便從冰箱現有食材中查找到可以烹飪的菜譜。Cookbook5可以通過網上下載菜譜保存到數據庫中。
可以通過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=newQTimer();
connect(timer,SIGNAL(timeout()),this,SLOT(timerUpDate()));
timer->start(1000);
voidicebox::timerUpDate()
{
curFiletime=QDateTime::currentDateTime()。toString("hh:mm:ss");
ui->label_7->setText(curFiletime);
}
4結語
RFID冰箱可以發揮射頻識別技術的優點,為現代家庭的健康生活提供保障,減少了社會資源浪費,符合當代社會綠色環保的理念,可以應用于智能家居。但是目前,超市的商品還沒使用RFID標簽,所以每一樣食品都需要加貼標簽,將會是一個繁瑣的過程,而且標簽費用也可能會超過食品本身,這是智能冰箱投入實用遇到的難題。但是隨著超市物流RFID技術的普及,標簽價格的進一步下降,智能冰箱必然會走進每個家庭,成為智能家居的主角。
