用STM32F103和继电器DIY智能家居:低成本改造台灯与风扇的保姆级教程
2026/6/1 5:22:01 网站建设 项目流程

用STM32F103和继电器DIY智能家居:低成本改造台灯与风扇的保姆级教程

智能家居不再是高不可攀的奢侈品。本文将带你用不到百元的成本,将家中普通电器升级为智能设备。我们选择的硬件核心是STM32F103开发板和继电器模块——这对组合既能满足基础控制需求,又不会给初学者带来过高门槛。

1. 硬件准备与安全须知

1.1 基础硬件清单

  • STM32F103C8T6开发板(约15元):作为控制核心,建议选择带USB接口的版本便于烧录程序
  • 5V继电器模块(约5元/个):推荐带光耦隔离的型号,如SRD-05VDC-SL-C
  • 220V转5V电源模块(约8元):为整个系统供电,避免使用多个电源
  • 杜邦线若干:建议准备20cm长度的公对公、公对母各10根
  • 电工胶布与接线端子:处理强电部分必备

重要提示:操作220V强电时必须断电作业,建议有电工基础或在他人在场时进行

1.2 继电器工作原理速览

继电器本质是电控开关,通过小电流控制大电流通断。典型继电器包含三组关键接口:

接口类型功能说明典型标识
控制端接收控制信号VCC/GND/IN
常开端继电器吸合时导通NO
公共端主电路必经节点COM
常闭端继电器释放时导通NC
// 典型继电器驱动逻辑 void Relay_Control(GPIO_TypeDef* GPIOx, uint16_t GPIO_Pin, uint8_t state) { GPIO_WriteBit(GPIOx, GPIO_Pin, (BitAction)state); // 添加适当延时防止频繁切换 Delay_ms(50); }

2. 台灯智能改造实战

2.1 电路连接步骤

  1. 断电状态下拆开台灯底座,找到火线(通常为棕色)并剪断
  2. 将继电器COM端接电源侧火线,NO端接灯具侧火线
  3. 使用5V电源模块为开发板和继电器供电
  4. 连接STM32的GPIO(如PA0)到继电器IN引脚

2.2 基础控制代码实现

#include "stm32f10x.h" #include "Delay.h" #define RELAY_PIN GPIO_Pin_0 void GPIO_Config(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); GPIO_InitStructure.GPIO_Pin = RELAY_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); } int main(void) { GPIO_Config(); while(1) { // 点亮台灯 GPIO_ResetBits(GPIOA, RELAY_PIN); Delay_s(5); // 关闭台灯 GPIO_SetBits(GPIOA, RELAY_PIN); Delay_s(5); } }

2.3 进阶功能扩展

  • 光敏自动控制:添加光敏电阻实现环境光检测
  • PWM调光:配合可控硅模块实现亮度调节
  • 状态反馈:通过LED指示灯显示当前开关状态

3. USB风扇改造方案

3.1 低压直流设备改造特点

相比220V交流设备,5V USB设备改造更安全简单:

  1. 无需担心高压危险
  2. 可直接使用开发板USB供电
  3. 接线更简洁,通常只需切断正极线路

3.2 典型接线示意图

[USB电源] → [继电器COM] [继电器NO] → [风扇正极] [USB地线] ————————→ [风扇负极]

3.3 定时控制代码优化

void Fan_Timer_Control(uint32_t on_time, uint32_t off_time) { static uint32_t last_tick = 0; if(HAL_GetTick() - last_tick < on_time) { GPIO_ResetBits(GPIOA, RELAY_PIN); // 开启 } else if(HAL_GetTick() - last_tick < on_time + off_time) { GPIO_SetBits(GPIOA, RELAY_PIN); // 关闭 } else { last_tick = HAL_GetTick(); } }

4. 手机APP远程控制实现

4.1 蓝牙模块集成

推荐使用HC-05蓝牙模块(约15元),接线方式:

蓝牙模块STM32连接
VCC5V
GNDGND
TXDPA10(Rx)
RXDPA9(Tx)

4.2 通信协议设计

简易控制协议示例:

  • 发送"ON"开启设备
  • 发送"OFF"关闭设备
  • 发送"T300"设置300秒定时

4.3 手机端配置方案

  • 安卓用户:使用Serial Bluetooth Terminal等APP
  • iOS用户:推荐LightBlue等BLE调试工具
  • 自定义APP:通过MIT App Inventor快速开发控制界面

5. 常见问题排查指南

5.1 继电器不动作检查清单

  1. 确认供电电压达到继电器标称值(用万用表测量)
  2. 检查STM32与继电器共地连接
  3. 验证GPIO输出电平是否符合继电器触发要求
  4. 测试继电器手动触发是否正常(短接IN到VCC)

5.2 典型故障现象与解决

故障现象可能原因解决方案
继电器有吸合声但设备不工作主电路接线错误检查COM/NO接线是否正确
继电器频繁误触发未添加消弧电路在继电器线圈并联反向二极管
控制距离短电源功率不足改用独立电源供电
手机连接不稳定蓝牙模块天线位置不佳调整模块位置或外接天线

6. 项目优化与扩展思路

6.1 电源管理优化

  • 使用18650锂电池配合TP4056充电模块实现移动供电
  • 添加电压检测功能,低电量时自动关闭非必要设备
  • 采用太阳能电池板实现绿色能源供电

6.2 多设备联动方案

通过单个STM32控制多个继电器时,建议:

  1. 为每个继电器分配独立GPIO
  2. 采用ULN2003等驱动芯片扩展IO能力
  3. 设计优先级机制避免同时启动大电流设备
// 多继电器控制示例 typedef struct { GPIO_TypeDef* GPIOx; uint16_t GPIO_Pin; uint8_t state; } Relay_TypeDef; void Multi_Relay_Control(Relay_TypeDef* relays, uint8_t count) { for(uint8_t i=0; i<count; i++) { GPIO_WriteBit(relays[i].GPIOx, relays[i].GPIO_Pin, (BitAction)relays[i].state); } }

6.3 外壳设计与安装

  • 使用3D打印制作专用外壳(推荐PLA材料)
  • 强电部分务必采用绝缘封闭设计
  • 考虑散热需求,避免密闭空间安装继电器

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询