目录
[2.1 硬件清单:](#2.1 硬件清单:)
[2.2 功能介绍:](#2.2 功能介绍:)
[资料获取 查看主页介绍:兆龙电子单片机设计](#资料获取 查看主页介绍:兆龙电子单片机设计)
一、设计背景和意义
1.1设计背景:
在日常家庭室内温度调节、学生宿舍精准控温、办公场景局部降温、老人居家舒适温控及商铺门店分区散热的背景下,风速精准调节、温控智能响应、多场景便捷适配、能耗合理管控成为温控风扇类产品的核心需求。传统温控风扇控制方式存在明显局限:一方面,高端智能温控通风系统(如定制化室内环境管控中控平台、工业级精准温控网关、品牌成套商用智能通风设备)功能虽全但成本高昂,部署复杂且需专业人员上门调试与后期维护,难以普及到普通家庭、小户型住宅、租房群体及小型商铺等日常场景,且系统生态封闭性强,不同品牌、不同协议的温控设备与监测终端兼容性差,无法与个人移动终端、家庭智能设备、小型办公管理平台灵活联动,更换或升级成本高,无法满足不同人群(如普通家庭用户、学生、办公人员、独居老人)的便捷温控与通风调节需求;另一方面,普通简易温控风扇装置(如传统机械调速风扇、单一档位定时风扇、基础款手动温控小风扇)虽操作简单、价格低廉,但功能单一,仅能实现基础的风速调节或固定时间启停,缺乏多维度温度监测、风速智能调节、运行记录存储、远程温控调节及设备故障状态提醒(如电机卡滞、温度传感器失灵、设备断电)等功能,无法满足现代化生活与办公场景下对全面覆盖、智能响应、便捷高效的温控与通风管控需求。
现有关温控风扇管控方案还存在功能割裂与集成度低的问题:部分高端智能温控通风系统虽具备多维度温度管控与通风联动功能,但依赖复杂的软硬件架构与专属生态维护,后期使用成本高,难以覆盖预算有限的普通消费群体、学生群体或小型个体经营场景;而低成本温控风扇装置又在功能完整性与智能化上存在欠缺,无法实现温度数据与风扇控制终端、移动 APP、小型办公中控平台的实时联动,导致温控响应延迟、风速调节误差偏大、个性化需求(如老人居家恒温调控、学生宿舍夜间静音降温、商铺分区精准散热)无法满足等问题,无法为用户舒适居家生活(如精准把控室内温度)及高效开展办公与经营活动(如统筹办公区域散热、降低商铺能耗)提供可靠支撑。基于此,本设计以 STM32 单片机为核心,融合高精度温度采集与辅助模块(如温度传感模块、风速调节模块、定时控制模块、语音提醒模块)、LCD 显示模块、数据存储模块及蓝牙通信与异常提醒模块,构建低成本、高集成度的 STM32 单片机智能温控风扇系统,以解决传统温控风扇控制方式操作繁琐、智能化程度低、功能单一及温控通风管控效率低的问题。
1.2设计意义:
从使用体验与温控风扇精细化管控效率角度,该系统突破了传统温控风扇控制方式的局限:一是实现了多维度温度监测与全场景风速联动(如支持环境温度实时采集、目标温度精准设定、风速多档位智能调节、定时启停控制,联动蓝牙通信模块、异常声光提醒模块、风扇智能调速执行模块),无需用户手动调节风速、频繁核对环境温度或记录风扇运行状态,减少温控调节的繁琐性与风速管控的延迟性;二是配备 OLED 实时显示模块,直观呈现当前环境温度 / 目标温度 / 风扇档位、系统运行状态(正常 / 异常)及提醒类型,同时支持数据自动存储(可通过蓝牙传输至移动 APP / 个人温控管理平台 / 小型办公环境管控平台),方便用户与办公管理员长期追溯温度变化历史数据、风扇运行记录,也为优化室内温控方案、排查设备故障隐患及多区域散热统筹管控提供完整数据支撑;三是新增个性化温控预警与自动调速功能,当监测到环境温度超出预设范围(如高温自动升档、低温自动降档 / 停机)或异常状态(如温度传感器失灵、风扇电机卡滞、设备电量不足),系统根据状态类型自动触发对应执行动作(同时通过声光提醒模块反馈调速 / 预警信息与设备当前工作状态,蓝牙同步推送至关联移动终端),并联动风扇执行模块完成智能操作(如联动 "高温预警",自动提升风扇档位、记录温度峰值与调速时间,同步更新温控台账),无需人工现场干预即可实现温控风扇的智能化精细化管控,大幅提升了温控调节的便捷性与室内散热管理的高效性。
从技术实践与成本控制角度,本设计以 STM32 单片机为核心,充分利用其低功耗、高性价比的优势,搭配低成本的高精度温度采集模块及通用外围模块,在保证温控精度(核心温度监测准确率可控制在 98% 以上,风速调节与预警响应时间可控制在 0.5 秒以内)的前提下,有效降低了系统整体成本,相比同功能的高端智能温控通风系统成本降低 40%-60%,更易普及到普通家庭、学生宿舍、小型办公场所、个体商铺及老人居家照料等场景。同时,系统支持模块化扩展(如后续可新增多区域温度联动调控功能、多人个性化温控权限管理功能、远程手动调速与参数设置功能),为后续功能升级预留了空间,具备良好的灵活性与可扩展性。
**二、**实物展示
下方为实物演示视频
下方为实物展示图片

三、硬件功能介绍
2.1 硬件清单:
-
STM32F103C8T6
-
OLED显示
-
DHT11温湿度传感器
-
声光报警
-
SR501红外检测
-
TB6612电机驱动模块
-
WIFI模块
2.2 功能介绍:
(1) 采用OLED显示屏实时显示当前温度、湿度、温度阈值、风扇档位、人体存在状态以及工作模式(自动/手动/定时);
(2) 可通过按键切换自动、手动和定时三种工作模式。在自动模式下可设置温度阈值;
(3) 手动模式下支持手动开启风扇并调节档位,档位范围0--5档,每调节一次档位递增一档;
(4) 自动模式下,当检测到有人且环境温度超过设定阈值时,风扇自动启动;
(5) 具备倒计时定时功能,可设定工作时间,计时结束自动关闭风扇;
(6) 支持Wi-Fi远程控制,可通过APP切换模式、设置温度阈值、调节档位、设定定时时间,并实时监控系统数据
四、软件设计流程图

五、硬件PCB展示

六、软件主函序展示
int main(void)
{
/*模块初始化*/
OLED_Init(); //OLED初始化
Motor_Init();
DHT11_Init();
MatrixKey_Init();
Red_Init();
Timer_Init();
Serial_Init();
BEEP_GPIO_Config();
OLED_ShowChinese(0,0,"温度");
OLED_ShowChinese(16*4,0,"湿度");
OLED_ShowChinese(0,16,"模式");
OLED_ShowChinese(16*4,16,"档数");
OLED_ShowNum(16*2,16,Key_M,1,OLED_8X16);
OLED_ShowNum(16*6,16,dang,1,OLED_8X16);
OLED_ShowChinese(0,16*2,"速度:");
OLED_ShowSignedNum(16*3,16*2,Speed,3,OLED_8X16);
OLED_ShowChinese(0,16*3,"倒计时:");
OLED_ShowNum(16*4,16*3,Time,2,OLED_8X16);
OLED_Update();
GPIO_SetBits(GPIOB, GPIO_Pin_0);
GPIO_SetBits(GPIOB, GPIO_Pin_1);
Delay_ms(100);
GPIO_ResetBits(GPIOB, GPIO_Pin_0);
GPIO_ResetBits(GPIOB, GPIO_Pin_1);
while (1)
{
DHT11_Read_Data(&TH,&RH);//获取当前温湿度
OLED_ShowNum(16*2,0,TH,2,OLED_8X16);
OLED_ShowNum(16*6,0,RH,2,OLED_8X16);
OLED_Update();
if(Timedemo == 1)
{
if(RED_Data == 1) //如果有人
{
OLED_ShowString(16*6,16*2,"Hi! ",OLED_8X16);
if(temperature < TH) //实际温度高于设置阈值
{
Speed = (TH-temperature)*20; //每高一度速度+20
if(Speed > 100)
{
Speed = 100;
}
}
else Speed = 0;
}
else
{
OLED_ShowString(16*6,16*2,"Bey!",OLED_8X16);
Speed = 0;
}
OLED_ShowSignedNum(16*3,16*2,Speed,3,OLED_8X16);
OLED_Update();
Motor_SetSpeed(Speed);
}
Delay_ms(500);
}
}
uint16_t count;
uint8_t yy;
void TIM1_UP_IRQHandler(void) //每1毫秒进一次中断
{
if (TIM_GetITStatus(TIM1, TIM_IT_Update) == SET)
{
count++;
if(count == 1000)
{
count = 0;
if(Time_demo == 0 && Time > 0) //进入倒计时模式
{
Time--;
if(Time == 0) //倒计时结束
{
Timedemo = 0; //关闭自动挡
Speed = 0; //速度置0
dang = 0; //去除记录
Time_1 = 0;
Time_10 = 0;
Motor_SetSpeed(0);
OLED_ShowSignedNum(16*3,16*2,Speed,3,OLED_8X16);
OLED_ShowNum(16*6,16*1,dang,1,OLED_8X16);
}
OLED_ShowNum(16*4,16*3,Time,2,OLED_8X16);
OLED_Update();
}
}
if(count%20 == 0) //获取按键值
{
RED_Data = Red_Rdata(); //检测是否有人
if(RxData) //
{
KeyNum = RxData-'0';//
RxData = 0;
// OLED_ShowNum(16*6,16*3,KeyNum,2,OLED_8X16);
// OLED_Update();
}
else
{
KeyNum = Key_LoopY();
}
if(KeyNum) //如果按键按下
{
if(KeyNum == 3) //切换模式键 Key_M = 1:手动,Key_M = 2:自动
{
Num = 1; //手动自动模式
Key_M += 1;
if(Key_M > 2){Key_M = 1;}
OLED_ShowNum(16*2,16,Key_M,1,OLED_8X16);
OLED_Update();
}
if(Num == 1) //手动自动模式
{
if(Key_M == 1) //模式1手动挡模式
{
Timedemo = 0;
OLED_ClearArea(16*3,16,16*8,16);
OLED_ShowChinese(16*4,16,"档数");
if (KeyNum == 1) //减档
{
dang--;
if(dang < 0)
{
dang = 5;
}
}
if (KeyNum == 2) //加档
{
dang++;
if(dang > 5)
{
dang = 0;
}
}
Speed = dang*20;
OLED_ShowString(16*6,16*2," ",OLED_8X16);
OLED_ShowNum(16*6,16*1,dang,1,OLED_8X16);
OLED_ShowSignedNum(16*3,16*2,Speed,3,OLED_8X16);
OLED_Update();
Motor_SetSpeed(Speed);
}
if(Key_M == 2)
{
Timedemo = 1;
dang = 0;
OLED_ClearArea(16*3,16,16*8,16);
OLED_ShowChinese(16*4,16,"阈值");
if (KeyNum == 1) //温度阈值--
{
temperature--;
if(temperature < 16)
{
temperature = 16;
}
}
if (KeyNum == 2) //温度阈值++
{
temperature++;
if(temperature > 40)
{
temperature = 40;
}
}
OLED_ShowNum(16*6,16*1,temperature,2,OLED_8X16);
OLED_Update();
}
}
if(KeyNum == 4) //切换倒计时模式
{
Num = 2;
Time_demo++;
if(Time_demo == 2) //Time_demo=2相当于确定键
{
Num = 1;
Time_demo = 0;
OLED_ShowString(16*5+8,16*3," ",OLED_8X16);
OLED_Update();
}
}
if(Num == 2)
{
if(Time_demo == 1) //输入需要倒计时的时间
{
if(KeyNum == 1)
{
Time_10++;
if(Time_10 > 9)
{
Time_10 = 0;
}
}
if(KeyNum == 2)
{
Time_1++;
if(Time_1 > 9)
{
Time_1 = 0;
}
}
Time = Time_10*10 + Time_1;
OLED_ShowNum(16*4,16*3,Time,2,OLED_8X16);
OLED_ShowString(16*5+8,16*3,"<-",OLED_8X16);
OLED_Update();
}
}
}
}
TIM_ClearITPendingBit(TIM1, TIM_IT_Update);
}
}
七、单片机实物资料
