張俊芳,伏亞強,張方娟,張藝飛
(1.寧夏師范學院物理與電子信息工程學院,寧夏固原 756000;2.寧夏師范學院納米結構與多功能材料工程技術研究中心,寧夏固原 756000;3.西安汽車科技職業學院基礎部,陜西西安 710038;4.深能保定發電有限公司,河北保定 072150)
根據國家交通部門統計分析,我國交通事故是世界的20%左右。疲勞駕駛是造成交通事故的主要因素之一[1-2]。所以研究出可以控制疲勞駕駛并及時給予警報的提醒系統,對于降低交通事故和保護國家財產安全具有重要意義。本車載疲勞駕駛系統的設計,主要是軟件控制和硬件實物。硬件實物包括3個部分:脈搏信號采集模塊、控制模塊、顯示和報警模塊。軟件控制主要用C語言編寫,為便于程序修改和調試而采用模塊化設計結構,采用的軟件主要是Keil、Proteus等。本設計符合汽車智能化的發展趨勢,也有效解決了疲勞駕駛安全、控制追尾問題,既滿足了大眾對實用型安全疲勞駕駛監控系統的需求,又對企業設計生產出疲勞駕駛監控產品打下良好的基礎。
當駕駛員處于疲勞駕駛時候,血液的流通速率就會相應的減緩,此時大腦出現昏迷狀態,注意力降低,出現不規則的點頭情況。本設計中的脈搏監控模塊中的光電傳感器ST188利用心臟跳動時脈搏處的血液發生變化而產生不同的反射率,檢測到相應的脈搏信號。由于測得信號非常微弱,且屬于不規則的脈沖信號,所以要通過信號放大與整形電路中的放大器LM358將信號放大。同時,又由于放大后的信號有不規則的脈沖信號和低頻干擾,所以信號還需要整形。將放大后的信號傳送給整形電路對其進行整形,整形后得出方波信號。將方波信號通過單片機P3.2的IO接口輸入給單片機,單片機的外部中斷對其進行計數,脈搏信號的采集時間設定為10 s,10 s測得脈搏信號數值,然后通過單片機中設定的算法對其作出相應的計算,即10 s的數值乘以6得出1 min的脈搏數目,最終換算出1 min脈搏跳動的次數。例如10 s的時間光電傳感器測得血液的反射次數12次,即10 s內脈搏跳動了12下,通過單片機中算法得出12×6=72(下),這就是測得1 min脈搏跳動的次數。單片機系統運算出的數據通過P0.0-P0.7口與顯示屏的DB0-DB7連接進行數據傳遞,傳送到LCD液晶顯示屏的數據將顯示脈搏跳動的次數。如果檢測結果超出預先設定理論測量范圍,聲光報警系統就會報警提示疲勞駕駛人員。
系統設計分為6大模塊。單片機主控模塊進行數據處理。LCD1602液晶顯示模塊顯示初始狀態、數據和處理結果。脈搏測量模塊以脈搏傳感器為信號采集,然后再經過信號放大與整形電路獲得相應信號波形。超聲波測距模塊主要有超聲波發射、接收探頭,超聲波發射調整電路,超聲波回波接收處理電路和相應的模塊接口組成。電源模塊為系統提供電力保障。復位電路是系統出現錯誤或者要恢復初始狀態設計的電路。系統結構框圖如圖1所示。

圖1 系統結構框圖
系統硬件電路主要有主控電路、液晶顯示電路、復位電路和脈搏信號檢測電路組成。
主控電路的設計主要由STC89C52單片機、晶振電路、復位電路組成。Proteus中的單片機主控電路仿真如圖2所示。

圖2 Proteus中的單片機主控電路仿真圖
由于電路在仿真過程中沒有相應的脈搏信號,所以設置了按鍵模塊,用以模擬脈搏信號的輸入[3]。模擬脈搏信號的按鍵輸入電路如圖3所示。

圖3 模擬脈搏信號的按鍵輸入電路圖
按鍵模擬的人體脈搏跳動產生的脈沖信號首先被光電傳感器ST188采集,采集得到的脈搏信號通過采集電路處理后,所測得的結果與單片機的P3.2引腳相連。將控制系統中單片機中斷觸發設定為負跳變觸發,當按鍵模擬的脈搏跳動產生的脈沖信號的下降沿到達時,主控系統中的單片機就會觸發產生中斷,設定算法程序會對脈沖信號開始計時,在下一個脈沖信號的下降沿出現時,主控系統中的單片機會計算出前后相鄰兩個下降沿之間的時間間隔ΔT,計算所得到的結果(即ΔT)就是被檢測駕駛員的一次脈搏跳動。這就是模擬出的一次脈沖信號的跳動原理。
計算出的結果通過單片機P1口與液晶顯示器的DB口進行數據傳輸,數據再次進行處理后顯示出來。
顯示屏顯示出檢測的脈搏值后,主控系統中的單片機將顯示出的結果與預先設定人的正常脈搏跳動的標準范圍(60~100次/分)進行分析和比較。如果檢測出的脈搏值A在60~100次/分內,則說明該駕駛人員脈搏正常,也就是該駕駛人員沒有進行危險的疲勞駕駛行為;如果檢測出的脈搏值A<60次/分(疲勞時心率一般<60次/分),則說明該駕駛人員脈搏不正常,即該駕駛人員處于疲勞駕駛,聲光報警系統就會發出報警提示。脈搏監控模塊的電路如圖4所示。

圖4 脈搏監控模塊的電路圖
為了更好的提示駕駛人員,并及時觀察顯示屏上的脈搏值,電路中設置了一個報警電路,通過單片機系統控制。每次檢測到脈沖信號時,與主控系統中單片機P3.7引腳連接的蜂鳴器SP都會發出“嘀嘀”提示音。當再次聽到蜂鳴器發出相同的提示音時,則說明1 min的檢測脈搏計數已經結束。使用這種檢測方法對駕駛人員及時做出有效、高速、準確的判斷,判斷他是否處于疲勞駕駛狀態。
為了更加準確的檢測出相應的結果,本系統設計的有效測量范圍為50~199次/分。在檢測脈搏信號時避免可能出現的干擾信號,主控系統單片機會對檢測的2個脈沖之間的時間間隔ΔT進行檢測,也就是突發信號的出現不在預先設定的有效測量范圍之內時,會忽略該干擾帶來的影響并且不顯示出來。這樣在實際運用中會有效降低疲勞駕駛系統中的脈搏測量出現的不良誤差。
用STC89C52單片機P0口作為數據線,用P1.0、P1.1、P1.2分別作為LCD的RS、R/W、E。RS是寄存器選擇,R/W是讀寫引腳,E是使能端。在顯示模塊初始化時,清屏、設置8位數據接口位,1行顯示行,5×7點陣字型顯示,再設置整體顯示,最后設置正向增量方式且不移位[4]。Proteus環境中的單片機主控系統與液晶顯示器引腳連接如圖5所示。
脈搏檢測電路模塊設計中最重要的是采集微弱的脈搏信號,所以采集微弱的脈搏信號電路的功能是由光電傳感器ST188將采集的脈搏信號轉換為電信號(幾十mV),因為轉換后的電信號非常微弱(幾十mV),所以轉換后的電信號要通過放大電路對電信號進行放大100倍,達到幾V的標準。又因為放大后的信號波形是不規則的脈沖信號波形,所以要對信號進行濾波整形,整形后得出的方波信號電壓為幾V。信號經過放大整形電路最后輸出的電壓滿足了計數器的要求。信號放大、濾波和整形電路框圖如圖6所示。

圖6 脈搏信號放大、濾波和整形電路框圖
人體脈搏信號的采集使用紅外光電轉換器ST188采集信號。嵌入在方向盤特定位置的紅外光電轉換器ST188中的紅外光發射端發射出紅外光,照射駕駛人方向盤的指頭中血脈流動情況,把脈搏跳動的物理信號轉換為電信號,其原理電路如圖7所示。

圖7 傳感器信號調節原理電路
因為光電傳感器ST188模塊供電僅需要非常小的強電流供電(選用+5V電源),所以紅外管VD采用ST188模塊。傳感器信號調節原理電路中R4取值為330 K,R5取值為20 K。把光電傳感器放置特定的指尖脈搏之處,光電二極管檢測到的物理信號會隨人脈搏強度的變化而發生變化。
因檢測到的脈搏信號輸出值十分微弱,一般在μV級別,而且輸出的電信號一般有較大的噪聲干擾,因此需要利用LM358搭建一個放大和濾波電路將檢測的脈搏信號進行放大、濾波。Proteus中的放大濾波電路如圖8所示。

圖8 放大濾波電路
檢測到的脈搏信號經轉換后得到電信號,電信號經過了放大和濾波電路后仍然是不規則的脈沖信號,還有一些低頻干擾信號。這種信號不滿足計數器計數的要求,所以需要對信號進行相應的整形,整形后得出具體的方波信號以便對脈沖個數進行計數。本設計的整形電路采用電壓比較器,放大濾波后的波形整形主要是為了提高抗干擾能力。因為LM358內部含有2個獨立的高增益和內部頻率補償電路,所以集成運放采用了LM358模塊。為了直觀、有效地檢測脈搏的跳動,在LM358上接一個LED燈用來指示檢測脈搏跳動的狀態,LM358連接電路如圖9所示。

圖9 LM358連接電路
在STC89C52單片機控制系統中,它的時鐘電路有外部和內部2種時鐘方式[5]。本系統設計需要的時鐘頻率是12 MHz,電路需要三點式電容振蕩電路來幫助晶振起振,所以需要在時鐘電路兩端上接負載電容X1,這樣就能達到晶振起振的效果。在Proteus中XTAL2、XTAL1兩端分別接2個33pF的諧振電容,這樣是為了對特定頻率的電壓產生阻抗通道,方便不受阻抗的信號通過。在時鐘電路提供穩定的時鐘信號后,單片機控制系統就能夠逐步從只讀存儲器(ROM)中讀取指令執行程序,便于以后的計數。晶振電路如圖10所示。

圖10 晶振電路
復位電路也是單片機控制系統中必要的外部電路[6]。單片機控制系統的部分電路中,在振蕩器運行時,RST的引腳需要保持2個周期的高電平輸入信號,復位過程才能夠完成。此時,CPU將發出內部復位信號。在測得RST是高電平后的第二個周期時進行的復位操作,在此之后,檢測的每個周期都將重復復位操作模式,直到檢測到RST變為低電平時停止重復操作。正常情況下,電源供電電壓(Vcc)上升時間小于1 ms,內部振蕩器啟用時間也是小于10 ms。此時,把RST的引腳通過10 μF的電容接到Vcc上再與10 kΩ的電阻和地連接,便能產生上電自動復位。如圖11所示復位電路。

圖11 復位電路
本系統設計使用C語言編程和Keil軟件開發工具,將系統的各個功能進行模塊化處理,其中各模塊具有分工明確的特點,主函數只需要調用相應的模塊子程序。模塊化的設計方式能夠更好理清主程序思路,也方便于程序理解和其他功能的擴展。本系統設計的整體流程如圖12所示。

圖12 系統設計整體流程圖
脈搏測量是在定時器中斷中測量脈搏間隔得到的結果。主要是記錄第一次脈搏跳動的時間并記錄下時間,當下一次脈搏跳動時再次記錄下時間,然后算出兩次脈搏跳動的時間間隔。當連續兩次檢測時間間隔小于8×50 ms=400 ms不處理,當超過25×50 ms=1.25 s沒有檢測到信號,就停止信號的檢測,然后再由60 s除以時間間隔,得出相應的脈搏數。
顯示模塊程序首先要對顯示模塊進行初始化,判斷是否有按鍵按下,并判斷按鍵按下的取鍵碼是什么。如果是數字鍵和清零鍵將相應值送入顯示緩沖并顯示。如果按下功能鍵,就判斷是哪個功能鍵并將相應值送入緩沖區等待數值輸入將結果送入緩沖區,等待數值輸入將結果顯示。如果功能鍵是函數,輸入數值后將結果送入緩沖區直接顯示。
先用Proteus軟件繪制本系統的電路圖,然后用Keil軟件編寫模塊運行的C程序,最后用仿真軟件進行模擬仿真電路的運行情況。在軟件測試中原理圖不會出錯,主要是程序編寫中會出現很多錯誤以及一些函數功能無法實現,經過多次程序的修改基本上達到預期效果。軟件調試如圖13所示。

圖13 軟件測試結果
根據要求和軟件的流程圖,將編寫好的程序,通過生成Hex軟件,在Proteus軟件上進行仿真,用軟件連接好硬件原理圖并測試(如圖14-圖16),運行測試是否實現所需求的指標。

圖14 按鍵模擬正常狀態下的脈搏檢測結果

圖15 按鍵模擬正常狀態下的脈搏檢測結果

圖16 按鍵模擬人在疲勞狀態時的檢測結果
系統設計分為硬件電路設計及相應的程序設計完成對駕駛人員疲勞駕駛狀態的實時檢測并提醒,通過Proteus仿真實際硬件電路的電路連接及工作性能,最終系統實現了通過對駕駛人員脈搏信號的檢測及頭部距離方向盤距離的實時檢測,能夠對疲勞駕駛狀態成功檢測并報警,系統具有易于實現、成本低、功耗低、可行性強的廣闊應用前景。