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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7210|回復: 6
打印 上一主題 下一主題
收起左側

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

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

智能窗戶實物圖

智能窗戶控制盒實物圖

紅外遙控開關窗

限位開關

紅外對管


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

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

  5. sbit k0 = P0^0; //窗戶開啟按鍵
  6. sbit k1 = P0^1; //窗戶停止按鍵
  7. sbit k2 = P0^2; //窗戶關閉按鍵
  8. sbit k3 = P0^3; //左邊光電限位開關的信號(窗戶完全關閉時候信號輸出低電平)
  9. sbit k4 = P0^4; //右邊光電限位開關的信號(窗戶完全開啟時候信號輸出低電平)
  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;        //窗戶關閉提示
  16. sbit r3 = P2^3;        //窗戶打開成功提示
  17. sbit r4 = P2^4;        //窗戶關閉成功提示
  18. sbit r5 = P2^5; //防夾手提示
  19. sbit r6 = P2^6; //外面下雨提示
  20. sbit r7 = P2^7; //可燃氣體濃度過高報警提示

  21. unsigned int Run_Status; //運行狀態標志
  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; //電機正在正轉的狀態標志,電機正轉窗戶開啟
  39.         DIR = 0; //正轉
  40.         ENA = 1; //步進電機使能信號
  41.         TMOD |= 0x01;
  42.         IE |= 0x82; //打開中斷
  43.         TR0 = 1;
  44. }
  45. void close()   //關閉窗戶子程序
  46. {
  47.         
  48.         Run_Status = 1; //電機正在反轉的狀態標志
  49.         DIR = 1; //反轉
  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()                 //清空串口接收數據緩存
  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))  //判斷右邊光電限位開關是否輸出低電平,即窗戶是否已經是開啟狀態,當窗戶沒有完全開啟時再判斷窗戶開啟按鍵是否按下
  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))        //判斷左邊光電限位開關是否輸出低電平,即窗戶是否已經是關閉狀態,當窗戶沒有完全關閉時再判斷窗戶關閉按鍵是否按下
  110.                 {        
  111.                         
  112.                         clearbuf();
  113.                         num=0;
  114.                                                         r2 = 0;                   //輸出語音提示:“正在關閉窗戶,請稍等”
  115.                                                         Delay10ms();  //輸出語音提示:“正在關閉窗戶,請稍等”
  116.                                                         r2 = 1;                  //輸出語音提示:“正在關閉窗戶,請稍等”
  117.                                                         close();
  118.                 }
  119.                                        
  120.                 if(!k6)                 //該語句為避免重復執行,僅僅執行一次
  121.                         {
  122.                                                 if(flag[6])
  123.                                                 {        
  124.                                                         r6 = 0;             //輸出語音提示:“外面下大雨,正在自動關閉窗戶”
  125.                                                         Delay10ms(); //輸出語音提示:“外面下大雨,正在自動關閉窗戶”
  126.                                                         r6 = 1;                 //輸出語音提示:“外面下大雨,正在自動關閉窗戶”
  127.                                                         flag[6]=0;
  128.                                                         close();
  129.                                                 }
  130.                         }
  131.                 if(!k7)                 //該語句為避免重復執行,僅僅執行一次
  132.                         {
  133.                                                 if(flag[7])
  134.                                                 {        
  135.                                                         r7 = 0;             //輸出語音提示:“外面下大雨,正在自動關閉窗戶”
  136.                                                         Delay10ms(); //輸出語音提示:“外面下大雨,正在自動關閉窗戶”
  137.                                                         r7 = 1;                 //輸出語音提示:“外面下大雨,正在自動關閉窗戶”
  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])                 //該語句為避免重復執行,僅僅執行一次
  149.                                         {
  150.                                                 r3 = 0;                 //輸出語音提示:“窗戶打開成功”
  151.                                                 Delay10ms(); //輸出語音提示:“窗戶打開成功”
  152.                                                 r3 = 1;                 //輸出語音提示:“窗戶打開成功”
  153.                                                 flag[3] = 0;
  154.                                         }
  155.                                 };
  156.                         break;
  157.                         case 1:
  158.                                 if(!k3)         //判斷窗戶是否完全關閉,完全關閉后電機停止
  159.                                 {
  160.                                            pause();
  161.                                         if(flag[4])                        //該語句為避免重復執行,僅僅執行一次
  162.                                                 {
  163.                                                 r4 = 0;                     //輸出語音提示:“窗戶關閉成功”
  164.                                                 Delay10ms();    //輸出語音提示:“窗戶關閉成功”
  165.                                                 r4 = 1;                    //輸出語音提示:“窗戶關閉成功”
  166.                                                 flag[4] = 0;
  167.                                                 }
  168.                                 };
  169.                         break;
  170.                         case 2:
  171.                                 {
  172.                                                 r1 = 0;                     //輸出語音提示:“窗戶關閉成功”
  173.                                                 Delay10ms();    //輸出語音提示:“窗戶關閉成功”
  174.                                                 r1 = 1;                    //輸出語音提示:“窗戶關閉成功”
  175.                                 }

  176.                 }
  177.         }
  178. }


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


  185. void ser_isr() interrupt 4                 //串口通信中斷服務函數
  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. }
復制代碼
以上代碼打包51hei下載地址:
smart window program.rar (36.65 KB, 下載次數: 77)


評分

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

查看全部評分

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

使用道具 舉報

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

使用道具 舉報

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

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

使用道具 舉報

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

確實是這樣的,我自己想做一個有沒有所需要對應的實物鏈接啊
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久热久热| 久久网站免费视频 | 91成人在线 | 精品久久久久国产 | 人人做人人澡人人爽欧美 | 国产精品久久久久久久久婷婷 | 欧美日韩国产在线观看 | 欧美aaaaa | 亚洲精品一区二区三区免 | 99视频在线 | 天堂一区| 81精品国产乱码久久久久久 | 国内成人免费视频 | 日韩精品在线观看一区二区三区 | 亚洲成人精品 | 欧州一区 | 中文字幕亚洲一区二区三区 | 国产一区二区三区视频 | 中文字幕一区二区三区四区 | 中文字幕免费视频 | 亚洲成人黄色 | 九九精品在线 | 亚洲精品视频免费观看 | 亚洲欧美视频 | 精品三级在线观看 | 国产精品爱久久久久久久 | 91精品国产91久久久久久密臀 | 91麻豆精品国产91久久久更新资源速度超快 | 噜噜噜噜狠狠狠7777视频 | 日本在线一区二区 | 国产成人自拍一区 | 精品欧美视频 | 精品视频一区二区 | 蜜桃视频在线观看免费视频网站www | 国产精品久久久久久久免费大片 | 国产精品3区| 成人一区二区三区在线观看 | 免费一级网站 | 国产精品欧美一区二区 | 老司机精品福利视频 | 成人做爰999 |