构建一个交互式机器人眼球,能够检测附近的人,逼真地环顾四周,并显示“我看见你。”
我们为我的工程预备二年级老师陈老师创建了这个项目。我们的想法不仅仅是制作一个枯燥的监控摄像头,而是希望利用自己的技能和资源,打造出一个看似有生命且能主动反应的眼睛。除了陈老师课堂上的成绩外,最激励我们的是证明自己是优秀的工程师,并成为大学的理想申请者。在启动这个项目时,我们希望设计出一个逼真的眼睛,当有人靠近时能够做出反应。我们希望这个眼睛能移动、眨眼并发光,同时当它发现有人在附近时,LCD屏幕上会显示“检测到运动”。
机械原理说明:
超声波测距仪连接到一个可在0至90度之间旋转的伺服电机。当超声波测距仪检测到距离30厘米内的物体时,Arduino NANO会接收到信号,提示“objectdetected”为真,“eyeactive”应变为真。Arduino NANO随后指令伺服电机缓慢地从0度旋转至174度,从而打开眼睑。眼球实际位于眼睑支架(下眼睑)上,并通过伺服电机在78至112度之间旋转。上眼睑也会随机在0至174度之间摆动,以模拟眨眼动作。这样就有效营造出眼睛活动并眨眼的效果,看起来十分逼真。由于眼睛仍处于活跃状态,LCD屏幕上还会显示“我看见你……”。同时,计数器会记录自超声波测距仪检测到运动以来的时间。若连续5个计数周期未检测到任何运动,则眼睛将被关闭。上眼睑从174度回退至0度,眼睛也恢复至默认位置的90度。此时LCD屏幕清空,循环重新开始,超声波测距仪继续寻找移动目标。
我们于2026年4月1日启动了这个项目,当时我给伊夫发短信,询问他是否愿意成为陈先生项目中的搭档。他立即回复并同意,当晚我们将通话进行头脑风暴。在头脑风暴过程中,我已经有了一个构想:要重现《指环王》中的“万眼之眼”。伊夫认同这个想法,并进一步提出使用液晶显示屏(LCD)的建议。我们决定制作一个逼真的眼睛,当检测到附近有动静时,眼睛会眨眼并旋转,同时LCD还会显示附近的运动情况。当晚我们完成了头脑风暴和整体项目的规划,随后进入课堂,正式启动项目。我们首先制作了一个原型,开始编写代码,确保传感器本身能按照我们的设想正常工作。
我们花了三天时间,才成功制作出一个能正常运行的原型,配备了工作代码和多个传感器(3个舵机、LCD显示屏、超声波测距仪、面包板和Arduino NANO)。代码和传感器对我们来说从来不是什么大问题,但没想到接下来会遇到巨大的挑战。我们需要在TinkerCAD中创建一个3D打印模型。尤其在使用TinkerCAD时,我们遇到了不少困难,软件和工具经常出现故障,数值也常常出错。我记得有一次我让TinkerCAD把5厘米转换成毫米,结果系统显示5厘米等于15毫米。尽管如此,我们仍坚持不懈,用现有的工具尽力完成了任务。在3D建模过程中,我们遇到了几个关键问题。在第一个版本中,我们一直难以弄清楚如何让上眼睑和下眼睑的机构运作起来。于是我们安装了两根横梁,一根在上方,一根在下方,并用一块方块将其抬高。
梁太细,无法有效发挥作用,整体结构也较为松散。陈先生迅速批评了这个模型,并督促我们进行更深入的研究。在我们的第二个版本中,我们设计了一个更加合理的结构:不再移动下眼睑,而是将下眼睑作为眼球的支撑架。从下眼睑支架上,向上延伸两条矩形梁,上面有孔可让上眼睑卡入。最后,一个矩形部件连接到上眼睑上的梁,使伺服电机通过与该矩形部件的连接来驱动上眼睑运动。伊夫(Yves)恰如其分地将这个矩形部件命名为“Wheely”(轮子)。这个模型前景更佳,我们便将其发送给陈先生进行3D打印。陈先生打印后报告说,模型大小和拇指差不多。我们并未意识到自己设计时使用的是英寸而非厘米单位。在发现问题并调整3D打印机设置为英寸后,仍遇到测量问题。我们发现是TinkerCAD软件出了问题,于是必须自行寻找数学方法来转换这些尺寸(最终结果是比例放大了1000%)。
随后我们意识到上眼睑与眼球之间的距离过大,因此在第三版中,我们将上眼睑的孔洞位置降低。同时,我们也需要调整第三版中关于眼球伺服电机的一些尺寸问题。打印完成后,模型整体效果尚可,但眼球太大,导致无法正常移动,于是我们在第四版中进一步缩小了眼球的尺寸。此外,为了增强稳定性,我们还增大了下眼睑侧面的横梁。在第五版也是最后一个版本中,我们修正了更多尺寸问题,将上眼睑的横梁加大以防止其脱落,并采用矩形孔代替圆形孔,使“轮子”结构更加稳定。总体而言,这个版本是可行的,但存在两个问题:一是眼球伺服电机导致眼球与下眼睑支架略有偏移;二是传感器和各部件之间必须保持非常精确的距离才能正常工作,这迫使我们不得不采取困难的手位来完成项目。经过头脑风暴后,我们决定为该项目搭建一个平台。通过使用一个平台,我们能够解决眼球对齐问题,保持各部件之间的特定距离,合理组织组件,并使整个项目看起来更加整洁美观。我们的VISOR平台首个版本运行完美,充分体现了我们在3D建模方面的进步。项目组装完成后,我们只希望让它看起来更酷炫。我们首先订购了一款眼球贴纸,以让眼睛更加生动逼真。接着,我们着手优化代码。
我们在代码中加入了一段轻微的闪烁效果,使眼睑的开合速度变得缓慢,看起来更加逼真且美观。接着我们编写了代码,让眼球在随机间隔时眨眼,进一步增强了眼睛的生动感。最后,Yves 对项目名称“VISOR”感到厌倦,于是我们决定将作品的正式名称保留为“VISOR”,而个人名字则定为“Fredrick”,别问为什么。
我们成功地制造出一只能够对周围运动做出反应的眼睛,它会睁开、眨眼、移动眼睛,并在液晶屏幕上显示“我看见你……”。我们最初的目标中唯一没有直接实现的是让眼睛发光。起初我们认为这很简单,只需在眼睛内部加一个LED即可。然而,很快我们就放弃了这个想法,因为发光会破坏眼睛的逼真感,而且在电线和伺服电机的布局上也难以协调。
本文编译自hackster.io





