news 2026/2/26 10:04:20

自动化毕设 stm32 wifi远程温控风扇系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
自动化毕设 stm32 wifi远程温控风扇系统

文章目录

  • 0 前言
  • 1 主要功能
  • 2 系统架构
  • 3 核心软件设计
      • 3.3.2 初始化
      • 3.3.3 温度采集与显示
  • 4 实现效果
  • 5 最后

0 前言

🔥
这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。

为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天要分享的是

🚩毕业设计 stm32 wifi远程温控风扇系统

🥇学长这里给一个题目综合评分(每项满分5分)

  • 难度系数:3分
  • 工作量:3分
  • 创新点:4分

🧿项目分享:见文末!

实物演示效果

毕业设计 stm32 wifi远程温控风扇系统 - 单片机 嵌入式 物联网

1 主要功能

按照时间规划和目标进度完成开发基于STM32远程智能降温系统的电路设计、程序设计、程序调试、软硬结合调试,从而实现风扇降温系统的自动智能模式和远程手动模式。

(1)自动智能模式
自动智能模式可根据设备的温湿度传感器进行时实数据检测,进行自动反馈达到自动开启风扇降温。

(2)远程手动模式
在自动智能模式中无法满足降温特殊需求情况,可根据特殊需求切换远程手动模式,在开发已有的客户端上发送降温命令,从而实现根据特殊需求情况降温的远程手动模式。

2 系统架构

(1)空气温湿度传感器

DHT11 是一款湿温度一体化的数字传感器。该传感器包括一个电阻式测湿元件和一个 NTC测温元件,并与一个高性能 8 位单片机相连接。通过单片机等微处理器简单的电路连接就能够实时的采集本地湿度和温度。DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机,数据采用校验和方式进行校验,有效的保证数据传输的准确性。DHT11 功耗很低,5V 电源电压下,工作平均最大电流 0.5mA。

(2)光照强度传感器
光照强度的监测采用的是bh1750光照强度传感器。有接近视觉灵敏度的光谱灵敏度特性,支持I2CBUS接口,支持1.8v逻辑输入接口。传感器有两种可选的I2Cslave地址,无需其他外部件。光源依赖性弱,受红外线影响很小。传感器通过降低功率功能,实现低电流化。通过50Hz/60Hz除光噪音功能实现稳定的测定,最小误差变动在±20%。

(3)WiFi通信模块
ESP8266是一款高性能的无线 WIFI模块。ESP8266 模块采用串口(LVTTL)与 MCU(或其他串口设备)通信,内置 TCP/IP协议栈,能够实现串口与 WIFI 之间的转换。通过ESP8266模块,传统的串口设备只是需要简单的串口配置,即可通过网络(WIFI)传输自己的数据。
ATK-ESP8266 模块支持 LVTTL 串口,兼容 3.3V 和 5V 单片机系统,可以很方便的与你的产品进行连接。模块支持串口转 WIFI STA、串口转 AP 和 WIFI STA+WIFI AP 的模式,从而快速构建串口-WIFI 数据传输方案。

使用到的硬件器件

  • STM32F103RCT6开发板 * 1
  • DHT11温湿度传感器 * 1
  • 继电器模块 * 1
  • Wifi - ESP01S * 1
  • 1.44寸液晶屏(SPI接口) * 1
  • 小风扇模块 * 1
  • 杜邦线若干

3 核心软件设计

控制系统软件使用 C 语言编程。

使用模块化设计, 除主程序外, 还有各功能子程序, 分别执行直流电机驱动调速及温度采集、 显示等功能, 编辑环境采用集成开发环环境 Keil。

程序总体运行流程图如下:

3.3.2 初始化

系统初始化包括 STM32 系统定时器初始化, GPIO 口初始化以及 LCD1602 初始化等。

3.3.3 温度采集与显示

DS18B20 温度传感器进行温度采集时, 要依次进行初始化, ROM 操作指令, 存储器操作指令, 数据传输等操作

篇幅有限,不过多复述详细设计细节,详细的设计分享在论文中。。。

关键代码

#include"stm32f10x.h"#include"bsp_SysTick.h"#include<LCD1602.h>#include"bsp_ds18b20.h"intmain(){intPWM,low,zhouqi;floatwendu;intwendu1;zhouqi=500;low=zhouqi-PWM;SysTick_Init();init1602();lcdpos(1,0);writestring("TEM: 00.0");GPIO_SetBits(GPIOB,GPIO_Pin_0);while(DS18B20_Init()){lcdpos(0,0);writestring(" no ds18b20 exit");}lcdpos(0,0);writestring("ds18b20 exit");for(;;){DS18B20_Get_Temp(wendu);if(wendu<0){lcdpos(1,4);writestring("-");}wendu1=wendu*100;lcdpos(1,5);write_dat(wendu1/10000+0x30);lcdpos(1,6);write_dat(wendu1%10000/1000+0x30);lcdpos(1,7);write_dat(wendu1%1000/100+0x30);lcdpos(1,9);write_dat(wendu1%100/10+0x30);lcdpos(1,10);write_dat(wendu1%10+0x30);Delay_ms(2000);if(wendu1>30){low=500;GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(PWM);}if(wendu1<15){low=0;GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(PWM);}if(wendu1>=15&wendu1<20){low=100;GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(PWM);GPIO_ResetBits(GPIOB,GPIO_Pin_0);Delay_ms(low);}if(wendu1>=20&wendu1<25){low=200;GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(PWM);GPIO_ResetBits(GPIOB,GPIO_Pin_0);Delay_ms(low);}if(wendu1>=25&wendu1<30){low=300;GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(PWM);GPIO_ResetBits(GPIOB,GPIO_Pin_0);Delay_ms(low);}}}2.DS18B20 子程序#include"bsp_ds18b20.h"/* * 函数名: DS18B20_GPIO_Config * 描述 : 配置 DS18B20 用到的 I/O 口 * 输入 : 无 * 输出 : 无 */staticvoidDS18B20_GPIO_Config(void){/*定义一个 GPIO_InitTypeDef类型的结构体*/GPIO_InitTypeDef GPIO_InitStructure;/*开启 DS18B20_PORT 的外设时钟*/RCC_APB2PeriphClockCmd(DS18B20_CLK,ENABLE);/*选择要控制的 DS18B20_PORT 引脚*/GPIO_InitStructure.GPIO_Pin=DS18B20_PIN;/*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/*设置引脚速率为 50MHz */GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/*调用库函数, 初始化 DS18B20_PORT*/GPIO_Init(DS18B20_PORT,&GPIO_InitStructure);GPIO_SetBits(DS18B20_PORT,DS18B20_PIN);}/* * 函数名: DS18B20_Mode_IPU * 描述 : 使 DS18B20-DATA 引脚变为输入模式 * 输入 : 无 * 输出 : 无 */staticvoidDS18B20_Mode_IPU(void){GPIO_InitTypeDef GPIO_InitStructure;/*选择要控制的 DS18B20_PORT 引脚*/GPIO_InitStructure.GPIO_Pin=DS18B20_PIN;/*设置引脚模式为浮空输入模式*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPU;/*调用库函数, 初始化 DS18B20_PORT*/GPIO_Init(DS18B20_PORT,&GPIO_InitStructure);}/* * 函数名: DS18B20_Mode_Out_PP * 描述 : 使 DS18B20-DATA 引脚变为输出模式 * 输入 : 无 * 输出 : 无 */staticvoidDS18B20_Mode_Out_PP(void){GPIO_InitTypeDef GPIO_InitStructure;/*选择要控制的 DS18B20_PORT 引脚*/GPIO_InitStructure.GPIO_Pin=DS18B20_PIN;/*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_Mode=GPIO_Mode_Out_PP;/*设置引脚速率为 50MHz */GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;/*调用库函数, 初始化 DS18B20_PORT*/GPIO_Init(DS18B20_PORT,&GPIO_InitStructure);}/* *主机给从机发送复位脉冲 */staticvoidDS18B20_Rst(void){/* 主机设置为推挽输出 */DS18B20_Mode_Out_PP();DS18B20_DATA_OUT(LOW);/* 主机至少产生 480us 的低电平复位信号 */Delay_us(750);/* 主机在产生复位信号后, 需将总线拉高 */DS18B20_DATA_OUT(HIGH);Delay_us(15);}/* * 检测从机给主机返回的存在脉冲 * 0: 成功 * 1: 失败 */staticuint8_tDS18B20_Presence(void){uint8_tpulse_time=0;/* 主机设置为上拉输入 */DS18B20_Mode_IPU();while(DS18B20_DATA_IN()&&pulse_time<100){pulse_time++;Delay_us(1);}/*经过100us 后, 存在脉冲都还没有到来*/if(pulse_time>=100)return1;elsepulse_time=0;/* 存在脉冲到来, 且存在的时间不能超过 240us */while(!DS18B20_DATA_IN()&&pulse_time<240){pulse_time++;Delay_us(1);}if(pulse_time>=240)return1;elsereturn0;}/* * 从 DS18B20 读取一个 bit */staticuint8_tDS18B20_Read_Bit(void){uint8_tdat;/* 读 0 和读 1 的时间至少要大于 60us */DS18B20_Mode_Out_PP();/* 读时间的起始: 必须由主机产生 >1us <15us 的低电平信号 */DS18B20_DATA_OUT(LOW);Delay_us(10);/*设置成输入, 释放总线, 由外部上拉电阻将总线拉高*/DS18B20_Mode_IPU();//Delay_us(2);if(DS18B20_DATA_IN()==SET)dat=1;elsedat=0;/* 这个延时参数请参考时序图 */Delay_us(45);returndat;}/* * 从 DS18B20 读一个字节, 低位先行 */uint8_tDS18B20_Read_Byte(void){uint8_ti,j,dat=0;for(i=0;i<8;i++){j=DS18B20_Read_Bit();dat=(dat)|(j<<i);}returndat;}/* * 写一个字节到 DS18B20, 低位先行 */voidDS18B20_Write_Byte(uint8_tdat){uint8_ti,testb;DS18B20_Mode_Out_PP();for(i=0;i<8;i++){testb=dat&0x01;dat=dat>>1;/* 写 0 和写 1 的时间至少要大于 60us */if(testb){DS18B20_DATA_OUT(LOW);/* 1us < 这个延时 < 15us */Delay_us(8);DS18B20_DATA_OUT(HIGH);Delay_us(58);}else{DS18B20_DATA_OUT(LOW);/* 60us < Tx 0 < 120us */Delay_us(70);DS18B20_DATA_OUT(HIGH);/* 1us < Trec(恢复时间) < 无穷大*/Delay_us(2);}}}voidDS18B20_Start(void){DS18B20_Rst();DS18B20_Presence();DS18B20_Write_Byte(0XCC);/* 跳过 ROM */DS18B20_Write_Byte(0X44);/* 开始转换 */}uint8_tDS18B20_Init(void){DS18B20_GPIO_Config();DS18B20_Rst();returnDS18B20_Presence();}floatDS18B20_Get_Temp(floatf_tem){uint8_ttpmsb,tplsb;shorts_tem;DS18B20_Rst();DS18B20_Presence();DS18B20_Write_Byte(0XCC);/* 跳过 ROM */DS18B20_Write_Byte(0X44);/* 开始转换 */DS18B20_Rst();DS18B20_Presence();DS18B20_Write_Byte(0XCC);/* 跳过 ROM */DS18B20_Write_Byte(0XBE);/* 读温度值 */tplsb=DS18B20_Read_Byte();tpmsb=DS18B20_Read_Byte();s_tem=tpmsb<<8;s_tem=s_tem|tplsb;If(s_tem<0)/* 负温度 */f_tem=(~s_tem+1)*0.0625;elsef_tem=s_tem*0.0625;returnf_tem;}

/*******************************************************************
篇幅有限,只展示部分代码
********************************************************************/

4 实现效果

演示视频

毕业设计 stm32 wifi远程温控风扇系统 - 单片机 嵌入式 物联网

5 最后

包含内容

🧿项目分享:见文末!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/24 14:00:49

YOLOFuse团购优惠活动:实验室批量采购折扣

YOLOFuse团购优惠活动&#xff1a;实验室批量采购折扣 在智能安防、夜间侦察和自动驾驶等前沿领域&#xff0c;单一可见光摄像头的局限性正日益凸显——当夜幕降临或烟雾弥漫时&#xff0c;传统目标检测模型往往“失明”。而与此同时&#xff0c;红外成像虽能穿透黑暗与遮蔽&am…

作者头像 李华
网站建设 2026/2/24 19:16:18

YOLOFuse文件结构详解:/root/YOLOFuse目录下各模块功能说明

YOLOFuse 文件结构与核心模块深度解析 在智能感知系统日益渗透安防、自动驾驶和夜间侦察的今天&#xff0c;单一可见光图像已难以应对低光照、烟雾遮挡或强逆光等复杂环境。传统目标检测模型如YOLOv8虽具备高速度与高精度优势&#xff0c;但其设计初衷并未考虑多模态输入——尤…

作者头像 李华
网站建设 2026/2/24 0:35:03

车圈2025:价格战没赢家,但淘汰赛已有出局者

车企们已告别单纯价格上的厮杀&#xff0c;进入到“体系化”和“生态战”新阶段。 ©TMT星球原创 作者&#xff5c;黄燕华 即将过去的2025年&#xff0c;汽车行业加速行驶在转型的快车道上。 这一年&#xff0c;新能源汽车渗透率持续上升、智能技术加速落地&#xff1b;…

作者头像 李华
网站建设 2026/2/24 13:28:17

YOLOFuse仅上传RGB图像怎么办?临时解决方案提供参考

YOLOFuse仅上传RGB图像怎么办&#xff1f;临时解决方案提供参考 在智能监控、夜间巡检和边缘感知系统日益普及的今天&#xff0c;多模态目标检测正成为提升模型鲁棒性的关键技术。尤其在低光照或复杂气象条件下&#xff0c;单靠RGB图像已难以支撑稳定识别——这正是YOLOFuse这类…

作者头像 李华
网站建设 2026/2/25 16:14:31

YOLOFuse与商汤科技合作:SenseTime算法互补

YOLOFuse与商汤科技协同&#xff1a;多模态检测的新范式 在城市夜间监控的实战场景中&#xff0c;一个常见的困境是——摄像头拍到了热源信号&#xff0c;却无法确认是否为行人&#xff1b;或者可见光画面里有模糊人影&#xff0c;但因光线太差而被模型误判为噪声。这种“看得…

作者头像 李华
网站建设 2026/2/20 9:56:48

YOLOFuse项目根目录/root/YOLOFuse常见操作命令汇总

YOLOFuse项目根目录 /root/YOLOFuse 常见操作命令与技术实践 在智能安防、自动驾驶和全天候监控场景中&#xff0c;单一可见光图像检测常因低光照、雾霾或遮挡而失效。这时候&#xff0c;红外&#xff08;IR&#xff09;图像的优势就显现出来了——它不依赖环境光&#xff0c;…

作者头像 李华