国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Arduino的眼睛調節(jié)演示器的設計與實現

2021-05-08 04:06黃世祥
中國新技術新產品 2021年4期
關鍵詞:光屏變焦透鏡

顧 艷 黃世祥 馬 慧

(1.貴州醫(yī)科大學生物與工程學院,貴州 貴陽 550004;2.貴州醫(yī)科大學物理教研室,貴州 貴陽 550004)

0 引言

目前,在中學物理和醫(yī)科院校醫(yī)學物理的教學中,眼睛調節(jié)功能的教學演示基本是使用手動變焦的方法,該方法仿真度不高,受外界影響大,不易得到清晰的像[1]。該文以Arduino單片機為核心主控板,設計并制造了1款能自動模擬眼睛調節(jié)功能的演示器。該演示器用自動變焦透鏡來模擬晶狀體,可以形象、精準地模擬和演示眼睛自動調節(jié)的功能,還可以達到自動矯正近視眼和遠視眼的目的。

1 系統總體設計

該眼睛調節(jié)演示器通過Arduino系統、可變焦透鏡、HC-SR04超聲波傳感器測距以及步進電機板塊去模擬眼睛的自動化調焦過程。單片機選用Arduino UNO,用Arduino IDE編程控制整個系統,采用軟硬件結合的方式全自動、精準地模擬眼球成像。

該系統的工作原理如下:所視物與可變焦透鏡(用自制水透鏡模擬,自制方法成熟且易實現)的距離為物距,視網膜與可變焦透鏡的距離為像距,Arduino調用超聲波測出的物距u、像距v以及可變焦透鏡當前前后表面的曲率半徑r01、r02,并將結果顯示在LCD上。首先,根據物距u和像距v調用程序計算“晶狀體”的焦度,從而確定透鏡前后曲面的曲率半徑r1、r2;其次,用超聲波(結合二倍焦距法)測出透鏡當前r01、r02的值,與所需要的值r1、r2進行比較,程序計算出可變焦透鏡需要抽注液體的量;最后,由Arduino驅動電機推動螺桿,螺桿推動注射器通過管子給透鏡抽注液體以達到所需要的r1、r2的值,進而滿足所需要的屈光度,使“視網膜”上呈現出清晰的像[1]。系統的工作原理如圖1所示。

圖1 系統工作原理圖

1.1 演示器主要模塊的功能

1.1.1 Arduino

以Arduino為核心,控制超聲波傳感器開展測距的工作,并對測量得到的數據進行計算和比較,再將比較的結果反饋給步進電機,使其驅動注射器對透鏡里的液體進行抽注,從而達到自動調焦的目的。

1.1.2 可變焦透鏡

可變焦透鏡在整個過程中模擬眼睛的晶狀體,通過改變透鏡內的液體來實現自動變焦,從而達到所需要的的屈光度。

1.1.3 超聲波傳感器

通過超聲波傳感器將測得的物距、像距和透鏡兩球面曲率半徑的距離反饋給Arduino。

1.1.4 LCD1602A

LCD1602A將獲得的距離值顯示在LCD顯示屏上。

1.1.5 步進電機

通過步進電機驅動器驅動步進電機控制注射器工作,達到透鏡所需要的屈光度,從而實現眼睛自動調節(jié)成像的功能。

2 各模塊分析

2.1 Arduino UNO板塊

該演示器可以用Arduino、51單片機、MSP430、PIC以及AVR等單片機進行控制,從而實現自動化。51系列的單片機運行速度過慢,保護能力很差,很容易燒壞芯片;MSP430不適合初學者入門,占的指令空間較大;PIC的瓶頸比51還嚴重;AVR沒有位操作。而Arduino是1種便捷靈活、極易上手的軟硬件一體化平臺,通過Arduino IDE對Arduino UNO進行編程,Arduino IDE可以在Windows、Macintosh OSX以及Linux 3個主流操作系統中運行,對初學者來說,它極易掌握,同時有足夠的靈活性[2]。綜上所述,該演示器選用Arduino UNO作為硬件控制的核心,Arduino軟件作為整個項目的編程環(huán)境。

2.2 超聲波測距板塊

測量距離的傳感器有超聲波測距傳感器、激光測距傳感器、紅外線測距傳感器、24 GHz雷達傳感器等。紅外線測距傳感器的精度較低,適用于遠距離測量;激光測距傳感器的原理簡單,但是其成本較高,且激光容易對眼睛造成傷害;24 GHz雷達傳感器的方向性差、成本高。超聲波傳感器是將超聲波信號轉換成電信號的傳感器,由于其方向性好、成本低,因此,采用超聲波傳感器來實現演示器測量物距、像距及透鏡前后曲面曲率半徑的功能,超聲波傳感器的實物圖如圖2所示。

圖2 超聲波傳感器實物圖

在測距時,需要F光源、可變焦透鏡和光屏的光軸在同一條直線上且三者互相平行,這樣才有利于成像,還需要注意F光源、可變焦透鏡和光屏的間隔距離要恰當,固定可變焦透鏡和光屏,保證F光源處于活動狀態(tài)[3]。將與Arduino UNO連接的其中一個HC-SR04超聲波傳感器與F光源固定在一起 ,就可以保證在移動F光源時不用移動傳感器,測得的數據也更加準確。通過代碼對超聲波傳感器發(fā)出超聲波,當發(fā)出的超聲波遇到可變焦透鏡時,就會收到反射回來的超聲波,那么就可以得到F光源與可變焦透鏡之間的距離,即物距u。將與Arduino UNO連接的另一個超聲波傳感器和光屏置于同一水平位置,通過程序對超聲波傳感器發(fā)出超聲波,當超聲波遇到可變焦透鏡后也會反射超聲波,這時程序里便會獲得可變焦透鏡與光屏的距離,即像距v。同時,測得的距離也會顯示LCD上,在經過超聲波傳感器的測距后,電腦上運行的代碼便會收到反射回來的距離,然后通過空氣中的成像公式就可以確定透鏡前后曲面的曲率半徑r1、r2(為了簡便理解,可以將可變焦透鏡前后曲率半徑的數值視為相等,從而可以算出曲率半徑r1、r2)[1],如公式(1)所示。

再結合二倍焦距法,通過超聲波測出現有透鏡的焦距,從而確定可變焦透鏡當前前后表面的曲率半徑r01、r02。每獲得一次數據后就改變F光源的位置,依次循環(huán)獲取所需要的數據。整個過程除改變F光源的位置是通過手動完成的(測透鏡現有焦距時,需要手動移動光屏外),其余的都是Arduino通過程序自動完成的。

2.3 可變焦透鏡板塊

目前,可以通過驅動水泵或者注射器來給可變焦透鏡抽注液體,從而實現可變焦透鏡變焦的功能。由于注射器操作便捷且價格便宜,也更適合新手;因此該演示器采用注射器來實現變焦的功能。通過向內推動注射器的活塞來增加透鏡內的液體量,透鏡的曲度變大、焦距變??;同理,通過向外拉動注射器的活塞來減少透鏡內的液體量,透鏡的曲度變小、焦距變大[3]。用止水夾夾住注射器與水透鏡之間的軟管可以臨時固定透鏡的曲度和焦距,這就是可變焦透鏡[3]。目前,可變焦透鏡的具體制作方法已經相當成熟。

該方案使用步進電機和伺服電機驅動注射器,從而對可變焦透鏡內的液體進行抽注。伺服電機可以在受水或油滴侵襲的場所中應用,但它不是完全防水、防油的。而可變焦透鏡內的液體需要隨時被抽出或注入,因此伺服電機不合適。因為步進電機步矩值不受各種干擾因素的影響,例如電壓的大小、電流的數值、波形以及溫度的變化等,且與注射器連接簡單,易于驅動注射器工作,所以該演示器選用步進電機實現對透鏡內的液體進行抽注。

2.4 步進電機板塊

步進電機是1種將電脈沖控制信號轉變?yōu)榻俏灰苹蚓€位移的常用數字控制執(zhí)行元件,數字信號剛好是計算機擅長處理的數據類型[4]。

在使用超聲波傳感器測量物距后,調用Arduino編寫好的程序計算出透鏡所需要的曲率半徑,并將數據反饋給步進電機;步進電機驅動注射器給可變焦透鏡里抽出或注入液體,從而模擬眼睛調節(jié)的功能。

將步進電機連接到Arduino控制板的相應端口,用編寫好的程序測試步進電機能否正常工作,如果步進電機可以正常工作,就將步進電機連接到注射器的活塞。該文已經介紹了透鏡曲率半徑的計算方法,將計算得到的值與正常人眼所需要的曲率半徑做比較,并用程序計算出可變焦透鏡需要抽注液體的量,然后由Arduino驅動電機推動螺桿,螺桿推拉注射器活塞改變可變焦透鏡內液體的量,從而改變可變焦透鏡的曲度和焦距,直到在光屏上看到1個倒立的F像,進而使“視網膜”上呈現出清晰的像。

3 程序實現部分

該演示器部分程序如下。

3.1 超聲波測距程序設計

3.1.1 實物圖

在實際連接的過程中,將超聲波傳感器的GND接到Arduino擴展板的GND上,VCC接到擴展板的5 V電源,Trig接到擴展板的2號管腳,Echo接到擴展板的3號管腳。

3.1.2 算法描述

相關算法的描述如下:1) 控制口發(fā)出1個10 μs以上的高電平,就可以在接收口等待輸出高電平[5]。當有高電平輸出時,就可以打開定時器計時;當該接收口的電平為低電平時,就可以讀取定時器的值,根據得到的時間,就可以算出距離。2) 測試距離=(高電平時間×聲速(340 m/s))/2 ,計算得出的距離在LCD1602上顯示;需要注意的是,LCD1602在顯示之前需要清屏,否則液晶會有殘影,顯示的數字就不正確[6]。3) 在setup()函數中定義波特率,并在引腳的輸入/輸出功能之間進行選擇。這里定義LCD的型號為1602A,還定義了最初幾個用于清除 LCD的命令。loop()函數包括指令的主體,只要MCU在運行,它就會不斷迭代。該文使用多個命令處理超聲波測距的整個機制,并使用命令在LCD上顯示計算后的計算距離[7]。

3.1.3 主要程序

基于Arduino的超聲波傳感器測距的主要代碼如下。

將模塊與Arduino連接好,再把程序寫好并下載到Arduino中運行,就可以看到有數據在屏幕上輸出。

3.2 步進電機程序實現

3.2.1 硬件仿真模擬

由于步進電機和Arduino的連接過程中需要驅動,且連接管腳比較多,實物圖相對復雜;因此,用Proteus 8軟件進行模型仿真,Arduino與步進電機的仿真圖如圖3所示。

3.2.2 關鍵程序

Arduino有專門的Stepper庫來驅動步進電機,編寫時直接調用即可,部分程序如下。

Stepper.step函數的作用是控制電機轉多少步,當setps為正數時,步進電機正轉。該文就是通過電機的正轉與反轉去控制注射器的運動,當步進電機得到超聲波傳感器的測距反饋后,就會驅動注射器運行,通過編程計算液體的體積,步進電機給注射器1個動力,該動力驅動注射器工作,改變晶狀體的形狀,從而調節(jié)眼睛成像。

圖3 Arduino與步進電機的仿真圖

4 結語

該文以Arduino單片機為核心主控板,設計并制造了1款能模擬眼睛調節(jié)功能的演示器。該演示器不僅能演示正常眼睛成像的過程,還能演示遠視眼和近視眼的看物情況,并且還能自動調節(jié)近視眼和遠視眼使其正常成像;這樣不僅可以達到眼睛調節(jié)的作用,而且還簡化了眼睛矯正的過程,便于學生在演示過程中觀察,且具有使用簡單、功能多樣以及價格較便宜等優(yōu)點。該演示器在設計過程中存在忽略瞳孔調節(jié)光量的作用和忽略角膜的折光能力等缺陷;在未來的研究中,需要多從瞳孔和角膜的角度出發(fā),使演示器更加完善、更加接近真實。

猜你喜歡
光屏變焦透鏡
光屏的作用
大變焦比鏡頭
合理變焦拍遠景
寬譜段、動態(tài)局部高分辨離軸主動反射變焦系統
像與物大小關系如何判斷
掃描型長波紅外連續(xù)變焦光學系統
去掉光屏在哪能看到像