劉必廣 王軍祥
福建船政交通職業(yè)學(xué)院 福建 福州 350007
在社區(qū)、廠(chǎng)區(qū)、社會(huì)公共空間可以使用多功能桿提供信息發(fā)布、環(huán)境數(shù)據(jù)收集、安全監(jiān)控服務(wù)管理,為提高管理水平提供必要的支撐。本文基于國(guó)產(chǎn)處理器龍芯2k1000設(shè)計(jì)一個(gè)具備氣象服務(wù)、環(huán)境監(jiān)測(cè)、信息發(fā)布和安全監(jiān)控功能的多功能桿。
智慧多功能桿系統(tǒng)由主控系統(tǒng)和終端設(shè)備組成。主控系統(tǒng)使用龍芯2k1000開(kāi)發(fā)板。各個(gè)終端設(shè)備實(shí)現(xiàn)多功能桿的數(shù)據(jù)采集和應(yīng)用控制。終端設(shè)備的功能有:遠(yuǎn)程路燈控制、智能氣象監(jiān)測(cè)、巡檢人員人工操作、安環(huán)監(jiān)控等。系統(tǒng)由終端設(shè)備采集數(shù)據(jù)發(fā)送到主控系統(tǒng)進(jìn)行處理和判斷、主控系統(tǒng)通過(guò)終端設(shè)備實(shí)現(xiàn)控制、監(jiān)控和信息發(fā)布功能。
智慧多功能桿的主控系統(tǒng)使用龍芯2k1000[1]開(kāi)發(fā)板,配置有龍芯2k1000處理器常用的GPIO接口、RJ45網(wǎng)絡(luò)接口、USB接口、HDMI接口。GPIO接口除了能夠進(jìn)行通用的輸入輸出之外,還可以通過(guò)GPIO接口復(fù)用功能實(shí)現(xiàn)UART、I2C、SPI、CAN、CAN等接口應(yīng)用。智慧多功能桿有多種終端設(shè)備,終端設(shè)備的接口也不盡相同,根據(jù)終端設(shè)備不同連接方式、物理特性、設(shè)計(jì)好和龍芯2k1000開(kāi)發(fā)板的連接方式,能夠充分發(fā)揮系統(tǒng)的作用,提高系統(tǒng)工作效率。系統(tǒng)硬件模塊如圖1所示。
圖1 硬件模塊圖
智慧氣象站[2]包括溫濕度、光強(qiáng)、粉塵、噪聲,氣壓等氣象數(shù)據(jù)監(jiān)測(cè)和處理。各種氣象監(jiān)測(cè)以自己的方式連接到主控系統(tǒng),接收主控系統(tǒng)指令,執(zhí)行相應(yīng)氣象數(shù)據(jù)監(jiān)測(cè)工作并將監(jiān)測(cè)到的氣象數(shù)據(jù)發(fā)送給主控設(shè)備進(jìn)行處理。
2.1.1 溫濕度檢測(cè)設(shè)計(jì)。系統(tǒng)使用DHT22[3]作為溫濕度監(jiān)測(cè)設(shè)備,監(jiān)測(cè)當(dāng)前環(huán)境溫濕度值。DHT22只有一根數(shù)據(jù)線(xiàn),用于接收命令和輸出數(shù)據(jù)。由于DHT22為單總線(xiàn)數(shù)據(jù)傳輸,在和DHT22指令/數(shù)據(jù)交互時(shí),龍芯2k1000開(kāi)發(fā)板需要使用漏極開(kāi)路的GPIO口連接到DHT22,并為DHT22數(shù)據(jù)線(xiàn)上拉一個(gè)5.1kΩ電阻,確保沒(méi)有收到指令的情況下為高電平。
DHT22的驅(qū)動(dòng)程序主要有2個(gè)模塊:初始化模塊和數(shù)據(jù)讀取模塊。
初始化模塊負(fù)責(zé)定義DHT22的數(shù)據(jù)引腳、數(shù)據(jù)緩沖區(qū)。數(shù)據(jù)讀取模塊負(fù)責(zé)讀取溫濕度數(shù)據(jù)并分別轉(zhuǎn)換為溫度值和濕度值。當(dāng)數(shù)據(jù)讀取模塊讀取溫濕度數(shù)據(jù)時(shí),按照DHT22的工作時(shí)序讀取溫濕度值:先發(fā)送800μs低電平作為DH22啟動(dòng)信號(hào),然后釋放數(shù)據(jù)線(xiàn),通過(guò)數(shù)據(jù)線(xiàn)接收DHT22發(fā)送的溫濕度數(shù)據(jù)。當(dāng)收到DHT22的數(shù)據(jù)起始信號(hào)(80μs低電平后80μs高電平)后,接收40位數(shù)據(jù),每一位數(shù)據(jù)都由一段低電平加一段高電平組成。1的時(shí)序?yàn)?0μs低電平后70μs高電平,0的時(shí)序?yàn)?0μs低電平后25μs高電平。程序設(shè)計(jì)時(shí)可以在低電平結(jié)束后的45μs采集電平,電平為0,高電平為1。讀取到的40位溫濕度數(shù)據(jù)高位在前低位在后。接收到的40位數(shù)據(jù)從高位到低位分為5個(gè)字節(jié),其中第4、3字節(jié)分別為濕度數(shù)據(jù)的高位和地位,第2、1字節(jié)分別為溫度數(shù)據(jù)的高位和地位。收到溫濕度數(shù)據(jù)后要先校驗(yàn),校驗(yàn)的方法是若溫濕度數(shù)據(jù)4~1字節(jié)和等于0字節(jié),數(shù)據(jù)無(wú)誤,校驗(yàn)通過(guò),否則數(shù)據(jù)不可用。校驗(yàn)通過(guò)后計(jì)算濕度值為4~3字節(jié)數(shù)據(jù)值除以10。2~1字節(jié)的最高位為溫度符號(hào),1位負(fù)數(shù)、0位負(fù)數(shù),其余位的值除以10為溫度絕對(duì)值。
2.1.2 粉塵檢測(cè)設(shè)計(jì)。系統(tǒng)使用GP2Y1014AU粉塵傳感器[4]檢測(cè)環(huán)境粉塵值。GP2Y1014AU的LED引腳連接龍芯處理器的一個(gè)GPIO引腳,當(dāng)LED為高電平,GP2Y1014AU的發(fā)光二極管亮,280μs后,GP2Y1014AU的引腳out輸出粉塵檢測(cè)的模擬值,out引腳和其反相信號(hào)分別接A/D轉(zhuǎn)換器AD7810的VIN+和VIN-,經(jīng)A/D轉(zhuǎn)換得到粉塵檢測(cè)值Vo。
GP2Y1014AU的驅(qū)動(dòng)程序的初始化程序完成GP2Y1014AU和AD7810引腳設(shè)置。數(shù)據(jù)讀取模塊要分3步執(zhí)行,第一步,通過(guò)設(shè)置GP2Y1014AU的LED 引腳為高電平,啟動(dòng)GP2Y1014AU采樣;第二步,0.28ms后,GP2Y1014AU采樣完成,out引腳輸出檢測(cè)結(jié)果,設(shè)置AD7810的CONVST引腳1μs的高電平,啟動(dòng)AD7810進(jìn)行A/D轉(zhuǎn)換。2μs后后A/D轉(zhuǎn)換完成,向AD7810的SCLK引腳連續(xù)輸出10個(gè)脈沖,與此同時(shí)從AD7810的Dout引腳讀取10位A/D轉(zhuǎn)換結(jié)果Vo。然后計(jì)算粉塵濃度檢測(cè)值:當(dāng)Vo<0.6,粉塵濃度粉塵濃度density=0;當(dāng)0.6<=Vo<=3.6,density=(Vo-0.6)/5;當(dāng)Vo>3.6, density=0.6。
2.1.3 光強(qiáng)檢測(cè)設(shè)計(jì)。系統(tǒng)使用TSL2561[5]進(jìn)行光強(qiáng)監(jiān)測(cè)。TSL2561為I2C協(xié)議訪(fǎng)問(wèn)。TSL2561引腳連接如表。DDR SEL 器件訪(fǎng)問(wèn)地址選擇,本系統(tǒng)將DDR SEL接地,其I2C地址為0X29,通過(guò)SCLSDA按照I2C協(xié)議讀寫(xiě)TSL2561數(shù)據(jù)。當(dāng)光強(qiáng)超過(guò)預(yù)設(shè)范圍后,TSL2561通過(guò)INT發(fā)出中斷信號(hào),連接GPIO37復(fù)用67號(hào)中斷。
光強(qiáng)檢測(cè)設(shè)計(jì)驅(qū)動(dòng)程序的初始化模塊通過(guò)設(shè)置i2c_sel為1,復(fù)用I2C1,設(shè)置67號(hào)中斷及中斷服務(wù)程序,開(kāi)辟數(shù)據(jù)緩沖區(qū)用于存放光強(qiáng)數(shù)據(jù)。數(shù)據(jù)讀取模塊負(fù)責(zé)TSL2561光強(qiáng)數(shù)據(jù)讀寫(xiě)。讀寫(xiě)TSL2561溫濕度數(shù)據(jù),要按照TSL2561工作時(shí)序進(jìn)行。寫(xiě)數(shù)據(jù)或命令時(shí),先將TSL2561的地址和操作命令寫(xiě)入I2C數(shù)據(jù)格式幀中,然后發(fā)送到I2C總線(xiàn),TSL2561確認(rèn)I2C數(shù)據(jù)格式幀中的地址和自己的地址匹配后,向會(huì)系統(tǒng)發(fā)送應(yīng)答信號(hào),系統(tǒng)收到應(yīng)答信號(hào)后會(huì)向TSL2561發(fā)送多個(gè)數(shù)據(jù),發(fā)送每個(gè)數(shù)據(jù)后都要等待TSL2561響應(yīng)后才會(huì)繼續(xù)后繼發(fā)送。
讀數(shù)據(jù)時(shí),當(dāng)系統(tǒng)收到應(yīng)答信號(hào)后,系統(tǒng)將通信模式改變?yōu)門(mén)SL2561發(fā)送,系統(tǒng)接收模式。然后,系統(tǒng)等待TSL2561的應(yīng)答信號(hào),當(dāng)系統(tǒng)收到TSL2561應(yīng)答信號(hào)后,就可以接收數(shù)據(jù)。當(dāng)數(shù)據(jù)接收完成后,系統(tǒng)要發(fā)送一個(gè)非應(yīng)答信號(hào),表示系統(tǒng)不在接收數(shù)據(jù)。
2.1.4 氣壓檢測(cè)設(shè)計(jì)。系統(tǒng)使用bmp280[6]監(jiān)測(cè)大氣壓,使用I2C方式訪(fǎng)問(wèn)bmp280。連接時(shí),時(shí)鐘信號(hào)SCL接龍芯2k1000開(kāi)發(fā)板I2C1時(shí)鐘線(xiàn),數(shù)據(jù)信號(hào)SDA接龍芯2k1000開(kāi)發(fā)板I2C1數(shù)據(jù)線(xiàn),地址控制SDO接地,即bmp280的I2C地址為0XEC。
氣壓檢測(cè)的初始化程序主要工作有:設(shè)置bmp280的測(cè)量控制寄存器值為00100111;即設(shè)置bmp280的大氣壓采樣模式為16位,普通模式;配置寄存器值的7~5位為000,即轉(zhuǎn)換時(shí)間間隔為0,5ms。大氣壓強(qiáng)采樣模式為16位采樣模式,即設(shè)置ctrl_meas寄存器的Bit7~Bit5位為001,設(shè)置bmp280工作于大氣壓采樣模式,即設(shè)置即設(shè)置ctrl_meas寄存器的Bit7~Bit5位為001。讀取氣壓過(guò)程為,讀取bmp280中地址單元0xf7~0xf9中的氣壓數(shù)據(jù),按照轉(zhuǎn)換公式轉(zhuǎn)換為氣壓值。
2.1.5 噪聲檢測(cè)設(shè)計(jì)。噪聲檢測(cè)模塊由LM386對(duì)將麥克風(fēng)采集到的聲音信息進(jìn)行放大后送A/D轉(zhuǎn)換得到噪聲數(shù)據(jù)。
麥克風(fēng)的輸出連接到LM386輸入端,LM386和麥克風(fēng)輸出共地,LM386輸出端連接A/D轉(zhuǎn)換器,A/D轉(zhuǎn)換的輸出連接到龍芯2k1000開(kāi)發(fā)板。
2.2.1 巡檢人員考勤。本系統(tǒng)使用指紋簽到作為管理人員的考勤,其功能包括考勤、考勤情況上報(bào)、信息變更、考勤信息錄入和修改等等。
系統(tǒng)使用AS608[7]指紋識(shí)別模塊作為考勤終端。連接時(shí)將指紋識(shí)別模塊的Tx和Rx引腳分別接龍芯2k1000開(kāi)發(fā)板UART3_RXD和UART3_TXD引腳,使用串行方式訪(fǎng)問(wèn)指紋識(shí)別模塊。
考勤模塊考勤信息錄入功能用于采集指紋圖像,生成指紋特征數(shù)據(jù)并將指紋特征數(shù)據(jù)保存到指紋庫(kù)。指紋特征數(shù)據(jù)是根據(jù)指紋紋路、指紋線(xiàn)條交叉點(diǎn)等特點(diǎn)提取指紋圖案的參數(shù)而生成,由于每個(gè)人指紋信息各不相同,指紋特征值也會(huì)各不相同。輸入指紋生成特征值后,搜索指紋庫(kù),若有相同的指紋特征值,發(fā)出提示并忽略新輸入的指紋數(shù)據(jù)。考勤模塊考勤程序會(huì)先從指紋識(shí)別模塊讀取考勤人員指紋信息并生成指紋特征值,然后到指紋庫(kù)中檢索該指紋特征值。若檢索到,則獲取該指紋特征值對(duì)應(yīng)的員工信息,將員工號(hào)、簽到時(shí)間、簽到多功能桿標(biāo)記等簽到信息記錄到簽到數(shù)據(jù)表中。
巡檢人員在巡檢后需錄入巡檢記錄、系統(tǒng)異常、設(shè)備檢修等信息。本系統(tǒng)預(yù)留2個(gè)USB接口用于即時(shí)連接鍵盤(pán)和鼠標(biāo)。當(dāng)巡檢人員發(fā)現(xiàn)系統(tǒng)異?;蛟O(shè)備故障后登錄系統(tǒng)的巡檢記錄模塊,錄入系統(tǒng)異常信息或設(shè)備檢修信息。錄入的信息將會(huì)發(fā)送到信息處理服務(wù)器,如果故障未修復(fù),將會(huì)提醒相關(guān)人員。
2.2.2 信息顯示和廣告投放。龍芯2k1000開(kāi)發(fā)板通過(guò)HDMI接口可以連接不同型號(hào)的顯示器。用于分屏顯示系統(tǒng)信息和廣告投放。
將智慧氣象站模塊監(jiān)測(cè)到的氣象信息以列表的格式在氣象信息顯示區(qū)域顯示。每10min刷新溫濕度、光強(qiáng)、粉塵、噪聲,氣壓等監(jiān)測(cè)數(shù)據(jù)。
廣告顯示區(qū)域用于根據(jù)客戶(hù)要求顯示或播放廣告信息。廣告投放模塊分為文字廣告、圖片廣告和視屏廣告三種。文字廣告內(nèi)容播放時(shí)要設(shè)置好顯示背景、設(shè)置根據(jù)要求設(shè)置好字體大小、動(dòng)態(tài)效果顯示文字。圖片廣告可以顯示單個(gè)圖片或?qū)⒍鄰垐D片組合后顯示;視屏顯示需要先讀取視頻文件,獲取文件播放時(shí)長(zhǎng),然后在定時(shí)時(shí)間內(nèi)只能不能切換播放,確保一段廣告播放完整。然后定時(shí)切換文字廣告、圖片廣告和視屏廣告內(nèi)容。
2.2.3 智能路燈控制。智能路燈控制模塊通過(guò)一個(gè)繼電器開(kāi)關(guān)控制路燈,能夠通過(guò)網(wǎng)絡(luò)根據(jù)遠(yuǎn)程命令控制路燈,還可以根據(jù)不同日期天黑天亮?xí)r間開(kāi)啟或關(guān)閉路燈。
2.2.4 視頻監(jiān)控[8]。龍芯2k1000開(kāi)發(fā)板通過(guò)USB接口連接攝像頭。然后,搭建視屏讀取平臺(tái),以固定的時(shí)間間隔將視頻文件保存在本地臨時(shí)目錄,按照系統(tǒng)的要求,將相應(yīng)視頻文件傳送到視屏服務(wù)器。由于視頻文件比較大,本地保存的視頻文件會(huì)以約定的規(guī)則定時(shí)清理。
主程序啟動(dòng)后,主線(xiàn)程在初始化工作完成后,創(chuàng)建若干個(gè)子線(xiàn)程,每個(gè)子線(xiàn)程完成相應(yīng)的功能,主線(xiàn)程負(fù)責(zé)協(xié)調(diào)個(gè)子線(xiàn)程工作。系統(tǒng)模塊圖如圖2所示。
圖2 系統(tǒng)模塊圖
軟件模塊功能有系統(tǒng)初始化、功能模塊實(shí)現(xiàn)、顯示信息等功能。
初始化模塊完成系統(tǒng)初始化配置,配置系統(tǒng)數(shù)據(jù)區(qū);定義各檢測(cè)模塊數(shù)據(jù)緩沖區(qū);調(diào)用各檢測(cè)模塊的初始化程序設(shè)置各檢測(cè)模塊GPIO引腳工作模式;定義簽到數(shù)據(jù)庫(kù)、初始化指紋庫(kù);定義攝像頭視屏存放路徑和視屏命名規(guī)則;初始化路燈開(kāi)關(guān)時(shí)間;初始化廣告信息;調(diào)用各功能模塊初始化函數(shù),分別對(duì)各功能模塊進(jìn)行初始化工作。
系統(tǒng)初始化模塊之后,啟動(dòng)各模塊監(jiān)測(cè)線(xiàn)程,各模塊監(jiān)測(cè)線(xiàn)程完成監(jiān)測(cè)任務(wù)后把監(jiān)測(cè)到的氣象數(shù)據(jù)存放到對(duì)應(yīng)的數(shù)據(jù)緩沖區(qū)中,在數(shù)據(jù)緩沖區(qū)起始字節(jié)設(shè)置一個(gè)標(biāo)志位,用于標(biāo)記數(shù)據(jù)緩沖區(qū)中的數(shù)據(jù)是否有效。各監(jiān)測(cè)線(xiàn)程分別負(fù)責(zé)相應(yīng)的數(shù)據(jù)監(jiān)測(cè),防止因監(jiān)測(cè)氣象數(shù)據(jù)延時(shí)或氣象監(jiān)測(cè)設(shè)備故障導(dǎo)致系統(tǒng)遲滯。
溫濕度監(jiān)測(cè)線(xiàn)程調(diào)用溫濕度數(shù)據(jù)讀取函數(shù)得到溫濕度數(shù)據(jù),按照數(shù)據(jù)協(xié)議轉(zhuǎn)換為溫濕度值分別放到溫度值緩沖區(qū)和濕度值緩沖區(qū)中。粉塵監(jiān)測(cè)線(xiàn)程調(diào)用粉塵數(shù)據(jù)讀取函數(shù),由于粉塵檢測(cè)需要進(jìn)行A/D轉(zhuǎn)換,需等待粉塵檢測(cè)結(jié)果后再讀取粉塵數(shù)據(jù)值放入粉塵值緩沖區(qū)。噪聲監(jiān)測(cè)線(xiàn)程調(diào)用讀取函數(shù)后要等待A/D轉(zhuǎn)換完成信號(hào),然后才能讀取噪聲值放入噪聲值緩沖區(qū)。光強(qiáng)監(jiān)測(cè)線(xiàn)程調(diào)用光強(qiáng)讀取函數(shù)獲取光強(qiáng)數(shù)據(jù)放入光強(qiáng)值緩沖區(qū),當(dāng)光強(qiáng)值超過(guò)預(yù)設(shè)范圍,由67號(hào)中斷處理,光強(qiáng)數(shù)據(jù)要做超值處理。氣壓監(jiān)測(cè)線(xiàn)程調(diào)用氣壓數(shù)據(jù)讀取函數(shù)放入氣壓數(shù)據(jù)緩沖區(qū)。
由于氣象數(shù)據(jù)變化不是很快,無(wú)須每一個(gè)主系統(tǒng)循環(huán)都進(jìn)行氣象數(shù)據(jù)監(jiān)測(cè),系統(tǒng)使用定時(shí)的方式啟動(dòng)氣象監(jiān)測(cè)線(xiàn)程。這樣可以節(jié)約系統(tǒng)資源,提升系統(tǒng)運(yùn)行效率。
監(jiān)控處理線(xiàn)程調(diào)用視頻監(jiān)控處理函數(shù),按照設(shè)定的分辨率將監(jiān)控視屏保存在指定路徑,定期清理超期視屏。
顯示信息模塊將信息分為基本信息、監(jiān)測(cè)信息和廣告信息三種來(lái)處理?;拘畔⒂腥掌跁r(shí)間、提示等信息,基本信息以固定格式在固定區(qū)域顯示;監(jiān)測(cè)信息顯示要先根據(jù)監(jiān)測(cè)信息標(biāo)志字節(jié)判斷相應(yīng)監(jiān)測(cè)數(shù)據(jù)是否有效,然后在固定區(qū)域顯示有效的監(jiān)測(cè)信息;系統(tǒng)以輪詢(xún)方式在顯示器的廣告區(qū)域輪流顯示各個(gè)廣告信息。
路燈控制是在系統(tǒng)設(shè)定的時(shí)間打開(kāi)或關(guān)閉路燈。
管理人員考勤只有在按了考勤按鈕后才啟動(dòng),啟動(dòng)指紋識(shí)別,指紋識(shí)別成功后將考勤信息包括員工號(hào)、考勤時(shí)間、考勤地點(diǎn)等信息記錄到數(shù)據(jù)表中。
在選擇信息錄入按鈕后會(huì)啟動(dòng)信息錄入,錄入人員可以輸入系統(tǒng)運(yùn)行情況、設(shè)備檢修信息、巡檢信息等信息并保存到系統(tǒng)信息表中。
基于龍芯2k1000處理器的多功能桿,利用龍芯2k1000處理器開(kāi)發(fā)板開(kāi)放接口,結(jié)合多功能桿應(yīng)用的功能,提供了一個(gè)集環(huán)境數(shù)據(jù)采集、公共信息服務(wù)、公共安全監(jiān)控平臺(tái)。