1. 项目概述
这个智能台灯项目是我去年为一个创客空间设计的教学案例,初衷是想让学员通过实际产品理解嵌入式开发的完整流程。选择STM32作为主控是因为它的性价比和丰富的生态资源,非常适合作为入门级智能硬件开发平台。
市面上大多数教学项目都停留在点亮LED的阶段,而这个智能台灯实现了环境光自适应、手势控制、手机APP联动等实用功能。最让我自豪的是,整套方案BOM成本控制在50元以内,却实现了商业产品上百元才有的交互体验。
2. 硬件设计解析
2.1 核心器件选型
主控选用STM32F103C8T6(蓝色pill开发板),这颗Cortex-M3内核的MCU有64KB Flash和20KB RAM,完全满足需求。实测在开启所有功能时,内存占用率仍能控制在70%以下。
环境光检测采用BH1750数字光照传感器,相比传统光敏电阻,它的I2C接口输出直接是lux值,省去了ADC采样和线性校准的麻烦。手势识别选用APDS-9960,这个模块集成了接近感应、手势识别和RGB检测三合一功能。
注意:APDS-9960的安装位置很关键,建议距离灯罩边缘3-5cm,太近容易误触发,太远会影响识别率。
2.2 电源方案设计
采用两路供电设计:
- USB 5V输入时自动切换为充电模式
- 18650锂电池供电时启动升压电路
实测待机电流仅2.8mA,连续工作8小时耗电约15%。特别设计的PWM调光电路能实现0.1%精度的亮度调节,这是普通台灯难以达到的。
3. 软件架构实现
3.1 功能逻辑分层
整个系统采用分层架构:
- 硬件驱动层:HAL库封装各传感器驱动
- 业务逻辑层:实现手势解析、光强算法等
- 应用层:处理用户交互和网络通信
c复制// 典型的光照自适应算法实现
void adjustBrightness() {
float currentLux = bh1750_read();
float targetPWM = map(currentLux, 0, MAX_LUX, 100, 0);
pwm_set_duty(targetPWM);
delay(200); // 防抖延时
}
3.2 关键算法详解
手势识别采用了改进的滑动窗口算法:
- 原始
