(浙江大學(xué)城市學(xué)院 信息與電氣工程學(xué)院,杭州 310015)
物聯(lián)網(wǎng)技術(shù)是實(shí)現(xiàn)人與人、人與物、物與物交互和連接的M2M新型技術(shù)體系[1]。它在互聯(lián)網(wǎng)、射頻等無線通信等技術(shù)的基礎(chǔ)上,實(shí)現(xiàn)無處不在的物體感知、通訊和計(jì)算和在線服務(wù)等。物聯(lián)網(wǎng)體系結(jié)構(gòu)從功能角度可以分為感知器、網(wǎng)絡(luò)層和應(yīng)用層三部分[2]。當(dāng)前物聯(lián)網(wǎng)技術(shù)能為各行各業(yè)提供智能物聯(lián)服務(wù)[3-5],利用射頻技術(shù)實(shí)現(xiàn)物品跟蹤、利用無線通信技術(shù)進(jìn)行數(shù)據(jù)傳輸、實(shí)時(shí)在線監(jiān)測(cè)、現(xiàn)場的遠(yuǎn)程控制等功能。
共享經(jīng)濟(jì)是源于實(shí)踐的全新經(jīng)濟(jì)模式。共享的理念一經(jīng)獲得共識(shí),就迅速在美國、歐洲等信息技術(shù)發(fā)達(dá)的國家演變成了聲勢(shì)浩大的社會(huì)實(shí)踐[6]。在中國共享概念爆發(fā)于2016年,最為顯著的便是如今滿大街的共享單車,當(dāng)然也有投資者涉水于共享汽車行業(yè),再者如共享充電器、雨傘等行業(yè)。
網(wǎng)絡(luò)競技游戲的快速發(fā)展,使得玩家對(duì)鼠標(biāo)需求也越來越高。好的鼠標(biāo)不僅僅能夠提升游戲體驗(yàn),還可以幫助玩家在游戲中取得勝利。首先實(shí)際使用決定鼠標(biāo)是否是好鼠標(biāo)的標(biāo)準(zhǔn)之一是鼠標(biāo)的外形尺寸,它對(duì)玩家的使用體驗(yàn)至關(guān)重要的影響。很多游戲玩家在使用網(wǎng)吧鼠標(biāo)時(shí)候,常常會(huì)發(fā)現(xiàn)鼠標(biāo)的大小,與個(gè)人的手掌大小不符合,這在競技比賽或游戲使用過程中無法獲得舒適的使用感受,甚至?xí)绊懙絼倮墨@取。為保證玩家在網(wǎng)吧中能夠選擇適合手掌尺寸的鼠標(biāo),在網(wǎng)吧中每臺(tái)電腦旁配備匹配玩家手掌大小的鼠標(biāo)對(duì)游戲玩家來說非常有必要。因此,受到共享單車、共享充電器等共享概念的啟發(fā),提出了物聯(lián)網(wǎng)技術(shù)下基于Arduino的共享鼠標(biāo)柜設(shè)計(jì)。目前已有的鼠標(biāo)網(wǎng)絡(luò)共享與現(xiàn)在的共享鼠標(biāo)概念不同,傳統(tǒng)的共享鼠標(biāo)是指共享使用一套鼠標(biāo)實(shí)現(xiàn)同時(shí)對(duì)多臺(tái)客戶端系統(tǒng)進(jìn)行操作和控制[7-9]。這一類共享鼠標(biāo)是不適合于競技游戲中鼠標(biāo)選擇需求的。
本文在共享經(jīng)濟(jì)概念火爆以及市場空缺的背景下提出,共享鼠標(biāo)柜在服務(wù)方面,可以解決網(wǎng)吧老板在購買(租賃)外設(shè)上面的售后問題;共享鼠標(biāo)柜的出現(xiàn),使得網(wǎng)吧投資成本減少了50%,讓資源得到有效整合,也讓鼠標(biāo)共享成為一種新的共享潮流,成功實(shí)現(xiàn)網(wǎng)吧業(yè)主、網(wǎng)吧游戲玩家和廠家三方共贏的共享模式。
智能共享鼠標(biāo)柜結(jié)構(gòu)如圖1所示。該鼠標(biāo)柜柜體分三層,每層放置一個(gè)有線鼠標(biāo),共可放置3個(gè)有線鼠標(biāo)。每次只允許取出一個(gè)款鼠標(biāo)使用,如需要換另外一個(gè)鼠標(biāo)則需要將取出鼠標(biāo)放進(jìn)去才能置換;利用距離傳感器判斷鼠標(biāo)是否已經(jīng)取出,如果鼠標(biāo)取出,與其對(duì)應(yīng)的該層的可移動(dòng)擋板上移,用戶可以拿出該鼠標(biāo);鼠標(biāo)放回后,移動(dòng)擋板下移將鼠標(biāo)線壓住。圖中所示三組綠色/紅色發(fā)光二極管分別表示鼠標(biāo)歸位或取出狀態(tài)。圖中所示一組紅色/綠色/紅色的發(fā)光二極管分別表示開門方向及門開狀態(tài)和門關(guān)閉狀態(tài)。可移動(dòng)擋板和門對(duì)應(yīng)的角度都為120°。用戶利用所設(shè)計(jì)手機(jī)APP掃碼開柜門,從擋板上移開始計(jì)時(shí),鼠標(biāo)放回、擋板下移且柜門關(guān)閉計(jì)時(shí)結(jié)束,這段時(shí)間即為收費(fèi)時(shí)間段。門可設(shè)置左開或有開模式,以方便左手使用鼠標(biāo)的用戶。
圖1 智能共享鼠標(biāo)柜結(jié)構(gòu)示意圖
用戶使用鼠標(biāo)柜時(shí)首先需要下載所設(shè)計(jì)的APP,APP通過無線通信模塊與后臺(tái)服務(wù)器相連接,把相關(guān)的數(shù)據(jù)和信息發(fā)送給后臺(tái)管理系統(tǒng),同時(shí)后臺(tái)管理系統(tǒng)能獲取到鼠標(biāo)柜的定位,從而實(shí)現(xiàn)找鼠標(biāo)柜的功能。當(dāng)進(jìn)行掃碼開門時(shí),會(huì)將唯一的標(biāo)識(shí)符等信息上傳至服務(wù)器管理系統(tǒng),后臺(tái)管理系統(tǒng)進(jìn)過驗(yàn)證后發(fā)送給鼠標(biāo)柜智能鎖的Arduino WIFI模塊,然后Arduino WIFI模塊向Arduino2560發(fā)送解鎖指令,Arduino2560收到后通過數(shù)字信號(hào)控制電機(jī)來進(jìn)行開門。當(dāng)用戶使用完時(shí),關(guān)門時(shí)會(huì)觸發(fā)電子控制模塊的關(guān)門控制開關(guān),然后中心控制單元通過數(shù)字信號(hào)控制模塊通過WIFI無線通信模塊通知后臺(tái)管理系統(tǒng)鼠標(biāo)柜門為關(guān)閉狀態(tài)。
智能共享鼠標(biāo)柜是以Arduino2560單片機(jī)為控制為核心。外圍模塊包括:ESP8266-12F WIFI通信模塊、電源模塊、4個(gè)步進(jìn)電機(jī)、兩個(gè)舵機(jī)、4個(gè)綠色發(fā)光二極管、5個(gè)紅色發(fā)光二極管,硬件系統(tǒng)結(jié)構(gòu)示意框圖如圖2所示。
圖2 硬件系統(tǒng)結(jié)構(gòu)框圖
電源模塊給鼠標(biāo)柜供電;ESP8266-12FWIFI模塊實(shí)現(xiàn)數(shù)據(jù)在單片機(jī)和手機(jī)用戶APP之間的傳輸;3個(gè)距離傳感器用來檢測(cè)鼠標(biāo)是否放置好,沒有放置鼠標(biāo)的距離是柜體格子的高度;4個(gè)步進(jìn)電機(jī)分別控制3個(gè)擋板的上下移動(dòng)和柜門向外的短距離移動(dòng),可移動(dòng)擋板用來擠壓鼠標(biāo)線控制每次只取一個(gè)鼠標(biāo);兩個(gè)舵機(jī)控制弧形門的左開和右開;前三組綠色/紅色發(fā)光二極管分別表示鼠標(biāo)放置完好和鼠標(biāo)被取出;第四組和第5個(gè)發(fā)光二極管用來表示開門狀態(tài)及開門方向,綠色表示門關(guān)閉。
ESP8266-12F的flash閃存比較大,另外ESP8266-12F支持機(jī)智云的MCU運(yùn)行。與增加的功能相適應(yīng),12F增加了很多I/O口,一般是16個(gè)。但是12F有一個(gè)缺點(diǎn)就是需要自己搭建一些簡單的外圍電路。此處電路接線如圖3所示。
圖3 ESP8266-12F電路接線示意圖
本設(shè)計(jì)采用GP2D12紅外線測(cè)距傳感器。該紅外傳感器連接使用簡單,可以精確測(cè)量1米以內(nèi)的距離;數(shù)據(jù)測(cè)量值穩(wěn)定,測(cè)量結(jié)果波動(dòng)??;數(shù)據(jù)傳輸穩(wěn)定,程序讀取簡單不會(huì)出現(xiàn)卡死現(xiàn)象,錯(cuò)誤信號(hào)較少[10]。
該模塊電壓輸出與距離成反比,而且是非線性關(guān)系。通過查閱文檔資料可知10 cm距離時(shí)有2.55 V輸出,80 cm輸出時(shí)有0.42 V輸出。可以根據(jù)實(shí)際的測(cè)量值和輸出值擬合出電壓值與距離值之間的數(shù)學(xué)關(guān)系式,但是這個(gè)關(guān)系式里的距離值是參考距離值,而實(shí)際距離值為參考距離值與0.42 cm的差值。
Arduino單片機(jī)的模擬量采樣函數(shù)為analogRead(),采樣得而數(shù)據(jù)范圍為0到1 023,相對(duì)應(yīng)的電壓范圍是0 V至5 V,因此每格數(shù)據(jù)代表0.004 9 V。而讀取的采樣有效數(shù)據(jù)是86~520,電壓為0.42~2.548 V,根據(jù)以上數(shù)據(jù)可以得到最終的實(shí)際距離與采樣數(shù)據(jù)之間的關(guān)系表達(dá)式為:
LR=2 547.8/((float)S*0.49-10.41)-0.42
其中:LR為實(shí)際距離,S是采樣數(shù)據(jù)。
將GP2D12紅外傳感器的VCC、GND、OUTPUT分別接至Arduino控制板上+5 V、GND、模擬端口A0。最好在VCC與GND之間并聯(lián)100 μ電解電容,以穩(wěn)定GP2D12供電電壓,從而使輸出電壓更加穩(wěn)定。硬件連接如圖4所示。
圖4 GP2D12紅外傳感器實(shí)物連接示意圖
步進(jìn)電機(jī)使用反饋來確定軸的位置,我們可以非常精確地控制該位置。因此本設(shè)計(jì)用4個(gè)步進(jìn)電機(jī)分別控制3個(gè)擋板的上下移動(dòng)和柜門的小距離移動(dòng)。步進(jìn)電機(jī)經(jīng)常用于控制物體的位置、旋轉(zhuǎn)物體等。步進(jìn)電機(jī)體積小,并且由于它們內(nèi)置電路控制其自身的運(yùn)動(dòng),因此可以直接連接到Arduino開發(fā)板。
本設(shè)計(jì)將電源和地引腳直接連接到Arduino開發(fā)板的5 V和GND引腳。 PWM輸入連接到Arduino的一個(gè)數(shù)字輸出引腳。
舵機(jī)是一種基于角度的位置伺服驅(qū)動(dòng)器,主要由外殼、控制電路板、小型直流電機(jī)、變速齒輪組與可調(diào)電位器組成。其工作原理是由外接的單片機(jī)發(fā)出控制信號(hào)給舵機(jī),其內(nèi)部自有一個(gè)基準(zhǔn)電路,產(chǎn)生周期為20 ms,寬度為1.5 ms的基準(zhǔn)信號(hào),將獲得的直流偏置電壓與可調(diào)電位器的電壓進(jìn)行比較,獲得電壓差值輸出。經(jīng)由電路板上的集成電路判斷轉(zhuǎn)動(dòng)方向,再驅(qū)動(dòng)小型直流電機(jī)開始轉(zhuǎn)動(dòng),透過變速齒輪組將動(dòng)力傳至擺臂,同時(shí)由位置檢測(cè)器送回信號(hào),判斷是否已經(jīng)到達(dá)指定位置。舵機(jī)廣泛應(yīng)用于需要角度不斷變化并可以保持的控制系統(tǒng)。當(dāng)電機(jī)轉(zhuǎn)速一定時(shí),可以通過級(jí)聯(lián)減速齒輪帶動(dòng)電位器實(shí)現(xiàn)旋轉(zhuǎn),使得電壓差為0 V,電機(jī)停止轉(zhuǎn)動(dòng)。舵機(jī)旋轉(zhuǎn)角度的范圍為0~180°。
用Arduino單片機(jī)實(shí)現(xiàn)控制舵機(jī)的方法有兩種:一種是利用Arduino 單片機(jī)的普通數(shù)字傳感器接口產(chǎn)生不同占空比的方波,模擬產(chǎn)生PWM信號(hào)從而實(shí)現(xiàn)舵機(jī)定位;另一種是直接利用Arduino單片機(jī) 自帶的函數(shù)Servo()來進(jìn)行舵機(jī)的控制,這種控制方法優(yōu)勢(shì)在于程序編寫,其不足為因Arduino自帶函數(shù)只能利用數(shù)字9、10接口,所以其只能控制兩路舵機(jī),另外,Arduino單片機(jī)的驅(qū)動(dòng)能力有限,所以當(dāng)需要控制一個(gè)以上的舵機(jī)時(shí)則需要外接電源。本設(shè)計(jì)采用第2個(gè)方式來實(shí)現(xiàn)舵機(jī)的控制。
這里主要指下位機(jī)軟件設(shè)計(jì)。下位機(jī)軟件系統(tǒng)主要包括系統(tǒng)初始化、鼠標(biāo)取放控制、開門關(guān)門控制、鼠標(biāo)使用狀態(tài)和門狀態(tài)控制、無線傳輸?shù)饶K,軟件設(shè)計(jì)流程圖如圖5所示。
Inti; //模擬量讀取
intval; //模擬量轉(zhuǎn)換實(shí)際距離值存儲(chǔ)
intanalog=0; //模擬量接線引腳號(hào)
voidsetup()
{
pinMode(redpin,OUTPUT);
}
voidloop()
{
i=analogRead(analog);
val=(6762/(i-9))-4;
}
因?yàn)檫壿嬏幚韼缀跞谠贫诉M(jìn)行,所以單片機(jī)與WIFI模塊之間的通信的信息比較單一簡單,為了加強(qiáng)穩(wěn)定性,不采用串口通信和I2C,而是采用了TTL通信。通過單片機(jī)處理后,發(fā)送給WIFI模塊的僅有所有模塊是否就緒信息。WIFI模塊在接收到服務(wù)器開門指令后,也采用TTL方式傳遞給單片機(jī)。這種方法穩(wěn)定性高,不會(huì)有串口通信偶爾字節(jié)丟失的情況。
WIFI模塊與服務(wù)器采用單向訪問,WIFI模塊通過密鑰訪問到服務(wù)器的指定位置。服務(wù)器對(duì)WIFI模塊不進(jìn)行任何直接控制,這樣降低了服務(wù)器的負(fù)擔(dān),也保證了一定的安全性。
WIFI模塊在訪問數(shù)據(jù)庫對(duì)門的控制符時(shí),無論是否接到開門信號(hào),都主動(dòng)讓門的控制符回歸關(guān)門狀態(tài),類似于LED燈下拉電阻的原理,大大增加的程序與通信的穩(wěn)定性。
#define vcc 2
#define pls 3
#define dir 4
#define ena 5
void setup() {
Serial.begin(9600);
pinMode(vcc,OUTPUT);
pinMode(pls,OUTPUT);
pinMode(dir,OUTPUT);
pinMode(ena,OUTPUT);
}
void loop() {
digitalWrite(vcc,HIGH);
digitalWrite(pls,HIGH);
digitalWrite(dir,HIGH);
digitalWrite(ena,HIGH);
tone(pls,200);
}
最開始幾個(gè)define是定義引腳,VCC是給驅(qū)動(dòng)器提供電源引腳,pls是給步進(jìn)電機(jī)提供脈沖引腳,dir決定電機(jī)正轉(zhuǎn)還是反轉(zhuǎn),ena相當(dāng)于步進(jìn)電機(jī)驅(qū)動(dòng)器的開關(guān),控制電路給ena引腳高電壓那么就相當(dāng)于讓驅(qū)動(dòng)器能夠接受控制信號(hào),如果ena給的是低電壓,那么不論你怎么給脈沖信號(hào)電機(jī)都不會(huì)動(dòng)。
圖5 軟件設(shè)計(jì)流程圖
以App Inventor 2.0為開發(fā)平臺(tái)。它是一款可視化圖形化的APP開發(fā)環(huán)境,用戶能夠以拖曳積木的形式開發(fā)Android平臺(tái)的應(yīng)用程序[11-12]。App Inventor的開發(fā)過程簡單、易操作;開發(fā)人員不需要太多的編程知識(shí)就能開發(fā)創(chuàng)造自己的應(yīng)用程序。本文編程界面如圖6所示。
圖6 App Inventor 2.0開發(fā)環(huán)境示意圖
智能共享鼠標(biāo)主要界面有6個(gè),分別為注冊(cè)界面、登陸界面、操作界面、掃描使用后界面、歸還界面及服務(wù)器管理界面,分別如圖7所示。
圖7 APP主要界面示意圖
設(shè)計(jì)使用個(gè)人電腦進(jìn)行內(nèi)網(wǎng)穿透后作為服務(wù)器使用,使用Wampserver集成環(huán)境,對(duì)Apache+PHP+Mysql進(jìn)行調(diào)控。
PHP程序如圖8所示。對(duì)從APP端發(fā)送的信息進(jìn)行處理,并且與數(shù)據(jù)庫進(jìn)行溝通,最終并生成log_file.txt來記錄用戶使用情況,如圖9所示。
圖8 PHP程序設(shè)計(jì)示意圖
圖9 用戶使用記錄示意圖
數(shù)據(jù)庫中設(shè)有用戶表和鼠標(biāo)柜表兩種。用戶表用來保存并記錄用戶信息與狀態(tài);鼠標(biāo)柜表用以登記鼠標(biāo)柜與其使用狀態(tài)。
用戶表如圖10所示,記錄了id、用戶名、密碼、余額、zhan;記錄1、0,用來確定是否有租用未完成,之后三項(xiàng)分別是租用開始時(shí)間、結(jié)束時(shí)間,還有所租借的機(jī)器號(hào),后三項(xiàng)寫入日志后自動(dòng)清除。
圖10 用戶表示意圖
鼠標(biāo)柜表如圖11所示,記錄了鼠標(biāo)柜id、機(jī)器名、使用狀態(tài)、門口開關(guān)狀態(tài)、開門指令。
圖11 鼠標(biāo)表示意圖
鼠標(biāo)柜每層設(shè)計(jì)高度為15 cm,對(duì)本設(shè)計(jì)所用的距離傳感器進(jìn)行距離測(cè)試,測(cè)試結(jié)果如圖12所示。
圖12 距離傳感器距離測(cè)試
平均相對(duì)誤差為0.235 cm,而鼠標(biāo)的高度大約在3~4.02 cm之間,測(cè)量平均誤差與鼠標(biāo)高度的絕對(duì)誤差為7.8%~5.8%之間,這個(gè)誤差不影響判斷鼠標(biāo)是否存在。
開門測(cè)試主要是對(duì)舵機(jī)控制的測(cè)試。舵機(jī)是用歐鵬公司的舵機(jī)。我們應(yīng)用該舵機(jī)連續(xù)參加四屆的機(jī)器人競賽,并每年都在運(yùn)輸機(jī)器人對(duì)抗賽和超市機(jī)器人挑戰(zhàn)賽中獲獎(jiǎng)[13],該舵機(jī)性能優(yōu)良,運(yùn)行穩(wěn)定。
設(shè)計(jì)了一款基于Arduino和App Inventor的智能共享鼠標(biāo)柜。該鼠標(biāo)柜用來存放3個(gè)不同型號(hào)的鼠標(biāo),以供不同需求的人進(jìn)行選擇。硬件部分通過Arduino控制相應(yīng)外圍模塊實(shí)現(xiàn);手機(jī)用戶APP的利用App Inventor2完成,用戶可以通過APP掃碼租用鼠標(biāo)并通過服務(wù)器端查看用戶租用和鼠標(biāo)使用情況。該鼠標(biāo)柜用于有線鼠標(biāo),對(duì)于無線鼠標(biāo)來說,該鼠標(biāo)柜無法實(shí)現(xiàn)每次只能取用一個(gè)的功能。下一步將著重解決能夠?qū)崿F(xiàn)無線鼠標(biāo)租用的智能鼠標(biāo)柜設(shè)計(jì)。