2026/1/8 0:50:16
网站建设
项目流程
国外网页设计欣赏网站,做牙工作网站,关键词数据分析工具有哪些,公司手机网站模板免费下载文章目录 0 前言1 主要功能2 系统架构3 核心软件设计3.3.2 初始化3.3.3 温度采集与显示 4 实现效果5 最后 0 前言
#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升#xff0c;传统的毕设题目缺少创新和亮点#xff0c;往往达不到毕业答辩的要求#xff0c…文章目录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%。3WiFi通信模块ESP8266是一款高性能的无线 WIFI模块。ESP8266 模块采用串口LVTTL与 MCU或其他串口设备通信内置 TCP/IP协议栈能够实现串口与 WIFI 之间的转换。通过ESP8266模块传统的串口设备只是需要简单的串口配置即可通过网络WIFI传输自己的数据。ATK-ESP8266 模块支持 LVTTL 串口兼容 3.3V 和 5V 单片机系统可以很方便的与你的产品进行连接。模块支持串口转 WIFI STA、串口转 AP 和 WIFI STAWIFI AP 的模式从而快速构建串口-WIFI 数据传输方案。使用到的硬件器件STM32F103RCT6开发板 * 1DHT11温湿度传感器 * 1继电器模块 * 1Wifi - ESP01S * 11.44寸液晶屏(SPI接口) * 1小风扇模块 * 1杜邦线若干3 核心软件设计控制系统软件使用 C 语言编程。使用模块化设计 除主程序外 还有各功能子程序 分别执行直流电机驱动调速及温度采集、 显示等功能 编辑环境采用集成开发环环境 Keil。程序总体运行流程图如下3.3.2 初始化系统初始化包括 STM32 系统定时器初始化 GPIO 口初始化以及 LCD1602 初始化等。3.3.3 温度采集与显示DS18B20 温度传感器进行温度采集时 要依次进行初始化 ROM 操作指令 存储器操作指令 数据传输等操作篇幅有限不过多复述详细设计细节详细的设计分享在论文中。。。关键代码#includestm32f10x.h#includebsp_SysTick.h#includeLCD1602.h#includebsp_ds18b20.hintmain(){intPWM,low,zhouqi;floatwendu;intwendu1;zhouqi500;lowzhouqi-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(wendu0){lcdpos(1,4);writestring(-);}wendu1wendu*100;lcdpos(1,5);write_dat(wendu1/100000x30);lcdpos(1,6);write_dat(wendu1%10000/10000x30);lcdpos(1,7);write_dat(wendu1%1000/1000x30);lcdpos(1,9);write_dat(wendu1%100/100x30);lcdpos(1,10);write_dat(wendu1%100x30);Delay_ms(2000);if(wendu130){low500;GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(PWM);}if(wendu115){low0;GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(PWM);}if(wendu115wendu120){low100;GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(PWM);GPIO_ResetBits(GPIOB,GPIO_Pin_0);Delay_ms(low);}if(wendu120wendu125){low200;GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(PWM);GPIO_ResetBits(GPIOB,GPIO_Pin_0);Delay_ms(low);}if(wendu125wendu130){low300;GPIO_SetBits(GPIOB,GPIO_Pin_0);Delay_ms(PWM);GPIO_ResetBits(GPIOB,GPIO_Pin_0);Delay_ms(low);}}}2.DS18B20 子程序#includebsp_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_PinDS18B20_PIN;/*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_ModeGPIO_Mode_Out_PP;/*设置引脚速率为 50MHz */GPIO_InitStructure.GPIO_SpeedGPIO_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_PinDS18B20_PIN;/*设置引脚模式为浮空输入模式*/GPIO_InitStructure.GPIO_ModeGPIO_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_PinDS18B20_PIN;/*设置引脚模式为通用推挽输出*/GPIO_InitStructure.GPIO_ModeGPIO_Mode_Out_PP;/*设置引脚速率为 50MHz */GPIO_InitStructure.GPIO_SpeedGPIO_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_time0;/* 主机设置为上拉输入 */DS18B20_Mode_IPU();while(DS18B20_DATA_IN()pulse_time100){pulse_time;Delay_us(1);}/*经过100us 后 存在脉冲都还没有到来*/if(pulse_time100)return1;elsepulse_time0;/* 存在脉冲到来 且存在的时间不能超过 240us */while(!DS18B20_DATA_IN()pulse_time240){pulse_time;Delay_us(1);}if(pulse_time240)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)dat1;elsedat0;/* 这个延时参数请参考时序图 */Delay_us(45);returndat;}/* * 从 DS18B20 读一个字节 低位先行 */uint8_tDS18B20_Read_Byte(void){uint8_ti,j,dat0;for(i0;i8;i){jDS18B20_Read_Bit();dat(dat)|(ji);}returndat;}/* * 写一个字节到 DS18B20 低位先行 */voidDS18B20_Write_Byte(uint8_tdat){uint8_ti,testb;DS18B20_Mode_Out_PP();for(i0;i8;i){testbdat0x01;datdat1;/* 写 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);/* 读温度值 */tplsbDS18B20_Read_Byte();tpmsbDS18B20_Read_Byte();s_temtpmsb8;s_tems_tem|tplsb;If(s_tem0)/* 负温度 */f_tem(~s_tem1)*0.0625;elsef_tems_tem*0.0625;returnf_tem;}/*******************************************************************篇幅有限只展示部分代码********************************************************************/4 实现效果演示视频毕业设计 stm32 wifi远程温控风扇系统 - 单片机 嵌入式 物联网5 最后包含内容项目分享:见文末!