1. 项目概述
去年夏天帮朋友改造老式电扇的经历让我意识到,很多传统家电只要加上一点智能控制,就能大幅提升使用体验。这个基于单片机的风扇无线遥控系统,就是专门为改造传统电扇设计的低成本解决方案。整套系统包含无线遥控器和接收端两部分,接收端直接连接风扇电机,通过433MHz无线模块实现10米范围内的遥控调速和开关功能。
相比市面上动辄几百元的智能风扇,这个方案成本不到50元,但实现了80%的核心功能。特别适合电子爱好者DIY,或者家电维修人员用来升级老客户家的旧风扇。我实测下来,从零件采购到调试完成,一个周末就能搞定,改造后的风扇用起来跟商场里卖的遥控风扇几乎没区别。
2. 系统设计与核心组件选型
2.1 整体架构设计
系统采用主从式架构,遥控器端使用STM8S003F3作为主控,接收端选用更经济的STC15W204S。这两个型号都是我经过多次对比后选定的:STM8在低功耗模式下待机电流仅1μA,适合电池供电的遥控器;而STC15W自带PWM和定时器,正好满足风扇电机控制需求。
无线通信选用SYN470R/SYN480R这对433MHz模块,传输距离标称100米,实际在家庭环境中隔两堵墙还能稳定控制。之所以没选更流行的2.4G方案,主要是考虑到433MHz的穿墙能力更强,而且这对模块价格还不到NRF24L01的一半。
2.2 关键元器件清单
| 部件名称 | 型号规格 | 数量 | 单价(元) | 备注 |
|---|---|---|---|---|
| 遥控器MCU | STM8S003F3P6 | 1 | 2.5 | 20引脚TSSOP封装 |
| 接收端MCU | STC15W204S | 1 | 1.8 | SOP16封装 |
| 无线发射模块 | SYN470R | 1 | 3.2 | 433MHz ASK调制 |
| 无线接收模块 | SYN480R | 1 | 4.5 | 与SYN470R配对使用 |
| 电机驱动 | BT136 TRIAC | 1 | 1.2 | 600V/4A规格 |
| 晶振 | 12MHz | 2 | 0.3 | 两脚直插式 |
| 按键 | 6x6mm轻触开关 | 5 | 0.1 | 遥控器面板用 |
提示:BT136需要配合散热片使用,建议选用20x20x10mm的铝制散热片,价格约0.5元
3. 电路设计与原理详解
3.1 遥控器电路设计
遥控器采用3V纽扣电池供电,待机电流实测仅8μA,按每天使用20次计算,一颗CR2032电池能用大半年。电路设计上有几个关键点:
-
按键矩阵采用3x2布局,包括电源键、三档风速键和定时键。为了省电,所有按键都通过10kΩ电阻上拉到VCC,默认状态下不耗电。
-
无线模块的供电由MCU控制,只在发送信号时通电,发送完成后立即断电。这个设计让无线模块的耗电从持续工作的15mA降到了瞬时脉冲的3mA。
-
LED指示灯串联470Ω限流电阻,亮度适中且省电。我试过1kΩ电阻,在阳光下辨识度不够。
3.2 接收端电路设计
接收端直接接220V市电,安全设计尤为重要:
-
采用阻容降压方案获取5V工作电压,用1μF/400V的CBB电容配合1N4007整流桥。这个方案成本不到2元,比变压器方案便宜很多,但需要注意做好绝缘。
-
可控硅驱动部分使用MOC3021光耦隔离,确保高压部分与MCU完全电气隔离。驱动电阻选用360Ω,既能保证足够触发电流,又不会让光耦过载。
-
无线接收模块的天线长度要严格按λ/4计算,433MHz对应17.3cm。我实测发现天线剪到17cm时接收灵敏度最佳。
4. 软件实现与核心算法
4.1 遥控器固件开发
使用IAR for STM8开发环境,代码量不到200行但有几个精妙之处:
- 按键防抖采用状态机实现,比简单的延时防抖更可靠:
c复制typedef enum {
KEY_IDLE,
KEY_DOWN,
KEY_DEBOUNCE,
KEY_PRESSED
} KeyState;
KeyState keyCheck(uint8_t pin) {
static KeyState state = KEY_IDLE;
switch(state) {
case KEY_IDLE:
if(!GPIO_ReadInputPin(KEY_PORT, pin)) state = KEY_DOWN;
break;
case KEY_DOWN:
state = KEY_DEBOUNCE;
break;
case KEY_DEBOUNCE:
if(!GPIO_ReadInputPin(KEY_PORT, pin)) {
state = KEY_PRESSED;
return KEY_PRESSED;
}
state = KEY_IDLE;
break;
}
return KEY_IDLE;
}
- 无线数据发送采用曼彻斯特编码,增强抗干扰能力。每个数据包包含:
- 2字节前导码(0xAA55)
- 1字节设备ID(可设 dip开关)
- 1字节命令(0x01开/0x00关/0x02~0x04档位)
- 1字节校验和
4.2 接收端控制逻辑
接收端通过PWM控制风扇转速,关键参数如下:
| 档位 | 占空比 | 适用场景 |
|---|---|---|
| 1档 | 30% | 夜间睡眠模式 |
| 2档 | 60% | 日常使用 |
| 3档 | 100% | 快速降温 |
电机控制采用过零检测+相位控制策略,具体实现步骤:
- 通过PC817光耦检测交流电过零点
- 过零后延时α角触发可控硅(α=档位参数)
- 每个周期重新检测过零点,补偿电网频率波动
注意:可控硅触发后要立即关闭驱动信号,否则会导致器件过热
5. 制作与调试要点
5.1 PCB设计注意事项
- 高压部分(可控硅周边)线宽至少1mm,与其他部分保持3mm以上间距
- 接收模块天线周围要做净空区,下方不要走线
- 阻容降压电路的火线端串接1MΩ放电电阻,防止断电后电容带电
5.2 常见问题排查
-
遥控距离短:
- 检查天线长度(发射端10cm,接收端17cm)
- 用频谱仪查看是否有同频干扰(常见于433.92MHz)
- 更换2032电池,电压低于2.8V会影响发射功率
-
电机转速不稳:
- 测量PWM波形是否正常(示波器接BT136的G极)
- 检查过零检测电路(PC817输出应为100Hz方波)
- 尝试在电机两端并联0.1μF/400V电容
-
接收端死机:
- 检查5V电源纹波(应小于100mVpp)
- 加强MCU复位电路(建议改用专用复位芯片)
- 在MCU电源引脚加104瓷片电容
6. 进阶改进方向
这套基础系统还可以扩展很多实用功能:
- 增加温度传感器(如DS18B20),实现自动调速
- 改用315MHz频段避开常见的433MHz干扰
- 添加学习功能,兼容不同厂家的遥控器
- 通过手机蓝牙转433MHz模块实现APP控制
我在最新版中增加了OLED显示屏,可以实时显示当前档位和室温。实测下来最实用的改进是加入了"自然风"模式--随机改变PWM占空比模拟自然风速变化,这个功能用简单的伪随机数算法就能实现,但体验提升非常明显。