智能雾霾窗的设计_第1页
智能雾霾窗的设计_第2页
智能雾霾窗的设计_第3页
智能雾霾窗的设计_第4页
智能雾霾窗的设计_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

-2-第4章软件设计在整个系统的软件设计中,必须站在同一水平上去考虑到单片机系统上的软件、硬件资源的分配,因此需要将软件设计进行条理化、简单化。以下三点:(1)需要对问题进行具体的分析分析,首先,我们必须决定对整体的系统设计,以及与之有关的需要,其次,我们必须决定哪些运算法则能够完成这些工作。(2)然后相关流程图根据设计好的算法进行绘制;(3)编制系统相关程序,因为系统结构化程序的设计方法之一是程序选择数据算法。在根据最初设计程序框图决定了相关算法及相关步骤之后通过一些指令进行一系列布置,然后形成完整的整体接合结构。(1)对整体的控制要求和有关的需求进行了分析,并选择了一种较好的算法来仿真完成其对应的作用;对每一个问题都作了详细的分析;(2)按照它所提出的方法,画出了相应的流程;(3)编制相应的计算软件。以最初进行设计的程序框图为依据,来确定有关的算法和有关的步骤,最后用一些指令来进行一系列的安排,最后最终构成一个完整的整体结结构。选用程序数据算法是系统结构化程序当中的一种设计方法,通过会去使用部分限制旋转方向的指令或者是命令语句,可以显着降低程序的复杂度,简化程序和逻辑。可以减少整个设计中的错误,方便用户对程序进行编辑和修复。4.1主程序结构首先对该软件进行了初始化,使该软件的运行达到了最优。在PM2.5的检测模块中,对PM2.5的数值进行检测,之后将其传送到单片机中,对其进行分析、处理和判断,则蜂鸣器报警,同时窗户会进行关闭,否则开启;另外也可以通过连接蓝牙完成数据的远程监控以及手动输入指令对窗户进行启闭操作,其中数据远程传输需要扫描本地按键是否开启。主程序图如图4.1所示。图4.1PM2.5程序流程图4.2按键子程序结构本设计根据要求设置了一个控制数据是否远程上传的按键。按键处理子程序流程图如图4.2所示。按键扫描的程序一般大致为首先进行判断其装置有没有键被按下,然后通过其编写的延迟程序进行相应的去抖动,接着去求被按下键的信号,等待按键进行释放后会转入相应的键处理子程序当中。图4.2键盘扫描程序流程图

4.3显示子程序结构本设计是以OLED显示屏显示其采集到的PM2.5值以及窗是否启闭状态等数据信息。在系统进行使用智能药箱系统前都要进行初始化一下,也就是做一下清屏的操作,然后再去调用其系统的读写命令,进行读写相关数据,最后显示相关数据信息。显示子程序流程图如图4.3所示。图4.3显示子程序流程图4.4防火子程序结构该设计是用火焰传感器采集到的火焰温度和光谱,对数据进行分析判断,检测到火焰后蜂鸣器报警同时水泵工作开始灭火。图4.4防火流程图

4.5调光子程序结构本设计是以由光敏传感器收集外界光线强弱变化的数据,在使用系统前需要初始一下。将接受的光强数据分成5个等级,最亮、较亮、次亮、最暗、灯灭根据周围光暗程度和进行动作,调节灯光的亮度。图4.6光线调节流程图

系统调试5.1调试部分根据毕业要求,将本系统调试部分分为硬件调试和软件调试。(1)硬件调试而在软件开发过程中,硬件模块又是软件开发过程中最易出现错误的环节。元件的损伤将会对整个系统的性能产生很大的影响。对于硬件的调试,首先要做的就是检查每一个周期的模型,确定它们的性能是否达到了设计要求。在调试的时候要特别关注一下电路中元件的耐压,以免造成电容的破坏。第二,对设备和设备的管脚进行检测,如果有松动或者虚焊,则要加强。保证管脚的指向正确,防止由于管脚插入错误而导致线路短路,从而导致元件的损伤。另外,在进行系统化焊接的时候,因为对焊枪的运用不够娴熟,造成了焊接时出现了重复焊接和焊盘脱落等情况。这时候就必须要用万用表来检测系统中的每个模块的电源和地线,避免发生短路。第三,能够按照系统模拟图表中的设计需求,将各个系统中的组件一一拼装并调试,例如显示模块的亮度是否适宜,按键电路能否正常响应。需要配合万用表对模块的工作电压进行逐一确认,确保其正常运行。第四,在完成对单独模块的检测之后,需要对系统进行整体的组装工作,检验模块运行的稳定性。实物图如图附录二所示。(2)软件调试在软件程序的设计中,要学会使用开发工具,可以极大地提升设计人员的工作效率,避免很多不确定的问题和错误,例如,程序的语法错误,标点符号写法错误等等。在此,我们可以通过编译程序来检查,以便能够适时地做出修改。在此,我们选取了Keil平台来进行代码程序,其一般流程如下:首先,我们使用Keil软件,在其工具栏中找到了新建工程,建立了新的工程,按照所选择的单片机型号,去选择一种合适的编写程序的语言,在此,我们选择了C语言,然后进行C程序代码的编写。一般来讲,由于整个系统保护包括多个功能,所以会按照顺序对每个功能模块进行单独的编程,力求实现一个函数调用一个功能,便于设计人员进行维护,进而来编程。为了找出程序中的错误语法,在编程完毕后,需要对程序进行编辑和修改,直到不再报错为止,然后通过JTAG或串口等方式将程序下载到单片机,并结合硬件进行调试,看程序是否能够实现预期的目标。通常来说,第一次在硬件上运行的程序,不会一蹴而就,总是会有问题,这是很普遍的,所以要针对这些问题,进行深入的调试,才能彻底的解决。通常,在Keil的环境中,你可以通过Debug工具来获取在线调试功能,如图5.1所示。通过Debug功能,可以开始对程序的执行节点进行操纵,实现单步,循环等多种操纵,也可以检测MCU中的寄存器数据,工具条上的单步等操纵按键,在左边的Regisier窗口中,可以查看相关的寄存器参数。接着就将程序下载入单片机,然后进行实物调试。图5.1DEBUG选项界面图5.2结果分析在此次系统设计中,智能雾霾窗的设计主要直接观测PM2.5值和窗户的开关状态以及远程用手机实时观察雾霾浓度和窗户状态以及显示周围环境亮度,远程控制窗户开关,雾霾浓度超标后关闭并且发出警报,浓度降低后窗自行打开户打开等操作,首先接通电源,通过按键进行启动系统,如图5.2所示,第一行显示PM2.5值,此时为0,第二行显示窗户的启闭状态,此时为OPEN(因为模拟采集的雾霾为0)。图5.2系统开启图图5.3系统关闭图系统关闭时第二行显示窗户关闭,如图5.3所示。紧接着用一支笔插入PM2.5模块模拟有颗粒进入如图5.4所示,此时超过设定阈值,蜂鸣器会发出声音进行报警持续时间6s,同时舵机模拟窗户进行关闭,如图5.5所示,把笔拿开窗户重新打开。图5.4模拟雾霾检测图图5.5舵机(窗户)关闭图连接蓝牙,打开蓝牙助手APP,启动上传数据按键,手机APP会显示采集到的雾霾浓度和窗户开关数据,如图5.6所示;也可通过在数据发送区域输入K(开窗)、G(关窗),如图5.5所示,输入G,窗户关闭。其它情况类似,通过实物调试,可以发现此次试验实现了本设计最初的功能要求。图5.6数据传输图图5.7远程蓝牙关窗图图5.8远程蓝牙开窗图App控制窗户关闭,连接蓝牙后输入大写字母G,然后点击换行,可以看到液晶显示屏显示窗户状态为close,模拟窗户的舵机靠左(窗户关闭状态)图5.7所示。输入大写字母控制窗户K然后点击换行,按下发送,可以看到显示屏上的窗户状态为open,用来模拟窗户开关的舵机靠右(窗户开启状态)图5.8所示。打火机充当火源,火焰传感器检测到火焰后,会发出警报,同时水泵开始工作用于灭火,如图5.9所示。调光模块用物体遮挡光敏传感器,显示屏上的light数显示也会发生变化,周围光线环境越低灯光越亮。灯有5个状态light0到25最亮,25到50较量50到75较暗,75到100最暗,超过阈值后熄灭。测试如图5.10和5.11所示。图5.9防火模块测试水泵动作图5.10测试时调光灯亮度图5.11周围环境变暗调光灯变亮

结论通过不断的校核和修正,最终使该方案最终得以实现。在这一次的设计中,与单片机相结合,进行了一款智能雾霾窗的设计,它的主要构成部分包括了一下几个方面:STM32F103C8T6单片机模块、PM2.5模块、显示模块、报警模块以及继电器、液晶显示模块、PM2.5检测模块、按键模块、防火模块、调光模块。利用PM2.5模块来探测雾霾,当探测到的数值超出门限,就会发出警报,并开启继电器来关闭雾霾窗,此外,还配备了蓝牙模块来实现对车窗的远程监测和对雾霾窗的开启和关闭的输入指令,检测到火焰后水泵启动,语音识别开窗关窗,光敏模块根据周围环境变化通过灯光实时调节光线。除此之外,因为研究条件和时间的限制,还有很多有待提高的地方,还有很多缺陷有待研究,以下列出了所存在的问题和有待提高的地方,这将会在今后的研究工作中得到不断的提高,使本文的研究结果能够更快地应用到实践当中。1、本文仅对PM2.5数值的展示进行了实体试验,设定了没有在真实监测平台上实施试验并给出了相应的数值下一步,我们期望可以对整体的数字传送终端的设计进行了实体试验。2、所做的PM2.5含量探测器的设计,可以进行多个探测模块的探测,可以将资料上载,也可以将其进行实时的警报监视,现在只是将其展示出来,下一步将会向着智慧家庭的方向发展。3、我所试验的PM2.5的工作状态,由于没有真实的烟雾,所以都是人工仿真的。4、为了使雾霾窗的实用性提高,我又加入了防火、调光的功能,遗憾的是最初设想的换气功能因研究水平的限制无法实现。参考文献[1]朱旭光,刘建辉.农业大棚的温湿度控制系统[J]。自动化技术与应用,2005,24(2):45-47[2]马海琴,叶俊明.基于WiFi的PM2.5测试仪设计[J].无线互联科技,2016(18):17-18.[3]薛荣坤.基于单片机的PM2.5浓度检测仪的设计[J].电脑知识与技术,2020,v.16(14):262-263.[4]王珅.基于GP2Y1010AU0F传感器的PM2.5检测仪设计[J].工业加热,2020,v.49;No.274(02):67-69+74.[5]张艳丽,张勇.基于SHT11的温湿度控制器[J].自动测量与控制.2007,26(5):83-84[6]江思敏,姚鹏翼,胡烨.Protel2004电路原理及PCB设计[M].北京机械工业出版社.2006[7]郑阳,陈美玲,李欣鹏,等.基于WiFi远程检测与传输PM2.5数值检测仪设计[J].物联网技术,2019(8).[8]王武礼,杨华.基于SHT11的仓粮温湿度测控系统的设计[J]仪表技术与传感器.2010,9:50-51.[9]姚展.基于单片机的PM2.5检测仪设计[J].价值工程,2019,038(007):154-156.[10]冯显英,葛荣雨.基于数字温湿度传感器SHT11的温湿度测控系统[J][11]谢楷,赵建.MSO430系列单片机系统工程设计与实践[M].北京:机械工业出版社,2009[12]裴素萍,吴必瑞,刘禹.基于MSP430的水泥养护箱温湿度控制系统[J].中原工学院学报.2008,19(5):45-48[13]齐秋红,马斌,韩中华,赵键.基于SHT1101的智能建筑室内温度检测[J].楼宇自动化.2008,18:1-3[14]张玮,杨景发,闫其庚,硅光电池特性的实验研究[J].实验技术与管理,2009(9):42-46[15]张萍.基于数字温度计DS18B20的温度测量仪的开发[J].自动化仪表,2007(6):64-66[16]LiuJ,CaoR.DesignofenvironmentalmonitoringsystembasedonInternetofThings.WirelessInternetTechnology,2019.[17]WangH,KongL.DesignofaWirelessPM2.5ConcentrationDetectionSystem.ElectronicenceandTechnology,2015.[18]LiuS,LuC,ShengL.TheDesignofAtmosphericEnvironmentMonitoringSystemBasedonARM9PlatformandGPRSTechnology[C]//FourthInternationalConferenceonComputationalIntelligence&CommunicationNetworks.IEEE,2012.[19]GuK,QiaoJ,LiX.HighlyEfficientPicture-BasedPredictionofPM2.5Concentration[J].IEEETransactionsonIndustrialElectronics,2018.

附录(部分)#include"app_conf.h"#ifdefAPP_MY_APP_ENABLED#defineMODULE_NAME"myapp"#ifdefMODE_LOG_TAG#undefMODE_LOG_TAG#endif#defineMODE_LOG_TAGMODULE_NAMEstaticTaskHandle_tg_app1_handle; /*任务句柄*/staticTaskHandle_tg_app2_handle; /*任务句柄*/staticTaskHandle_tg_app3_handle; /*任务句柄*/staticTaskHandle_tg_moudle_test_handle;/*任务句柄*/intret=0;staticuint8_tsend_flag;/*键盘创建*/intkey_board_call(constchar*key_name,u8state)intuart1_callback(void*param,constu8*data,u16data{ if(state==0){ send_flag=!send_flag; } log_inform("KEY:%s,state:%d",key_name,state); returnE_OK;}staticuint8_topen_flag;/*串口初始化*/_len){ staticcharrec_buf[64]; if(data_len<64){ memset(rec_buf,0,sizeof(rec_buf)); memcpy(rec_buf,data,data_len); }else{ log_inform("Len:%d,Error",data_len); } char*pxIndex; if(strstr(rec_buf,"K\r\n")!=NULL){ open_flag=1; }elseif(strstr(rec_buf,"G\r\n")!=NULL){ open_flag=0; }returnE_OK;}#defineAPP_1_UPDATE_TIME_MS1000staticvoidmy_app_task_1(void*param){ /*OLED初始化*/ OLED_Init(); //初始化OLED OLED_Clear();// /*OLED显示*/ /*键盘初始化*/ c_key_boardboard={0}; key_listboard_list[]={ {"L1",GPIOC,GPIO_PIN_14,KEY_PRESS_IS_ZERO}, }; board=key_board_create(board_list,sizeof(board_list)/sizeof(key_list)); if(NULL==board.this) log_error("Boardcreatefailed."); ret=board.set_callback(&board,key_board_call); if(E_OK!=ret) log_error("Callbacksetfailed."); /*蜂鸣器初始化*/ c_switchbeep={0}; beep=switch_c c_servoservo={0};servo=servo_create(SYS_TIME_2,SYS_TIME_CH3); ret=servo.set(&servo,0.0f); /*PM2.5初始化*/reate(GPIOC,GPIO_PIN_15); if(NULL==beep.this) log_error("Swtichcreatfailed."); ret=beep.set(&beep,SWITCH_LOW); /*舵机初始化*/ c_gp2ygp2y={0}; gp2y=gp2y_create(MY_ADC_9,GPIOB,GPIO_PIN_5); if(NULL==gp2y.this) log_error("gp2ycreatfailed."); /*蓝牙串口初始化*/ intret=my_uart.init(MY_UART_3,115200,128,UART_MODE_DMA); if(ret!=E_OK) log_error("my_uartinitfailed."); my_uart.set_callback(MY_UART_3,NULL,uart1_callback); if(E_OK!=ret) log_error("Callbacksetfailed."); staticuint8_toled_show[32]; staticuint8_ttx_buf[32]; staticuint8_tbeep_cnt; floatpm2_5=0.0f; staticuint32_tsys_cnt; while(1) { //获取PM2.5浓度ret=gp2y.get(&gp2y,&pm2_5); if(E_OK!=ret) log_error("gp2ygetfailed."); //PM2.5浓度大于阈值蜂鸣器报警 if(pm2_5>=50&&beep_cnt==0){ open_flag=1; beep_cnt=10; ret=beep.set(&beep,SWITCH_HIGHT); } if(beep_cnt>0){ beep_cnt--; if(beep_cnt==1)open_flag=0; }else{ ret=beep.set(&beep,SWITCH_LOW); } //液晶显示浓度信息 memset(oled_show,0,sizeof(oled_show)); sprintf(oled_show,"PM2.5:%.1f",pm2_5);OLED_ShowString(0,0,oled_show,16); if(open_flag!=0){ ret=servo.set(&servo,180.0f); //舵机控制打开窗户 memset(oled_show,0,sizeof(oled_show)); sprintf(oled_show,"WINDOW:CLOSE"); OLED_ShowString(0,2,oled_show,16); memset(tx_buf,0,sizeof(tx_buf)); sprintf(tx_buf,"PM2.5:%.1f\r\nWINDOW:OPEN\r\n",pm2_5); }else{ ret=servo.set(&servo,0.0f); //舵机控制关闭窗户 memset(oled_show,0,sizeof(oled_show)); sprintf(oled_show,"WINDOW:OPEN"); OLED_ShowString(0,2,oled_show,16); memset(tx_buf,0,sizeof(tx_buf)); sprintf(tx_buf,"PM2.5:%.1f\r\nWINDOW:CLOSE\r\n",pm2_5); } //蓝牙发送数据 if(send_flag!=0&&(sys_cnt%2)==0){ ret=my_uart.send(MY_UART_3,tx_buf,strlen(tx_buf)); if(E_OK!=ret) log_error("Uartsendfailed."); }/*重复执行逻辑从此处开始*/ sys_cnt++; vTaskDelay(APP_1_UPDATE_TIME_MS); }}#defineAPP_2_UPDATE_TIME_MS100staticvoidmy_app_task_2(void*param){ while(1) { /*重复执行逻辑从此处开始*/ vTaskDelay(APP_2_UPDATE_TIME_MS); }}#defineAPP_3_UPDATE_TIME_MS1000staticvoidmy_app_task_3(void*param){ while(1) { /*重复执行逻辑从此处开始*/ vTaskDelay(APP_3_UPDATE_TIME_MS); }}voidmy_app_init(void){ taskENTER_CRITICAL(); BaseType_tos_ret;#if1 /*创建app任务*/ if(NULL==g_app1_handle) { os_ret=xTaskCreate((TaskFunction_t)my_app_task_1, (constchar*)MOD

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论