Plot Clock · 装配指南

GLOW · HANDS-FREE CLOCK

夜光手写时钟
装配指南

机器人手臂用紫外线在荧光膜上"写"出当前时间,荧光在黑暗中缓缓发光。本指南基于原版 Glow-in-the-Dark Robot Plot Clock(Tucker Shannon / Make:)的改造版:主控可选 WEMOS D1(ESP8266)ESP32-C3 SuperMini(页面顶部一键切换),WiFi 配网 + NTP 自动校时,去掉了 RTC 模块与电池。

约 1–3 小时 难度 中等 无需焊接经验?不,需要一点点
主控方案
开始装配 ↓ 先看固件怎么刷

01项目概览

和原版相比,这一版做的改动:主控由 Arduino Uno 换成 WEMOS D1(ESP8266)ESP32-C3 SuperMini(两种方案,本文档顶部可切换);WiFiManager 配网 + 阿里云 NTP 自动联网校时,因此不再需要 DS1307 RTC 模块和电池;时间精度由网络保证,永不漂移。机械结构两版完全相同,只有第 04 节接线和第 05 节固件不同。

工作原理

  1. 按下按钮(或 D3 引脚接地),触发中断
  2. 两块 9g 舵机联动,把 UV LED 移动到目标坐标
  3. 从 NTP 读当前时间,按字形拆解为直线与圆弧
  4. UV 灯贴着荧光膜"扫"出 时:分,荧光通体发亮
  5. 写完机械臂回位、舵机断电,荧光约数分钟后渐息

效果演示 (实时时钟)

用与固件相同的字形算法在画布上实时"书写"当前时间

先读这里:原版项目来自 Make: Project(原版网页),机械结构(外壳、手臂、聚光锥)与原版完全一致;固件我们重写为 ESP8266 版,接线方式以本指南第 04 节为准。

02材料清单(BOM)

总价约 ¥60–120(淘宝/拼多多散件)。注意几个关键坑已用 红字 标出。

材料数量备注
WEMOS D1 mini(ESP8266)1主控,替代原版 Arduino Uno;Micro-USB 供电
ESP32-C3 SuperMini1主控(约 ¥10,性价比更高);USB-C 供电,3.3V 逻辑
9g 微型舵机2一定要是正向舵机(0–180°):最直观的区分是舵盘四角都有螺丝孔;连续旋转舵机会一直转,不能用
5mm UV LED1紫色验钞灯那种(365–395nm)荧光效果最好;白色可见光次之
12mm 轻触开关(自复位)1按下接通、松手断开,常开型
自粘荧光膜 / 荧光贴1 张荧光绿色效果最好,宽度 4mm 左右合适
M3×8 六角螺丝10外壳 + 机械臂固定
橡胶脚垫4底部防滑
杜邦线 / 22AWG 导线若干约 20–30cm
Micro-USB 电源线15V 供电;两舵机同时发力,建议 5V / 1A 以上电源
USB-C 电源线15V 供电;两舵机同时发力,建议 5V / 1A 以上电源
100Ω 限流电阻(可选)1UV LED 限流保护(串在主控引脚与 LED 正极之间,各自版本引脚见第 04 节)

打印件请见第 03 节;如果你已有原版 Arduino 方案的其他零件(RTC、降压模块等),本版用不到,可以收起来。

033D 打印零件

共 8 个 STL,工程目录 stls/ 下,与原版 Thingiverse 文件一致。用 PLA 打印即可,无需支撑

文件用途
Arm1-2.STL左机械臂(两段一体)
Arm3.STL右机械臂上段
Arm4.STL右机械臂下段
led_cover.STLUV LED 聚光锥罩
Case.STL外壳主体
Case_Front.STL前面板(荧光贴贴在它上面)
Case_Top.STL顶盖
Case_Top_Human.stl顶盖变体(预留传感器开口,可选;旧版扩展可选用)
打印建议:外壳的几个件可以一次性全部摆进打印平台;打印完成后把所有孔位用 M3 螺丝先试拧一遍,保证螺纹顺滑、活动件转动灵活。

04接线

这是与原版 Arduino 差异最大的地方,且随主控方案略异:下方默认显示 WEMOS D1,页面顶部切换到 ESP32-C3 SuperMini 后,示意图 / 引脚表 / 固件说明会同步换成对应接法(固件里写死的,别接错)。

接线示意图

5V 电源轨 GND 地线轨 Micro-USB WEMOS D1 mini ESP8266 · 3.3V 逻辑 RST A0 D0 D1 D2 D3 · GPIO0 D4 3V3 GND 5V GND TX RX D8 D7 · GPIO13 D6 · GPIO12 D5 · GPIO14 其余引脚:D0/D1/D2/D8 等留空即可;D3/D4/D8 为启动敏感引脚,不要接负载(D4 在本版未用)。 左舵机 L 信号 D6 VCC · 5V GND 右舵机 R 信号 D7 VCC · 5V GND UV LED 低电平点亮(Active LOW) 正极 → D5 负极 → GND 100Ω 按钮 内部上拉 · 另一端 GND 一脚 → D3 舵机瞬间电流较大 建议 5V/1A+ 电源,USB 直插供电
5V 电源轨 GND 地线轨 ESP32-C3 SuperMini 3.3V 逻辑 · 内置 WiFi / BLE ⚠ GPIO2 / 8 / 9 为启动脚、GPIO18 / 19 为 USB 勿接负载 · 本设计只用 GPIO3 / 4 / 5 / 6 5V GND 3V3 GPIO0 GPIO1 GPIO2 GPIO3 · 按钮 GPIO4 · 左舵机 GPIO5 · 右舵机 GPIO6 · UV LED RST GPIO7 GPIO8 GPIO9 GPIO10 GPIO20 GPIO21 左舵机 L 信号 GPIO4 VCC · 5V GND 右舵机 R 信号 GPIO5 VCC · 5V GND UV LED 低电平点亮(Active LOW) 正极 → GPIO6 负极 → GND 100Ω 按钮 内部上拉 · 另一端 GND 一脚 → GPIO3 舵机瞬间电流较大 建议 5V/1A+ 电源,USB 直插供电
功能WEMOS D1 引脚GPIO连接说明
左舵机信号D6GPIO12舵机 VCC→5V、GND→GND
右舵机信号D7GPIO13同上
UV LED 正极D5GPIO14经 100Ω 电阻;LED 负极→GND;低电平点亮
按钮一脚D3GPIO0使用板载上拉,另一端接 GND;按下触发
舵机电源5V / GND两舵机 VCC 并到 5V,GND 并到地;建议外接 5V 电源与 D1 共地
功能ESP32-C3 引脚GPIO连接说明
左舵机信号GPIO4IO4舵机 VCC→5V、GND→GND
右舵机信号GPIO5IO5同上
UV LED 正极GPIO6IO6经 100Ω 电阻;LED 负极→GND;低电平点亮
按钮一脚GPIO3IO3使用板载上拉,另一端接 GND;按下触发
舵机电源5V / GND两舵机 VCC 并到 5V,GND 并到地;建议外接 5V 电源与主控共地
注意事项
  • 接线顺序建议:先接 GND 与电源,再接信号线,最后接按钮;每接完一排用万用表/目视检查一遍再上电。
  • 启动敏感引脚不要挂负载:ESP8266 为 D3 / D4 / D8,ESP32-C3 为 GPIO2 / 8 / 9(本设计都已避开,按钮均用板载上拉 + 接地触发)。
  • 舵机供电强烈建议独立 5V 电源并与主控共地,否则写字瞬间电压跌落会导致主控重启。
  • 两个主控都是 3.3V 逻辑,9g 舵机信号端直接接没有问题;舵机本体建议仍用 5V 供电。

05固件烧录与配网

固件在 PlotClock-ESP8266/(ESP8266)或 PlotClock-ESP32C3/(ESP32-C3)目录,已内置配网与校时逻辑,烧完后几乎开箱即用。本节的板卡包 / 库 / 烧录步骤会随顶部主控版本切换。

1装 ESP8266 板卡包

Arduino IDE → 首选项 → 附加开发板管理器网址:

http://arduino.esp8266.com/stable/package_esp8266com_index.json

「开发板管理器」搜索 esp8266,安装 ESP8266 Community 的包。

2装库

库管理器搜索安装:WiFiManager by tzapu

ESP8266WiFiServotime.h 都随板卡包自带,无需额外安装。旧版 Arduino 的 Time / DS1307RTC 库不再需要。

3烧录

打开 PlotClock-ESP8266.ino,开发板选 LOLIN(WEMOS) D1 R2 & mini,选择端口(Mac 上通常是 /dev/cu.usbserial-xxxx)→ 上传。

4可调宏

代码顶部可开关:OPTION_12_HOUR(12 小时制)、CALIBRATE(校准)、GRID(点阵验证)。默认 24 小时制 + 正常模式,开箱即可。

1装 ESP32 板卡包

Arduino IDE → 首选项 → 附加开发板管理器网址:

https://espressif.github.io/arduino-esp32/package_esp32_index.json

搜索 esp32,安装 Espressif Systems 的包(2.0.9 以上)。

2装库

库管理器搜索安装:WiFiManager by tzapuESP32Servo(by Kevin Harrington)。

WiFi.htime.h 随板卡包自带;ESP32 核心不自带 Servo,必须装 ESP32Servo。

3烧录

打开 PlotClock-ESP32C3.ino,开发板选 ESP32C3 Dev Module;Tools → USB CDC On Boot 选 Enabled

端口选 /dev/cu.usbmodemxxxx/dev/ttyACM0 → 上传。失败时按住板载 BOOT 键再插线(进入下载模式)。

4可调宏

代码顶部可开关:OPTION_12_HOUR(12 小时制)、CALIBRATE(校准)、GRID(点阵验证)。默认 24 小时制 + 正常模式,开箱即可。

配网与校时(无需 RTC)

首次上电

  1. 上电后 D1 开启热点 PlotClock-Setup
  2. 手机连接该热点,会自动弹出配置页(若未弹出打开 192.168.4.1
  3. 选择你的 WiFi 并输入密码保存,D1 自动连接
  4. 若 180 秒内未配网,会自动重启重新进入配网模式

自动校时

  1. 连上网络后自动以 ntp1.aliyun.com / ntp2.aliyun.com / pool.ntp.org 校时
  2. 时区固定为 UTC+8(北京时间),不用设置
  3. 之后每次画时间都先读网络时间,永远不会漂移
  4. 想重新配网:烧录时选「Erase Flash: All Flash Contents」擦除后重拍上电

06机械装配

机械部分与原版一致。核心顺序:先接线上电验证 → 再装机械臂 → 最后合壳,出问题好排查。

6.1 准备电子件
  • UV LED 两个脚焊上约 10cm 引线(正极是长脚),套热缩管防短路
  • 按钮两个脚也焊上引线
  • 两个舵机确认是正向 0–180° 舵机(舵盘四角都有螺丝孔),装入外壳前面板对应舵机位,线从前方开口穿出
  • WEMOS D1 用双面胶/热熔胶固定在外壳内部
6.2 接线(对照第 04 节)
  • 按接线表和接线图把所有连线接好,统一共地
  • 上电先用串口监视器(115200)观察:应打印 WiFi 连接信息与时间读数
  • 按一下按钮,如果舵机有动作就说明整链路通了(哪怕画得歪,后面校准)
6.3 组装机械臂
  • Arm1-2、Arm3、Arm4 之间用 M3 螺丝连接,转动顺畅不卡顿、无虚位
  • LED 装入臂端灯座,把 led_cover 聚光锥罩上去
  • 舵盘先套在舵机输出轴上(不拧紧),用手把机械臂转到大致中位附近再上紧舵盘螺丝
  • 把机械臂组件固定到舵机上(左右对应 D6 左 / D7 右,别装反了)
6.4 合拢外壳与表面处理
  • 前、顶、底壳用 M3 螺丝合拢;有走线需要时可用 Case_Top_Human 变体开孔
  • 荧光贴按前面板书写区剪裁,贴在 Case_Front 外侧,荧光面朝外
  • 四个橡胶脚垫贴到底部
  • 最后通电,进入第 07 节校准

07伺服校准

机械臂默认参数在各部件有公差时会画歪。校准分两步:CALIBRATE(对极限位置)→ GRID(验证点阵)。

常量默认值作用
SERVO_LEFT_ZERO1650左舵机零点(状态 1:左臂 0°)
SERVO_RIGHT_SCALE700右舵机转角→脉宽比例(状态 1)
SERVO_RIGHT_ZERO750右舵机零点(状态 2:右臂 0°)
SERVO_LEFT_SCALE650左舵机转角→脉宽比例(状态 2)
DRAW_DELAY3写字速度(ms/点),越大越慢越稳

ACALIBRATE 对角校准

  1. 取消 //#define CALIBRATE 注释,上传
  2. 机械臂每 2 秒在两个极限位置间切换,UV 灯交替亮/灭
  3. 亮的位置对应状态 2SERVO_RIGHT_ZERO + SERVO_LEFT_SCALE);灭的位置对应状态 1SERVO_LEFT_ZERO + SERVO_RIGHT_SCALE
  4. 调节这四个常量,让两个落点分别贴近荧光书写区的左下右上极限,且覆盖面最大

BGRID 点阵验证

  1. CALIBRATE 注释掉,取消 //#define GRID,上传
  2. 会在 0–70mm × 0–40mm 区域、每 10mm 打一个 UV 点(共 5×8 个点)
  3. 检查点阵是否横平竖直、对称居中,微调常量直到点阵方正

C恢复正常模式

  1. 两个宏都注释掉,重新上传
  2. 按按钮验证时间书写居中,荧光效果完整
  3. 校准参考视频(原版作者):youtu.be/4viW9ADqX2w

08使用与常见问题

一切就绪后:按一下按钮,机械臂用 UV 灯把当前「时:分」写到荧光屏上,发光数分钟后渐息。可以反复按,每次都是崭新的时间。

舵机一直转 / 乱转?

用了连续旋转舵机。请换成正向 0–180° 舵机(舵盘四角都有螺丝孔)。

写出来的字歪斜、位置不对?

先做第 07 节的 CALIBRATE + GRID 两步校准,重点微调四个常量。

UV 灯不亮?

检查 D5 接线与 100Ω 电阻方向;LED 负极必须接 GND。注意它是低电平点亮,万用表量 D5 平时为高电平是正常的。

时间不对/不动?

确认已配网成功且网络可达(NTP 阿里云)。断网状态下时间会停留在最后成功校时的值。

字写得太快看不清 / 荧光太浅?

DRAW_DELAY 调大(如 5–8)放慢笔速;UV 灯落点贴近荧光贴面 5mm 内效果最佳;荧光贴选荧光绿。

想显示 12 小时制?

取消 //#define OPTION_12_HOUR 的注释后重新烧录。

灵感与感谢:本项目是对原版 Glow-in-the-Dark Robot Plot Clock(Tucker Shannon,Make: Magazine)的 ESP8266 改造。机械结构与 STL 均来自原版 Thingiverse 文件(thing:2833916)。