智能家居系统如何用单片机实现?

99ANYc3cd6
预计阅读时长 25 分钟
位置: 首页 AI智能 正文

基于单片机的智能家居系统设计方案

系统概述

本项目旨在设计一个低成本、高可靠性和可扩展性的智能家居系统,该系统以STM32F103C8T6单片机作为核心控制器,通过各类传感器采集家居环境数据(如温湿度、光照强度),并控制执行器(如继电器、LED灯)实现自动化控制,用户可以通过OLED显示屏实时查看环境信息,并通过蓝牙模块(HC-05)与手机APP进行无线通信,实现远程监控和控制。

基于单片机的智能家居系统设计
(图片来源网络,侵删)

核心目标:

  1. 环境感知: 实时监测室内温湿度、光照强度。
  2. 自动化控制: 根据环境数据自动控制家电(如风扇、灯光)。
  3. 人机交互: 通过本地OLED屏显示信息,通过手机APP进行远程操控。
  4. 系统扩展: 硬件和软件设计具备良好的可扩展性,方便未来增加更多功能。

系统总体设计

1 系统架构图

系统采用“感知层-控制层-应用层”的三层架构。

graph TD
    subgraph 感知层
        A[温湿度传感器 DHT11] --> D{STM32 主控};
        B[光敏电阻/光照传感器 BH1750] --> D;
        C[人体红外传感器 HC-SR501] --> D;
    end
    subgraph 控制层
        D --> E[继电器模块 (控制灯、风扇)];
        D --> F[蜂鸣器 (报警)];
        D --> G[LED指示灯];
        D <--> H[蓝牙模块 HC-05];
        D <--> I[OLED显示屏];
    end
    subgraph 应用层
        H --> J[智能手机APP];
        I --> K[用户本地查看];
    end

2 核心控制器选型

  • 选择:STM32F103C8T6
  • 理由:
    • 高性能: 基于 ARM Cortex-M3 内核,主频高达 72MHz,计算能力强,足以处理多任务。
    • 丰富外设: 集成多个 UART、I2C、SPI、ADC、TIMERS 等外设,方便连接各种传感器和模块。
    • 高性价比: 价格低廉,社区支持庞大,资料丰富,是学习和项目开发的理想选择。
    • 足够I/O口: 拥有足够多的GPIO引脚,为未来扩展预留了空间。

硬件设计

1 主要元器件清单

模块名称 型号/规格 数量 功能描述
主控板 STM32F103C8T6 (或最小系统板) 1 系统核心,负责数据处理和逻辑控制
温湿度传感器 DHT11 1 采集环境温度和湿度
光照传感器 BH1750 (I2C) 或 光敏电阻+ADC 1 采集环境光照强度
人体红外传感器 HC-SR501 1 检测是否有人体移动
继电器模块 5V单路/多路继电器 1 控制交流/直流大功率设备(如灯、风扇)
蓝牙模块 HC-05 1 实现与手机的无线串口通信
显示屏 96寸 OLED (I2C, SSD1306驱动) 1 本地显示温湿度、光照等信息
蜂鸣器 无源/有源 5V 1 用于报警或提示音
LED灯 普通 5mm LED 1 状态指示灯
面包板 & 杜邦线 - 1套 用于搭建和连接原型电路

2 硬件连接方案

以下是各模块与STM32的引脚连接示例(具体引脚可根据开发板实际布局调整):

模块 STM32引脚 备注
DHT11 PA0 (GPIO) 数据线,需接上拉电阻
BH1750 (I2C) PB6 (SCL) I2C时钟线
PB7 (SDA) I2C数据线
HC-SR501 PA1 (GPIO) 输出高/低电平信号
继电器 PA2 (GPIO) 控制继电器吸合/断开
蓝牙HC-05 PA9 (USART1_TX) 串口发送
PA10 (USART1_RX) 串口接收
OLED显示屏 PB6 (SCL) 与BH1750共用I2C总线
PB7 (SDA) 与BH1750共用I2C总线
蜂鸣器 PA3 (GPIO) 高电平或PWM驱动
LED PA4 (GPIO) 状态指示

注意:

基于单片机的智能家居系统设计
(图片来源网络,侵删)
  • I2C总线共享: BH1750和OLED都使用I2C通信,可以共享SCL和SDA线,但需注意总线上设备的地址不能冲突。
  • 继电器模块: 继电器模块通常带有光耦隔离,控制端为5V TTL电平,可以直接由STM32的GPIO控制。
  • 电源: 确保所有模块的供电电压和电流需求,必要时使用外部电源(如5V/2A适配器)为系统供电。

软件设计

1 开发环境

  • IDE: Keil MDK (ARM) 或 STM32CubeIDE
  • 编程语言: C语言
  • 库/中间件: STM32 HAL库 (推荐) 或 标准库
  • 调试工具: ST-Link/J-Link

2 软件架构设计

软件采用模块化设计,将不同功能封装成独立的模块,便于维护和扩展。

graph TD
    subgraph 主函数 main.c
        A[系统初始化] --> B[主循环 while(1)];
        B --> C[传感器数据采集];
        B --> D[逻辑判断与控制];
        B --> E[OLED数据显示];
        B --> F[蓝牙数据处理];
    end
    subgraph 驱动层
        subgraph DHT11驱动
            C1[DHT11_ReadData()];
        end
        subgraph BH1750驱动
            C2[BH1750_ReadValue()];
        end
        subgraph HC-SR501驱动
            C3[PIR_Read()];
        end
        subgraph 继电器/LED驱动
            D1[Relay_SetState()];
            D2[LED_SetState()];
        end
        subgraph 蓝牙驱动
            F1[UART_SendString()];
            F2[UART_ReceiveData()];
        end
        subgraph OLED驱动
            E1[OLED_Init()];
            E2[OLED_ShowString()];
            E3[OLED_ShowNum()];
        end
    end
    C --> C1;
    C --> C2;
    C --> C3;
    D --> D1;
    D --> D2;
    F --> F1;
    F --> F2;
    E --> E1;
    E --> E2;
    E --> E3;

3 核心功能代码逻辑(伪代码)

// main.c
#include "stm32f1xx_hal.h"
#include "dht11.h"
#include "bh1750.h"
#include "oled.h"
#include "bluetooth.h"
#include "relay.h"
// 全局变量
float temperature, humidity;
uint16_t light_value;
uint8_t pir_state;
int main(void) {
  // 1. 系统初始化
  HAL_Init();
  SystemClock_Config();
  OLED_Init();      // 初始化OLED
  UART_Init();      // 初始化蓝牙串口
  DHT11_Init();     // 初始化DHT11
  BH1750_Init();    // 初始化BH1750
  PIR_Init();       // 初始化PIR
  Relay_Init();     // 初始化继电器
  // 2. 主循环
  while (1) {
    // 3. 数据采集
    DHT11_ReadData(&temperature, &humidity);
    light_value = BH1750_ReadValue();
    pir_state = PIR_Read();
    // 4. 自动化逻辑判断与控制
    // 规则1: 如果温度 > 28°C 且有人,则打开风扇
    if (temperature > 28.0 && pir_state == 1) {
        Relay_SetState(RELAY_ON);
    } else {
        Relay_SetState(RELAY_OFF);
    }
    // 规则2: 如果光照强度 < 100 (暗) 且有人,则打开灯
    if (light_value < 100 && pir_state == 1) {
        LED_SetState(LED_ON);
    } else {
        LED_SetState(LED_OFF);
    }
    // 5. 本地数据显示
    OLED_Clear();
    OLED_ShowString(0, 0, "Temp: ");
    OLED_ShowNum(50, 0, (int)temperature, 2);
    OLED_ShowString(80, 0, "C");
    OLED_ShowString(0, 2, "Humi: ");
    OLED_ShowNum(50, 2, (int)humidity, 2);
    OLED_ShowString(80, 2, "%");
    OLED_ShowString(0, 4, "Light: ");
    OLED_ShowNum(50, 4, light_value, 4);
    OLED_ShowString(90, 4, "lx");
    HAL_Delay(2000); // 刷新间隔
    // 6. 蓝牙数据处理
    if (UART_Data_Available()) {
        uint8_t cmd = UART_ReadByte();
        switch (cmd) {
            case 'F': // Fan On
                Relay_SetState(RELAY_ON);
                break;
            case 'f': // Fan Off
                Relay_SetState(RELAY_OFF);
                break;
            case 'L': // Light On
                LED_SetState(LED_ON);
                break;
            case 'l': // Light Off
                LED_SetState(LED_OFF);
                break;
            case 'S': // Send Status
                char buf[100];
                sprintf(buf, "T:%.1f,H:%.1f,L:%d\n", temperature, humidity, light_value);
                UART_SendString(buf);
                break;
        }
    }
  }
}

功能实现详解

  1. 环境监测:

    • 温湿度: 通过DHT11的时序读取数据,STM32模拟单总线通信协议获取40位数据,校验后分解出温度和湿度值。
    • 光照: 使用I2C协议读取BH1750传感器的数字值,无需复杂的AD转换,精度高。
  2. 自动化控制:

    • “人来灯亮/扇开,人走灯灭/扇关”: 结合PIR传感器和温湿度/光照阈值,实现人来后自动开启设备,人走后延时关闭。
    • 阈值控制: 设定温度、光照的上下限,当环境参数超出范围时,自动启动或关闭相应设备。
  3. 远程控制 (蓝牙APP):

    基于单片机的智能家居系统设计
    (图片来源网络,侵删)
    • 通信协议: 定义简单的ASCII码命令,如 'F' 开风扇,'f' 关风扇,'S' 请求状态。
    • 手机APP: 可以使用 Arduino Bluetooth ControllerSerial Bluetooth Terminal 等现成APP进行测试,也可以使用MIT App Inventor自己开发一个简单的图形化APP。
    • 数据交互: APP发送指令给STM32,STM32执行相应操作;STM32也可以主动将环境数据打包发送给APP。
  4. 本地显示:

    使用I2C接口的OLED屏,通过SSD1306驱动芯片,将采集到的温湿度、光照等数据格式化后显示在屏幕上,方便用户直接查看。


系统扩展与未来展望

本系统具有良好的扩展性,未来可以从以下几个方面进行升级:

  1. 增加更多传感器:

    • 烟雾/燃气传感器 (MQ-2): 实现火灾和燃气泄漏报警。
    • 门窗磁传感器: 监测门窗是否被非法打开。
    • PM2.5传感器: 监测室内空气质量。
  2. 增加更多执行器:

    • 舵机: 控制窗帘、百叶窗的开合。
    • 步进电机: 实现更精确的机械控制。
    • RGB LED灯: 实现颜色可调的氛围灯。
  3. 升级网络连接:

    • Wi-Fi模块 (ESP8266): 将蓝牙替换为Wi-Fi,接入家庭局域网和互联网,这样就可以通过外网IP云平台(如阿里云IoT、腾讯云IoT)进行远程控制,实现真正的智能家居。
    • ZigBee/Z-Wave模块: 组建Mesh网络,实现低功耗、自组网的无线传感器网络,适合大面积、多节点的家居环境。
  4. 引入人工智能:

    • 数据记录与分析: 记录长期的环境数据,分析用户习惯,实现更智能的自动化,学习”到用户通常晚上10点回家,则提前开启空调和灯光。
    • 语音控制: 集成语音识别模块(如LD3320)或通过Wi-Fi模块连接云语音服务(如阿里云、讯飞开放平台),实现语音控制。
-- 展开阅读全文 --
头像
智能手机充不进电,是坏了还是哪里出问题了?
« 上一篇 前天
1000元以下的安卓智能手机
下一篇 » 前天

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]