stm32单片机智能家居环境控制系统(烟雾监测MQ-2+温湿度DHT11+光照强度监测bh1750+步进电机ULN2003+0.96oled+自动开关灯+自动窗帘+继电器,+风扇+声光报警,按键)
摘要:本项目基于STM32单片机设计了一套智能家居环境控制系统,通过MQ-2烟雾传感器、DHT11温湿度传感器和BH1750光照传感器实时监测环境参数,结合ULN2003驱动的步进电机、继电器等执行机构,实现自动窗帘控制、智能调光、温控风扇及烟雾报警功能。系统采用模块化设计,包含OLED显示界面和按键交互,支持手动/自动双模式切换,完成环境参数的闭环控制。硬件采用I²C/ADC等多种通信方式,软件
·
一、设计简介
本项目基于STM32单片机实现智能家居环境控制系统,通过多传感器协同监测环境参数(烟雾浓度、温湿度、光照强度),结合执行机构(步进电机、继电器)实现自动窗帘控制、智能调光、温控风扇及报警功能。系统采用模块化设计,具备按键手动干预能力,实现环境参数的闭环控制。
stm32单片机智能家居环境控制系统(烟雾监测MQ-2+温湿度DHT11+光照强度监测bh1750+步进电机ULN2003+0.96oled+继电器+声光报警
二、功能设计
- 环境监测
- MQ-2检测烟雾浓度,超阈值触发继电器动作和声光报警
- DHT11采集温湿度数据,驱动风扇降温
- BH1750监测光照强度,控制自动开关灯
- 执行机构
- 自动根据光照强度,ULN2003驱动步进电机28BYJ-48实现窗帘开合
- 继电器模拟窗户;继电器控制风扇开关
- 光照强度自动控制照明灯开关
- 交互系统
- 0.96 OLED实时显示环境参数
- 按键设置阈值/手动控制设备
- 蜂鸣器+LED实现声光报警
三、所需硬件连接
| 模块 | 连接方式 |
|---|---|
| DHT11 | 单总线通信 |
| BH1750 | I²C (SCL/SDA) |
| MQ-2 | ADC采集 |
| ULN2003+28BYJ-48 | 四相步进脉冲 |
| OLED (I²C) | I²C |
| 继电器x2 | GPIO控制 |
| 按键x4 | 下拉输入 |
| 蜂鸣器 | PWM驱动 |
| LED报警灯 | GPIO |
四、软件环境
- 开发环境:Keil uVision5
- 编程语言:C (STM32 标准库)
- 驱动:
- DHT11温湿度
- BH1750光照传感器驱动
- OLED的SSD1306驱动
- 步进电机控制算法
五、所需硬件及传感器模块
| 类型 | 型号/规格 | 数量 |
|---|---|---|
| 主控 | STM32F103C8T6 | 1 |
| 温湿度传感器 | DHT11 | 1 |
| 光照传感器 | BH1750FVI | 1 |
| 烟雾传感器 | MQ-2 | 1 |
| 显示模块 | 0.96" OLED (I²C) | 1 |
| 电机驱动 | ULN2003达林顿阵列 | 1 |
| 执行机构 | 28BYJ-48步进电机 | 1 |
| 功率控制 | 5V继电器模块 | 2 |
| 报警单元 | 有源蜂鸣器+LED | 1套 |
| 输入设备 | 轻触按键 | 4 |
六、原理图及设计流程图
系统原理图


+----------------+ +----------------+ +-----------------+
| 传感器采集层 | --> | STM32处理核心 | --> | 执行控制层 |
| (MQ-2/DHT11/ | | 1.数据融合处理 | | - ULN2003(窗帘) |
| BH1750) | <-- | 2.阈值判断 | <-- | - 继电器(灯/扇) |
+----------------+ | 3.报警决策 | | - 声光报警 |
+-----------------+ +-----------------+
↑
+--------+
| OLED显示|
| 按键输入|
+--------+
七、实物图描述

八、程序代码框架
int main(void)
{
/*初始化*/
Delay_ms(100);
Relay_Init();
OLED_Init();
Serial_Init();
BH1750_Init();
Key_Init();
DHT11_Init();
AD_Init();
Stepper_Servo_Init();
LED_Buzzer_Init();
LED_Init();
Timer4_Init();
Delay_ms(500);
while (1)
{
Delay_ms(50);
DHT11_Read_Data(&Temperature,&Humi); //获取温湿度
light = bh_data_read(); //获取光强度
Smoke=AD_GetValue(ADC_Channel_4); //烟雾值ADC
switch (PAGE) //页面显示
{
case 0:
{
MODE=0;
OLED_Clear(); //清屏
PAGE_Home(); //显示页面1
}break;
case 1:
{
MODE=1;
OLED_Clear(); //清屏
PAGE_Manual(); //显示手动控制页面
}break;
case 2:
{
MODE=1;
OLED_Clear(); //清屏
PAGE_Threshold(); //显示阈值设置页面
}break;
}
if(Key_Check(KEY_1,KEY_SINGLE)) //按键1按下切换手动设置和阈值设置
{
PAGE++;
PAGE%=3;
}
if(PAGE==1)
{
if(Key_Check(KEY_2,KEY_SINGLE))
{
SetSelect_Manual++;
SetSelect_Manual%=4;
}
}
if(PAGE==2) //当页面2阈值设置界面时的按键功能
{
if(Key_Check(KEY_2,KEY_SINGLE))
{
SetSelect++; //按键2按下切换阈值设置位置
SetSelect%=5;
}
if(Key_Check(KEY_3,KEY_SINGLE))
{
if(SetSelect==1) //设置位置2
{
light_D+=50;
if(light_D>=2000)light_D=2000;
}
if(SetSelect==2) //设置位置3
{
light_G+=1000; //光照强度阈值增加1000
if(light_G>=65535)light_G=65535;
}
if(SetSelect==3) //设置位置4
{
Temperature_G+=1; //温度阈值增加1
if(Temperature_G>=99)Temperature_G=99;
}
if(SetSelect==4) //设置位置4
{
Smoke_G+=50; //温度阈值增加1
if(Smoke_G>=4095)Smoke_G=4096;
}
}
if(Key_Check(KEY_4,KEY_SINGLE))
{
if(SetSelect==1) //设置位置2
{
light_D-=50;
if(light_D<=0|light_D>=3000)light_D=0;
}
if(SetSelect==2) //设置位置3
{
light_G-=1000; //光照强度阈值减小1000
if(light_G<=0)light_G=0;
}
if(SetSelect==3) //设置位置4
{
Temperature_G-=1; //温度阈值减小1
if(Temperature_G<=0|Temperature_G>100)Temperature_G=0;
}
if(SetSelect==4) //设置位置4
{
Smoke_G-=50; //温度阈值减小1
if(Smoke_G<=0|Smoke_G>5000)Smoke_G=0;
}
}
}
control_alarm(); //传感器阈值比较报警函数
OLED_Update();
}
}
九、资料内容清单
- 完整Keil工程文件
- 传感器驱动库(DHT11/BH1750/MQ-2)
- OLED显示驱动源码
- 步进电机控制算法
- 硬件连接原理图,PCB图(AD,PDF格式)
- 元器件清单(BOM表)
- 操作说明视频
- 电路讲解期间选型程序讲解视频

更多推荐
所有评论(0)