段玉風(fēng)
(運(yùn)城廣播電視大學(xué),山西 運(yùn)城 044099)
隨著計(jì)算機(jī)網(wǎng)絡(luò)通信技術(shù)、微型傳感器技術(shù)以及嵌入式技術(shù)的迅速發(fā)展,基于嵌入式的物聯(lián)網(wǎng)應(yīng)用也得到了快速發(fā)展,近年來(lái)從歐洲傳入的Raspberry Pi開發(fā)平臺(tái)以其小巧的體積、豐富多樣的傳感器接口與強(qiáng)大的編程支持功能受到了國(guó)內(nèi)物聯(lián)網(wǎng)行業(yè)的廣泛關(guān)注[1]。在各類家庭級(jí)物聯(lián)網(wǎng)應(yīng)用中,智能安防類應(yīng)用是當(dāng)前非常熱門的應(yīng)用之一。此類應(yīng)用的主要功能是在家庭成員上班、外出旅游時(shí),對(duì)空置的房屋內(nèi)的異常情況(如火災(zāi)、大面積滲漏水、非法闖入等)進(jìn)行實(shí)時(shí)監(jiān)測(cè)與報(bào)警信息提示,以便房屋主人及時(shí)返回進(jìn)行處置或報(bào)警。而Raspberry Pi開發(fā)平臺(tái)以其具備的高性價(jià)比優(yōu)勢(shì)為實(shí)現(xiàn)開發(fā)體積小、價(jià)格低、性能穩(wěn)定的小型智能安防應(yīng)用的研發(fā)開辟了一條新的途徑。
Raspberry Pi是注冊(cè)于英國(guó)的慈善組織“Raspberry Pi 基金會(huì)”于2012發(fā)布的微型嵌入式計(jì)算機(jī)硬件平臺(tái),該基金會(huì)以“提升學(xué)校計(jì)算機(jī)科學(xué)及相關(guān)學(xué)科的教育,讓計(jì)算機(jī)學(xué)習(xí)變得更加有趣”為宗旨[2]。Raspberry Pi平臺(tái)采用了ARM11架構(gòu)的處理器,并使用簡(jiǎn)化的Linux操作系統(tǒng),基礎(chǔ)平臺(tái)的硬件尺寸僅有85.60 mm x 56 mm(與普通IC卡大小相當(dāng)),被稱為“全球最小的臺(tái)式機(jī)”。該平臺(tái)在提供了極低使用成本(新版本Raspberry Pi3發(fā)售價(jià)格僅為35美元)的同時(shí),還配置了功能強(qiáng)大的開發(fā)工具與多種類型的接口,支持SD卡、以太網(wǎng)、USB、視頻音頻接口等,在目前各類嵌入式開發(fā)平臺(tái)中擁有最高的性價(jià)比,同時(shí)Raspberry Pi小巧的體積和強(qiáng)大的編程功能使其特別適合用于各類物聯(lián)網(wǎng)應(yīng)用的開發(fā)。在國(guó)內(nèi)物聯(lián)網(wǎng)開發(fā)與學(xué)校計(jì)算機(jī)教育領(lǐng)域中被廣泛采用,自2012年發(fā)布以來(lái),全球銷量已突破1250萬(wàn)臺(tái)[3]。
Raspberry Pi的最新版本為3B,配置博通2837處理器(主頻700 MHz)與512M內(nèi)存,同時(shí)提供40個(gè)GPIO接口,支持wifi 和藍(lán)牙連接與各類多媒體接口等,并且在Linux系統(tǒng)中部署了Python開發(fā)環(huán)境[4]。Python語(yǔ)言作為Raspberry Pi平臺(tái)的標(biāo)準(zhǔn)編程開發(fā)語(yǔ)言,包含了一組功能完善的標(biāo)準(zhǔn)庫(kù),語(yǔ)法簡(jiǎn)捷、清晰,且具有強(qiáng)大的內(nèi)存回收功能,非常適用于系統(tǒng)進(jìn)程管理和網(wǎng)絡(luò)程序開發(fā),通過Raspberry Pi平臺(tái)提供的各類I/O 端口,Python語(yǔ)言能夠非常方便地實(shí)現(xiàn)對(duì)各類電子器件和傳感器的控制與外部環(huán)境數(shù)據(jù)采集。
在本文所設(shè)計(jì)的移動(dòng)偵測(cè)系統(tǒng)中,各傳感器、攝像及通信等多個(gè)模塊都通過Raspberry Pi平臺(tái)的GPIO接口進(jìn)行連接,并完成各項(xiàng)功能的有效整合,以實(shí)現(xiàn)對(duì)移動(dòng)物體(非法侵入者)的檢測(cè)、拍照與報(bào)警功能,如圖1所示。最終設(shè)計(jì)完成一套適用于家庭用戶的低成本、低能耗、高效率的小型物聯(lián)網(wǎng)智能安防系統(tǒng)解決方案。在系統(tǒng)監(jiān)控范圍內(nèi)發(fā)生非法闖入行為時(shí),處理器會(huì)立即獲取到各傳感器所檢測(cè)到的異常數(shù)據(jù)變化。處理器將立即啟動(dòng)攝像頭和揚(yáng)聲器模塊,對(duì)入侵者進(jìn)行拍照和語(yǔ)音警告,同時(shí)調(diào)用通信模塊將報(bào)警提示信息以短消息的方式發(fā)送到用戶的手機(jī)上。
圖1 系統(tǒng)整體結(jié)構(gòu)
系統(tǒng)工作原理如下:系統(tǒng)分別基于兩種傳感器(超聲波傳感器與紅外傳感器)來(lái)完成對(duì)室外和室內(nèi)兩類環(huán)境下的移動(dòng)物體偵測(cè)功能,對(duì)于空曠的室外院落中的移動(dòng)物體由作用范圍較大(10~20 m)的超聲波傳感器完成,而對(duì)于面積相對(duì)狹窄的室內(nèi)空間中的移動(dòng)物體檢測(cè)則由紅外傳感器(范圍5~6 m)負(fù)責(zé)實(shí)現(xiàn)。當(dāng)檢測(cè)到移動(dòng)物體時(shí),傳感器向RasPberry Pi電路板上的處理器發(fā)出信號(hào),由處理器負(fù)責(zé)開啟攝像頭拍照,并將照片存儲(chǔ)至SD卡中,在完成拍攝操作后,處理器分別調(diào)用語(yǔ)音警告模塊與通信模塊,在向侵入者發(fā)出警告的同時(shí),將預(yù)先編制好的報(bào)警短信發(fā)送至用戶手機(jī),由用戶決定如何進(jìn)行處置。
由于RasPberry Pi平臺(tái)具有配置靈活、模塊安裝/卸載簡(jiǎn)便的特點(diǎn),對(duì)于沒有室外院落的樓層住宅用戶,則可以通過卸載超聲波傳感器模塊以進(jìn)一步降低系統(tǒng)使用成本。
系統(tǒng)為實(shí)現(xiàn)室外移動(dòng)偵測(cè)功能所選用的超聲波傳感器模塊為HC-SR04,該傳感器包含四個(gè)引腳:VCC(5v電源輸入)、Trig(控制超聲波發(fā)送)、Echo(超聲波反射檢測(cè))和GND(接地)。HC-SR04與RasPberry Pi主板的線路連接方式如表1所示。
表1 HC-SR04線路連接方式
在系統(tǒng)初始化過程中。首先將Trig引腳設(shè)置為低電平,檢測(cè)過程開始后,向Trig輸入一個(gè)持續(xù)時(shí)長(zhǎng)為10us的高電平以啟動(dòng)超聲波發(fā)射器向正前方發(fā)射信號(hào),當(dāng)接收到返回的超聲波信號(hào)時(shí),Echo引腳會(huì)向RasPberry Pi主板輸出一個(gè)高電平信號(hào),該信號(hào)持續(xù)的時(shí)間就是超聲波從發(fā)射到返回的時(shí)間。傳感器在院落中的安裝位置如圖2所示。
圖2 超聲波傳感器在院落中的安裝位置
當(dāng)移動(dòng)物體試圖進(jìn)入室內(nèi)時(shí),必然對(duì)HC-SR04傳感器所發(fā)出超聲波進(jìn)行反射,從而導(dǎo)致原有的聲波返回時(shí)間發(fā)生變化,系統(tǒng)檢測(cè)到ECHO引腳輸出的電平持續(xù)時(shí)間縮短后,則立即啟動(dòng)相應(yīng)的報(bào)警功能。此外,當(dāng)Echo引腳長(zhǎng)時(shí)間(3000us)未返回高電平信號(hào)時(shí),則判定HC-SR04傳感器已停止工作(可能被破壞),系統(tǒng)也將立即向用戶手機(jī)發(fā)送故障提示短信。
系統(tǒng)中為實(shí)現(xiàn)室內(nèi)移動(dòng)偵測(cè)功能所選用的人體紅外傳感器模塊為HC-SR501,該傳感器包含三個(gè)引腳:VCC(5v電源輸入)、GND(接地)和Out(信號(hào)輸出)。HC-SR501與RasPberry Pi主板的線路連接方式如表2所示。
表2 HC-SR501線路連接方式
當(dāng)非法入侵者通過陽(yáng)臺(tái)、窗戶等通道進(jìn)入室內(nèi)時(shí),由于人類作為溫血?jiǎng)游锼邆涞暮銣靥卣?攝氏36~37°),人體會(huì)持續(xù)發(fā)散出波長(zhǎng)為10 um的紅外線信號(hào)。人體紅外傳感器的原理是通過熱釋電元件來(lái)探測(cè)人體紅外信號(hào),熱釋電元件在接收到該波長(zhǎng)的紅外信號(hào)后,會(huì)釋放出電荷,電荷在經(jīng)過放大與處理后即可作為輸出電平使用[5]。HC-SR501可以提供110~120°錐角,半徑6m的探測(cè)范圍,基本可以滿足一般家庭的室內(nèi)安防需求。該傳感器在室內(nèi)的安裝位置如圖3所示。
圖3 紅外傳感器在室內(nèi)的安裝位置
HC-SR501當(dāng)檢測(cè)到人體在探測(cè)范圍內(nèi)時(shí),會(huì)從Out引腳輸出一個(gè)高電平,直到人體紅外信號(hào)從探測(cè)范圍內(nèi)消失后才恢復(fù)為低電平,系統(tǒng)即可根據(jù)此引腳的高電平信號(hào)來(lái)判定是否出現(xiàn)了非法入侵行為,并啟動(dòng)相應(yīng)的報(bào)警功能。需要注意的是,HC-SR501在安裝過程中不應(yīng)直對(duì)窗口,并且需要拉上窗簾以避免窗外的熱氣流和經(jīng)過的人員所引起的數(shù)據(jù)誤報(bào)。
關(guān)鍵代碼:
def USloopcheck()://超聲波檢測(cè)函數(shù)
time.sleep(0.05)//將循環(huán)探測(cè)的間隔時(shí)間設(shè)置為0.05s
GPIO.output(38,GPIO.HIGH)//向38號(hào)引腳發(fā)送高電平,啟動(dòng)超聲波發(fā)射操作
GPIO.output(38,GPIO.LOW)//向38號(hào)引腳發(fā)送低電平,結(jié)束本次超聲波發(fā)射操作
while not GPIO.input(40)://檢測(cè)40號(hào)引腳是否返回高電平信號(hào)
pass
t1=time.time()//記錄高電平信號(hào)的起始時(shí)間
while GPIO.input(40)://檢測(cè)40號(hào)引腳返回的高電平信號(hào)是否結(jié)束
pass
t2=time.time()//記錄高電平信號(hào)的結(jié)束時(shí)間
r-new=(t2-t1)*3.4/2//將時(shí)間換算成距離,單位為厘米
r-old=range-old()//獲取上一次的檢測(cè)距離
range-set(r-new)//記錄本次的檢測(cè)距離
if(r-new-r-old)>5://誤差超過5cm,調(diào)用報(bào)警功能函數(shù)
alarm()
…
def IFRloopcheck()://紅外信號(hào)檢測(cè)函數(shù)
time.sleep(8)//將發(fā)現(xiàn)目標(biāo)后,下一次探測(cè)的間隔時(shí)間設(shè)置為8s
while GPIO.input(12)://檢測(cè)12號(hào)引腳返回的高電平信號(hào)
pass
alarm()//調(diào)用報(bào)警功能函數(shù)
在報(bào)警短信的功能的實(shí)現(xiàn)上,系統(tǒng)使用了SIM900A通信模塊。該模塊通過USB接口與Raspberry Pi主板進(jìn)行連接,用于發(fā)送短信的SIM卡可以直接安裝在SIM900A上的卡槽中。在設(shè)備連接完成后,需要在Raspberry Pi上的Linux系統(tǒng)中安裝gammu工具用于完成短信發(fā)送的相關(guān)配置[6]。gammu-config的配置內(nèi)容如表3所示。
表3 gammu-config工具配置內(nèi)容
保存配置文件并重新啟動(dòng)Raspberry Pi主板后,可以運(yùn)行命令 sudo gammu--identify,如果能夠顯示設(shè)備和SMS卡的基本信息,則表示配置正確。系統(tǒng)可以通過Python編程來(lái)完成短信發(fā)送的功能。
關(guān)鍵代碼:
def Alertsend()://報(bào)警信息發(fā)送函數(shù)
import gammu
import sys
sim=gammu.StateMachine()//創(chuàng)建gammu對(duì)象
sim.ReadConfig()//讀取gammu配置文件內(nèi)容
sim.Init()//初始化操作
netinfo=sim.GetNetworkInfo()//獲取網(wǎng)絡(luò)狀態(tài)信息
tel=raw-input('接收手機(jī)號(hào)碼: ').decode('utf-8')
msgs=raw-input('報(bào)警短信內(nèi)容: ').decode('utf-8')
msgs={
'Text': msgs,
'SMSC': {'Location': 1},
'Number': tel,
'Coding': 'Unicode-No-Compression',//設(shè)置支持中文短信的編碼格式
}
sim.SendSMS(msgs)//發(fā)送短信
在圖像拍攝的功能的實(shí)現(xiàn)上,系統(tǒng)使用了OV5647攝像頭,通過USB接口連接在主板上并基于Python的picamera庫(kù)進(jìn)行調(diào)用[7]。在Raspberry Pi上使用攝像頭拍攝功能,需要在硬件安裝完成后,修改系統(tǒng)配置參數(shù)sudo raspi-config(設(shè)置為sudo raspi-config)來(lái)啟動(dòng)攝像頭模塊后,才能夠通過編程實(shí)現(xiàn)拍攝與保存圖片的功能。
關(guān)鍵代碼:
def Pictured()://照片拍攝函數(shù)
import time
import picamera
import picamera.array
picname=time.strftime("%Y%m%d%X",time.localtime())+'.jpg'//設(shè)置圖片文件名稱
cmr=picamera.PiCamera()//初始化
cmr.resolution=(1024, 768)//設(shè)置圖片的分辨率
cmr.capture(picname, 'rgb')//創(chuàng)建圖像文件,顏色模式為rgb
print(stream.array.shape)
OV5647模塊可提供500萬(wàn)像素的分辨率與160度的拍攝范圍,并具備夜視功能,基本可以滿足普通家庭用戶的室內(nèi)安防需求。
對(duì)非法侵入者的中文語(yǔ)音警告功能的實(shí)現(xiàn)采用了中文語(yǔ)音引擎EKHO,該引擎是一種免費(fèi)的開源中文語(yǔ)言引擎,支持粵語(yǔ)、普通話、藏語(yǔ)等多種中文發(fā)音方式。在Raspberry pi的Linux系統(tǒng)中安裝EKHO后即可使用Python編寫中文發(fā)音程序[8]。
關(guān)鍵代碼:
def Speech()://中文語(yǔ)音提示函數(shù)
sys.setdefaultencoding('utf8')//字符集設(shè)置為支持中文的utf8
os.system('sudo amixer cset numid=3 1')//將聲音輸出設(shè)置為3.5音頻口,注意3與1之間為空格
s='echo'.'中文提示內(nèi)容'.'>/home/pi/Desktop/warning.txt'
os.system(s)//將文字寫入txt文件中
os.system('ekho-f/home/pi/Desktop/warning.txt-o/home/pi/Desktop/warning.wav')//根據(jù) txt文件中的中文字符內(nèi)容生成wav格式的聲音
os.system('aplay/home/pi/Desktop/warning.wav')//播放聲音
隨著物聯(lián)網(wǎng)技術(shù)的不斷成熟與完善,各種基于物聯(lián)網(wǎng)技術(shù)的智能家居應(yīng)用受到了國(guó)內(nèi)用戶的廣泛認(rèn)可,Raspberry pi作為一種從國(guó)外傳入的新型嵌入式開發(fā)平臺(tái),以其低能耗、低成本、高擴(kuò)展性的優(yōu)勢(shì),在多個(gè)行業(yè)的物聯(lián)網(wǎng)應(yīng)用系統(tǒng)開發(fā)中都顯示出了巨大的發(fā)展?jié)摿?。同時(shí), Raspberry pi體積輕便、開發(fā)環(huán)境簡(jiǎn)單易于掌握的特點(diǎn)也非常適用于在計(jì)算機(jī)教育領(lǐng)域進(jìn)行推廣與應(yīng)用。
本文基于Raspberry pi平臺(tái)設(shè)計(jì)的家用級(jí)智能安防系統(tǒng)框架,通過將多種類型的傳感器及功能模塊的有機(jī)整合與優(yōu)化,實(shí)現(xiàn)了移動(dòng)物體的探測(cè)、拍照、語(yǔ)言報(bào)警及短信提示等功能,以其低廉的成本與良好的可靠性有效滿足了普通家庭用戶的安防監(jiān)控需求。此外,Raspberry pi強(qiáng)大的編程開發(fā)功能,還為系統(tǒng)提供了廣泛的升級(jí)擴(kuò)展空間,未來(lái)將繼續(xù)研究系統(tǒng)與微信平臺(tái)的對(duì)接,以提供更加豐富、完善的功能與更好的人機(jī)交互體驗(yàn)。