潘潔 趙翠芹 梁雪 閆列友 蔣聯(lián)周
摘要:在物聯(lián)網(wǎng)的春風(fēng)沐浴下,從低成本和低功耗出發(fā),利用STM32芯片搭建一個(gè)智能打卡的考勤系統(tǒng),幫助人們?cè)谙r(shí)如金的生活中快速解決上班、上課等的考勤問(wèn)題。
關(guān)鍵詞:物聯(lián)網(wǎng)技術(shù);嵌入式技術(shù);考勤系統(tǒng)
中圖分類(lèi)號(hào):TP3 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2018)12-0009-02
1 引言
物聯(lián)網(wǎng)工程專(zhuān)業(yè)屬于典型的跨學(xué)科、跨平臺(tái)的交融學(xué)科,涉及軟件和硬件方面的綜合應(yīng)用知識(shí)。物聯(lián)網(wǎng)就是實(shí)現(xiàn)讓“物開(kāi)口說(shuō)話(huà)”,利用感知識(shí)別設(shè)備將物理世界的量轉(zhuǎn)換為計(jì)算機(jī)能處理的信息量,然后通過(guò)無(wú)線(xiàn)移動(dòng)網(wǎng)絡(luò)進(jìn)行傳輸,與互聯(lián)網(wǎng)結(jié)合形成的一個(gè)“萬(wàn)物為一家,一網(wǎng)聯(lián)天下”的巨型網(wǎng)絡(luò)。物聯(lián)網(wǎng)的核心技術(shù)之一就是嵌入式技術(shù),尤其是ARM架構(gòu)的嵌入式技術(shù)。嵌入式是一個(gè)狼煙四起的一個(gè)市場(chǎng),各個(gè)企業(yè)之間的格局也在發(fā)生著巨大變化,是行業(yè)間的核心競(jìng)爭(zhēng)力。嵌入式技術(shù)是智能終端的風(fēng)向標(biāo),是科技圈談?wù)摰慕裹c(diǎn),也是主流市場(chǎng)。嵌入式ARM技術(shù)已經(jīng)“破繭成蝶”,并進(jìn)軍了智能設(shè)備市場(chǎng),它借助智能設(shè)備平臺(tái),將嵌入式技術(shù)應(yīng)用到99%的智能終端中,這些智能終端包括智能手機(jī)、Android設(shè)備、閱讀器、平板電腦iPhone和iPad等,目前,已經(jīng)有51 億枚 ARM 芯片用于智能終端。
隨著科技的進(jìn)步,尤其是像物聯(lián)網(wǎng)這樣的專(zhuān)業(yè),需要學(xué)習(xí)的技術(shù)實(shí)在是太多,每一個(gè)技術(shù)寫(xiě)出來(lái)就是卷帙浩繁的書(shū)籍,物聯(lián)網(wǎng)技術(shù)涉及軟件知識(shí)和硬件知識(shí),屬于雨露均沾的技術(shù)。硬件方面需要掌握51單片機(jī)系列、嵌入式STM32[1]和A8網(wǎng)關(guān)系統(tǒng)的硬件PCB電路設(shè)計(jì)和原理圖;軟件方面需要從語(yǔ)言、操作系統(tǒng)、調(diào)試工具等方面的各種精通。這些技術(shù)有多種,除了看是否是受到開(kāi)發(fā)者的青睞,還要考慮是否是業(yè)界所需。教師上課的50分鐘就顯得彌足珍貴。隨著高校學(xué)生擴(kuò)招的趨勢(shì),百人上課已經(jīng)是司空見(jiàn)慣不足為奇,利用上課時(shí)間點(diǎn)名,必然會(huì)帶來(lái)耗時(shí)問(wèn)題。遲到和逃課現(xiàn)象在每個(gè)學(xué)校都會(huì)發(fā)生,遲到會(huì)影響課堂秩序[2]。對(duì)于逃課,老師又不可能每堂課去點(diǎn)名,即使偶爾的點(diǎn)名也會(huì)出現(xiàn)關(guān)系好的同學(xué)幫答到的現(xiàn)象。這就形成了課時(shí)少,講解內(nèi)容多的矛盾。為了解決這一矛盾,設(shè)計(jì)了一個(gè)基于物聯(lián)網(wǎng)技術(shù)的考勤系統(tǒng)。CPU采用的是ARM Cortex-M7的STM32F767芯片,外設(shè)主要是DCMI接口的OV5640攝像頭、FSMC接口的TFT液晶屏和人體傳感器。STM32F767芯片的開(kāi)發(fā)環(huán)境是在Keil uVision5,上位機(jī)的開(kāi)發(fā)環(huán)境是Visual Studio,后臺(tái)數(shù)據(jù)庫(kù)采用的是SQL Server。手機(jī)端APP產(chǎn)生學(xué)生學(xué)號(hào)的二維碼,STM32F767外接人體傳感器,當(dāng)傳感器檢測(cè)到有人接近時(shí),打開(kāi)OV5640攝像頭,掃描手機(jī)端的二維碼。STM32F767主控芯片識(shí)別二維碼,通過(guò)DMA方式把識(shí)別的二維碼數(shù)據(jù)發(fā)送到TFT液晶屏顯示出來(lái),并通過(guò)USART串口發(fā)送到上位機(jī)數(shù)據(jù)庫(kù)里,上位機(jī)收到數(shù)據(jù)后與后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行校對(duì),最后通過(guò)語(yǔ)音播報(bào)的方式播報(bào)打卡信息。
2 系統(tǒng)總的功能模塊
考勤系統(tǒng)的總模塊包括硬件模塊和軟件模塊,如圖1所示。硬件模塊主要是STM32F767主控制器、OV5640攝像頭、TFT液晶顯示屏、人體傳感器和串口;軟件模塊包括前臺(tái)和后臺(tái)數(shù)據(jù)庫(kù),后臺(tái)數(shù)據(jù)庫(kù)主要用來(lái)保存考勤學(xué)生信息相關(guān)信息,前臺(tái)主要是將考勤的信息通過(guò)用戶(hù)界面展示給任課教師,主要是實(shí)現(xiàn)串口監(jiān)測(cè)、串口數(shù)據(jù)獲取、考勤信息顯示和語(yǔ)言播報(bào)。
3 硬件模塊
硬件模塊如圖1所示。是基于RAM Cortex-M7架構(gòu)進(jìn)行嵌入式系統(tǒng)設(shè)計(jì)與編寫(xiě)實(shí)現(xiàn)的。硬件資源主要有ATK-OV5640 攝像頭模塊、 TFT液晶屏模塊(RGB 屏、MCU 屏均可)、 LED小燈(DS0接PB1,DS1接PB2)、 按鍵(KEY0\KEY1\KEY2\KEY_UP)、 IO 擴(kuò)展芯片 PCF8574、 蜂鳴器(連接在IO擴(kuò)展芯片PCF8574上) 和外部SDRAM,如圖2所示。
4 軟件設(shè)計(jì)
軟件設(shè)計(jì)主要包括硬件驅(qū)動(dòng)開(kāi)發(fā)、后臺(tái)數(shù)據(jù)庫(kù)操作和上位機(jī)用戶(hù)軟件設(shè)計(jì)。
4.1 硬件驅(qū)動(dòng)開(kāi)發(fā)
硬件驅(qū)動(dòng)開(kāi)發(fā)的環(huán)境是keil uvision5,主要是對(duì)硬件資源的驅(qū)動(dòng)。主要功能是對(duì)開(kāi)啟攝像頭,并將攝像頭傳回的二維碼進(jìn)行解碼,解碼函數(shù)的原型為void qr_decode(u16 imagewidth,u16 *imagebuf),兩個(gè)參數(shù)是識(shí)別器的寬度和RGB圖像幀數(shù)據(jù);攝像頭數(shù)據(jù)DMA接收完成中斷回調(diào)函數(shù)void qr_dcmi_rx_callback(void);圖像顯示函數(shù)為void qr_show_image(u16 xoff,u16 yoff,u16 width,u16 height,u16 *imagebuf),其中參數(shù)為圖像顯示坐標(biāo)以及圖像的寬高以及RGB圖像數(shù)據(jù)緩沖區(qū);人體傳感器處理函數(shù)void mansensor();圖像識(shí)函數(shù)atk_qr_decode(qr_img_width,qr_img_width,bmp,bartype, result),其中參數(shù)分別為要識(shí)別圖像的寬高以及要識(shí)別的條碼類(lèi)型、內(nèi)存和識(shí)別結(jié)果;初始化識(shí)別庫(kù)函數(shù)u8 atk_qr_init(void);識(shí)別結(jié)束函數(shù)void atk_qr_destroy(void)等。數(shù)據(jù)傳輸協(xié)議主要是通過(guò)IIC協(xié)議和SCCB協(xié)議進(jìn)行傳輸。
4.2 后臺(tái)數(shù)據(jù)庫(kù)
本系統(tǒng)可以供上課考勤使用,數(shù)據(jù)庫(kù)使用SQL Server。具有管理學(xué)生考勤信息情況功能。數(shù)據(jù)庫(kù)表主要包括學(xué)生信息表和學(xué)生考勤表。學(xué)生信息表用來(lái)存儲(chǔ)學(xué)生的詳細(xì)信息,表結(jié)構(gòu)如表1所示。學(xué)生考勤表用來(lái)存儲(chǔ)考勤學(xué)生相應(yīng)信息,表結(jié)構(gòu)如表2所示。
4.3 上位機(jī)前臺(tái)開(kāi)發(fā)
該平臺(tái)建立在Visual Studio 2017軟件環(huán)境中,開(kāi)發(fā)的語(yǔ)言是結(jié)合了c++和java優(yōu)勢(shì)的C#語(yǔ)言。軟件前臺(tái)使用C#語(yǔ)言。上位機(jī)軟件主要實(shí)現(xiàn)的功能是串口檢測(cè)、串口數(shù)據(jù)的獲取、考勤信息的顯示和語(yǔ)音播報(bào)。開(kāi)發(fā)版供電時(shí),上位機(jī)就會(huì)檢測(cè)到相應(yīng)的串口,然后打開(kāi)串口通道;當(dāng)開(kāi)發(fā)版識(shí)別到二維碼數(shù)據(jù)后,通過(guò)串口發(fā)送至上位機(jī)并顯示出來(lái);獲取到串口數(shù)據(jù)后,將數(shù)據(jù)與后臺(tái)的數(shù)據(jù)進(jìn)行匹配,當(dāng)匹配成功,則會(huì)顯示出來(lái),同時(shí)進(jìn)行語(yǔ)音播報(bào)。
軟件中提供了SerialPort類(lèi),該類(lèi)實(shí)現(xiàn)了串口資源操作相關(guān)功能。命名空間為System.IO.Ports。程序代碼編寫(xiě)過(guò)程中,首先用SerialPort()構(gòu)造函數(shù)初始化SerialPort 類(lèi)的新實(shí)例,接著SerialPort.GetPortNames()函數(shù)獲取當(dāng)前計(jì)算機(jī)串行端口名稱(chēng)數(shù)組,并配置串口參數(shù)。receiveComDataRun()實(shí)現(xiàn)串口接收解析,用while循環(huán)等待,確保是從一個(gè)數(shù)據(jù)幀的開(kāi)頭開(kāi)始接收。定義一個(gè)字符數(shù)組,用來(lái)存放串口接發(fā)送過(guò)來(lái)的數(shù)據(jù)。為了避免重復(fù)考勤,需要過(guò)濾掉重復(fù)顯示。
串口接收后的數(shù)據(jù)需要存入到后臺(tái)數(shù)據(jù)庫(kù),需要加入System.Data.SqlClient、 System.Data.Sql和System.Data.Odbc這三個(gè)命名空間。建立一個(gè)數(shù)據(jù)庫(kù)連接對(duì)象SqlConnection,告訴它做什么,走什么路徑。創(chuàng)建數(shù)據(jù)庫(kù)集ds,調(diào)用Fill方法,先去數(shù)據(jù)庫(kù)查找數(shù)據(jù),并將打卡信息存入到數(shù)據(jù)庫(kù)中。對(duì)打卡成功的同學(xué)需要進(jìn)行語(yǔ)音播報(bào),調(diào)用SpeechLib庫(kù),創(chuàng)建一個(gè)SpeechVoiceSpeakFlags()方法;創(chuàng)建了一個(gè)語(yǔ)音實(shí)例SpVoice(),可以對(duì)朗讀速度和音量進(jìn)行調(diào)節(jié)。
5 系統(tǒng)實(shí)現(xiàn)
學(xué)生手機(jī)上安裝一個(gè)二維碼生成器的APP,能輸入學(xué)生學(xué)號(hào)就能產(chǎn)生相應(yīng)的二維碼;開(kāi)啟開(kāi)發(fā)板和上位機(jī)。當(dāng)人體傳感器檢測(cè)到有人時(shí),STM32開(kāi)發(fā)板會(huì)開(kāi)啟攝像頭;將二維碼對(duì)準(zhǔn)攝像頭進(jìn)行掃描,掃描成功后蜂鳴器會(huì)發(fā)出“嘀”的一聲;芯片獲取到二維碼圖像后會(huì)對(duì)其進(jìn)行處理,即圖像預(yù)處理,包括圖像校正、二值化、去噪、找三個(gè)尋像圖形、根據(jù)尋像圖形中心確定旋轉(zhuǎn)角度再取樣網(wǎng)格,采樣數(shù)據(jù),最后將圖像轉(zhuǎn)化為數(shù)據(jù)矩陣再進(jìn)行解碼;將解碼后的結(jié)果顯示在LCD液晶屏左下方中,同時(shí)通過(guò)串口將數(shù)據(jù)傳給上位機(jī);上位機(jī)將受到的數(shù)據(jù)與后臺(tái)數(shù)據(jù)庫(kù)進(jìn)行校對(duì),最終將結(jié)果顯示出來(lái)并且以語(yǔ)音形式播報(bào)出來(lái);最后將以及考勤的學(xué)生的學(xué)號(hào)和打卡時(shí)間存儲(chǔ)在后臺(tái)數(shù)據(jù)庫(kù)的數(shù)據(jù)表中。其結(jié)果如圖3所示。
6 總結(jié)
利用低成本低功耗的芯片搭建具有考勤功能的模塊。上課之前,學(xué)生只要掃掃考勤機(jī)上的二維碼,即可實(shí)現(xiàn)點(diǎn)名。解決上課點(diǎn)名、上班打卡的費(fèi)時(shí)問(wèn)題。手機(jī)打卡可有效避免此問(wèn)題,因?yàn)榻?jīng)過(guò)服務(wù)器綁定后,每個(gè)人的手機(jī)就代表自己,如果你要想讓別人幫你打卡,那么你就必須將手機(jī)放在同學(xué)那里,一般沒(méi)人會(huì)這樣做,所以不會(huì)發(fā)生代打卡,人情答到現(xiàn)象。所以,手機(jī)打卡會(huì)在一定程度上起到促進(jìn)教學(xué)質(zhì)量的效果!
參考文獻(xiàn):
[1] 張洋,劉軍,嚴(yán)漢字,等.原子教你玩STM32(庫(kù)函數(shù)版)[M].北京:北京航空航天大學(xué)出版社,2016.
[2] 丁同.基于ARM的射頻識(shí)別考勤系統(tǒng)的研究與設(shè)計(jì)[D].安徽理工大學(xué),2017.