开关窗系统PPT
Southwest University of Science and TechnologyIPCS10班开关窗系统设计报告课程名称:嵌入式课程设计题目:...
Southwest University of Science and TechnologyIPCS10班开关窗系统设计报告课程名称:嵌入式课程设计题目:开关窗系统专业班级:电气2203学生姓名:刘栩学生学号:5120225666起止日期:2023.8.1-2023.8.14学生邮箱:2917860081@qq.com嵌入式课题组制基于STM32开关窗系统设计摘要:随着科技的进步,经济的快速发展,人们对生活质量的要求越来越高,自动化设备也就逐渐被人们所喜爱,所以设计智能窗户系统具有实践意义。本论文阐述了以STM32单片机为核心的智能开窗器的工作原理和设计方法。温湿度信号由温湿度传感器DHT11采集,并以数字信号的方式传送给单片机,并在OLED上显示,烟雾检测采用的是MQ-2传感器。本文介绍了该控制系统的硬件部分和软件部分的设计与实现。硬件电路包括:温湿度检测电路,烟雾检测电路,雨滴检测电路和舵机控制电路。单片机通过对信号进行相应处理,根据是否下雨和烟雾情况对连接窗户的舵机进行控制,从而实现对窗户开闭进行自动控制的目的。关键词:STM32单片机,DHT11温湿度传感器,雨滴传感器,MQ-2传感器,舵机控制Design of switch window system based on STM32Abstract With the progress of science and technology, the rapid development of economy, people have higher and higher requirements for the quality of life, and automation equipment is gradually loved by people, so the design of intelligent window system has practical significanceThis paper describes the working principle and design method of the intelligent window opener based on STM32 single chip microcomputer. The temperature and humidity signal is collected by the temperature and humidity sensor DHT11 and transmitted to the MCU in the form of digital signal, and displayed on the OLED, and the smoke detection is using the MQ-2 sensor. This paper introduces the design and implementation of the hardware part and software part of the control system. Hardware circuit includes: temperature and humidity detection circuit, smoke detection circuit, raindrop detection circuit and steering gear control circuit. By processing the signal accordingly, the MCU controls the steering gear connected to the window according to whether it is raining and smoke, so as to realize the purpose of automatic control of the window opening and closingKeywords STM32 MCU, DHT11 temperature and humidity sensor, raindrop sensor, MQ-2 sensor, steering gear control第1章设计任务分析与设计方案选择1.1设计任务分析下雨自动关窗:外界下雨,此时雨滴传感器检测电阻变化,单片机控制舵机运作完成关窗命令。按键控制舵机:当按键按下时输出低电频,通过电频变化来控制PWM占空比来控制舵机的转动。遇到有害气体自动关窗:当MQ-2传感器检测到空气中有害气体浓度超标时,单片机控制电机运作完成关窗命令。总的来说系统采用STM32单片机作为系统主控,温湿度采用的是 DHT11数字传感器。对烟雾的检测采用的是MQ-2传感器,由于传感器的接口都是数字接口,因此,采用STM32单片机的IO口即可实现对温湿度的读取,并显示在OLED显示屏上。单片机在读取传感器信息后会和内存中已存的阈值进行比较,进而通过控制PWM输出占空比控制舵机的转动,实现自动关窗的功能。1.2设计要求(1) 使用舵机或电机搭建系统硬件平台。(2) 能控制舵机或电机实现窗户的打开与关闭,关闭误差不能超过 1°。(3) 能实时采集室外环境的温湿度并显示,测量误差不能超过1°(温度)、 3%(湿度)。(4) 下雨时关闭窗户;室内空气质量不好时,打开窗户。1.3设计方案选择1.3.1主控电路:本次设计我们选择stm32F103C8T6作为主控芯片,该芯片具有成本低、速度快、性能高和损耗低等特点,适合于三轮自动泊车系统测量状态多、实时性要求强和扩展功能多等控制要求。1.3.2OLED显示电路:OLED显示屏,可以显示信息,方便调试运行以及状态的显示。1.3.3DHT11数字温湿度传感器:所以该产品具有质量好、响应快、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在即为精确的湿度校验室中进行校准。单线制串行接口,使系统集成变得简易快捷。1.3.4MQ-2气体检测传感器:可用于家庭对气体的检测,该产品探测范围广,对液化气、丁烷、甲烷、烟雾等有较好的灵敏度,快速响应恢复,优异的稳定性和超长的寿命。1.3.5雨滴传感器:它通常由一个感应电极和一个接收电极组成,两个电极之间形成一个电容。当雨滴落在传感器上时,会改变电容的值,从而可以通过测量电容的变化来判断是否有雨滴降落。第1章 硬件电路设计2.1主控制器模块主控芯片选择的基于ARM Cortex-M 内核STM32系列的32位的微控制器STM32F103C8T6,程序存储器容量是64KB,速度可达72 MHz,具有成本低、速度快和性能高等特点,在该处理器的控制下,可以稳定地实现硬件要求。图2.1主控芯片2.2 OLED显示屏本次设计我们使用的是分辨率为 128×64 ,屏幕尺寸为 0.96 寸的OLED显示屏用于显示温度和湿度,也用于显示窗户状态。2.3DHT11数字温湿度传感器DHT11温湿度传感器是一种常见的数字式温湿度传感器,它采用单总线通信协议,可以直接与微控制器或单片机连接。DHT11传感器价格相对较低,适合一般应用场景,DHT11传感器输出的温度和湿度值是以数字形式呈现的,方便读取和处理。图2.3 数字温湿度传感器图2.4舵机模块舵机是一种常用的电机,用于控制机械装置的角度或位置。它通常由电机、减速器和位置反馈装置组成。舵机的工作原理是通过控制电机的转动来改变输出轴的角度或位置。图2.4 舵机图2.5雨滴传感器雨滴传感器是一种用于检测雨水的传感器,它可以通过检测雨滴的存在和数量来判断当前是否下雨。雨滴传感器通常由两个电极组成,当雨滴落在电极上时,电极之间的电阻会发生变化,从而可以检测到雨滴的存在。雨滴传感器的工作原理是基于电阻变化的原理,当雨滴落在电极上时,电极之间的电阻会发生变化,这种变化可以通过电路进行检测和处理。通常,雨滴传感器会输出一个模拟信号或数字信号,用于表示当前的雨水情况。图2.5 雨滴传感器图2.6烟雾传感器烟雾传感器是一种用于检测空气中烟雾浓度的传感器,它可以通过检测烟雾颗粒的存在和浓度来判断当前是否有烟雾。烟雾传感器通常基于光学原理或化学原理工作,具有高灵敏度和快速响应的特点。图2.6烟雾传感器图第3章 软件设计3.1主程序流程图本系统的STM32单片机。主程序中仅完成了系统的初始化和开始的显示部分,然后就进入待机模式。其他功能模块都在中断服务子程序中完成。当产生中断时执行中断服务子程序。整个程序全部用C语言编写,使用模块化的设计方法,把各个模块相关的程序放在一个文件中,便于分块调试和管理,缩短了调试周期,增加了程序的可移植性和可剪裁性。整个系统软件需要对温度传感器DHT11、报警器、窗户控制系统进行管理。温度传感器DHT11为数字式温度传感器,直接与单片机的串口连接来读取温度。以上所有模块均在主程序中完成初始化过程,系统流程图如图3-1所示。图3.13.2DHT11模块DHT11子程序是结合它的用户使用资料编写,主要完成的是初始化DHT11,从 DHT11中读出一个字节的数据,向DHT11中写入一个字节的数据,配置 DHT11包括警报温度的上限和下限、温度转换的精度,读出Scrachpad存储器中的九个字节的数据,读出Rom中的64位Code值,对读出的Scrachpad数据进行CRC校验,然后根据读出的数据得到测量出的十进制温度值。从DHT11中读出九个字节数据的流程图如图3.2所示。3.3控制舵机模块雨滴传感器通常由两个电极组成,当雨滴接触到电极时,会形成一个导电通路,从而改变电阻值,输出低电频,舵机模块接收到信号后执行关窗操作。烟雾传感器通常由两个电极组成,当烟雾到电极时,会形成一个导电通路,从而改变电阻值,输出低电频,舵机模块接收到信号后执行开窗操作。第4章 实验测试与分析4.1基本电路板检查根据前面的研究完成各个电路模块的原理焊好电路板,进行实验调试。先用万用表复核目测中认为可疑的连接或是接点,检查它们的通短状态是否与设计规定相符。再检查各种电源线与地线之间是否有短路现象,如有再仔细检查出并排除。短路现象一定要在器件安装及加电前检查出。接通电源后,用手摸一下芯片是否发热,如果发热,立即关掉电源,稍后再进行再次检测;如果没有发热,再测试芯片的VCC端电压是否达到设计要求,接地端是否都接地。图4.1实物图4.2实验测试通过测试可以完成控制舵机或电机实现窗户的打开与关闭,关闭误差不能超过 1°。能实时采集室外环境的温湿度并显示,测量误差不能超过1°(温度)、 3%(湿度)。下雨时关闭窗户;室内空气质量不好时,打开窗户。总 结主要设计开关窗系统,技术指标达到设计要求有完成控制舵机或电机实现窗户的打开与关闭,关闭误差不能超过 1°。能实时采集室外环境的温湿度并显示,测量误差不能超过1°(温度)、 3%(湿度)。下雨时关闭窗户;室内空气质量不好时,打开窗户。,没达到要求的有窗户开关使用舵机转动角度来模拟,并显示在OLED显示屏上,并没有用到窗户模型。主要完成工作:(1)系统硬件设计包括DHT11温湿度传感器,烟雾传感器,雨滴传感器,OLED显示屏,舵机控制,按键控制。(2)系统软件设计由主函数部分,外部中断,各引脚初始化,各模块函数组成。(3)完成系统调试可以很好的控制舵机。本次设计尚有几处地方需要完善:(1)后面有机会可以设计封闭空间加入窗户模型。参考文献[1]Zhang Y., & Zhang, Y. (2019). Design and implementation of intelligent window control system based on Internet of Things. Journal of Physics: Conference Series, 1168(3), 032032[2]Li X., & Li, Y. (2018). Design and implementation of intelligent window control system based on wireless sensor network. Journal of Physics: Conference Series, 1006(1), 012014[3]Wang Y., & Wang, J. (2017). Design and implementation of intelligent window control system based on fuzzy logic. Journal of Physics: Conference Series, 841(1), 012014[4]Liu Y., & Liu, H. (2016). Design and implementation of intelligent window control system based on solar energy. Journal of Physics: Conference Series, 712(1), 012014[5]Chen Z., & Chen, H. (2015). Design and implementation of intelligent window control system based on image processing. Journal of Physics: Conference Series, 628(1), 012014[6]何立民.单片机应用系统设计[M].北京:北京航空航天大学出版社,1996,35-48[7]松井邦彦.传感器实用电路设计与制作[M].北京:科学出版社, 2005,107-110[8]苏家健.单片机原理及应用技术[M.高等教育出版社,P5附录附录1、系统照片附录2、主要源代码#include "stm32f10x.h" // Device header#include "Delay.h"#include "OLED.h"#include "AD.h"#include "Servo.h"#include "dht11.h"#include "Key.h"#include "Encoder.h"uint16_t AD0, AD3;float Angle;uint8_t KeyNum ;extern unsigned int rec_data[4];int main(void){Servo_Init();OLED_Init();AD_Init();Key_Init();Encoder_Init();Angle = 0;Servo_SetAngle(Angle);OLED_ShowNum(2, 7, Angle, 3) ;OLED_ShowString(2, 12, "Close");OLED_ShowCHinese(0, 0, 0); //温OLED_ShowCHinese(0, 16, 1); //度OLED_ShowCHinese(0, 32, 4); //:OLED_ShowCHinese(0, 60, 5); //.OLED_ShowCHinese(0, 90, 6); //℃OLED_ShowCHinese(4, 0, 2); //湿OLED_ShowCHinese(4, 16, 3); //度OLED_ShowCHinese(4, 32, 4); //:OLED_ShowCHinese(4, 60, 5); //.OLED_ShowCHinese(4, 90, 7); //%while (1){OLED_ShowString(2, 1, "Angle:");AD0 = AD_GetValue(ADC_Channel_0);AD3 = AD_GetValue(ADC_Channel_3);Delay_s(1);DHT11_REC_Data(); //接收温度和湿度的数据OLED_ShowNum(1,7,rec_data[2],2);OLED_ShowNum(1,10,rec_data[3],1);OLED_ShowNum(3,7,rec_data[0],2);OLED_ShowNum(3,10,rec_data[1],2);}}void EXTI9_5_IRQHandler(void){if(EXTI_GetITStatus(EXTI_Line6)==SET){OLED_Clear();Angle= 90;Servo_SetAngle(Angle);OLED_ShowString(2, 1, "Angle:");OLED_ShowString(4, 1, "AD3:");OLED_ShowNum(2, 7, Angle, 3);OLED_ShowString(2, 12, "Open");OLED_ShowNum(4, 5, AD3, 4);while (GPIO_ReadInputDataBit(GPIOA, GPIO_Pin_6) == 0);// Delay_ms(20);Angle=0;Servo_SetAngle(Angle);OLED_ShowString(2, 1, "Angle:");OLED_ShowNum(4, 5, AD3, 4);OLED_Clear();OLED_ShowCHinese(0, 0, 0); //温OLED_ShowCHinese(0, 16, 1); //度OLED_ShowCHinese(0, 32, 4); //:OLED_ShowCHinese(0, 60, 5); //.OLED_ShowCHinese(0, 90, 6); //℃OLED_ShowCHinese(4, 0, 2); //湿OLED_ShowCHinese(4, 16, 3); //度OLED_ShowCHinese(4, 32, 4); //:OLED_ShowCHinese(4, 60, 5); //.OLED_ShowCHinese(4, 90, 7); //%OLED_ShowString(2, 1, "Angle:");OLED_ShowNum(2, 7, Angle, 3) ;}EXTI_ClearITPendingBit(EXTI_Line6);}void EXTI15_10_IRQHandler(void)//2写中断函数咯{if (EXTI_GetITStatus(EXTI_Line13)==SET)//给了一个标志位,并判断标志位是否为1{OLED_Clear();Angle= 0;Servo_SetAngle(Angle);OLED_ShowString(2, 1, "Angle:");OLED_ShowString(1, 1, "AD0:");OLED_ShowNum(2, 7, Angle, 3);OLED_ShowString(2, 12, "Close");// if( Angle== 90)// {// OLED_ShowString(2, 12, "Open");// }// if( Angle== 0)// {// OLED_ShowString(2, 12, "Close");// }OLED_ShowNum(1, 5, AD0, 4);while (GPIO_ReadInputDataBit(GPIOB, GPIO_Pin_13) == 0);Angle=90;Servo_SetAngle(Angle);OLED_ShowString(2, 1, "Angle:");OLED_ShowNum(2, 7, Angle, 3) ;OLED_Clear();OLED_ShowCHinese(0, 0, 0); //温OLED_ShowCHinese(0, 16, 1); //度OLED_ShowCHinese(0, 32, 4); //:OLED_ShowCHinese(0, 60, 5); //.OLED_ShowCHinese(0, 90, 6); //℃OLED_ShowCHinese(4, 0, 2); //湿OLED_ShowCHinese(4, 16, 3); //度OLED_ShowCHinese(4, 32, 4); //:OLED_ShowCHinese(4, 60, 5); //.OLED_ShowCHinese(4, 90, 7); //%OLED_ShowString(2, 1, "Angle:");OLED_ShowNum(2, 7, Angle, 3) ;}EXTI_ClearITPendingBit(EXTI_Line13);}void EXTI3_IRQHandler(void){if (EXTI_GetITStatus(EXTI_Line3) != RESET){Angle +=90;if (Angle > 90){Angle = 0;}OLED_ShowString(2, 1, "Angle:");Servo_SetAngle(Angle);if( Angle== 90){OLED_ShowString(2, 12, "Open.");}if( Angle== 0){OLED_ShowString(2, 12, "Close");}OLED_ShowNum(2, 7, Angle, 3) ;EXTI_ClearITPendingBit(EXTI_Line3);}}#include "stm32f10x.h" // Device headervoid PWM_Init(void){RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);GPIO_InitTypeDef GPIO_InitStructure;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_Init(GPIOA, &GPIO_InitStructure);TIM_InternalClockConfig(TIM2);TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;TIM_TimeBaseInitStructure.TIM_Period = 20000 - 1; //ARRTIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1; //PSCTIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);介绍开关窗系统是一种自动控制窗户开启和关闭的系统。该系统通过传感器检测室内和室外的温度、湿度、风速等参数,