您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 基于单片机的智能家居系统
单片机协会英码杯暨第五届电子设计大赛智能魔方-------队伍:魔鬼的步伐一.项目名称智能魔方二.概要“智能魔方”是一款集成多种智能家居功能与一体的智能小盒,其功能包含智能环境监测和智能安防以及智能开关三种,通过独立自制的手机app“智能魔方”,我们可以更加方便的实时实行我们的指令来控制智能小盒,从而实现以下功能①实时监测出该地的温度.湿度以及PM2.5数值,更加精准的应对环境变化以做出调整。②手机终端app通过触摸发出开关指令,从而实现灯的开关,门的开关等多数开关功能。③智能安防如夜间将智能小盒放置与合适位置,当有可疑人物出现时变发出报警信号。本系统的设计包含硬件设计以及app设计两部分。硬件部分,我们以STC89C52加强型单片机为控制核心,自行设计了一套智能家居系统。该系统分为温湿度传感器,PM2.5传感器,红外检测模块,蓝牙模块,蜂鸣器,小灯等模块的制作,通过电路设计以及算法设计,将硬件部分的功能整合至一起,同时外观设计形成该智能小盒,使系统更加多元化和智能化。App设计部分:基于Android和Java的独立设计,我们通过两个月的时间自主学习并且独立研发了app“智能魔方”,通过该app,更加智能的操控智能小盒,实现“软硬结合”,更加智能地进行环境质量的监测和智能安防的控制以及智能遥控。三.设计原理1.硬件设计(1)STC单片机电路及原理介绍中央处理器CPU采用的是STC89增强型系列单片机,具有低功耗、超低价;高速、高可靠;强抗静电、强抗干扰的特点,这有利于该项目基本功能的实现同时节省成本便于推广。(2)电源部分以12V对智能魔方进行供电,并用7805芯片稳压至5V给单片机供电,1117芯片稳压至3.3V给蓝牙模块供电。(3)温湿度电路部分该电路实现监测温湿度功能。(4)PM2.5电路部分该电路实现监测PM2.5功能。(5)蓝牙电路部分蓝牙为智能小盒实现无线数据传输。(6)智能安防电路部分利用红外模块,当可疑人员经过我们的智能小盒便会立即报警,发出响声。(7)智能开关电路部分(以开关灯为例)实现手机APP操控的智能开关。(8)程序储存电路部分存储温湿度数据的电路。(9)程序①#includereg52.h#includeintrins.h#includedefines.hvoidnop(){_nop_();_nop_();}voiddelay20ms()//20ms误差-0.000000000003us{unsignedchara,b,c;for(c=5;c0;c--)for(b=89;b0;b--)for(a=247;a0;a--);}voiddelay1(uintm){uintn;for(n=0;nm;n++);}voiddelay(ucharn)//2n+1us{uchari;for(i=0;in;i++){_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();}}voidstartdht(){dht=1;dht=0;delay20ms();dht=1;delay(15);}ucharread_dht(){uchari,temp;dat=0;while(dht);for(i=0;i8;i++){while(!dht);delay(25);if(dht){temp=1;while(dht);}elsetemp=0;dat=dat1;dat=dat|temp;}returndat;}voidstart()//启动I2C总线{sda=1;nop();scl=1;nop();sda=0;nop();scl=0;nop();}voidstop()//停止I2C总线{sda=0;nop();scl=1;nop();sda=1;nop();}voidwritebyte(ucharj)//写一个字节{uchari,temp;temp=j;for(i=0;i8;i++){temp=temp1;scl=0;nop();sda=CY;//temp左移时,移出的值放入了CY中nop();scl=1;//待sda线上的数据稳定后,将scl拉高nop();}scl=0;nop();sda=1;nop();}ucharreadbyte()//读一个字节{uchari,j,k=0;scl=0;nop();sda=1;for(i=0;i8;i++){nop();scl=1;nop();if(sda==1)j=1;elsej=0;k=(k1)|j;scl=0;}nop();return(k);}voidclock()//I2C总线时钟{uchari=0;scl=1;nop();while((sda==1)&&(i255))i++;scl=0;nop();}////////从24c02的地址address中读取一个字节数据/////ucharread24c02(ucharaddress){uchari;start();writebyte(0xa0);clock();writebyte(address);clock();start();writebyte(0xa1);clock();i=readbyte();stop();delay1(100);return(i);}//////向24c02的address地址中写入一字节数据info/////voidwrite24c02(ucharaddress,ucharinfo){start();writebyte(0xa0);clock();writebyte(address);clock();writebyte(info);clock();stop();delay1(5000);//这个延时一定要足够长,否则会出错。因为24c02在从sda上取得数据后,还需要一定时间的烧录过程。}ucharad(){uintflag,result;ADC_CONTR=0xe1;ADC_CONTR|=0x08;//启动AD转换while(flag==0)//等待AD转换结束{flag=(ADC_CONTR&0x10);//查询ADC_FLAG位是否置1}result=ADC_DATA;ADC_CONTR&=0xef;return(result);}voidinit(){uinti;/*串口初始化*/TMOD=0x21;TH1=0xfd;TL1=0xfd;//装初值TR1=1;//启动定时器1REN=1;//使能接收SM0=0;SM1=1;//设置串口为工作方式1EA=1;ES=1;/*24C02初始化*/scl=1;nop();sda=1;nop();/*设置P1^1为AD*/P1M0=0x02;P1M1=0x02;/*定时器0初始化*/ET0=1;TH0=0x4c;//对TH0TL0赋值TL0=0x00;//使定时器0.05秒中断一次TR0=1;//开始计时/*数据初始化*/add1=0;add2=30;add3=60;pelay=0;beep=0;tt=0;/*清除24C02原有数据*/for(i=0;i84;i++)write24c02(i,0);}voidmain(){init();while(1);}voidtimer0()interrupt1using0//定时中断服务函数{TH0=0x4c;//对TH0TL0赋值,每隔0.05s发出一次中断。TL0=0x00;//重装计数初值times++;//每过250usttcnt加一if(times==200)//计满200次(10秒)时{times=0;//重新再计tt++;if(tt==360)//计满1小时{tt=0;//重新再计/*记录PM2.5数据*/led=0;delay(140);temp=ad();delay(20);led=1;delay(4840);if(add1==24){uchari,t;for(i=1;i24;i++){t=read24c02(i);write24c02(i-1,t);}write24c02(--add1,rh);}write24c02(add1,temp);add1++;/*记录湿度、温度数据*/startdht();dht=1;if(!dht){while(!dht);while(dht);rhc=read_dht();rlc=read_dht();thc=read_dht();tlc=read_dht();ckc=read_dht();}dht=1;sum=rhc+rlc+thc+tlc;if(sum==ckc){rh=rhc;th=thc;if(add2==54){uchari,t;for(i=31;i54;i++){t=read24c02(i);write24c02(i-1,t);}write24c02(--add2,rh);}write24c02(add2,rh);add2++;if(add3==84){uchari,t;for(i=61;i84;i++){t=read24c02(i);write24c02(i-1,t);}write24c02(--add3,rh);}write24c02(add3,th);add3++;}}}}voidser()interrupt4{ucharj,k;ES=0;RI=0;a=SBUF;switch(a){case'A'://读取并发送当前数据startdht();dht=1;if(!dht){while(!dht);while(dht);rhc=read_dht();rlc=read_dht();thc=read_dht();tlc=read_dht();ckc=read_dht();}dht=1;sum=rhc+rlc+thc+tlc;if(sum==ckc){th=thc;tshi=th/10;tge=th%10;rh=rhc;rshi=rh/10;rge=rh%10;}led=0;delay(140);temp=ad();delay(20);led=1;delay(4840);temp=temp*500/256;bai=temp/100;shi=temp%100/10;ge=temp%10;SBUF=table[tshi];while(!TI);TI=0;SBUF=table[tge];while(!TI);TI=0;SBUF='z';while(!TI);TI=0;SBUF=table[rshi];while(!TI);TI=0;SBUF=table[rge];while(!TI);TI=0;SBUF='z';while(!TI);TI=0;SBUF=table[bai];while(!TI);TI=0;SBUF=table[shi];while(!TI);TI=0;SBUF=table[ge];while(!TI);TI=0;SBUF='#';while(!TI);TI=0;break;case'B'://读取并发送历史数据for(k=60;k84;k++){th=read24c02(k);tshi=th/10;tge=th%10;SBUF=table[tshi];while(!TI);TI=0;SBUF=table[tge];while(!TI);TI=0;SBUF='z';while(!TI);TI=0;ES=1;}for(j=30;j54;j++){rh=read24c02(j);rshi=rh/10;rge=rh%10;SBUF=table[rshi];while(!TI);TI=0;SBUF=table[rge];while(!TI);TI=0;if(j53){SBUF='z';while(!TI);TI=0;}}SBUF='#';while(!TI);TI=0;break;case'E'://红外开启beep=1;break;case'F'://红外关闭beep=0;break;case'G'://继电器闭合pelay=1;bre
本文标题:基于单片机的智能家居系统
链接地址:https://www.777doc.com/doc-5825089 .html