久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7072|回復(fù): 6
打印 上一主題 下一主題
收起左側(cè)

基于51單片機的智能窗戶設(shè)計與制作 附源程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:459617 發(fā)表于 2020-4-8 10:24 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
本人在貴站第一次發(fā)帖,懇請前輩們多多包涵,謝謝。
近年來,隨著科技的進步,智能家居正在悄然無聲地應(yīng)用到我們的生活中。但窗戶作為住宅必不可少的部分,大部分依然采用原始的人工開閉模式,智能窗戶有著非常大的發(fā)展空間。我利用單片機、語音識別、紅外遙控等技術(shù),設(shè)計出了一種基于單片機的智能窗戶。
      我用STC89C52RC單片機為核心處理器,配以晶振等外圍器件,設(shè)計出整個智能窗戶的主控系統(tǒng),將工業(yè)生產(chǎn)中常見的電動滑臺用兩顆螺絲固定在窗戶下方,以驅(qū)動窗戶運行,使用光電限位開關(guān)判斷窗戶位置情況,以實現(xiàn)窗戶運行完成后準確停止歸位。該設(shè)計通過語音識別模塊和紅外遙控接收模塊給主控系統(tǒng)提供相應(yīng)指令來控制開關(guān)窗戶,通過雨滴傳感器模塊采集雨滴的有無,實現(xiàn)下雨天自動關(guān)窗的功能,利用可燃氣體傳感器對可燃氣體敏感的特性,實現(xiàn)燃氣濃度過高自動開窗的功能。單片機主控系統(tǒng)給語音播放模塊發(fā)送播放指令,實現(xiàn)智能窗戶工作過程中相應(yīng)的語音提示。利用紅外對管的原理,設(shè)計窗戶行程內(nèi)障礙物自動停止功能,以避免出現(xiàn)窗戶夾到手的嚴重后果。最終效果符合預(yù)期,該智能窗戶各種功能均成功實現(xiàn)。

智能窗戶實物圖

智能窗戶控制盒實物圖

紅外遙控開關(guān)窗

限位開關(guān)

紅外對管


單片機源程序如下:
  1. #include<reg52.h>  

  2. sbit CLK = P1^0; //TB6560步進電機驅(qū)動器輸入控制端定義         步進電機 頻率
  3. sbit ENA = P1^1; //TB6560步進電機驅(qū)動器輸入控制端定義         步進電機 使能
  4. sbit DIR = P1^2; //TB6560步進電機驅(qū)動器輸入控制端定義         步進電機 方向

  5. sbit k0 = P0^0; //窗戶開啟按鍵
  6. sbit k1 = P0^1; //窗戶停止按鍵
  7. sbit k2 = P0^2; //窗戶關(guān)閉按鍵
  8. sbit k3 = P0^3; //左邊光電限位開關(guān)的信號(窗戶完全關(guān)閉時候信號輸出低電平)
  9. sbit k4 = P0^4; //右邊光電限位開關(guān)的信號(窗戶完全開啟時候信號輸出低電平)
  10. sbit k5 = P0^5; //防夾手光電對管信號(光線被手阻擋時候信號輸出低電平)
  11. sbit k6 = P0^6; //雨滴傳感器信號 (有雨滴時候輸出低電平)
  12. sbit k7 = P0^7; //可燃氣體傳感器信號 (可燃氣體濃度過高輸出低電平)

  13. sbit r0 = P2^0;        //窗戶打開提示
  14. sbit r1 = P2^1;        //窗戶停止提示
  15. sbit r2 = P2^2;        //窗戶關(guān)閉提示
  16. sbit r3 = P2^3;        //窗戶打開成功提示
  17. sbit r4 = P2^4;        //窗戶關(guān)閉成功提示
  18. sbit r5 = P2^5; //防夾手提示
  19. sbit r6 = P2^6; //外面下雨提示
  20. sbit r7 = P2^7; //可燃氣體濃度過高報警提示

  21. unsigned int Run_Status; //運行狀態(tài)標志
  22. unsigned int i;
  23. short int buf[3];
  24. unsigned int num=0;
  25. unsigned int flag[8]={1,1,1,1,1,1,1,1};

  26. void serinitial()                //串口程序初始化
  27. {
  28.         TMOD |= 0x20;
  29.         SCON = 0x50;
  30.         TH1=TL1=0xfd;
  31.         TR1=1;
  32.         ES=1;        
  33.         EA=1;
  34.         PS=1;
  35. }
  36. void open()           //打開窗戶子程序
  37. {         

  38.         Run_Status = 0; //電機正在正轉(zhuǎn)的狀態(tài)標志,電機正轉(zhuǎn)窗戶開啟
  39.         DIR = 0; //正轉(zhuǎn)
  40.         ENA = 1; //步進電機使能信號
  41.         TMOD |= 0x01;
  42.         IE |= 0x82; //打開中斷
  43.         TR0 = 1;
  44. }
  45. void close()   //關(guān)閉窗戶子程序
  46. {
  47.         
  48.         Run_Status = 1; //電機正在反轉(zhuǎn)的狀態(tài)標志
  49.         DIR = 1; //反轉(zhuǎn)
  50.         ENA = 1; //步進電機使能信號
  51.         TMOD |= 0x01;
  52.         IE |= 0x82; //打開中斷
  53.         TR0 = 1;
  54. }
  55. void pause()   //窗戶停止運行子程序
  56. {        
  57.     CLK = 0;
  58.         ENA = 0;
  59.         TR0 = 0;
  60. }
  61. void Delay10ms()                //@11.0592MHz
  62. {
  63.         unsigned char i, j;
  64.         i = 108;
  65.         j = 145;
  66.         do
  67.         {
  68.                 while (--j);
  69.         } while (--i);
  70. }

  71. void clearbuf()                 //清空串口接收數(shù)據(jù)緩存
  72. {        
  73.          for(i = 0; i < 3; i++)
  74.         {
  75.                  buf[i]=0;
  76.         }
  77. }

  78. void main(void)
  79. {
  80.         serinitial();  //紅外串口接收程序初始化
  81.         while(1)
  82.         {
  83.                 if(((!k0)&&k4)||(buf[2]==0x43))  //判斷右邊光電限位開關(guān)是否輸出低電平,即窗戶是否已經(jīng)是開啟狀態(tài),當窗戶沒有完全開啟時再判斷窗戶開啟按鍵是否按下
  84.                 {
  85.                         clearbuf();
  86.                         num=0;
  87.                         r0 = 0;                    //輸出語音提示:“正在打開窗戶,請稍等”
  88.                         Delay10ms();    //輸出語音提示:“正在打開窗戶,請稍等”
  89.                         r0 = 1;                     //輸出語音提示:“正在打開窗戶,請稍等”
  90.                         for (i=0; i<8; i++){flag[i] = 1;};
  91.                         open();
  92.                 }
  93.                 if(buf[2]==0x42)
  94.                 {
  95.                                 Run_Status = 2;
  96.                                 pause();                 
  97.                                 num=0;
  98.                                 clearbuf();
  99.                         
  100.                                 
  101.                 }
  102.                 if(!k5)                 
  103.                 {           
  104.                                 pause();
  105.                                 r5 = 0;             //輸出語音提示:“請小心夾手,請不要在電機運行時把手伸進窗戶”
  106.                                 Delay10ms(); //輸出語音提示:“請小心夾手,請不要在電機運行時把手伸進窗戶”
  107.                                 r5 = 1;                 //輸出語音提示:“請小心夾手,請不要在電機運行時把手伸進窗戶”
  108.                 }
  109.                 if(((!k2)&&k3)||(buf[2]==0x40))        //判斷左邊光電限位開關(guān)是否輸出低電平,即窗戶是否已經(jīng)是關(guān)閉狀態(tài),當窗戶沒有完全關(guān)閉時再判斷窗戶關(guān)閉按鍵是否按下
  110.                 {        
  111.                         
  112.                         clearbuf();
  113.                         num=0;
  114.                                                         r2 = 0;                   //輸出語音提示:“正在關(guān)閉窗戶,請稍等”
  115.                                                         Delay10ms();  //輸出語音提示:“正在關(guān)閉窗戶,請稍等”
  116.                                                         r2 = 1;                  //輸出語音提示:“正在關(guān)閉窗戶,請稍等”
  117.                                                         close();
  118.                 }
  119.                                        
  120.                 if(!k6)                 //該語句為避免重復(fù)執(zhí)行,僅僅執(zhí)行一次
  121.                         {
  122.                                                 if(flag[6])
  123.                                                 {        
  124.                                                         r6 = 0;             //輸出語音提示:“外面下大雨,正在自動關(guān)閉窗戶”
  125.                                                         Delay10ms(); //輸出語音提示:“外面下大雨,正在自動關(guān)閉窗戶”
  126.                                                         r6 = 1;                 //輸出語音提示:“外面下大雨,正在自動關(guān)閉窗戶”
  127.                                                         flag[6]=0;
  128.                                                         close();
  129.                                                 }
  130.                         }
  131.                 if(!k7)                 //該語句為避免重復(fù)執(zhí)行,僅僅執(zhí)行一次
  132.                         {
  133.                                                 if(flag[7])
  134.                                                 {        
  135.                                                         r7 = 0;             //輸出語音提示:“外面下大雨,正在自動關(guān)閉窗戶”
  136.                                                         Delay10ms(); //輸出語音提示:“外面下大雨,正在自動關(guān)閉窗戶”
  137.                                                         r7 = 1;                 //輸出語音提示:“外面下大雨,正在自動關(guān)閉窗戶”
  138.                                                         flag[7]=0;
  139.                                                         open();
  140.                                                 }
  141.                         }        
  142.         switch(Run_Status)
  143.                 {
  144.                         case 0:
  145.                                 if(!k4)         //判斷窗戶是否完全開啟,完全開啟后電機停止
  146.                                 {
  147.                                            pause();         
  148.                                         if(flag[3])                 //該語句為避免重復(fù)執(zhí)行,僅僅執(zhí)行一次
  149.                                         {
  150.                                                 r3 = 0;                 //輸出語音提示:“窗戶打開成功”
  151.                                                 Delay10ms(); //輸出語音提示:“窗戶打開成功”
  152.                                                 r3 = 1;                 //輸出語音提示:“窗戶打開成功”
  153.                                                 flag[3] = 0;
  154.                                         }
  155.                                 };
  156.                         break;
  157.                         case 1:
  158.                                 if(!k3)         //判斷窗戶是否完全關(guān)閉,完全關(guān)閉后電機停止
  159.                                 {
  160.                                            pause();
  161.                                         if(flag[4])                        //該語句為避免重復(fù)執(zhí)行,僅僅執(zhí)行一次
  162.                                                 {
  163.                                                 r4 = 0;                     //輸出語音提示:“窗戶關(guān)閉成功”
  164.                                                 Delay10ms();    //輸出語音提示:“窗戶關(guān)閉成功”
  165.                                                 r4 = 1;                    //輸出語音提示:“窗戶關(guān)閉成功”
  166.                                                 flag[4] = 0;
  167.                                                 }
  168.                                 };
  169.                         break;
  170.                         case 2:
  171.                                 {
  172.                                                 r1 = 0;                     //輸出語音提示:“窗戶關(guān)閉成功”
  173.                                                 Delay10ms();    //輸出語音提示:“窗戶關(guān)閉成功”
  174.                                                 r1 = 1;                    //輸出語音提示:“窗戶關(guān)閉成功”
  175.                                 }

  176.                 }
  177.         }
  178. }


  179. void Timer0_ISR(void) interrupt 1 using 1         //步進電機方波脈沖產(chǎn)生函數(shù)
  180. {
  181.         TL0 = 0xC3;                //設(shè)置定時初值
  182.         TH0 = 0xFC;                //設(shè)置定時初值
  183.         CLK = ~CLK;
  184. }


  185. void ser_isr() interrupt 4                 //串口通信中斷服務(wù)函數(shù)
  186. {
  187.         TR0=0;
  188.         if(RI)
  189.         {               
  190.                 RI=0;
  191.                 buf[num]=SBUF;
  192.                 num++;
  193.                 if(num==3)num=0;
  194.         }
  195. }
復(fù)制代碼
以上代碼打包51hei下載地址:
smart window program.rar (36.65 KB, 下載次數(shù): 77)


評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 共享資料的黑幣獎勵!

查看全部評分

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏2 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:745013 發(fā)表于 2020-5-6 14:04 | 只看該作者
請問,您有Proteus的仿真圖嗎,我想認真學(xué)習(xí)一下
回復(fù)

使用道具 舉報

板凳
ID:614860 發(fā)表于 2020-5-7 16:11 來自手機 | 只看該作者
19970828 發(fā)表于 2020-5-6 14:04
請問,您有Proteus的仿真圖嗎,我想認真學(xué)習(xí)一下

請問有沒有具體的仿真圖,還有你所用的器件清單
回復(fù)

使用道具 舉報

地板
ID:850270 發(fā)表于 2020-12-1 16:01 | 只看該作者
有詳細的仿真圖嗎
回復(fù)

使用道具 舉報

5#
ID:328014 發(fā)表于 2020-12-2 05:39 | 只看該作者
作者沒有說有仿真圖,所以沒有,可能作者直接焊接的電路板
回復(fù)

使用道具 舉報

6#
ID:553941 發(fā)表于 2020-12-2 08:40 | 只看該作者
說實話,這個仿真沒有意義,傳感器也都是些簡單的信號,反而傳感器安裝的位置很重要。這個需要實物不斷的調(diào)試。
回復(fù)

使用道具 舉報

7#
ID:907553 發(fā)表于 2025-4-14 13:30 | 只看該作者
13303022280 發(fā)表于 2020-12-2 08:40
說實話,這個仿真沒有意義,傳感器也都是些簡單的信號,反而傳感器安裝的位置很重要。這個需要實物不斷的調(diào) ...

確實是這樣的,我自己想做一個有沒有所需要對應(yīng)的實物鏈接啊
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 久久久久一区二区三区四区 | 国产精品毛片av一区 | 中文字幕亚洲一区二区va在线 | 综合伊人| 亚洲一区二区三区四区五区午夜 | 欧美日韩在线免费观看 | 欧美h| 久久久久久亚洲精品 | 日韩综合在线 | 欧美日韩高清一区二区三区 | 午夜不卡一区二区 | 国产成人精品一区二区三区视频 | 日韩中文字幕 | 欧美成人黄色小说 | 9久9久 | 99热最新网址 | 亚洲精品亚洲人成人网 | 综合色导航 | 精品国产青草久久久久福利 | 91精品国产乱码久久久 | 91亚洲国产精品 | 51ⅴ精品国产91久久久久久 | 色综合一区二区 | 男人久久天堂 | 人人做人人澡人人爽欧美 | 91影视 | 亚洲成人动漫在线观看 | 日韩高清一区 | 亚洲欧美日韩中文在线 | 欧美老少妇一级特黄一片 | 国产蜜臀97一区二区三区 | 日韩精品成人 | 欧美夜夜 | 亚洲福利在线视频 | 亚洲精品一区二三区不卡 | 成人av鲁丝片一区二区小说 | 国产99久久精品一区二区永久免费 | 亚洲精品中文字幕 | 久久精品日产第一区二区三区 | 午夜免费视频 | 国产特黄一级 |