北京林業大學理學院 李 驍 王彬媛 王振中 劉炳言 李昱釗 張 黔
近視是一種典型的亞健康狀態,它已對青少年的視力健康構成了極大的危害。如何有效地防止青少年近視,已成為國內外的熱門話題。[1]設計一款可以自動檢測學習環境、提醒學生坐姿和時間的視力保護器從而糾正學生的不良坐姿和生活習慣的設備對中小學學生來說很有必要。[2]通過對需求及可行性分析,本設計以STC89C52型單片機作為電路核心,具有以下功能:當使用者與書本的距離小于設定值,或學習環境光強過強過弱,以及學習時間達到設定時間,電路自動發出聲光報警,提醒使用者注意;使用者與桌面的距離、光線強度、學習時間可根據用戶要求設定。
設計包括顯示,超聲波測距,光強檢測,計時,報警,按鍵以及電源模塊,實物圖如圖1.1所示。
設計使用LCD1602顯示模塊。管腳圖如圖1.2所示。在程序中定義 LCD1602管腳,包括RS,R/W,E。定義中主要注明LCD管腳分別對應單片機的哪些I/O口[3]。然后定義數據讀、寫的子程序,并對LCD進行清屏初始化處理。最后將各電路與單片機相連,當各個物理量傳給單片機時,由單片機控制顯示器顯示物理量。

圖1.1 視力保護器結構圖

圖1.2 LCD1602管腳圖
設計采用HR-SC04模塊進行超聲波測距。超聲波測距的原理(如圖3所示)是:超聲波的傳輸速度已知,設為v,在測量過程中超聲波發射,遇到障礙物時返回,所用時間為t,則距離s=v*t/2。由此即可測得使用者與桌面距離。
從時序圖可以知道超聲波模塊的工作方式。如圖1.4所示,先由單片機向模塊發送一個10us的脈沖信號,當模塊收到信號,便發送8個40KHZ的周期電平并檢測回波。檢測到回波時,模塊向單片機發送一段脈沖,其脈沖寬度與發射返回時間成正比,所以只需對脈沖寬度進行計時,即可求出所測距離。

圖1.3 超聲波測距原理圖

圖1.4 超聲波測距時序圖
電路圖如圖1.5所示。設計采用光敏電阻作為光信號采集器件,把不易測量的光照強度轉化為容易測量的電阻值。把光敏電阻串聯在直流電路中即可把不同的電阻值轉化為不同的電壓值,于是就把對光照信號的處理轉化為對電壓信號來處理[4]。通過ADC0832模數轉換器輸出8位的二進制數據,將模擬信號轉化為數字信號供單片機處理,此時8位數據代表是光敏電阻當前的阻值,由ADC0832的芯片資料,以及光敏電阻的特性曲線,即可測量當前環境下的光強強弱。

圖1.5 光強檢測電路
此模塊主要使用軟件編程。STC89c52單片機內有兩個可編程的定時器/計數器,具有兩種工作模式(計數器模式和定時器模式)及4 種工作方式(方式0,方式1,方式2,方式3)。其控制字均在相應的特殊功能寄存器中,通過對它的特殊功能寄存器的編制,可以方便的選擇適當的工作模式和工作方式[5]。定時器/計數器的輸入脈沖和機器周期一樣,為時鐘頻率的1/12[6]。設計中定時為50分鐘,我們便以此為例進行計算。其計時初值可計算如下:50*60=3000s=30000*100ms。將單片機的兩個定時器T0、T1進行分工,T0用來定時,時間為100ms,T1用來計數,次數為30000次。則將T0置為工作方式1,其初值為2^16-100ms/2us=15536=C3B0H,T1置為工作方式11,初值為65536-30000=35536=8AD0H。
當T0計時100ms后,產生溢出中斷,在中斷程序中進行設置,使T1計數一次,T0自動重裝初始值,再次進入100ms定時。當T1進行30000次計數后,時間便達到50分鐘,完成了一次50分鐘的定時。
報警電路如圖1.6所示。將蜂鳴器與發光二極管并聯,使其同時進行報警。蜂鳴器和發光二極管的正極接到三極管的集電極,負極接地,三極管的基級經過限流電阻R1后由單片機的引腳控制,當單片機的引腳輸出高電平時,三極管Q1截止,報警電路沒有形成回路,發光二極管反向截止,蜂鳴器不發聲,二極管不發光;當單片機引腳輸出低電平時,三極管導通,這樣蜂鳴器的電流形成回路發出聲音,發光二極管正向導通發光。因此,可以通過程序控制引腳的電平高低來控制報警電路是否工作。

圖1.6 報警電路圖

圖1.7 按鍵電路
由于所需的按鍵數量較少,設計選用了編程上較為簡單的獨立式鍵盤接法。將按鍵(如圖1.7所示)的一端接地,另一端與單片機的某一I/O口相連。在程序中將I/O口置為高電平,按鍵沒有按下時,I/O口保持高電平。當按鍵按下時,I/O口接地,此時I/O口被強制置為低電平,當按鍵松開后,I/O口又恢復到高電平。只要在程序中檢測該I/O口的狀態,即可知道按鍵是否被按下。在程序中加入判斷語句,使得不同的按鍵被按下時,執行不同的語句,起到不同的功能,由此達到設置報警范圍的目的。
圖1.8所示,采用3節1.5V干電池串聯作為設計供電。在實際測試中,電源電路表現良好,能穩定地為各模塊供電,并且便于更換電池。

圖1.8 電源電路
軟件設計部分使用了C語言編程,先規劃主程序的流程,再在其中加入子程序,與硬件模塊一一對應,易于調試與檢測。

圖1.9 主程序流程圖

圖2.0 測距子程序流程圖
本設計采用模塊化的設計方法,較好地達到了超聲波測距報警、光線強度報警及定時報警功能,具有以下優點:(1)系統簡單穩定,使用方便;(2)單片機具有的I/O口擴展功能,便于后期加上其他的模塊,增加更多功能;(3)顯示清晰,并且顯示的是即時數據;(4)可以根據具體使用環境改變報警值的范圍;(5)使用模塊化設計,C語言編程,可移植性強;(6)電路結構簡單,成本低廉,不易發生故障,且損壞時易修復。
同時,該設計也存在一些不足:(1)距離與光強的誤差還有進一步改進的空間;(2)只考慮了學習時的視力保護,對于其他場合的使用考慮較少;(3)使用的測距與測光模塊會受到環境溫度的影響,后期需要考慮加上溫度傳感器,進一步減小誤差。
[1]王曉悅,姜永東.264 名青少年學生視覺健康調查及分析[J].四川醫學.2011.(7).1136-1137.
[2]張標.視力保護器[J].發明與創新,2012.9.11.21-26.
[3]趙亮.液晶顯示模塊LCD1602應用[J].電子制作,2007.
[4]羅均,謝少榮.微型傳感器及其應用[M].北京:化學工業出版社,2005.136-138.
[5]李維民,張成勝.單片機定時/計數器工作頻率的研究[J].牡丹江師范學院學報(自然科學版),2013.2.21-22.
[6]劉斌,宋榮勤.通用單片機定時系統,1991.1.