基于藍牙模塊,可以通過手機藍牙助手app控制衣架收放
晾衣架是每個家庭都會用到的工具,我們生活中常用的晾衣架已經經過了多代的發展,從一根竹竿撐起的晾衣時代,到傳統固定晾衣架的時代,再到手搖晾衣架等。它們都存在著易受天氣影響和功能過于單一等缺點。在此基礎上我們借助多種傳感器和低成本小體積的單片機以及無線通信技術,整合而成我們的智能晾衣系統。智能晾衣系統在滿足基本的晾衣需求之余,還可以根據外界環境情況自動控制衣服的送出與收回,以及通過物聯網進行遠程控制監測。讓我們的衣服既能沐浴大自然的和風暖陽又能自動躲避開它的狂風暴雨。讓我們不用再為衣服的晾曬而操心,大大方便我們的生活。
本文主要介紹了光敏模塊,雨滴模塊以及濕度傳感器部分。這三部分也是主要的數據傳入部分,數據傳入后通過單片機分析在控制其他部分驅動。
晾衣架的現狀  
我們生活中常用的晾衣架已經經過了多代的發展,從一根竹竿撐起的晾衣時代,到傳統固定晾衣架的時代,再到手搖晾衣架等。
圖1.1-1一根繩撐起的晾衣架 圖1.1-2固定的晾衣架 
圖1.1-3手搖晾衣架 這些傳統的晾衣架有著結構簡單的優勢,同時也存在著受天氣影響嚴重,功能過于單一的缺點。當遇到刮風下雨天需要依靠人把衣物收回到屋內,晾曬效果也大大折扣。 1.2智能晾衣系統的構想 現如今電子行業越來越發達,各種傳感器、芯片等也越來越普及。我們可以利用各式的傳感器結合單片機等完成一些智能的控制。智能晾衣系統就是以此為基礎借助雨滴感應模塊、光敏模塊、溫濕度模塊、濕度檢測模塊等感知環境的信息,并將信息交給單片機處理,單片機再通過控制驅動模塊對環境的改變做出機械反應,同時連接顯示模塊把環境信息實時顯示給使用者。使用者還可以通過手機實現和單片機的無線通信從而實現對晾衣架的遠程遙控,并能通過手機得知衣服的晾曬狀況。
1.光敏傳感器模塊 光敏傳感器由光敏電阻和lm393雙電壓比較器以及它的外圍電路組成,采用5V直流供電。它一般用來檢測周圍環境的光線亮度。擁有DO(數字量)和AO(模擬量)兩種輸出模式。當環境光線強度達不到設定閥值時DO輸出高電平,當環境光線強度超過閥值時DO輸出低電平。閥值可以通過轉動模塊上的電位器來調節。 
圖2.1-1光敏模塊  

2.雨滴傳感器模塊 雨滴傳感器模塊由雨傳感器和lm393雙電壓比較器以及它的外圍電路組成,采用5V直流供電。可以監測到下雨環境,原理與上一傳感器類似當感應板上沒有雨滴時DO輸出高電平,當感應板上有雨滴時DO輸出低電平給單片機引腳,刷掉感應板上的雨滴DO重新輸出高電平。雨滴傳感器模塊同樣有電位器可以調節閥值。 

圖2.1-2雨滴傳感器模塊
3.濕度檢測模塊 濕度監測模塊由濕度傳感器和lm393雙電壓比較器以及它的外圍電路構成,采用5V直流供電。在晾衣系統中用來藏入晾曬的衣服里檢測衣物的晾曬情況。它的用作原理是當檢測到衣服的濕度低于設定值時DO輸出低電平,高于設定值時DO輸出高電平,這個設定值同樣可以通過轉動電位器來調節。 
圖2.1-3濕度檢測模塊 
以上三種模塊均有AO輸出,AO為模擬量輸出可接在單片機AD口檢測被測量的大小,但使用AO口輸出系統結構和代碼難度會更復雜,而DO口輸出已經滿足了使用要求,所以以上三個模塊全部使用DO輸出。 三個模塊原理也相同 原理:當傳感器接收到雨滴時傳給單片機一個高電平,然后驅動步進電機轉動。 代碼如附錄
天氣良好狀態下光敏模塊和雨滴模塊檢測到光照充足且沒有雨滴,并把信息傳給單片機,單片機控制步進電機正轉,連接傳動裝置將衣物晾曬到屋外。 當天氣變壞即光敏模塊和雨滴模塊檢測到陰天或下雨有一個條件出現時,就會把信息傳給單片機,單片機控制步進電機反轉,連接傳動裝置自動將衣物收回屋內,以免被雨淋濕。

3-1電路原理圖 第四章 結果 經過小組成員反復的調試和對環境狀況的模擬實驗并對各個模塊進行整合我們一步步實現了設想的功能要求,最終完成了作品,基本達到了我們的預想,實現了功能要求。但系統也依然存在一點小問題如:當手機控制步進電機正轉,步進電機在完成正轉停下之前手機發送其他指令系統不會運行,只有到電機做完正轉任務手機發送最指令才能正常運行,這是需要我們進一步去完善的地方。
第五章 結論
我們小組的智能晾衣系統以智能家居為主題,以讓生活更美好為目標,借助光敏傳感器、雨滴傳感器檢測環境狀況把數據交給單片機,通過單片機進一步控制步進電機對衣物收回和放出。借助溫濕度模塊監測環境溫濕度并通過液晶屏顯示。通過藍牙模塊讓使用者可以通過手機對晾衣系統進行遙控和查看衣物的晾曬情況。省去了下雨天需要的手動收衣服,并提高了人們對環境信息的感知,以較低的成本大大方便了人們的生活。同時使用藍牙進行通信存在通信距離過短的缺陷,未來借助wifi遠程通信是我們的發展方向。
單片機源程序如下:
- #include<reg52.h>
- #define uint unsigned int
- #define uchar unsigned char
- # define dianping P1
- uchar code zheng[4]={0x08,0x04,0x02,0x01};
- uchar code fan[4] ={0x01,0x02,0x04,0x08};
- uchar DHT11[5],RTflag=0;
- uchar FLAG,flag_q,num,gg,t,j,s;
- uint flag_k=0;
- sbit key1=P2^0;/*回收*/
- sbit key2=P2^1; /*送出*/
- sbit guan=P2^6;
- sbit shidu=P2^7;
- sbit yudi=P2^5;
- sbit Beep=P2^3;
- sbit dat=P2^4;
- sbit IN1=P3^2;
- sbit IN2=P3^3;
- sbit EN=P3^4;
- sbit RS=P3^5;
- sbit RW=P3^6;
- uchar table[5];
- void key();
- uint wd,sd;
- void HH_H();
- void Init();
- void zhengzhuan();
- void fanzhuan();
- void tingzhi();
- unsigned char flag_z,k,n;
- void Delay_t(uint j)
- { uchar i;
- for(;j>0;j--)
- {
- for(i=0;i<27;i++);
- }
- }
- void Delay_10us(void)
- {
- uchar i;
- i--;
- i--;
- i--;
- i--;
- i--;
- i--;
- }
- void delay(uint z)
- {
- uint x,y;
- for(x=z;x>0;x--)
- for(y=110;y>0;y--);
- }
- void lcd_write_com(uchar com)
- {
- RS=0;
- RW=0;
- EN=1;
- P0=com;
- delay(1);
- EN=0;
- }
- void lcd_init()
- {
- lcd_write_com(0x38);
- delay(1);
- lcd_write_com(0x08);
- delay(1);
- lcd_write_com(0x01);
- delay(1);
- lcd_write_com(0x06);
- delay(1);
- lcd_write_com(0x0C);
- delay(1);
- }
- void lcd_write_data(uchar date)
- {
- RS=1;
- RW=0;
- EN=1;
- P0=date;
- delay(1);
- EN=0;
- }
- void write_str(uchar x,uchar y,uchar *s)
- {
- if(y==0)
- lcd_write_com(0x80+x);
- else
- lcd_write_com(0xc0+x);
- while(*s)
- {
- lcd_write_data(*s);
- s++;
- }
- }
- void write_shu(uchar x,uchar y,uchar num)
- {
-
- uchar s,g;
- if(y==0)
- lcd_write_com(0x80+x);
- else
- lcd_write_com(0xc0+x);
- s=num/10;
- lcd_write_data(0x30+s);
- g=num%10;
- lcd_write_data(0x30+g);
- }
- uchar write_byte1()
- {
- uchar i,comdata,temp1;
- for(i=0;i<8;i++)
- {
- FLAG=2;
- while((!dat)&&FLAG++);
- Delay_10us();
- Delay_10us();
- Delay_10us();
- temp1=0;
- if(dat)temp1=1;
- FLAG=2;
- while((dat)&&FLAG++);
-
- if(FLAG==1)break;
-
-
-
- comdata<<=1;
- comdata|=temp1;
- }
- return (comdata);
- }
- void DHT11_5()
- {
-
- uchar i,temp;
- dat=0;
- t=temp;
- Delay_t(180);
- dat=1;
- Delay_10us();
- Delay_10us();
- Delay_10us();
- Delay_10us();
- dat=1;
- if(!dat)
- {
- FLAG=2;
- while((!dat)&&FLAG++);
- FLAG=2;
-
- while((dat)&&FLAG++);
- for(i=0;i<5;i++)
- {
- DHT11[i]=write_byte1();
- }
- dat=1;
-
- temp=(DHT11[0]+DHT11[1]+DHT11[2]+DHT11[3]);
- if(temp==DHT11[4])
- {
- RTflag=1;
- }
- if(RTflag==1)
- {
- RTflag=0;
- write_str(0,0," shidu : ");
- write_shu(12,0,DHT11[0]);
- t=DHT11[0];
- if(DHT11[0]>=60)
- {
- Beep=0;
- }
- write_str(14,0,"RH");
- write_str(0,1," wendu : ");
- write_shu(12,1,DHT11[2]);
- if(DHT11[2]<=10)
- {
- Beep=0;
- }
- write_str(14,1,"^C");
- }
- }
- }
- void main()
- {
- lcd_init();
- delay(1000);
-
- while(1)
- {
-
- delay(1000);//
- write_byte1();
- DHT11_5();
- delay(1000);
- key();
- HH_H();
- }
-
- }
-
-
- void delayms(uint z)
- {
- uint i , j;
- for(i=z;i>0;i--)
- for(j=110;j>0;j--);
- }
- void delayus(uint x)
- {
- uint t, y;
- for(t=x;t>0;t--)
- for(y=110;y>0;y--);
-
- }
- void key()
- {
-
-
- {
- if((guan==0&&flag_k==0)||key2==0)
- {
- for(j=300;j>0;j--)
- {
- fanzhuan();
- }
- flag_k=1;
- }
-
- if(guan==0&&flag_k==1)
- {
- tingzhi();
- }
-
- if((guan==1&&flag_k==1)||(yudi==0)||(key1==0))
- {
-
- for(j=200;j>0;j--)
- {
- zhengzhuan();
- }
-
- flag_k=0;
-
- }
- if((guan==1&&flag_k==0))
- {
- tingzhi();
- }
- }
- }
-
- void zhengzhuan(void) /*正轉*/
- {
- uchar a;
- for(s=10;s>0;s--)
- {
- for(a=0;a<4;a++)
- {
- dianping=zheng[a];
- delayms(3);
- }
- }
- }
- void fanzhuan(void) /*反轉*/
- {
- uchar a;
- for(s=40;s>0;s--)
- {
- for(a=0;a<4;a++)
- {
- dianping=fan[a];
- delayms(3);
- }
- }
- }
- void tingzhi() /*停止*/
- {
- dianping=0x00;
- }
-
- void HH_H()
- {
- TMOD=0x21;
- TH1=0xfd;
- TL1=0xfd;
- TH0=(65536-50000)/255;
- TL0=(65536-50000)%255;
- TR1=1;
- ET0=1;
- SM0=0;
- SM1=1;
- REN=1;
- EA=1;
- ES=1;
- }
- void chuankou (void) interrupt 4
- {
- unsigned char Temp,q;
- ES=0;
- if(RI)
- {
- RI=0;
- Temp=SBUF;
-
- q=0;
- if(Temp=='1'&&q==0)
- {
- SBUF='a';
- {
- for(j=100;j>0;j--)
- {
- fanzhuan();
- }
- delayus(1000);
- }
- q=1;
- if(Temp=='1'&&q==1)
- {
-
- tingzhi();
- q=0;
- }
- }
- if(Temp=='2'&&q==0)
- {
- {
- for(j=100;j>0;j--)
- {
- zhengzhuan();
- }
-
- q=1;
- }
- SBUF='b';
- if(Temp=='2'&&q==1)
- {
-
- tingzhi();
- q=0;
- }
- }
- if(Temp=='3')
- {
- SBUF='s';
- while(!TI);
- TI=0;
- SBUF='h';
- while(!TI);
- TI=0;
- SBUF='i';
- while(!TI);
- TI=0;
- SBUF='3';
- while(!TI);
- TI=0;
- SBUF='5';
- while(!TI);
- TI=0;
- SBUF='R';
- while(!TI);
- TI=0;
- SBUF='H';
- while(!TI);
- TI=0;
- }
- if(Temp=='4')
- {
- SBUF='w';
- while(!TI);
- TI=0;
- SBUF='e';
- while(!TI);
- TI=0;
- SBUF='n';
- while(!TI);
- TI=0;
- ……………………
- …………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
智能晾衣系統.rar
(1.98 KB, 下載次數: 63)
2019-6-17 21:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
智能晾衣系統 文檔.rar
(1.81 MB, 下載次數: 50)
2019-6-17 21:12 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
|