儲繼華, 梁民
(中國人民大學 1.圖書館; 2.實驗室管理與教學條件保障處, 北京 100872)
高校圖書館具有舒適的學習環境和豐富的學習資源,是師生查閱資料和自主學習的首選場所。近年來,高校圖書館建設投入不斷增加,硬件環境以及軟件系統配置都不斷優化,學生需求的滿足程度也有所提高。但目前很多圖書館由于自習座位數量有限,以及缺乏合理有效的管理機制,從而出現讀者排隊搶座、大量長期占座但又不正常使用等現象,已成為高校圖書館座位管理的一大難題。針對當前圖書館座位資源的使用現狀,很多高校研發或者購置了座位管理系統,一定程度上解決了高校圖書館對館內座位資源的管理問題。對實行了座位管理系統的中國人民大學圖書館、南開大學圖書館、北方民族大學圖書館、山東大學圖書館和福建農林大學圖書館等高校圖書館進行了調研,發現大多數圖書館的管理系統都是純軟件式管理,大多包括讀者權限下的自動分配座位、自主選擇座位、退座和管理員權限下的座位狀態控制、數據統計等[1],系統投入使用后,帶來了另外一個問題:選座者選座成功后,因為種種原因不到或者遲到早退,造成了資源浪費。對于選座成功后不到或者提前離開,如果不主動釋放座位,即使為空座,在座位預約管理系統中也無法選擇此座位,帶來了資源浪費。為此,如文獻《高校圖書館座位管理系統使用情況調查》[2]調研所述,各圖書館實行不同的管理制度和懲罰措施,一定程度上解決了以上問題。但是,靠制度和人力來管理,加大了管理成本,不可避免的也帶來師生之間矛盾。圖書館座位的高效管理是圖書館為讀者營造良好學習環境的重要工作內容,在有限的座位數量條件下,如何實現座位的精準管理,提高座位利用效率,最大程度滿足讀者的學習需求是圖書館管理工作亟需解決的問題。
相關研究主要從管理系統設計和硬件系統兩方面展開。管理系統設計的提升主要從預約機制設計[3]、用戶功能權限設計等不同機制的設計提升,基于Web的座位管理系統[4]、基于Android的座位管理系統等不同系統平臺設計的研究[5],以及與圖書館其他管理系統如門禁系統相結合,提升座位管理效率。硬件系統主要是與相關技術結合,對座位狀態進行管理,如基于藍牙技術[6]、GIS技術[7]、RFID技術[8-9]和NFC[10]技術等實現對座位狀態的實時管理控制,提高座位管理利用效率。
為徹底依托技術手段,而非管理手段解決以上問題,設計了基于傳感器和單片機的監控座位狀態(有人/無人)的系統。通過上述硬件系統采集到座位狀態數據,把座位狀態及時傳送到座位管理系統,可以及時更新座位狀態,能很好的解決選座者因故不到或者遲到早退不主動在系統中釋放座位,其他人員不能選座的問題。
根據實際需要,系統應能自動監測座位狀態(有人/無人),并把座位狀態實時上傳給上位機。除滿足以上基本需求外,還要保證使用穩定、易于安裝維護、容易擴展和具有經濟推廣價值。
根據以上要求,系統設計主要包括傳感器模塊、控制模塊和基站設備。各模塊功能描述如下。
(1) 傳感器模塊:對座位狀態(有人/無人)進行監測,然后傳送給控制單片機。
(2) 控制模塊:接收各傳感器采集的參數信息,并將其傳送至基站。
(3) 基站設備:對數據進行處理后傳輸到上位機。
系統的整體設計圖,如圖1所示。

圖1 系統整體設計圖
根據實際應用環境,硬件系統要安裝在座位靠背或者座板底端適當位置,以便采集座位狀態信息,因此,設計完成后的硬件系統體積不宜過大。考慮到座位為活動的,布線不方便,宜采用紐扣電池給設備供電,硬件系統和上位機的通訊方式也需要采用無線傳輸方式。
根據以上具體需求,傳感器采用Kionix公司的KX022加速度傳感器;控制單元采用 Nrodic nRF52832無線收發芯片;基站設備采用北京普諾興科技有限公司的PS-DCA900-P1型邊緣計算盒,此設備支持BLE藍牙連接, 并支持WIFI/ETH/4G 3種方式將數據傳輸云端。
控制單元采用 Nrodic公司的 nRF52832無線收發芯片。nRF52832具有超低功耗及極高的設計靈活性特點,支持藍牙低功耗(BLE),芯片上集成2.4 GHz 無線收發器,內嵌32位ARM Cortex-M4F CPU,具有512 kB flash及64 kB RAM。
該芯片共有32個I/O口,其中有2個NFC天線接口和2個32.768 KHz的RTC實時時鐘口,剩余28個I/O口可供使用。本系統中使用了AIN0、AIN1這兩路12位ADC進行電池電壓測量,使用1路SWI接口進行座位狀態監測采集[12]。
最小系統部分包含電源、RTC外部晶振、主時鐘外部晶振和SWD調試下載接口。此系統中,電源部分采用CR2032紐扣電池。nRF52832最小系統原理圖,如圖2所示。

圖2 nRF52832最小系統原理圖
座位狀態可以通過某一時刻加速度變化量來識別,如果座位靜止不動,某一時刻某個點上加速度就是0。當座位上有人時,由于人是活的物體,難免會發生晃動,某一時刻某個點上x、y、z三軸的加速度數值不全為0。
根據以上分析, Kionix公司的 KX022加速度傳感器能夠采集到某一時刻某個點上x、y、z三軸的加速度數值,滿足需求,故選用此款傳感器作為座位狀態監控傳感器。這款加速度傳感器可監測x、y、z三軸的加速度變化,反應靈敏,具備低功耗、I2C/SPI 輸出,同時擁有集成 FIFO/FILO 緩沖區和多種嵌入式功能。可選擇的參數為±2 g、±4 g或±8 g范圍以及輸出數據速率 (ODR)。
座位狀態監測電路圖,如圖3所示。

圖3 座位狀態監測電路圖
將引腳1(SDO/ADDR)和引腳4( TRIG)接地,固定I2C訪問地址,禁止FIFO,拉高nCS,片選一直使能。SCLK/SCL引腳作為I2C總線接nRF52832的P0.11引腳;SDI/SDA引腳接nRF52832的P0.12引腳;INT1和INT2引腳分別接nRF52832的P0.13和nRF52832的P0.14引腳。
系統采用CR2032紐扣電池為系統供電,系統待機時間可根據實際測量結果進行計算。電池正極引腳接nRF52832的VDD引腳;電池負極引腳接nRF52832的接地引腳;兩個引腳間接4.7 μF的電容。部分電路圖,如圖4所示。

圖4 電池部分電路圖
由于尺寸、功耗因素,使用nRF52832 內部模數轉換器,采集DET與LOW的數值,12位AD數值范圍為0至4 095。電源監測電路圖,如圖5所示。

圖5 電源監測電路圖
串聯兩個100 K的電阻,其BAT_DET引腳接nRF52832的P0.02引腳;BAT_LOW引腳接nRF52832的P0.03引腳。通過以下算式計算當前的電壓。
BAT_DET電壓=3.3/4096*AIN0通道采集的數值。
BAT_LOW電壓=3.3/4096*AIN1通道采集的數值。
電池電壓=BAT_DET+((BAT_DET-BAT_LOW)/100 000)*100 000。
為指示明顯和方便交互,系統設計了LED指示燈,用來系統報警,還設計了按壓式按鍵,如圖6所示。

圖6 按鍵及指示燈部分電路圖
其中,LED接nRF52832引腳P0.31;BUTTON接nRF52832引腳P0.08。
該座位狀態監測系統軟件設計采用模塊化設計方法,使用C語言實現。根據不同功能,分為4個模塊,即主程序模塊、參數設置模塊、座位狀態數據采集模塊和數據上傳模塊。其中每個模塊又可分為多個子模塊,既相互獨立又相互聯系[13]。
座位狀態監測系統的工作流程如下:系統上電后,按順序對nRF52832、KX022以及其他外圍設備進行初始化,如果初始化失敗,設置LED定時閃爍,并進行重新初始化;所有設備初始化完成后,KX022定時讀取當前三個方向角度值,傳送給nRF52832;nRF52832讀取當前電池電量,并計算,當電量低時,LED燈定時閃爍;nRF52832對以上兩個數據計算后,打包并發送至基站,隨后進入低功耗休眠狀態;休眠狀態設定的時間到后,進行下一次讀取方向角度值和電量值并打包傳送的循環。
總體流程圖,如圖7所示。

圖7 系統流程圖
其中,nRF52832的初始化分為時鐘初始化、定時器初始化、調度器初始化、藍牙初始化和LED及按鍵初始化,分別由以下幾個函數來實現: void nRF52_clock_init(void),void nRF52_timers_init(void),void scheduler_init(void), void ble_uart_init(void),void buttons_leds_init(void)。KX022讀取計算當前角度主要由以下兩個函數來實現具體功能:uint8_t KX122_get_raw_xyz(uint16_t *data, uint8_t *size),Uint8_t calc_angle(uint16_t *data, uint8_t *size, float angle[])。數據填充至藍牙由函數void ble_uart_tx(uint8_t sendbuf[], uint16_t size)來完成,nordic庫函數會將此函數的數據寫入藍牙串口,并發送至基站。
其中,KX022計算三個軸上角度變化量的程序如下。
uint8_t calc_angle(uint16_t *data, uint8_t *size, float angle[]) {
uint8_t i;
for (i = 0; i < *size; ++i) { //*size定義為3,是X、Y、Z三個軸
angle[i]=-((((float)data[i]* 0.061f)/1000.0f)*9.8f)*(45.0f/9.8f );//計算某個軸的角度變化量
}
程序中計算某個軸角度變化量的原理,描述如下。
從KX022寄存器讀取到的數據值,是沒經過換算的值,需要換算得到角度。16 bit最高位是符號位,剩下15 bit是數據位,數據范圍是-32 768至+32 767。我們選擇KX022的測量靈敏度為±2 g,所以分辨率為±0.061 mg/LSB。分辨率的計算方法為(2 g/32 768)*1 000=0.061 mg/LSB。原始數據轉換為角度的計算方法如下。
設原始數據為x,則原始數據對應角度=((x*0.061 mg/LSB)/1 000*9.8)*(45°/9.8)。
為了分析該系統的性能,做出了實物并進行了功能測試。測試方法如下。
(1) 斷開nRF52832的引腳P0.0和P0.1,LED燈會閃爍;
(2) 斷開KX022芯片引腳1(SDO/ADDR)和引腳4(TRIG)的接地,LED燈會閃爍;
(3) 實測紐扣電池電壓為2.0 V,安裝在系統上,上點后,LED燈會閃爍。
同時,在基站設備R900藍牙上位機上做了設置,當收到nRF52832發送的數據包后,R900藍牙基站數據燈閃爍。實際測試,當系統實物動、靜狀態發生改變時,R900藍牙基站數據燈會閃爍,證明監測到了狀態變化,并傳送到了基站。
以上測試表明,系統在發生異常時監測到錯誤并報警,對系統的運動狀態也能做到很好的監測,符合設計需求。
針對現在圖書館座位預約管理系統中存在的預約座位后不去,或者遲到早退,從而使自習座位空置,浪費座位資源這一問題,本文設計了一款基于單片機的座位狀態(有人/無人)監測系統,并對其性能進行了測試。該系統根據傳感器監測到的三維量的變化判座位上是否有人,并實時傳送到基站。該系統和現有的座位管理系統對接后,把采集到的座位狀態數據利用在座位預約管理系統中,能夠解決當前圖書館自習座位空置等浪費現象,同時,也必將優化圖書館自動化管理策略,推動圖書館信息化建設與發展,提高圖書館讀者服務工作和業務工作的質量和效率。在一定程度上,有較大的推廣應用價值。