1. 项目背景与需求解析
去年给家里老人配老花镜时,发现跑一趟眼镜店测视力特别麻烦。排队半小时,验光5分钟,最后还要被推销各种高价镜片。这让我萌生了自己做家用视力检测仪的想法——既能随时监测家人视力变化,又能避免不必要的消费陷阱。
传统视力检测主要依赖两种方式:一种是医院眼科使用的专业验光设备,价格动辄上万元;另一种是常见的纸质视力表,虽然成本低但需要标准距离和光照条件。而现代智能手机的普及让我们有了第三种选择:利用手机摄像头和屏幕,配合算法实现便捷的视力检测。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 硬件方案设计
2.1 核心组件选型
经过对比测试,最终确定的硬件方案包含以下关键部件:
- 主控芯片:ESP32-C3(集成蓝牙/WiFi,支持USB OTG)
- 显示模块:2.8寸IPS屏(240x320分辨率,可视角度178°)
- 距离传感器:VL53L0X(TOF测距,精度±3%)
- 环境光传感器:BH1750(0-65535lx量程)
- 按键模块:5向摇杆+2个功能键
特别说明:显示模块需要选择IPS面板而非TN面板,因为视力检测对视角稳定性要求极高。实测发现TN屏在侧视时会出现明显色偏和亮度衰减,严重影响检测结果。
2.2 光学系统设计
视力检测的核心是视标显示系统,我们采用国际标准对数视力表(LogMAR)原理:
- 视标采用Landolt环形缺口设计
- 亮度对比度≥90%(实测92.3%)
- 背景亮度100cd/m²(通过PWM精确控制背光)
视标尺寸计算公式:
code复制视标高度(mm) = 测试距离(m) × tan(5弧分) × 缺口比例系数
以3米测试距离为例,5.0视标高度=3×tan(5/60)×5=8.73mm
3. 软件系统实现
3.1 核心算法流程
python复制def vision_test():
# 初始化环境参数
ambient_light = bh1750.read()
distance = vl53l0x.get_distance()
# 动态调整显示参数
if ambient_light < 100: # 单位lx
raise Exception("环境光不足,请开灯后重试")
#
