李 楠,張蒼穹
(1.吉林化工學院信息與控制工程學院,吉林吉林132022;2.國電長源荊州熱電有限公司,湖北荊州434000)
目前市場中的鎖具大致分兩類,電子鎖和機械鎖.機械鎖與電子鎖相比最大的缺點在于,機械鎖的金屬彈子標準碼外露,可用工具試探性開啟[1].而對一些電子鎖而言,其識別碼輸入接口外露,也可通過專業解碼器解碼開鎖[2].結合兩者的優缺點,在傳統機械鎖具的基礎上進行改進,加裝檢測鑰匙齒形的位移傳感器和遠程報警功能,只有檢測的鑰匙齒形與預設齒形一致時才能開鎖.當檢測到有試探性開鎖時立即鎖定并遠程報警,大大提高了鎖具的安全性,有效地防止技術性開鎖.其中,對于鑰匙齒形的判斷是至關重要的部分,決定了系統安全性和穩定性,因此本文著重對系統軟件部分進行了討論.
如圖1所示電子鎖系統,整個電子鎖系統分別采用了兩個ATmega16單片機作為主、從控制器.從機通過紅外對射管判斷鑰匙是否插入,后由光柵位移傳感器采集鑰匙的齒形信息,并將這些信息通過總線發送給主機.主機則根據接收到的信息發出相應的控制命令,主要包括:控制LCD12864向用戶顯示當前的狀態信息,控制MP3-TF-16P語音模塊向用戶發出語音提示,若鑰匙信息正確則直接開啟電磁門鎖,當試錯超過3次時控制GSM模塊向用戶發送報警信息,用戶可通過手機遠程解鎖[3].電源部分除了正常的供電模塊外還配有備用電源模塊,防止失電時系統無法正常工作.

圖1 電子鎖系統組成
根據系統的硬件組成和功能要求,進行了軟件部分的開發,利用ICCAVR開發環境編寫程序并編譯成目標代碼.系統程序流程圖如圖2所示,系統通電后,單片機首先需要進行程序的初始化,包括初始化定時器、外部中斷、UART、SPI總線接口以及其他各類I/O口,
并初始化設定所有記錄變量、儲存數組以及狀態變量.初始化完成后,系統進入等待模式等待用戶插入鑰匙.當有鑰匙插入后,光電開關檢測鑰匙是否插入,副控制器向主控制器發送鑰匙已經插入的編碼信號,開始采集鑰匙齒形數據并進行鑰匙齒形比對.如匹配,由主控制器控制開啟電磁門鎖,并向用戶顯示鑰匙是正確的.如不匹配,則向用戶顯示鑰匙是錯誤的,并累計錯誤次數.當累計錯誤超過3次后,系統將自動鎖定.在鎖定狀態中,用戶的任何操作都是無效的,主控制器將一直等待用戶通過短信發送過來的密碼,當密碼驗證正確后系統才會解鎖.

圖2 系統程序流程圖
軟件部分主要包括:光電開關檢測程序,位移傳感器檢測程序,齒形比對程序,SPI通訊程序,GSM模塊程序和顯示、語音提示程序等.
在用戶插入鑰匙時,系統需要即刻檢測出鑰匙的插入動作.這需要光電開關硬件電路與檢測程序軟件的相互配合.本系統使用的光電開關是對射式光電開關,這類光電開關檢測到物體遮住光線后,會在輸出口產生電平變化.可直接利用ATmega16 I/O口的定時捕獲功能獲取電平信息.當檢測到I/O端由高電平轉換為低電平,軟件會修改內部狀態變量從而控制內部程序的流程.
在鑰匙插入過程中,鑰匙的齒形會引起光柵位移傳感器測量軸的運動.由于測量軸的運動會使光柵位移傳感器內部光柵產生相互的位移,基于摩爾衍射檢測位移量的原理,傳感器的光電接收元件會接收到強度周期變化的衍射條紋.由于衍射條紋強弱變化的影響,光柵位移傳感器的檢測電路會產生兩路脈沖信號A和B.副控制器接收來自于光柵位移傳感器的信號,并通過辨別脈沖個數和相位差值獲得位移的大小和方向.
位移傳感器檢測程序的設計就是基于上述原理,利用單片機的兩個定時/計數器判別傳感器輸出脈沖的特性.當脈沖A上升沿時,定時/計數器0產生溢出中斷,在處理中斷程序時,單片機判斷脈沖B的狀態.當脈沖B為低電平,則判定位移為正向,同時記錄一次正向脈沖個數.當脈沖B上升沿時,定時/計數器1產生溢出中斷,在處理中斷程序時,單片機判斷脈沖A的狀態.當脈沖A為低電平,則判定位移為反向,同時記錄一次反向脈沖個數.為了在換向時及時記錄前一運動方向中位移的距離,程序中設置了兩個中間變量(分別是achange和bchange).當脈沖A比脈沖B超前,位移為正向時,置位achange,判斷bchange是否為1.當bchange為1時,將bchange復位,并認為位移量由反向向正向換向一次.換向一次則將先前記錄的脈沖量和方向寫入儲存數組中,并清除先前的記錄.反之,當脈沖B比脈沖A超前,位移為正向時,職位bchange,判斷 achange是否為1.當achange為1時,將achange復位,并認為位移量由正向向反向換向一次.換向一次則將先前記錄的脈沖量和放線寫入儲存數組中,并清除先前的記錄.這樣編寫程序,每次位移方向變化的時候,控制器會及時記錄一次位移的變化量和方向.這樣,控制器可以對位移量進行精確的測量.
當位移傳感器采集到的位移變化次數大于5次,系統會將獲取到的數據與預設數據進行比對并判斷,將比對結果發送給主控制器.在設計程序時,為了滿足這個要求,加入了鑰匙齒形比對函數、結果判斷函數、SPI通訊程序、編碼函數以及一些中間變量如換向計數變量、位移方向和大小記錄數組、預設數組、正確計數變量、錯誤計數變量以及狀態變量.
當系統獲取到鑰匙齒形的全部數據(即換向計數變量大于5次后),系統進入鑰匙齒形比對程序.系統依次加載鑰匙齒形數據(位移方向和位移量數據),將這些數據和已知數據對比.每次對比正確時,正確計數變量加1;反之,錯誤計數變量加1.經過鑰匙齒形比對程序后,系統進入結果判斷函數.系統判斷正確計數和錯誤計數的大小關系,當正確次數大于錯誤次數,系統將狀態變量設為1.當正確次數小于錯誤次數,系統會將狀態變量設為2.結果判斷完成后,系統進入編碼函數.編碼過程中,如果系統狀態變量為1時,系統將編碼0x05通過SPI通訊程序發送給主控制器.如果系統狀態變量為2時,系統將編碼0x06通過SPI通訊程序發送給主控制器.主控制器接收到副控制器發送的編碼信息后,將進行解碼,并根據解碼結果進入相應程序.
主機與從機之間通信通過ATmega16的SPI端口完成.設計程序時,只需要適當的配置控制寄存器(SPCR和SPSR寄存器)中特定位的值,即可配置通訊模式[4].
當單片機上電后,程序將初始化SPI接口的相關控制寄存器.初始化后,副控制器每次向主控制器發送數據時,將強制拉低端的電平.這樣,可以將需要傳輸的數據寫入SPDR中,硬件會自動將數據發送給主控制器.主控制器接收數據后將產生中斷,進入中斷處理程序后,可以從SPDR寄存器中取出副控制器發送來的數據信息,并進入解碼程序進行判斷.
根據系統要求,當系統需要遠程報警時,GSM模塊需要將系統的報警信息發送給用戶.當系統鎖定時,系統需要根據用戶發送過來的密碼進行解鎖.GSM模塊提供了AT Command接口,用于對模塊靈活控制的控制指令[5].在系統發送短消息時,系統能夠使用GSM AT指令通過串口向GSM模塊發送各種命令.通過AT指令,系統可以控制GSM進行SMS消息的接收和發送.
為了更好地服務用戶,系統具有LCD顯示功能和語音提示功能.在顯示器控制上,采用串行總線進行控制.編寫顯示程序時,顯示器制造商為用戶提供了一些基本指令字和一些擴展指令,只需要設計與串行控制總線相匹配的底層讀寫函數,并基于這些函數設計LCD控制程序即可.MP3-TF-16P語音模塊同樣為用戶提供了控制指令格式和基本控制指令,這些指令可以使控制器輕松的完成對語音模塊的控制操作.如果控制器需要語音模塊播放指定語音時,控制器可以通過串行端口向模塊發送格式一定的控制指令.通過這些控制指令,控制器可以自由的控制語音模塊.
通過編譯后的程序,使用集成開發環境AVR Studio將目標程序寫入單片機中,再利用JTAG接口在線調試程序.測試的過程分別用兩把鑰匙測試各項功能,一把為正確鑰匙,一把為錯誤鑰匙.首先插入正確鑰匙,圖3為當鑰匙插入門鎖時,系統判斷出已經有鑰匙插入.圖4為經過齒痕檢測,比對正確后成功驅動電磁門鎖打開,并通過顯示器提示.圖5為當插入錯誤鑰匙,并超過3次時,系統判斷鑰匙錯誤鎖定系統,并通過GSM模塊向用戶綁定手機成功發送短信,進行遠程報警.圖6為用戶通過手機發送短信,系統驗證正確后成功進行遠程解鎖功能.

圖3 判斷鑰匙插入功能

圖4 齒痕檢測正確成功開鎖功能

圖5 錯誤超過3次發送短信報警功能

圖6 短信密碼正確遠程解鎖功能
屏幕和手機所顯示的內容,均為搭接硬件基礎上,實物仿真測試結果,該軟件能夠實現正確判斷鑰匙是否插入,位移傳感器檢測,齒形信息比對,SPI通信,GSM遠程報警,顯示狀態信息,語音提示功能.
本文在設計了智能電子鎖硬件裝置的基礎上,對其軟件部分進行了設計,其中位移傳感器檢測程序、齒形比對程序和GSM遠程報警程序是軟件部分的重點,決定了整個系統能否正確判斷鑰匙齒形信息,對電子鎖的安全性起到了至關重要的作用.經實際測試表明,該軟件系統能夠滿足整個電子鎖系統的要求,準確判斷是否有試探性開鎖,并及時遠程報警,提高了門鎖的安全性,界面友好,可讀性強.
[1] 顧光旭.智能密碼電子鎖設計[J].鹽城工學院學報,2009,22(1):49-52.
[2] 王治理.電路連接的鎖具研究[J].中國新技術新產品,2013,21(6):10.
[3] 李楠,張蒼穹.具有遠程報警功能的智能電子鎖[J].吉林化工學院學報,2014,31(7):57-60.
[4] ATMEL.ATmega16 Datasheet[DB/OL].http://www.atmel.com/Images/doc2466.pdf,2010-07/2014-02
[5] SIEMENS.SIEMENS TC35/TC37 AT Command Set[DB/OL].http://wenku.baidu.com/link?url=F7AGsDXigCMoBoROBAi8RXDhfuvrxNVVtIz5hjX30G L4HdYi8uM14ksXNn_ T34aSCcwMEh4Jtlq2ipy8q6 COkzJXk1DTV626mj4SSh1L6Cu,2002-05-29/2013-09-10.