APP下载

基于Arduino的眼睛调节演示器的设计与实现

2021-05-08黄世祥

中国新技术新产品 2021年4期
关键词:光屏变焦透镜

顾 艳 黄世祥 马 慧

(1.贵州医科大学生物与工程学院,贵州 贵阳 550004;2.贵州医科大学物理教研室,贵州 贵阳 550004)

0 引言

目前,在中学物理和医科院校医学物理的教学中,眼睛调节功能的教学演示基本是使用手动变焦的方法,该方法仿真度不高,受外界影响大,不易得到清晰的像[1]。该文以Arduino单片机为核心主控板,设计并制造了1款能自动模拟眼睛调节功能的演示器。该演示器用自动变焦透镜来模拟晶状体,可以形象、精准地模拟和演示眼睛自动调节的功能,还可以达到自动矫正近视眼和远视眼的目的。

1 系统总体设计

该眼睛调节演示器通过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 步进电机

通过步进电机驱动器驱动步进电机控制注射器工作,达到透镜所需要的屈光度,从而实现眼睛自动调节成像的功能。

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软件作为整个项目的编程环境。

2.2 超声波测距板块

测量距离的传感器有超声波测距传感器、激光测距传感器、红外线测距传感器、24 GHz雷达传感器等。红外线测距传感器的精度较低,适用于远距离测量;激光测距传感器的原理简单,但是其成本较高,且激光容易对眼睛造成伤害;24 GHz雷达传感器的方向性差、成本高。超声波传感器是将超声波信号转换成电信号的传感器,由于其方向性好、成本低,因此,采用超声波传感器来实现演示器测量物距、像距及透镜前后曲面曲率半径的功能,超声波传感器的实物图如图2所示。

图2 超声波传感器实物图

在测距时,需要F光源、可变焦透镜和光屏的光轴在同一条直线上且三者互相平行,这样才有利于成像,还需要注意F光源、可变焦透镜和光屏的间隔距离要恰当,固定可变焦透镜和光屏,保证F光源处于活动状态[3]。将与Arduino UNO连接的其中一个HC-SR04超声波传感器与F光源固定在一起 ,就可以保证在移动F光源时不用移动传感器,测得的数据也更加准确。通过代码对超声波传感器发出超声波,当发出的超声波遇到可变焦透镜时,就会收到反射回来的超声波,那么就可以得到F光源与可变焦透镜之间的距离,即物距u。将与Arduino UNO连接的另一个超声波传感器和光屏置于同一水平位置,通过程序对超声波传感器发出超声波,当超声波遇到可变焦透镜后也会反射超声波,这时程序里便会获得可变焦透镜与光屏的距离,即像距v。同时,测得的距离也会显示LCD上,在经过超声波传感器的测距后,电脑上运行的代码便会收到反射回来的距离,然后通过空气中的成像公式就可以确定透镜前后曲面的曲率半径r1、r2(为了简便理解,可以将可变焦透镜前后曲率半径的数值视为相等,从而可以算出曲率半径r1、r2)[1],如公式(1)所示。

再结合二倍焦距法,通过超声波测出现有透镜的焦距,从而确定可变焦透镜当前前后表面的曲率半径r01、r02。每获得一次数据后就改变F光源的位置,依次循环获取所需要的数据。整个过程除改变F光源的位置是通过手动完成的(测透镜现有焦距时,需要手动移动光屏外),其余的都是Arduino通过程序自动完成的。

2.3 可变焦透镜板块

目前,可以通过驱动水泵或者注射器来给可变焦透镜抽注液体,从而实现可变焦透镜变焦的功能。由于注射器操作便捷且价格便宜,也更适合新手;因此该演示器采用注射器来实现变焦的功能。通过向内推动注射器的活塞来增加透镜内的液体量,透镜的曲度变大、焦距变小;同理,通过向外拉动注射器的活塞来减少透镜内的液体量,透镜的曲度变小、焦距变大[3]。用止水夹夹住注射器与水透镜之间的软管可以临时固定透镜的曲度和焦距,这就是可变焦透镜[3]。目前,可变焦透镜的具体制作方法已经相当成熟。

该方案使用步进电机和伺服电机驱动注射器,从而对可变焦透镜内的液体进行抽注。伺服电机可以在受水或油滴侵袭的场所中应用,但它不是完全防水、防油的。而可变焦透镜内的液体需要随时被抽出或注入,因此伺服电机不合适。因为步进电机步矩值不受各种干扰因素的影响,例如电压的大小、电流的数值、波形以及温度的变化等,且与注射器连接简单,易于驱动注射器工作,所以该演示器选用步进电机实现对透镜内的液体进行抽注。

2.4 步进电机板块

步进电机是1种将电脉冲控制信号转变为角位移或线位移的常用数字控制执行元件,数字信号刚好是计算机擅长处理的数据类型[4]。

在使用超声波传感器测量物距后,调用Arduino编写好的程序计算出透镜所需要的曲率半径,并将数据反馈给步进电机;步进电机驱动注射器给可变焦透镜里抽出或注入液体,从而模拟眼睛调节的功能。

将步进电机连接到Arduino控制板的相应端口,用编写好的程序测试步进电机能否正常工作,如果步进电机可以正常工作,就将步进电机连接到注射器的活塞。该文已经介绍了透镜曲率半径的计算方法,将计算得到的值与正常人眼所需要的曲率半径做比较,并用程序计算出可变焦透镜需要抽注液体的量,然后由Arduino驱动电机推动螺杆,螺杆推拉注射器活塞改变可变焦透镜内液体的量,从而改变可变焦透镜的曲度和焦距,直到在光屏上看到1个倒立的F像,进而使“视网膜”上呈现出清晰的像。

3 程序实现部分

该演示器部分程序如下。

3.1 超声波测距程序设计

3.1.1 实物图

在实际连接的过程中,将超声波传感器的GND接到Arduino扩展板的GND上,VCC接到扩展板的5 V电源,Trig接到扩展板的2号管脚,Echo接到扩展板的3号管脚。

3.1.2 算法描述

相关算法的描述如下:1) 控制口发出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个动力,该动力驱动注射器工作,改变晶状体的形状,从而调节眼睛成像。

图3 Arduino与步进电机的仿真图

4 结语

该文以Arduino单片机为核心主控板,设计并制造了1款能模拟眼睛调节功能的演示器。该演示器不仅能演示正常眼睛成像的过程,还能演示远视眼和近视眼的看物情况,并且还能自动调节近视眼和远视眼使其正常成像;这样不仅可以达到眼睛调节的作用,而且还简化了眼睛矫正的过程,便于学生在演示过程中观察,且具有使用简单、功能多样以及价格较便宜等优点。该演示器在设计过程中存在忽略瞳孔调节光量的作用和忽略角膜的折光能力等缺陷;在未来的研究中,需要多从瞳孔和角膜的角度出发,使演示器更加完善、更加接近真实。

猜你喜欢

光屏变焦透镜
光屏的作用
大变焦比镜头
合理变焦拍远景
宽谱段、动态局部高分辨离轴主动反射变焦系统
像与物大小关系如何判断
扫描型长波红外连续变焦光学系统
去掉光屏在哪能看到像