1. 项目概述:当传统台灯遇上STM32
去年帮邻居家小孩改造书桌台灯时,我顺手给老式台灯加装了STM32F103C8T6最小系统板。没想到这个临时起意的改造,让普通台灯变成了能根据环境光自动调节亮度、还会语音提醒用眼健康的智能设备。这种通过微控制器赋予传统家电新生命的玩法,正是嵌入式开发的魅力所在。
这个智能台灯项目核心解决两个痛点:一是传统台灯需要手动频繁调节亮度,二是缺乏用眼健康提醒功能。通过光敏电阻检测环境光照,配合PWM调光算法,台灯可以像人眼虹膜一样自动维持最佳照明强度。而集成的SYN6288语音模块,会在连续使用45分钟时用温柔的女声提示:"该让眼睛休息啦"。
2. 硬件设计:从元器件选型到电路优化
2.1 核心控制器选型对比
在给学生推荐入门级MCU时,我总在STM32F103和STM32F401之间犹豫。最终选择F103C8T6(蓝色pill开发板)主要考虑三点:
- 成本控制:批量采购单价不到15元
- 资源充足:64KB Flash完全够存放语音库和逻辑代码
- 开发便利:标准库和HAL库资料丰富,便于教学
注意:购买时认准丝印为"STMicro"的正品芯片,市场上有些打磨翻新片会导致PWM输出不稳定。
2.2 光照检测模块的玄机
最初直接用GL5528光敏电阻,实测发现三个问题:
- 线性度差:照度与电阻值呈指数关系
- 温度漂移:冬季夏季数据差异明显
- 响应延迟:快速开灯时会有2-3秒滞后
改进方案:
c复制// 使用ADC采样+软件补偿算法
#define LIGHT_ADC ADC1_CHANNEL_4 // PA4
uint16_t Get_Light_Level(void){
static uint16_t light_buf[10];
static uint8_t index = 0;
light_buf[index++] = HAL_ADC_GetValue(&hadc1);
if(index >= 10) index = 0;
// 温度补偿系数(根据DS18B20读数调整)
float temp_factor = 1.0 + (Temp_Now - 25)*0.003;
// 指数转线
