上周邻居家差点因为吹风机过热引发火灾,这让我意识到家用电器安全防护的重要性。作为一个电子爱好者,我决定动手设计一款能自动断电的智能插座,专门解决吹风机长时间使用带来的安全隐患。这个项目从构思到成品测试花了三周时间,最终实现了一个成本不到50元但可靠性极高的解决方案。
这个插座的核心功能很简单:当检测到吹风机连续工作超过设定时间(比如15分钟),就会自动切断电源。听起来简单,但实现起来需要考虑电流检测精度、继电器选型、安全隔离等多个技术细节。下面我就把整个设计过程拆解开来,包括硬件选型、电路设计、程序编写以及实际测试中踩过的坑。
在方案设计初期,我对比了三款主流微控制器:
STM32F103C8T6(蓝色小开发板)
ESP8266
ESP32-C3
最终选择STM32主要基于三点考虑:
注意:如果考虑后续扩展物联网功能,ESP32是更好的选择。但本方案专注于基础安全功能,因此选择更稳定的STM32。
检测吹风机工作状态有三种常见方案:
| 方案 | 原理 | 精度 | 成本 | 安装难度 |
|---|---|---|---|---|
| 电流互感器 | 电磁感应 | 高 | 中 | 高 |
| ACS712霍尔传感器 | 磁场检测 | 中 | 低 | 低 |
| 采样电阻+运放 | 电压测量 | 低 | 最低 | 中 |
选择ACS712-5A的原因:
实测数据:
安全控制220V电路需要特别注意:
SRD-05VDC-SL-C参数:
接线注意事项:
主要包含四个部分:
关键参数计算:
安全间距:
布局原则:
实测问题:
code复制初始化
├─ 配置ADC(12位精度,连续转换)
├─ 配置定时器(1ms中断)
└─ 初始化GPIO(继电器控制)
主循环
├─ 读取ADC值 → 计算电流
├─ 电流>阈值?→ 启动计时
├─ 超时?→ 切断继电器
└─ 按键检测(手动复位)
c复制// 电流检测
#define CURRENT_THRESHOLD 1000 // 对应约0.5A
uint32_t working_time = 0;
void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc) {
uint16_t adc_val = HAL_ADC_GetValue(&hadc1);
if(adc_val > CURRENT_THRESHOLD) {
working_time++;
} else {
working_time = 0;
HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_SET);
}
if(working_time > 15*60*1000) { // 15分钟
HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_RESET);
}
}
电流阈值设置:
延时算法改进:
| 测试场景 | 工作电流 | 断电时间 | 备注 |
|---|---|---|---|
| 800W冷风档 | 3.2A | 15分01秒 | |
| 1200W热风档 | 5.1A | 15分00秒 | |
| 多设备并联 | 6.8A | 立即断电 | 过流保护触发 |
继电器吸合不稳定
误断电
ADC读数漂移
功率计量功能
温度保护
状态指示
这个项目最让我意外的是电流检测的稳定性问题。最初以为直接用ADC读数就行,实际测试发现市电干扰很大,后来通过软件均值滤波(取10次采样平均值)才获得稳定数据。另一个教训是继电器触点寿命,频繁开关测试500次后出现接触不良,建议选用质量更好的欧姆龙继电器。