186、TinyML实战项目:智能照明与节能控制
TinyML实战项目:智能照明与节能控制
从一次“灯不灭”的现场调试说起
去年秋天,我在一个智能办公楼的试点项目里栽了个跟头。客户反馈说,走廊的灯在有人经过后,明明应该30秒熄灭,结果经常亮到天亮。我远程连上设备,看日志发现PIR传感器数据一切正常,模型推理结果也显示“无人”,但灯就是倔强地亮着。折腾了两天,最后发现是GPIO拉低电平的时序问题——模型输出“无人”后,我直接调用了digitalWrite(LED_PIN, LOW),但没注意到这个引脚在硬件上被上拉电阻默认拉高了,而我的代码里忘了把引脚模式设为OUTPUT。更坑的是,这个bug只在某些批次的主板上复现,因为不同批次的默认引脚状态有差异。
这个教训让我意识到,TinyML项目里,模型本身往往不是最脆弱的环节,反而是硬件接口、电源管理、状态机这些“脏活”更容易翻车。今天这篇笔记,就围绕一个完整的智能照明节能控制项目,把那些踩过的坑和填坑的思路都摊开来说。
项目骨架:从需求到硬件选型
这个项目的核心需求其实很朴素:根据环境光照和人员存在状态,自动调节灯光亮度,同时把功耗压到最低。但“朴素”不等于“简单”——你得同时处理传感器噪声、模型推理延迟、PWM调光精度,还得考虑电池供电场景下的休眠策略。
硬件选型上,我用了STM32U5系列作为主控,这颗芯片的LPUART和低功耗定时器在TinyML场景下很顺手。传感器方面,环境光传感器用VEML7700(I2C接口,16位分辨率),人体存在检测用LD2410毫米波雷达模块(串口输出,能区分运动和微动)。模型跑在