使用伺服电机来按压M5Stack秒表的按钮,使其在精确的[5.00秒]时停止
我最近获得了一块M5Stack秒表。它的默认固件中包含了秒表功能,正如其名称所示。
一个常见的秒表挑战是尝试在恰好5秒或10秒时停止,但结果出人意料地困难。
这让我萌生了一个想法:将伺服电机连接到M5Stack设备上,让它自动完成这个挑战。
工作原理
伺服电机安装在秒表按钮上方,并由M5Stack控制器控制。
然而,即使伺服电机被设定为在5秒时启动和停止,机械系统和电子元件中的各种延迟仍会使其无法准确准时停止。
为了提高精度,每次尝试的结果都会被测量并反馈给下一次尝试。
每次运行后,摄像头会拍摄秒表的显示画面,利用OCR技术识别显示的时间,并计算与目标值5.00秒之间的差异。下一次尝试则通过调整伺服电机的运行时间来补偿这一误差。为了保持摄像头位置的精确一致,我设计并3D打印了一个专用的相机支架。伺服电机也通过一个定制的3D打印支架固定在位。
OCR实现
ATOMS3R-CAM会拍摄秒表显示的图像,仅裁剪下方四位数字,转换为JPEG格式后通过UART发送至M5Core2。
最初,我尝试使用模板匹配来识别数字。但结果并不可靠,因为光照条件以及所摄取数字的轻微旋转会导致频繁的识别错误。
后来我想起之前购买过LLM模块,于是决定改用它。
LLM模块实现了基于本地AI的OCR功能。AI被指示只识别秒表上的数字,并忽略其他字符。如果识别失败,系统将自动重新拍摄一张图像并重复识别过程。
由于LLM模块占用PORT.C,硬件配置如下:
•PORT.A – 伺服控制
•PORT.B – 与摄像头的UART通信
由于PORT.B上的GPIO36为输入模式,因此将其用作UART的RX引脚。
本文编译自hackster.io





