【移远产品体验官】QuecDuino(EG800Z)起夜灯:天黑且人靠近才亮,人走后再亮 2 秒
一、这个项目做什么
用 QuecDuino 入门级传感器套件和 EG800Z 开发板做一盏起夜灯。板子本地运行,不连飞鸢、不装 QthSDK。
判断分两步。光敏 KY-018 看房间是不是暗,超声波 HC-SR04 看前方大约 80 厘米内有没有人。两件同时满足才点亮 RGB 灯的蓝灯。人走开后灯再亮 2 秒,避免一闪就灭。房间变亮时立刻关灯,白天举手靠近也不会亮。
脚本就是开机程序:清空模组 /usr 后,把 main.py 放到 /usr/main.py,复位即运行。

二、接线
三样东西都用套件自带模块,按下面接,不要串到别的脚。
光敏 KY-018:信号 S 接开发板 A1,VCC 接 3.3V,GND 接 GND。程序读的是 ADC1。打印出来的光值越大表示越亮,低于 1500 才当成「暗」。
超声波 HC-SR04:VCC 接 5V,GND 接 GND,Trig 接 PIN5,Echo 接 PIN4。这块固件没有 GPIO44。排针 5 是模组 25 脚,对应 GPIO17,所以 Trig 在代码里是 GPIO17;Echo 在 PIN4,对应 GPIO31。Trig 平时保持低电平,测距时才拉高约 10 微秒。
RGB 灯:电源 V 接 3.3V,只把蓝色 B 接到 PIN6(GPIO32)。红色 R 和绿色 G 不要接。灯是高电平点亮。

三、灯怎么判断
主循环大约每 200 毫秒做一次。
先读光敏。光值小于 1500 记为暗,否则记为亮。
再读超声波。Trig 发 10 微秒脉冲,量 Echo 高电平时间,距离约等于脉宽微秒数除以 58,单位厘米。2 厘米到 400 厘米之外,或 30 毫秒内等不到回波,当成无效距离,不当成「有人」。
然后决定灯:
房间是亮的:立刻关灯,并把延时清掉。
房间是暗的,而且距离有效、不超过 80 厘米:立刻开灯,并把关灯时刻改成「现在再加 2 秒」。人还在面前时,每圈都会把这 2 秒往后推,所以灯会一直亮。

房间是暗的,但人已经不在 80 厘米内:如果还没到刚才那个关灯时刻,灯保持亮;到点再关。
串口大约每秒打一行,例如:
[night] 光=820 暗 距离=46cm 灯=开
距离无效时会写成「无效」,并带上当前 Echo 电平,方便看是不是线没接上。
四、放进板子
电脑上用 QPYcom 连上 Quectel USB REPL。若模组 /usr 里还有别的开机脚本,先清掉,避免和这盏灯抢 main.py。
把 home_local/03_nightlight/to_usr/main.py 拖到模组的 /usr/main.py。不要再套一层文件夹,否则路径会变成 /usr/to_usr/main.py,复位后不会自动跑。
复位或重新上电。REPL 里应先看到:
nightlight: photo + ultrasonic + led
随后每秒一行 [night] 日志。用手在超声波前方大约一臂以内晃,暗环境下蓝灯应亮;手拿开约 2 秒后灭。开灯照光敏,即使手还在前面,灯也会马上灭。

五、实际效果与可改的数
这盏灯只在「暗 + 近」时工作,不会在白天一直耗着灯。人离开有 2 秒缓冲,起夜时脚步稍微停一下灯不会立刻黑。
四个数都在 main.py 开头,改完重新上传 /usr/main.py 再复位:
DARK_ADC = 1500。光值低于它才算暗。现场如果天还没黑灯就亮,把这个数改小;如果已经很暗仍不开,把这个数改大。先看串口里的「光=」再改。
NEAR_CM = 80。靠近距离,单位厘米。走廊窄就改小,床边希望更远就改大,不要超过超声波可靠范围。
HOLD_MS = 2000。人离开后还亮多久,单位毫秒。
LOOP_MS = 200。检测间隔。改太长,人走过去可能来不及亮。
六、踩过的坑
第一,绿灯会粘死。RGB 的 G 如果接到 PIN5,而这脚同时又是超声波 Trig。Trig 平时被程序拉低,但这路输出和绿灯缠在一起时,绿灯会一直亮,串口已经打印「灯=关」也灭不掉。所以灯只接蓝色 B 到 PIN6,R 和 G 不接。
第二,超声波电源是 5V,光敏和 RGB 是 3.3V。HC-SR04 不要接到 3.3V 上凑合,否则测距容易一直「无效」。
第三,排针号和 GPIO 号不是同一个数。PIN5 不是 GPIO5。在这块 EG800Z 固件上,PIN5 对应 GPIO17,PIN4 对应 GPIO31,PIN6 对应 GPIO32。代码按这个写,换脚时要查 EG800Z 的 QuecPython GPIO 表,不能按丝印数字直接当 GPIO。
第四,Echo 一直无回波时,日志是「距离=无效 echo=0 或 1」,灯不会因为无效距离而打开。先看 Echo 是否在 PIN4、GND 是否共地,再怀疑阈值。
第五,这个工程不要和温湿度上云脚本叠在同一个 /usr/main.py 里。起夜灯复位即跑,上云工程是另一套目录。换项目时先清空 /usr 再拖对应的 main.py。
七、总结
起夜灯用套件里的光敏、超声波和 RGB 灯,在 EG800Z 上本地完成:暗且 80 厘米内有人就开蓝灯,人离开后再亮 2 秒,变亮立刻关。部署只需要一个 /usr/main.py。接线时记住超声波用 5V、灯只接蓝线到 PIN6、PIN5 留给 Trig。按实物图 1 到 6 的位置补照片即可发帖。
