劉靜琦, 周振虎,時(shí) 飛,阮煜婕,劉靜波,袁瑞奇
(南京工程學(xué)院信息與通信工程學(xué)院,南京 211167)
外賣騎手體溫是否正常是其身體健康指標(biāo)的重要方面,外賣騎手擔(dān)負(fù)著配送食物或其他用品的職責(zé),經(jīng)常需要與不同人員近距離接觸?,F(xiàn)在對(duì)于外賣騎手或其他人員進(jìn)行體溫測(cè)量一般采用以下方法:有專門的人員進(jìn)行手工測(cè)量,采用接觸式或非觸式測(cè)量工具進(jìn)行測(cè)量;在固定場(chǎng)所安裝熱成像非接觸式體溫測(cè)量裝置。這些方法必須需要外賣騎手等被測(cè)人員到固定場(chǎng)所才能對(duì)其體溫進(jìn)行監(jiān)測(cè),占用人力物力較多,效率較低,并且由于外賣騎手的流動(dòng)性與特殊性不便于多次定時(shí)監(jiān)測(cè)。按照要求,外賣騎手需佩戴安全頭盔,保證交通安全,現(xiàn)有智能頭盔,大多用于對(duì)佩戴人員進(jìn)行定位、語(yǔ)音提示、環(huán)境參數(shù)測(cè)量、腦電波心率測(cè)量等,或者有一種外賣配送智能安全頭盔實(shí)時(shí)督促配送員遵守交規(guī),自動(dòng)撥打外賣客戶電話,讓客戶掌握訂單配送狀態(tài)等應(yīng)用功能。這類智能頭盔具備的常規(guī)功能,多以定位、語(yǔ)音、拍攝或以測(cè)量環(huán)境參數(shù)為應(yīng)用功能,測(cè)量腦電波、心電信號(hào)來(lái)監(jiān)測(cè)佩戴者的生理參數(shù),其內(nèi)置的傳感器并不具備直接測(cè)量騎手體溫的功能,不能防范外賣騎手體溫異常造成的風(fēng)險(xiǎn)。本系統(tǒng)設(shè)計(jì)一種實(shí)時(shí)監(jiān)測(cè)外賣騎手體溫的智能頭盔,可以定時(shí)監(jiān)測(cè)騎手的體溫?cái)?shù)據(jù),同時(shí)把騎手身份信息、位置狀態(tài)數(shù)據(jù)等一起封裝后,通過(guò)WIFI 傳輸至云平臺(tái),從而實(shí)現(xiàn)定時(shí)監(jiān)測(cè)騎手體溫和位置狀態(tài)的應(yīng)用功能,后臺(tái)人員通過(guò)網(wǎng)頁(yè)端查看數(shù)據(jù)信息。不依賴于人工測(cè)量騎手體溫,也不需要騎手到指定的地方測(cè)量體溫,智能頭盔可以準(zhǔn)確、方便、定時(shí)監(jiān)測(cè)騎手體溫,并發(fā)送數(shù)據(jù)到平臺(tái),為多次定時(shí)測(cè)量提供可行性。
系統(tǒng)有頭盔部分和物聯(lián)網(wǎng)云平臺(tái)部分兩部分組成。頭盔部分采用主控芯片讀取非接觸式高精度紅外測(cè)溫傳感器測(cè)量的體溫?cái)?shù)據(jù),采集GPS 模塊的經(jīng)緯度數(shù)據(jù)信息,WIFI 模塊通過(guò)連接到騎手手機(jī)熱點(diǎn)接入網(wǎng)絡(luò),進(jìn)行數(shù)據(jù)傳輸。時(shí)鐘芯片和EEPROM 存儲(chǔ)芯片連接于一組IIC總線上,時(shí)鐘芯片提供系統(tǒng)運(yùn)行時(shí)間信息,也作為定時(shí)檢測(cè)體溫的時(shí)間信號(hào),EEPROM 存儲(chǔ)芯片保存騎手身份信息和其他配置數(shù)據(jù)信息,光電檢測(cè)部分檢測(cè)頭盔是否正常佩戴。系統(tǒng)組成如圖1所示。
圖1 系統(tǒng)組成
非接觸紅外測(cè)溫傳感器MLX90614 體積小,非常適合安裝于頭盔正對(duì)騎手額頭的部位。通過(guò)定時(shí)測(cè)量體溫?cái)?shù)據(jù)并發(fā)送到云平臺(tái),實(shí)現(xiàn)自動(dòng)檢測(cè)的功能。物聯(lián)網(wǎng)云平臺(tái)采用中國(guó)移動(dòng)的OneNET 平臺(tái),該平臺(tái)為用戶提供簡(jiǎn)單高效實(shí)用的物聯(lián)網(wǎng)平臺(tái),和可編輯的網(wǎng)頁(yè)可視化界面,在網(wǎng)頁(yè)端接收數(shù)據(jù)或者下發(fā)控制指令。按照云平臺(tái)協(xié)議和數(shù)據(jù)類型封裝數(shù)據(jù)包,發(fā)送數(shù)據(jù)包括騎手身份數(shù)據(jù)、體溫?cái)?shù)據(jù)、位置信息數(shù)據(jù)等,達(dá)到定時(shí)多次監(jiān)測(cè)騎手體溫的目的,提高效率。
OneNET 是中國(guó)移動(dòng)推出的物聯(lián)網(wǎng)開(kāi)放平臺(tái),該平臺(tái)屏蔽了復(fù)雜的技術(shù)細(xì)節(jié),提供多種協(xié)議類型,支持多種智能硬件的接入和大數(shù)據(jù)服務(wù),開(kāi)發(fā)文檔和技術(shù)支持完善。支持多種網(wǎng)絡(luò)協(xié)議接入,如MQTT、EDP、HTTP 等,可輕松實(shí)現(xiàn)設(shè)備的接入與管理。用戶按照OneNET云平臺(tái)的規(guī)范接入平臺(tái),上傳數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)傳輸與存儲(chǔ)管理功能。用戶在官網(wǎng)注冊(cè)賬號(hào),就可以進(jìn)入云平臺(tái)創(chuàng)建項(xiàng)目。通過(guò)創(chuàng)建選定協(xié)議下的產(chǎn)品,系統(tǒng)給出當(dāng)前產(chǎn)品的產(chǎn)品ID,添加設(shè)備,分析和創(chuàng)建項(xiàng)目數(shù)據(jù)流,添加APIKEY,從而創(chuàng)建用戶自己的應(yīng)用項(xiàng)目。數(shù)據(jù)上傳完成后,用戶可以在網(wǎng)頁(yè)查看數(shù)據(jù)和對(duì)應(yīng)的變化曲線,也可以下發(fā)控制指令,控制智能設(shè)備的運(yùn)行。OneNET 系統(tǒng)可以在同一產(chǎn)品下添加多個(gè)設(shè)備,例如“智能頭盔”產(chǎn)品,添加1號(hào)頭盔、2 號(hào)頭盔……,OneNET 系統(tǒng)分配不同的設(shè)備ID和鑒權(quán)信息,允許多設(shè)備運(yùn)行。
針對(duì)頭盔的結(jié)構(gòu),硬件設(shè)計(jì)采取模塊化結(jié)構(gòu)設(shè)計(jì)方法。智能頭盔系統(tǒng)硬件分為主控芯片、非接觸式紅外測(cè)溫傳感器、WIFI 模塊、GPS 模塊、時(shí)鐘芯片、存儲(chǔ)芯片AT24C02 和光電檢測(cè)這幾個(gè)部分組成。圖2表示了各單元與主控單元的連接,根據(jù)不同模塊的應(yīng)用特點(diǎn),合理分配主控單元的外設(shè)資源,實(shí)現(xiàn)對(duì)智能頭盔最優(yōu)的硬件資源配置。
圖2 智能頭盔接口電路
智能頭盔主控芯片采用STM32F103RCT6,這是基于Cortex-M3架構(gòu)的高性能處理器,主頻達(dá)72 MHz,具備48 kB SRAM、256 kB FLASH,其他資源包括定時(shí)器、串口、ADC、SPI、DMA 控制器、外中斷等,滿足智能頭盔的應(yīng)用需求及后續(xù)的拓展應(yīng)用。在系統(tǒng)中,WIFI 模塊和GPS模塊分別連接于主控芯片串口3 和串口2,串口編程收發(fā)數(shù)據(jù)在本系統(tǒng)中是重要的環(huán)節(jié),實(shí)際編程應(yīng)用中,采用主控芯片的DMA 功能與串口中斷接收,使得串口收發(fā)數(shù)據(jù)的效率得到充分提高。
MELEXIS 公司生產(chǎn)的MLX90614 溫度傳感器是一種使用方便的紅外測(cè)溫器件, 直接輸出完全線性化的并已對(duì)環(huán)境溫度進(jìn)行補(bǔ)償?shù)臄?shù)字溫度,可實(shí)現(xiàn)高精度和高分辨率的溫度采集,該器件具有2 種溫度輸出方式:數(shù)字PWM 輸出及SMBus 接口輸出,具有體積小、精度高、測(cè)溫范圍廣、使用方便的特點(diǎn)。在溫度范圍為32~42 ℃時(shí),測(cè)量的絕對(duì)精度為±0.2 ℃,因此非常適用于對(duì)人體溫度進(jìn)行測(cè)量。本系統(tǒng)主控芯片PB6和PB7作為SMBus接口,連接于MLX90614。
ESP8266 是一款高集成度的WIFI 模塊,其本身是一個(gè)32 位的MCU 單元可以獨(dú)立訪問(wèn)網(wǎng)絡(luò),也可以搭配其他主控芯片,幫助其他主控芯片接入互聯(lián)網(wǎng)。ESP8266 提供一對(duì)串口與主控芯片進(jìn)行數(shù)據(jù)交換,與主控芯片通過(guò)串口3連接。ESP8266 允許配置為熱點(diǎn)(AP)、客戶端(STA),熱點(diǎn)+客戶端(AP+STA)三種模式,本系統(tǒng)把ESP8266 配置為STA 模式,通過(guò)手機(jī)熱點(diǎn)接入網(wǎng)絡(luò),實(shí)現(xiàn)遠(yuǎn)程控制與數(shù)據(jù)傳輸。
GPS 模塊采用VK2828U7G5LF 模塊,帶有高精度TCXO,內(nèi)置FLASH,可自由配置多項(xiàng)參數(shù),包括波特率和數(shù)據(jù)刷新率(1~10 Hz)。輸出語(yǔ)句NMEA0183V3.0 協(xié)議數(shù)據(jù),可任意設(shè)置其中協(xié)議數(shù)據(jù)輸出.模塊與主控芯片之間通過(guò)串口2連接,本系統(tǒng)應(yīng)用中,配置GPS模塊串口波特率為38400 bps,5 Hz數(shù)據(jù)更新速率。
時(shí)鐘芯片選用DS3231 芯片,這是一款內(nèi)置溫補(bǔ)晶振的時(shí)鐘芯片,3.3 V 供電電壓,精度可達(dá) 正 負(fù)2 ppm(0°~40°),標(biāo) 準(zhǔn)IIC 接 口 與STM32 主控芯片進(jìn)行數(shù)據(jù)讀寫,DS3231 的器件地址分別是0XD0(寫)0XD1(讀),該芯片具有1Hz信號(hào)輸出引腳INT/SQW,可作為中斷信號(hào)輸出,INT 引腳是開(kāi)漏輸出模式,該管腳外接10k上拉電阻連接到3.3 V。在初始化DS3231時(shí),配置控制寄存器OEH 為OOH,則OEH 其中的BIT4 和BIT3(RS2 和RS1)以及BIT2(INTCN)為0,則3 腳INT/SQW 輸出1Hz 方波,該信號(hào)連接STM32端口PC6,可作為外中斷信號(hào),在外中斷服務(wù)程序中處理對(duì)應(yīng)的程序,提高了主程序運(yùn)行的效率。
本系統(tǒng)PB11 和PB10 配置為IIC 總線,其中PB11 為SDA 數(shù)據(jù)線,PB10 為SCL 時(shí)鐘線,其中接入10 k 上拉電阻,保證確定的電平信號(hào)。在IIC 總線上除了接有時(shí)鐘芯片DS3231,還包括EEPROM 存儲(chǔ)芯片AT24C02,主控芯片通過(guò)不同的器件地址訪問(wèn)總線上的器件,讀取數(shù)據(jù)。EEPROM 存儲(chǔ)芯片AT24C02 用作存放系統(tǒng)配置的參數(shù)。
采用GL5516 光敏電阻與10 k 電阻分壓,接入主控芯片的PA1,程序中配置PA1 模數(shù)轉(zhuǎn)換讀取分壓的電壓數(shù)值。光敏電阻安裝于頭盔內(nèi)側(cè),正常佩戴頭盔和未佩戴頭盔兩種情形下,光敏電阻呈現(xiàn)出不同的電阻阻值,從而換算為不同的分壓數(shù)值,系統(tǒng)根據(jù)讀取的數(shù)據(jù),如未正常佩戴頭盔,則系統(tǒng)通過(guò)PC0 端口驅(qū)動(dòng)蜂鳴器,發(fā)出提示,確認(rèn)使用者正常佩戴頭盔。
智能頭盔與OneNET 之間以MQTT 協(xié)議方式傳輸數(shù)據(jù),該協(xié)議支持?jǐn)?shù)據(jù)雙向傳輸、實(shí)時(shí)性高,也具有長(zhǎng)時(shí)間穩(wěn)定連接的優(yōu)點(diǎn)。設(shè)備登錄OneNET 平臺(tái)后,選擇在此協(xié)議下創(chuàng)建“智能頭盔”產(chǎn)品,添加設(shè)備后,在程序中封裝數(shù)據(jù),包括需要上傳云平臺(tái)的數(shù)據(jù),和接收云平臺(tái)發(fā)送的指令數(shù)據(jù),把這些數(shù)據(jù)統(tǒng)稱為數(shù)據(jù)流。OneNET 對(duì)數(shù)據(jù)流的封裝提供了多種數(shù)據(jù)類型封裝形式,本系統(tǒng)采用數(shù)據(jù)類型3(TYPE=3,JSON 格式2字符串)模式。本系統(tǒng)數(shù)據(jù)流根據(jù)數(shù)據(jù)傳輸方向分為兩類:①上行數(shù)據(jù)流,包括智能頭盔定時(shí)測(cè)量的體溫?cái)?shù)據(jù)、GPS 定位模塊獲取的經(jīng)緯度位置信息、騎手身份信息、發(fā)送時(shí)間等。這些數(shù)據(jù)流封裝為完整的數(shù)據(jù)包,通過(guò)ESP8266 發(fā)送至OneNET 云平臺(tái)。②下行數(shù)據(jù)流,是網(wǎng)頁(yè)端發(fā)出的控制指令,通過(guò)OneNET云平臺(tái)發(fā)送給智能頭盔,發(fā)布的控制指令主要是修改測(cè)量體溫的定時(shí)時(shí)間數(shù)據(jù),智能頭盔接收到該控制指令后,可以更改定時(shí)發(fā)送的時(shí)間。
程序首先對(duì)智能頭盔系統(tǒng)各模塊進(jìn)行初始化,包括串口2 和串口3 初始化,紅外測(cè)溫傳感器SMBus接口初始化、IIC總線端口初始化、IIC總線接入的DS3231 芯片配置初始化、ADC 轉(zhuǎn)換初始化等。然后,經(jīng)串口3 發(fā)送AT 指令給ESP8266模塊,設(shè)置ESP8266為STA 模式,連接WIFI 后,等待連接OneNET 云平臺(tái)的回應(yīng)信號(hào),確認(rèn)連接OneNET 服務(wù)器。在初始化連接OneNET 的過(guò)程中,程序可以設(shè)定與OneNET 服務(wù)器的KeepAlive ?;顣r(shí)間,每個(gè)客戶端可自定義設(shè)置連接保持時(shí)間,最短120 s,最長(zhǎng)65535 s,用戶可以在此范圍自己設(shè)定上傳數(shù)據(jù)的時(shí)間間隔。連接OneNET后,程序中按照設(shè)定的發(fā)送時(shí)間間隔T,把測(cè)量的體溫?cái)?shù)據(jù)和經(jīng)緯度位置數(shù)據(jù)信息傳輸至云平臺(tái)。主流程如圖3所示。
圖3 系統(tǒng)主流程
其中接收GPS數(shù)據(jù)是根據(jù)串口2中斷給出中斷標(biāo)志位后,對(duì)接收的GPS 位置信息分析后存入相應(yīng)的變量,最后與體溫?cái)?shù)據(jù)、身份信息等封裝打包為上行數(shù)據(jù)流,發(fā)送數(shù)據(jù)至OneNET云平臺(tái)。為適用于不同的情況,定時(shí)發(fā)送體溫的時(shí)間間隔是可以改變的,定時(shí)時(shí)間的設(shè)定由OneNET 網(wǎng)頁(yè)端下達(dá)控制指令,主流程中,智能頭盔的ESP8266連接于串口3,利用串口中斷處理接收指令,解析數(shù)據(jù)后,設(shè)定時(shí)間間隔T,同時(shí)存入EEPROM芯片中。
SMBus 接口為兩線協(xié)議,允許主控器件(MD)和一個(gè)或一個(gè)以上的從器件(SD)通信。系統(tǒng)在給定的時(shí)刻只有一個(gè)主控器件。本系統(tǒng)中主控器件是STM32F103RCT6,MLX90614只作為從器件使用。主控器件是通過(guò)從地址(SA)選擇從器件MLX90614 并開(kāi)始數(shù)據(jù)傳輸,本系統(tǒng)中采用一個(gè)MLX90614作為體溫測(cè)量傳感器,其地址為0x00。SMBus 有標(biāo)準(zhǔn)的協(xié)議,主控芯片發(fā)送和接收數(shù)據(jù)都是以字節(jié)為單位進(jìn)行。主控芯片每發(fā)送一個(gè)字節(jié),會(huì)檢查從機(jī)是否有應(yīng)答;當(dāng)主控芯片接收數(shù)據(jù)時(shí),如當(dāng)前接收的非最后一個(gè)字節(jié),主控芯片會(huì)給對(duì)方發(fā)送應(yīng)答信號(hào)(ACK),如接收的是最后一個(gè)字節(jié),主控芯片會(huì)給對(duì)方發(fā)送非應(yīng)答信號(hào)(NACK)。
圖4是MLX90614測(cè)量體溫流程。
圖4 MLX90614測(cè)量體溫流程
MLX90614 測(cè)溫程序中,設(shè)定一個(gè)計(jì)數(shù)值,該計(jì)數(shù)值遞減計(jì)數(shù),如果計(jì)數(shù)到0,則表示測(cè)量不成功,退出本次測(cè)量。對(duì)于測(cè)量不成功包含兩個(gè)方面:①主控器件在每次發(fā)送數(shù)據(jù)后,檢查MLX90614 的應(yīng)答情況,如從機(jī)應(yīng)答不成功,則重新開(kāi)始循環(huán),直到計(jì)數(shù)值為0,則退出本次測(cè)量。②從機(jī)應(yīng)答正常,但最后主機(jī)讀取的校驗(yàn)字節(jié)與校驗(yàn)計(jì)算和不一致,循環(huán)測(cè)量后,判斷計(jì)數(shù)值為0,則退出本次測(cè)量。一個(gè)完整的體溫測(cè)量,實(shí)際上包括MLX90614正常應(yīng)答和校驗(yàn)正確,只有滿足這兩個(gè)方面,就得到本次測(cè)量的體溫?cái)?shù)據(jù)。MLX90614 測(cè)量流程如圖4 所示。讀出的體溫?cái)?shù)據(jù)字節(jié)是高字節(jié)和低字節(jié)數(shù)據(jù),按照按照式(1)組合為16 進(jìn)制數(shù)據(jù),式(2)得到體溫。
DS3231 有INT 輸出引腳,接入STM32F103 RCT6 的PC6 端口,這是一個(gè)每秒的輸出中斷信號(hào),在智能頭盔系統(tǒng)中可以配置PC6 端口的外中斷,在外中斷服務(wù)子程序,每次中斷執(zhí)行一次讀取時(shí)間和日期數(shù)據(jù)。同時(shí),讀取模數(shù)轉(zhuǎn)換的數(shù)據(jù)也在外中斷中執(zhí)行,用于檢測(cè)是否佩戴頭盔,檢測(cè)數(shù)值低于設(shè)定數(shù)值后,驅(qū)動(dòng)蜂鳴器每秒發(fā)出提示。外中斷程序的利用,減少系統(tǒng)主程序的占用,提高程序的執(zhí)行效率。外中斷程序如下所示。
void EXTI9_5_IRQHandler(void)
{
if(EXTI_GetITStatus(EXTI_Line6)!=RESET)//外中斷PC6入口
{
ds3231_get_time(); //獲取時(shí)間日期
ds3231_get_date();
//光線傳感檢測(cè)佩戴頭盔
if(Adc_Average(5)<1500)//取AD 轉(zhuǎn)換值,小于數(shù)值1500未佩戴
FMQ=!FMQ;//驅(qū)動(dòng)蜂鳴器
else FMQ=1;//蜂鳴器停止
}
EXTI_ClearITPendingBit(EXTI_Line6);//清除PC6中斷標(biāo)志
}
體溫監(jiān)測(cè)智能頭盔系統(tǒng)軟硬件搭建完成,進(jìn)行實(shí)際測(cè)試。加電后,等待系統(tǒng)連接OneNET,在網(wǎng)頁(yè)端可看到設(shè)備狀態(tài),系統(tǒng)連接到OneNET后,設(shè)備顯示為在線狀態(tài)。在網(wǎng)頁(yè)端刷新數(shù)據(jù)流,實(shí)時(shí)接收到測(cè)量的體溫?cái)?shù)據(jù)和當(dāng)前的經(jīng)緯度、發(fā)送時(shí)間等信息。也可以利用OneNET 提供的可視化用戶界面編輯設(shè)計(jì)功能,組合編輯文本框、旋鈕等控件,在其應(yīng)用界面上展示數(shù)據(jù)結(jié)果,圖5是實(shí)際測(cè)量數(shù)據(jù)展示,其中包含體溫、經(jīng)緯度、時(shí)間等,可視化界面中添加的旋鈕控件,用于網(wǎng)頁(yè)端下發(fā)指令,控制數(shù)據(jù)上傳的時(shí)間間隔。實(shí)際測(cè)試表明,系統(tǒng)運(yùn)行穩(wěn)定,數(shù)據(jù)接收和下發(fā)指令功能正常,可視化界面簡(jiǎn)潔,有較好的應(yīng)用效果。
圖5 實(shí)際測(cè)試可視化用戶界面顯示
本系統(tǒng)采用非接觸式紅外測(cè)溫傳感器定時(shí)測(cè)量外賣騎手體溫,按照預(yù)設(shè)的定時(shí)時(shí)間測(cè)量數(shù)據(jù)。采用模塊化結(jié)構(gòu),對(duì)系統(tǒng)進(jìn)行實(shí)際測(cè)試,結(jié)合OneNET物聯(lián)網(wǎng)云平臺(tái)方便簡(jiǎn)潔的可視化應(yīng)用界面設(shè)計(jì),實(shí)現(xiàn)了定時(shí)測(cè)量體溫并遠(yuǎn)程上傳體溫?cái)?shù)據(jù)、經(jīng)緯度信息等功能。STM32 豐富的資源,為系統(tǒng)優(yōu)化提供了基礎(chǔ),后續(xù)可進(jìn)一步對(duì)系統(tǒng)進(jìn)行優(yōu)化,對(duì)系統(tǒng)進(jìn)行集成化設(shè)計(jì),使系統(tǒng)小型化集成化,優(yōu)化電源管理,加入低功耗設(shè)計(jì),則更具實(shí)用性。加入碰撞跌倒檢測(cè)與報(bào)警,或者網(wǎng)頁(yè)端可以下發(fā)指令,加入呼叫功能等,都是可以進(jìn)一步優(yōu)化的環(huán)節(jié)。