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

📅 2026/8/3 16:48:32 👁️ 阅读次数 📝 编程学习
用STM32F103和继电器DIY智能家居:低成本改造台灯/风扇的保姆级教程

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

智能家居的概念早已不再遥不可及,借助STM32F103这样的低成本微控制器和简单的继电器模块,任何人都能将普通家电升级为智能设备。本文将手把手教你如何将一个普通台灯或风扇改造成可以通过手机或语音控制的智能设备,整个过程成本不超过100元,适合创客爱好者、电子专业学生或任何对智能硬件感兴趣的DIY玩家。

1. 项目规划与元器件选型

在开始动手之前,我们需要明确项目目标和选择合适的硬件组件。智能家居改造的核心在于实现远程控制,而STM32F103作为一款性价比极高的ARM Cortex-M3内核微控制器,完全能够胜任这一任务。

关键元器件清单:

元器件规格要求数量参考价格
STM32F103C8T6开发板最小系统板115-25元
5V继电器模块单路,带光耦隔离15-10元
5V电源适配器给继电器供电110-15元
杜邦线公对公/母对母若干5元
台灯/风扇普通家用型1自备

提示:选择继电器模块时,务必确认其工作电压与STM32的GPIO输出兼容。虽然STM32F103的GPIO输出为3.3V,但大多数5V继电器模块仍能被可靠驱动。

继电器的工作原理其实很简单:它相当于一个电子开关,通过小电流控制大电流电路的通断。在智能家居改造中,我们正是利用这一特性,让STM32通过GPIO控制继电器,再由继电器控制家电的电源。

2. 电路设计与安全注意事项

安全是智能家居改造中最重要的一环,特别是当涉及到交流电操作时。以下是完整的电路连接方案:

  1. STM32与继电器的连接

    • VCC → 5V电源正极
    • GND → 与STM32共地
    • IN → STM32任意GPIO引脚(如PA0)
  2. 继电器与家电的连接

    • COM → 家电电源线切断的一端
    • NO → 家电电源线切断的另一端
    • NC → 本项目不使用
  3. 电源连接

    • STM32通过USB供电
    • 继电器单独使用5V电源(可与STM32共用电源,但需确保电流足够)
// 简单的GPIO控制代码示例 #include "stm32f10x.h" #include "Delay.h" #define RELAY_PIN GPIO_Pin_0 #define RELAY_PORT GPIOA void GPIO_Configuration(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(RELAY_PORT, &GPIO_InitStructure); } int main(void) { GPIO_Configuration(); while(1) { GPIO_SetBits(RELAY_PORT, RELAY_PIN); // 继电器闭合,设备开启 Delay_ms(5000); // 保持开启5秒 GPIO_ResetBits(RELAY_PORT, RELAY_PIN); // 继电器断开,设备关闭 Delay_ms(5000); // 保持关闭5秒 } }

重要安全提示:操作交流电部分时,务必确保设备已断电。如果不熟悉强电操作,建议先在不带电状态下完成所有接线,再由专业人士检查确认。

3. 进阶功能实现

基础的通断控制只是智能家居的第一步,我们可以为项目添加更多实用功能:

3.1 手机远程控制

通过蓝牙或WiFi模块,可以实现手机APP控制。HC-05蓝牙模块是最经济的选择:

  1. 将HC-05与STM32的USART接口连接
  2. 修改代码添加蓝牙通信功能
  3. 开发简单的手机APP或使用现有蓝牙串口APP
// 蓝牙控制代码片段 void USART_Configuration(void) { USART_InitTypeDef USART_InitStructure; RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE); // 配置USART1 Tx (PA9) 和 Rx (PA10) GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING; GPIO_Init(GPIOA, &GPIO_InitStructure); USART_InitStructure.USART_BaudRate = 9600; USART_InitStructure.USART_WordLength = USART_WordLength_8b; USART_InitStructure.USART_StopBits = USART_StopBits_1; USART_InitStructure.USART_Parity = USART_Parity_No; USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None; USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; USART_Init(USART1, &USART_InitStructure); USART_Cmd(USART1, ENABLE); } void ProcessCommand(uint8_t cmd) { switch(cmd) { case '1': GPIO_SetBits(RELAY_PORT, RELAY_PIN); // 开 break; case '0': GPIO_ResetBits(RELAY_PORT, RELAY_PIN); // 关 break; } }

3.2 定时与自动化控制

添加RTC(实时时钟)功能,可以实现定时开关:

#include "stm32f10x_rtc.h" #include "stm32f10x_pwr.h" #include "stm32f10x_bkp.h" void RTC_Configuration(void) { RCC_APB1PeriphClockCmd(RCC_APB1Periph_PWR | RCC_APB1Periph_BKP, ENABLE); PWR_BackupAccessCmd(ENABLE); if(BKP_ReadBackupRegister(BKP_DR1) != 0xA5A5) { RCC_LSEConfig(RCC_LSE_ON); while(RCC_GetFlagStatus(RCC_FLAG_LSERDY) == RESET); RCC_RTCCLKConfig(RCC_RTCCLKSource_LSE); RCC_RTCCLKCmd(ENABLE); RTC_WaitForSynchro(); RTC_WaitForLastTask(); RTC_SetPrescaler(32767); // RTC周期1秒 RTC_WaitForLastTask(); BKP_WriteBackupRegister(BKP_DR1, 0xA5A5); } RTC_WaitForSynchro(); }

3.3 语音控制集成

借助LD3320等语音识别模块,可以实现简单的语音控制:

  1. 将语音模块与STM32的SPI或UART接口连接
  2. 训练几个简单的语音指令(如"开灯"、"关灯")
  3. 在代码中根据识别结果控制继电器

4. 项目优化与扩展思路

完成基础功能后,可以考虑以下优化方向:

性能优化:

  • 添加状态指示灯(LED)
  • 实现软启动,避免继电器频繁开关
  • 加入过流保护电路

功能扩展:

  • 多路控制(同时改造多个家电)
  • 环境感应(根据光线自动控制台灯)
  • 能耗统计
  • OTA无线升级

外观设计:

  • 3D打印定制外壳
  • 隐藏布线设计
  • 墙面安装方案

实际项目中,我发现最实用的功能组合是"定时+手机控制"。比如设置台灯在晚上7点自动开启,但也可以通过手机提前开启或关闭。这种灵活的控制方式真正体现了智能家居的价值。

继电器模块的NO/NC选择也有讲究:对于台灯,通常使用NO(常开)接法,默认状态为关闭;而对于风扇,可能更倾向于NC(常闭)接法,确保断电时风扇能够停止,避免安全隐患。