版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
远程家居监控系统的设计与实现目录中文摘要 3英文摘要 51引言 [20],电压输入信号传送到ADC0832芯片后进行数字信号转换,将数字信号传送到嵌入式片上系统。光照采集流程如图4-5所示。图4-5光照采集流程图程序设计中,首先初始化光照强度最大值“ucharlight_max=80”,然后通过函数eeprom_write写入嵌入式片上系统,嵌入式片上系统通过eeprom_read函数读取光照强度值。部分代码如图4-6所示。图4-6光照采集程序设计部分代码4.2数据显示程序设计LCD1602液晶显示屏上电后,首先进行初始化操作,屏幕清零,内部存储清空,之后和单片机进行双向通信,单片机控制显示屏亮度和显示内容,将检测到的温度、湿度、浓度值、光照值在液晶显示屏上显示。数据显示流程图如4-7所示。图4-7数据显示流程图程序设计中,首先加载“lcd1602.h”头文件,然后通过lcd_init函数进行初始化,lcd_write_str函数对数据进行写入,最后display_alarm函数对数据进行显示。部分代码如图4-8所示。图4-8数据显示程序设计部分代码4.3自动控制程序设计程序设计中,首先对按键及继电器进行引脚定义,按键控制中keyscan函数对按键的状态进行监听,eeprom_write函数把操作内容写入单片机,完成对应控制逻辑功能。继电器控制中Send_DATA函数把数据发送给单片机,控制对应继电器的打开或关闭。自动控制程序流程图如图4-9所示,部分代码如图4-10所示。图4-9自动控制程序流程图图4-10自动控制程序设计部分代码4.4报警功能程序设计通过按键设定温度、湿度、烟雾浓度及光照强度的报警阈值,主函数执行后通过循环函数判断温度、湿度、烟雾浓度及光照强度是否超出阈值,当超出阈值时触发蜂鸣器报警。报警流程图如图4-11所示。图4-11报警程序流程图程序设计中,通过代码“sbitbeep=P2^3”对蜂鸣器对应的引脚进行定义,通过if函数对温湿度值、烟雾浓度值、光照强度值进行判断,超过阈值触发蜂鸣器工作。部分代码如图4-12所示。图4-12报警程序设计部分代码4.5WiFi通信程序设计WiFi通信程序设计中首先进行串口初始化,然后开启总中断,当需要发送数据时,进入串口中断。之后启动定时器,然后设置串口的工作方式,整个流程进行完毕。串口的作用是将检测到的温湿度、烟雾浓度、光照强度数据传输到手机端,通过手机APP实时显示。WiFi通信流程图如图4-13所示。图4-13WiFi通信流程图程序设计中,ESP8266_SERVER函数建立手机与服务器的链接,通过main函数完成数据初始化、数据传输功能。部分代码如图4-14所示。图4-14WiFi通信程序设计部分代码
5系统测试5.1测试目的本章节主要针对本系统的功能实现进行测试验证,确保完成传感器对温度、湿度、烟雾浓度、光照强度的实时监测和采集,显示屏实时显示数据,按钮能够调控限定值,监测到的数据高于或者低于限定值时触发蜂鸣器进行报警,同时继电器可完成控制各功能模块。5.2测试过程5.2.1功能测试数据采集及显示功能测试①温湿度采集及显示功能:系统接通电源后,显示屏可显示出室内温度及湿度,用打火机及加湿器改变环境温湿度,当超出设置阈值时,蜂鸣器报警同时触发继电器工作。②烟雾采集及显示功能:把点燃纸张靠近传感器,观察显示器、蜂鸣器及继电器工作情况,经测试,当超出设置烟雾浓度时,蜂鸣器报警同时触发继电器工作,通过继电器连接风扇进行工作。③光照采集及显示功能:调整室内光照亮度后,观察显示器、蜂鸣器及继电器工作情况,当超出设置光照强度,蜂鸣器报警同时触发继电器工作,通过继电器连接窗帘进行工作。④系统接通电源后,显示屏参数可正常展示。LCD1602显示屏页面分为两行,在数据采集功能测试时液晶显示屏上看到对应的温度、湿度、浓度值。显示如图5-2所示。图5-2数据采集及显示测试图自动控制功能测试:在数据采集功能测试时,当温湿度、烟雾浓度及光照强度超出阈值时,蜂鸣器报警同时自动控制继电器工作,并将数据传输到手机APP端。测试结果如图5-3所示。图5-3自动控制功能测试图报警功能测试:调节室内温湿度、烟雾浓度、光照强度,当超出设置阈值时,蜂鸣器发出“滴滴”警报声。测试结果如图5-4所示。图5-4报警功能测试情况WiFi通信功能:打开手机APP,搜索WIFI,输入密码进行匹配之后,完成连接。在手机APP上查看数据,通过无线功能实现远程家居的监控。测试如图5-5所示。图5-5手机端界面展示5.3测试结果本系统经过测试,传感器能够采集及监测温度、湿度、烟雾浓度和光照强度的数据,同时传输给手机APP端,当采集到的数据不满足设定的阈值时,触发蜂鸣器进行报警,同时能够通过继电器控制家电开关,各模块功能正常运行,满足远程家居监控系统的设计要求。6结论随着远程家居监控产品的迅速普及应用,人们的家居环境质量不断地提高,生活的舒适度和便捷性也在逐渐增加。引入智能家居远程控制技术,可以提高家居信息化管理和人工智能化水平,有助于改善人们的生活方式,提高智慧化生活水平,故对相关的智能家居远程控制系统设计方法进行研究具有广泛的应用价值。本系统实现了家居环境的远程监控,通过温湿度传感器、烟雾传感器、光照传感器,实现对环境中的温度、湿度、烟雾浓度、光照强度进行实时采集,通过液晶显示屏实时显示监测结果,并通过WiFi通信模块传输实时数据到手机端。当监测结果超出阈值时,蜂鸣器会自动发出警报提醒,并通过继电器自动控制空调、风扇及窗帘工作。本系统完成了软件和硬件的功能设计与实现,经过测试验证,本系统具有一定的实用价值。本系统实现成本低、实用性强,包含温湿度、烟雾及光照传感器,具备监控家居环境的功能,从而提高居住环境的安全性、舒适性。本系统可以在后续工作中增加传感器种类,扩展控制功能,使家庭远程监测系统更完整、更系统化,从而提高人们的家居环境质量。参考文献刘璐,袁战军,王希娟.基于ARM及ZigBee的智能家居远程监控系统的设计与实现[J].电子设计工程,2019,27(11):136-140.郭稳涛,何怡刚.智能家居远程监控系统的研究与设计[J].计算机测量与控制,2011,19(09):2109-2112.池雪艳.基于单片机的无线智能家居环境远程监控系统设计[D].内蒙古:内蒙古科技大学,2020.吕值敏.基于嵌入式智能家居安防远程监控系统软件设计与实现[D].四川:电子科技大学,2012.刘晓彤.嵌入式智能家居远程监控系统的设计与实现[D].北京:北京交通大学,2009.季建华.基于物联网的智能家居远程监控系统设计与实现[J].计算机应用与软件,2015,32(11):143-146.张宁,杨经纬,王毅,陈启鑫,康重庆.面向泛在电力物联网的5G通信:技术原理与典型应用[J].中国电机工程学报,2019,39(14):4015-4025.王大雷,何康.基于STC89C51单片机的智能温度控制系统设计[J].阴山学刊,2018,32(03):85-87.崔孟豪,常新峰.基于51单片机的防火防盗系统的设计与实现[J].物联网技术,2022,12(03):77-79.韩丹翱,王菲.DHT11数字式温湿度传感器的应用性研究[J].电子设计工程,2013,21(13):83-85.任远林,徐奇.基于嵌入式单片机的智能家居远程控制系统设计[J].新乡学院学报,2021,38(03):72-76.邓中祚.智能家居控制系统设计与实现[D].哈尔滨:哈尔滨工业大学,2015.李帅,刘传浦,霍发宇等.一款智能家居设计[C]大学生智能硬件设计应用大赛会议论文集,2021:140-146.BouzyB,CazenaveT.Computergo:anAIorientedsurvey[J].ArtificialIntelligence,2001,132(1):39-103徐文.基于WiFi与Android的智能家居监控系统设计[D].四川:西南交通大学,2017.薛迪杰.基于ESP8266的物联网远程监控系统[J].电子制作,2021(11):34-37.GiusiG,GiordanoO,ScandurraG.Highsensitivitymeasurementsystemforthedirect-currentcapacitance-voltage,andgate-drainlowfrequencynoisecharacterizationoffieldeffecttransistors[J].ReviewofScientificInstruments,2016,87(4):044702.吴凯.基于嵌入式Web的智能家居远程监控系统设计[D].大连:大连理工大学,2017.传感器与检测技术[M].重庆大学出版社:自动化专业本科系列教材,201605.319.马斌.单片机原理及应用[M].人民邮电出版社:,201401.366.附录A系统电路图附录B源代码#include"common.h"#include"lcd1602.h"#include"eeprom51.h"#include"dht.h"#include"uart.h"externunsignedcharU8RH_data_H;externunsignedcharU8T_data_H;//按键引脚定义sbitkey1=P1^0;sbitkey2=P1^1;sbitkey3=P1^2;sbitbeep=P2^3;//蜂鸣器sbitjdq1=P3^6;//继电器1sbitjdq2=P3^7;//继电器2sbitjdq3=P3^5;//继电器3sbitADC0832_CS=P2^2;//ADC0832CS引脚sbitADC0832_CLK=P2^0;//ADC0832CLK引脚sbitADC0832_DIO=P2^1;//ADC0832DO引脚unsignedchartl=10,th=35,hl=15,hh=70;//温度和湿度上下限初始值unsignedcharsetn=0;//设置标志位,当为0时是显示正常界面,不为0时,则是设置状态unsignedcharcheck=123;//校验ucharnongdu=50;ucharlight_max=80;unsignedcharxdataTx_Buf[]="Temperature:00C,Humidity:00%,\r\n";//发送缓存区unsignedcharxdataTx_Buf2[]="Smoke:00%,Light:00%\r\n";//发送缓存区/*********************************************************************名称:dRead_ADC0832()*功能:将模拟信号转换成数字信号*输入:Ch-通道选择*输出:dat-转换值*********************************************************************/unsignedcharRead_ADC0832(unsignedcharCh){ unsignedchari,dat;//定义变量 ADC0832_CS=1;//一个转换周期开始 ADC0832_CLK=0;//为第一个脉冲作准备 ADC0832_CS=0;//CS置0,片选有效 ADC0832_DIO=1;//DIO置1,规定的起始信号 ADC0832_CLK=1;//第一个脉冲 ADC0832_CLK=0;//第一个脉冲的下降沿,此前DIO必须是高电平 ADC0832_DIO=1;//DIO置1 ADC0832_CLK=1;//第二个脉冲,第2、3个脉冲下沉之前,DI必须跟别输入两位数据用于选择通道,这里选通道CH0 ADC0832_CLK=0;//第二个脉冲下降沿 ADC0832_DIO=Ch;//DI置0,选择通道0 ADC0832_CLK=1;//第三个脉冲 ADC0832_CLK=0;//第三个脉冲下降沿 ADC0832_DIO=1;//第三个脉冲下沉之后,输入端DIO失去作用,应置1 ADC0832_CLK=1;//第四个脉冲 for(i=0;i<8;i++)//高位在前,读一个字节 { ADC0832_CLK=1;//第四个脉冲 ADC0832_CLK=0; dat<<=1;//将下面储存的低位数据向右移 dat|=(unsignedchar)ADC0832_DIO; //将输出数据DIO通过或运算储存在dat最低位 } ADC0832_CS=1;//片选无效 returndat; //将读书的数据返回}voideeprom_write()//eeprom存储{ SectorErase(0x2000);//擦除 //存储相关值 byte_write(0x2001,check); byte_write(0x2002,tl); byte_write(0x2003,th); byte_write(0x2004,hl); byte_write(0x2005,hh); byte_write(0x2006,nongdu); byte_write(0x2007,light_max);}voideeprom_read()//eeprom读取{ check=byte_read(0x2001);//读取校验位 if(check!=123)//单片机第一次使用时,check读出来的值不会是123,所以这里我们要把值先存储一遍,再进行读取,值才会正确 { check=111; eeprom_write();//存储 delay_ms(50); } tl=byte_read(0x2002);//读取温度下限值 th=byte_read(0x2003);//读取温度上限值 hl=byte_read(0x2004);//读取湿度下限值 hh=byte_read(0x2005);//读取湿度上限值 nongdu=byte_read(0x2006);//读取烟雾上限值 light_max=byte_read(0x2007);//读取光照值上限值}voidesp_atcmd_send(unsignedchar*at)//ESP8266AT指令发送函数{unsignedshortwaittry;//延时变量do{esp_rev_start=0;//接收开始标志清零esp_rev_okflag=0;//接收完成标志清零waittry=0;//延时变量清零uart_send(at,SERIAL_AUTO_LEN);//串口发送内容while(waittry++<3000)//进入while延时{if(esp_rev_okflag==1)//等待esp8266返回OK{return;//返回出去}delay_ms(1);}}while(esp_rev_okflag==0);}voidESP8266_SERVER(void)//建立服务器{ delay_ms(1000); esp_atcmd_send("AT\r\n");//测试 delay_ms(1000); esp_atcmd_send("AT+CWMODE=2\r\n");//服务器搭建在WIFI模块上 delay_ms(1000); esp_atcmd_send("AT+CWSAP=\"ESP8266_WIFI\",\"12345678\",5,3\r\n");//设置显示名称:ESP8266_WIFI,密码:12345678 delay_ms(1000); esp_atcmd_send("AT+CIPMUX=1\r\n");//启动多连接,建立服务器都需要配置 delay_ms(1000); esp_atcmd_send("AT+CIPSERVER=1,8080\r\n");//建立服务器 delay_ms(1000);}ucharlen=0;//字符长度变量unsignedcharxdataRxbuf[COM_RX1_Lenth];//接受缓存voidSend_DATA(uchar*buffer){ memset(Rxbuf,0,COM_RX1_Lenth);//接受缓存清零 len=uart_recv(Rxbuf,200);//等待接受的数据,等待时间为200毫秒 if(len>0)//长度不为0,说明有数据返回 { if(strstr(Rxbuf,"JDQ1")!=NULL)//接受到"JDQ1",控制继电器1的打开和关闭 { jdq1=~jdq1; } if(strstr(Rxbuf,"JDQ2")!=NULL)//接受到"JDQ2",控制继电器2的打开和关闭 { jdq2=~jdq2; } if(strstr(Rxbuf,"JDQ3")!=NULL)//接受到"JDQ3",控制继电器3的打开和关闭 { jdq3=~jdq3; } if(strstr(Rxbuf,"HQSJ")!=NULL)//接受到"HQSJ",发送一次温湿度数据 { Send_Str("AT+CIPSEND=0,50\r\n");//这里面的50规定了WIFI接收的字节数50个字节 delay_ms(500); uart_send(buffer,31);//发送数据 uart_send(Tx_Buf2,19);//发送数据 }}}voiddisplay_alarm()//显示温湿度上下限值{ lcd_write_char(4,0,tl/10+0x30); lcd_write_char(5,0,tl%10+0x30); lcd_write_char(13,0,th/10+0x30); lcd_write_char(14,0,th%10+0x30); lcd_write_char(4,1,hl/10+0x30); lcd_write_char(5,1,hl%10+0x30); lcd_write_char(13,1,hh/10+0x30); lcd_write_char(14,1,hh%10+0x30);}voidkeyscan()//按键扫描{ if(key1==0)//设置键按下 { delay_ms(10);//消抖 if(key1==0) { beep=0; delay_ms(100); beep=1; while(key1==0);//等待按键松开 setn++; if(setn>6)//按下次数超过5次,退出设置 { setn=0; lcd_write_com(0x0c);//关闭光标 //显示主页面 lcd_write_str(0,0,"Temp:00CHum:00%"); lcd_write_str(0,1,"Smoke:00%L:00%"); } if(setn==1)//显示设置页面,并在温度下限位置光标闪烁 { lcd_write_str(0,0,"Tml:CTmh:C"); lcd_write_str(0,1,"Hml:%Hmh:%"); display_alarm();//显示值 lcd_write_com(0x80+5); lcd_write_com(0x0f); } if(setn==2)//在温度上限位置光标闪烁 { lcd_write_com(0x80+14); lcd_write_com(0x0f); } if(setn==3)//在湿度下限位置光标闪烁 { lcd_write_com(0x80+0x40+5); lcd_write_com(0x0f); } if(setn==4)//在湿度上限位置光标闪烁 { lcd_write_com(0x80+0x40+14); lcd_write_com(0x0f); } if(setn==5) { lcd_write_str(0,0,"settheSmoke"); lcd_write_str(0,1,"max:00%"); lcd_write_char(9,1,nongdu/10+0x30); lcd_write_char(10,1,nongdu%10+0x30); lcd_write_com(0x80+0x40+10); lcd_write_com(0x0f); } if(setn==6) { lcd_write_str(0,0,"settheLight"); lcd_write_str(0,1,"max:00%"); lcd_write_char(9,1,light_max/10+0x30); lcd_write_char(10,1,light_max%10+0x30); lcd_write_com(0x80+0x40+10); lcd_write_com(0x0f); } } } if(key2==0)//加键按下 { delay_ms(10); if(key2==0) { beep=0; delay_ms(100); beep=1; while(key2==0); if(setn==1)//设置温度下限 { if(th-tl>1)//温度上限值必须大于下限值,下限值才能加 tl++; display_alarm();//显示 lcd_write_com(0x80+5);//光标回位 lcd_write_com(0x0f); } if(setn==2)//设置温度上限 { if(th<99)//温度上限最大到99 th++; display_alarm(); lcd_write_com(0x80+14);//光标回位 lcd_write_com(0x0f); } if(setn==3)//设置湿度下限 { if(hh-hl>1)//上限值必须大于下限值,下限值才能加 hl++; display_alarm(); lcd_write_com(0x80+0x40+5); lcd_write_com(0x0f); } if(setn==4)//设置湿度上限 { if(hh<99)//上限值最大到99 hh++; display_alarm();//显示 lcd_write_com(0x80+0x40+14); lcd_write_com(0x0f); } if(setn==5) { if(nongdu<99)nongdu++; lcd_write_char(9,1,nongdu/10+0x30); lcd_write_char(10,1,nongdu%10+0x30); lcd_write_com(0x80+0x40+10); lcd_write_com(0x0f); } if(setn==6) { if(light_max<99)light_max++; lcd_write_char(9,1,light_max/10+0x30); lcd_write_char(10,1,light_max%10+0x30); lcd_write_com(0x80+0x40+10); lcd_write_com(0x0f); } eeprom_write();//存储 } } if(key3==0)//减键按下 { delay_ms(10); if(key3==0) { beep=0; delay_ms(100); beep=1; while(key3==0); if(setn==1)//设置温度下限 { if(tl>0)//下限最小到0 tl--; display_alarm(); lcd_write_com(0x80+5); lcd_write_com(0x0f); } if(setn==2)//设置温度上限 { if(th-tl>1)//上限必须大于下限,上限才能减 th--; display_alarm(); lcd_write_com(0x80+14); lcd_write_com(0x0f); } if(setn==3)//设置湿度下限 { if(hl>0) hl--; display_alarm(); lcd_write_com(0x80+0x40+5); lcd_write_com(0x0f); } if(setn==4)//设置湿度上限 { if(hh-hl>1)//上限必须大于下限,上限才能减 hh--; display_alarm(); lcd_write_com(0x80+0x40+14); lcd_write_com(0x0f); } if(setn==5) { if(nongdu>0)nongdu--; lcd_write_char(9,1,nongdu/10+0x30); lcd_write_char(10,1,nongdu%10+0x30); lcd_write_com(0x80+0x40+10); lcd_write_com(0x0f); } if(setn==6) { if(light_max>0)light_max--; lcd_write_char(9,1,light_max/10+0x30); lcd_write_char(10,1,light_max%10+0x30); lcd_write_com(0x80+0x40+10); lcd_write_com(0x0f); } eeprom_write();//存储 } }}voidmain(){ shorttemperature;//温度 shorthumidity;//湿度 bitshanshuo=0,shanshuo1=0,shanshuo2=0,shanshuo3=0;uintabc=0; uint smog=0,light=0;; eeprom_read();//开机读取一次EEPROM数据 lcd_init();//1602初始化 lcd_write_str(0,0,"ESP8266Init..."); lcd_write_str(0,1,""); uart_init(9600);//串口初始,比特率9600 ESP8266_SERVER(); //初始化ESP8266 lcd_write_str(0,0,"Temp:00CHum:00%"); lcd_write_str(0,1,"Smoke:00%L:00%");Clear_Buffer();//清除接受缓存 while(1) { keyscan(); if(setn==0)//不在设置状态下 { Send_DATA(Tx_Buf);//调用发送函数 shanshuo2=!shanshuo2; abc=Read_ADC0832(0);//读通到0数据 abc=abc*99/256;//ADC0832为8位的AD,最大值为8的2次方256,这里把值转换为百分比0~99显示 smog=abc; abc=Read_ADC0832(1);//读通到1数据 abc=abc*99/256;//ADC0832为8位的AD,最大值为8的2次方256,这里把值转换为百分比0~99显示 light=abc; if(smog>=nongdu&&shanshuo2) { lcd_write_char(6,1,''); lcd_write_char(7,1,''); lcd_write_char(8,1,''); } else { lcd_write_char(6,1,smog/10+0x30);//烟雾值十位显示 lcd_write_char(7,1,smog%10+0x30);//烟雾值个位显示 lcd_write_char(8,1,'%'); } if(light>=light_max&&shanshuo3) { lcd_write_char(13,1,''); lcd_write_char(14,1,''); lcd_write_char(15,1,''); } else { lcd_write_char(13,1,light/10+0x30);//光照值十位显示 lcd_write_char(14,1,light%10+0x30);//光照值个位显示 lcd_write_char(15,1,'%'); } RH(); //读出温湿度,只取整数部分 humidity=U8RH_data_H; temperature=U8T_data_H; Tx_Buf[12]=temperature/10%10+0x30; //将温湿度数据送往发送数组,送给模块让手机APP显示 Tx_Buf[13]=temperature%10+0x30; Tx_Buf[25]=humidity/10%10+0x30; Tx_Buf[26]=humidity%10+0x30; Tx_Buf2[6]=smog/10%10+0x30; Tx_Buf2[7]=smog%10+0x30; Tx_
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 环评应急预案说明(3篇)
- 电石冷却厂房应急预案(3篇)
- 示范互动展馆施工方案(3篇)
- 箱式砌块挡墙施工方案(3篇)
- 美发情绪营销方案(3篇)
- 花都厨房防水施工方案(3篇)
- 街道环境保结应急预案(3篇)
- 车库划线系统施工方案(3篇)
- 邻家小院营销方案(3篇)
- 钢架厂房封顶施工方案(3篇)
- 2026四川宜宾高新区招聘城市综合管理辅助人员15名笔试备考试题及答案解析
- 古建筑地面基础施工方案
- 建筑施工设备检测与维护操作规程
- DB11-T 696-2023 预拌砂浆应用技术规程
- 采血室感控知识培训计划课件
- 硬膜外穿刺术课件
- (正式版)DB65∕T 4069-2020 《建筑消防设施维护及保养技术规范》
- 浙江省心理b证笔试试题(含答案)
- 物流专业毕业论文
- 永登县石灰沟防洪治理工程报告表
- GB 28375-2025混凝土结构防火涂料
评论
0/150
提交评论