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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7336|回復: 7
收起左側

單片機智能窗簾設計資料 程序+原理圖和PCB文件+PPT

[復制鏈接]
ID:461895 發表于 2019-1-4 16:16 | 顯示全部樓層 |閱讀模式
Altium Designer畫的智能窗簾原理圖和PCB圖如下:(51hei附件中可下載工程文件)
0.png 0.png 0.png

  • 項目的實現思路和實現方法
隨著科技的深化發展,人民生活水平的日益提高,自控系統從安防、采暖、采光、烹煮等領域不斷擴展,家居智能化的趨勢越來越明顯。本文針對的,是智能窗簾這一塊,它的任務是通過簡單省力的操作來實現室內采光自動變化,解決一些實際的困難與需求。
例如:已經上床睡覺,卻發現窗簾沒關;小朋友、殘疾者拉窗簾的不便;外出旅游,需要房間保持定時采光,去濕去霉;希望早上窗簾到點打開,用明亮的陽光來喚醒自己;由于生活的緊湊,沒有精力管理窗簾又希望室內采光自動保持在舒適的程度;飄窗、高窗、懸窗、落地窗等窗簾的拉不動或夠不著;希望非觸碰地拉動層層疊疊的窗簾,保持其造型的美觀….這種種問題,通過使用智能電動窗簾便能輕松解決,從而使現代生活變得更方便舒適。

ppt內容預覽:
0.png


2項目的硬件工作原理分析和調試,各模塊介紹
2.1分析項目的硬件工作原理
1.通過溫度傳感器來自動的控制窗簾的關閉與開啟;
2.通過紅外遙控器來手動控制窗簾的關閉,開啟,暫停,啟動,加速,減速以及智能與人工的轉換;
3.測得的溫度與相應的步進電機的速度可以通過LCD1602顯示出來。
2.2介紹該項目中使用的模塊,及其作用
2.2.1步進電機
步進電動機是一種將電脈沖信號轉換成角位移或線位移的機電元件。步進電動機的輸入量是脈沖序列,輸出量則為相應的增量位移或步進運動。正常運動情況下,它每轉一周具有固定的步數;做連續步進運動時,其旋轉轉速與輸入脈沖的頻率保持嚴格的對應關系,不受電壓波動和負載變化的影響。
2.2.2DS18B20
DS18B20中的溫度傳感器可完成對溫度的測量,以12位轉化為例:用16位符號擴展的二進制補碼讀數形式提供,以 0.0625℃/LSB形式表達,其中S為符號位。
這是12位轉化后得到的12位數據,存儲在18B20的兩個8比特的RAM中,二進制中的前面5位是符號位,如果測得的溫度大于0, 這5位為0,只要將測到的數值乘于0.0625即可得到實際溫度;如果溫度小于0,這5位為1,測到的數值需要取反加1再乘于0.0625即可得到實際 溫度。 例如+125℃的數字輸出為07D0H,+25.0625℃的數字輸出為0191H,-25.0625℃的數字輸出為FE6FH,-55℃的數字輸出為FC90H。
2.3系統整體框架

4.總結(收獲,缺陷,改進,提高)
本設計介紹了基于STC89C52的智能窗簾控制系統的工作原理及實現過程,我在這個星期內閱讀大量有關如何通過電機轉動來控制窗簾的關閉和開啟,以及數字溫度計原理及設計的相關資料,設計了實現采集與顯示功能的軟件程序,完成了基于STC89C52的智能窗簾控制系統的設計。設計中采用最常用的單片機STC89C52作為主控模塊,單總線數字溫度傳感器DS18B20用來測量溫度,溫度數據采用LCD1602顯示。本設計的特點是構成系統的硬件器件少,操作簡單,數據處理功能強。
智能化課程設計重點就在于軟件算法的設計,雖然以前還做過這樣的設計但這次設計,但都比較簡單程序也不是很長也不需要有很巧妙的程序算法。這次軟件設計中讓我充分理解到了利用子程序的好處。在設計中也遇到很多問題比如相關設備的初始化,經過多次調試修改終于顯示成功。還有很多下問題則不必累述。通過這次項目使我學習到了很多的東西,不僅加深了對專業知識的理解,而且更好地把理論知識與實踐相結合,提高了自身的動手能力和實踐水平,增強了學習單片機系統開發與設計的興趣。

3.軟件實現原理和調試以及聯合調試的總結

  1. 3.1DS18B20
  2. /******************************************************************/
  3. /*                    讀一個字節  , 低位開始                     */
  4. /******************************************************************/
  5. unsigned char ReadOneByte(void)
  6. {
  7.                 unsigned char i;
  8.               unsigned char value=0;
  9.               for(i=0;i<8;i++)
  10.               {
  11.                             value >>=1;
  12.                             DQ = 0;
  13.                             _nop_();
  14.                             _nop_();
  15.                             DQ = 1;
  16.                             _nop_();
  17.                             _nop_();
  18.                             _nop_();
  19.                             _nop_();
  20.                             _nop_();
  21.                             _nop_();
  22.                             _nop_();
  23.                             if(DQ == 1)
  24.                             {value |= 0x80;}
  25.                             Delay60us();

  26.               }
  27.               return value;
  28. }

  29. /******************************************************************/
  30. /*                 寫一個字節    先寫低位                         */
  31. /******************************************************************/
  32. void WriteOneByte(unsigned char dat)
  33. {
  34.               unsigned char i;
  35.               for(i=0;i<8;i++)
  36.               {
  37.                             DQ =0;
  38.                             _nop_();
  39.                             _nop_();
  40.                             if(dat&0x01)
  41.                             {DQ =1;}
  42.                             else
  43.                             DQ = 0;
  44.                             Delay60us();
  45.                             DQ = 1;//釋放總線            
  46.                             dat>>=1;
  47.               }

  48. }

  49. /******************************************************************/
  50. /*                   讀取溫度                                     */
  51. /******************************************************************/
  52. unsigned int ReadTemperature(void)
  53. {

  54.    unsigned int a,b,t;
  55.    EA =0;
  56.    bsp_InitDs18b20();
  57.    WriteOneByte(0xcc);
  58.    WriteOneByte(0x44);
  59.    delay_ms(200);
  60.    bsp_InitDs18b20();
  61.    WriteOneByte(0xcc);
  62.    WriteOneByte(0xbe);
  63.    a= ReadOneByte(); //低字節
  64.    b= ReadOneByte(); //高字節
  65.    b=b<<8;
  66.    t= a+b;
  67.    EA =1;
  68.    return t;
  69. }
  70. 3.2LCD1602
  71. /*------------------------------------------------
  72.                 清屏函數
  73. ------------------------------------------------*/
  74. void LCD_Clear(void)
  75. {
  76.               bsp_LcdWriteComand(0x01);
  77.               delay_ms(5);
  78. }

  79. void bsp_LcdWriteData(unsigned char dat)
  80. {
  81.               //delay_ms(5);
  82.               while(bsp_LcdCheckBusy()&0x80);
  83.                 RS =1;
  84.               RW =0;
  85.               LCDPORT = dat;
  86.               EN =1;
  87.               delay_us(10);
  88.               EN =0;
  89. }


  90. void bsp_LcdWriteComand(unsigned char com)
  91. {
  92.               //delay_ms(5);
  93.               while(bsp_LcdCheckBusy()&0x80);
  94.                  RS =0;
  95.               RW =0;
  96.               LCDPORT = com;
  97.               EN =1;
  98.               delay_us(10);
  99.               EN =0;
  100. }


  101. void bsp_LcdInit(void)
  102. {
  103.               delay_ms(15);
  104.               bsp_LcdWriteComand(0x38);
  105.               delay_ms(5);
  106.               bsp_LcdWriteComand(0x38);
  107.               delay_ms(5);
  108.               bsp_LcdWriteComand(0x38);
  109.               delay_ms(5);
  110.               bsp_LcdWriteComand(0x38);
  111.               delay_ms(5);
  112.               bsp_LcdWriteComand(0x08);
  113.               delay_ms(5);
  114.               bsp_LcdWriteComand(0x01);
  115.               delay_ms(5);
  116.               bsp_LcdWriteComand(0x06);
  117.               delay_ms(5);
  118.               bsp_LcdWriteComand(0x0c);
  119. }


  120. void bsp_LcdShowChar(unsigned char x,unsigned char y,unsigned char a)
  121. {
  122.               if(y ==0)
  123.                             bsp_LcdWriteComand(0x80+x);
  124.               else
  125.                             bsp_LcdWriteComand(0xC0+x);
  126.             
  127.               bsp_LcdWriteData(a);            
  128. }


  129. void bsp_LcdShowString(unsigned char x,unsigned char y,unsigned char *s)
  130. {
  131.               if(y ==0)
  132.                             bsp_LcdWriteComand(0x80+x);
  133.               else
  134.                             bsp_LcdWriteComand(0xC0+x);
  135.               while(*s)
  136.               {
  137.                             bsp_LcdWriteData(*s);
  138.                             s++;            
  139.               }
  140. }


  141. unsigned char bsp_LcdCheckBusy(void)
  142. {
  143.               unsigned char temp;
  144.               RS =0;
  145.               RW =1;
  146.               EN =1;
  147.               temp =LCDPORT;
  148.               delay_us(10);
  149.               EN =0;
  150.               return temp;
  151. }


  152. void bsp_LcdFillCGRAM(void)              //0x40
  153. {
  154.               unsigned char i=0;
  155.                  bsp_LcdWriteComand(0x40);
  156.               for(i=0;i<48;i++)
  157.               {
  158.                             bsp_LcdWriteData(my[i]);
  159.               }            
  160. }


  161. void bsp_LcdShowCGRAM(unsigned char x,unsigned char y,unsigned char index)//x 橫坐標 y 縱坐標              index 0-7
  162. {
  163.               if(y ==0)
  164.                             bsp_LcdWriteComand(0x80+x);
  165.               else
  166.                             bsp_LcdWriteComand(0xC0+x);
  167.                             bsp_LcdWriteData(index);
  168. }

  169. 3.3步進電機
  170. void ISR_TIMER1(void) interrupt 3  //1ms
  171. {
  172.               static unsigned int num = 0;
  173.               static unsigned char times = 0,i = 0;
  174.               TH1=(65536-1000)/256;                              //重新賦值 1ms
  175.               TL1=(65536-1000)%256;
  176.             
  177.               if(!StopFlag)
  178.               {
  179.                 if(times == (10-Speed))
  180.                 {
  181.                             times=0;
  182.                             if(TurnFlag == 0)
  183.                             {
  184.                                           switch(i)  //逆時針轉動
  185.                                 {
  186.                                               case 0:Coil_A1;i++;break;
  187.                                                         case 1:Coil_AB1;i++;break;
  188.                                                         case 2:Coil_B1;i++;break;
  189.                                                         case 3:Coil_BC1;i++;break;
  190.                                                         case 4:Coil_C1;i++;break;
  191.                                                         case 5:Coil_CD1;i++;break;
  192.                                                         case 6:Coil_D1;i++;break;
  193.                                                         case 7:Coil_DA1;i++;break;
  194.                                                         case 8:i=0;break;
  195.                                               default:break;
  196.                                 }
  197.                             }
  198.                             else if(TurnFlag == 1)
  199.                             {
  200.                                           switch(i)              //順時針轉動
  201.                                 {
  202.                                               case 0:Coil_DA1;i++;break;
  203.                                                         case 1:Coil_D1;i++;break;
  204.                                                         case 2:Coil_CD1;i++;break;
  205.                                                         case 3:Coil_C1;i++;break;
  206.                                                         case 4:Coil_BC1;i++;break;
  207.                                                         case 5:Coil_B1;i++;break;
  208.                                                         case 6:Coil_AB1;i++;break;
  209.                                                         case 7:Coil_A1;i++;break;
  210.                                                         case 8:i=0;break;
  211.                                               default:break;
  212.                                 }
  213.                                          
  214.                             }
  215.               }
  216.               times++;
  217.               }
  218.               num++;
  219.               if(num==600)      
  220.               {
  221.                             num=0;
  222.                             ReadTempFlag=1; //讀標志位置1
  223.               }
  224. }
復制代碼
0.png

全部資料51hei下載地址:
智能窗簾.rar (5.78 MB, 下載次數: 200)

評分

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

查看全部評分

回復

使用道具 舉報

ID:165792 發表于 2019-1-9 19:42 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:472654 發表于 2019-1-26 19:03 | 顯示全部樓層
你好,想問下,有沒有用DS18B20控制電機正反轉的程序
回復

使用道具 舉報

ID:472654 發表于 2019-1-26 19:05 | 顯示全部樓層
請問有沒有用DS18B20控制電機正反轉的程序,不需要LCD顯示溫度。我程序一直寫不好。如果可以的話能不能加我QQ462410794
回復

使用道具 舉報

ID:375715 發表于 2019-4-26 23:15 來自手機 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:375715 發表于 2019-4-27 19:14 來自手機 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:375715 發表于 2019-4-28 02:17 來自手機 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

ID:630935 發表于 2019-10-27 15:57 | 顯示全部樓層
謝謝分享
回復

使用道具 舉報

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

本版積分規則

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

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 久干网 | 国产高清精品在线 | 日韩视频在线播放 | 免费小视频在线观看 | 亚洲va欧美va天堂v国产综合 | 欧美日韩美女 | 九九成人 | 龙珠z国语版在线观看 | 久久久网| 亚洲国产精品福利 | 欧美4p | 国产精品1区| 自拍视频一区二区三区 | 在线一区二区三区 | 伊人超碰| 日韩欧美不卡 | 一区二区三区四区五区在线视频 | 日韩 欧美 二区 | 午夜精品久久久 | 91精品久久久久久久久中文字幕 | 综合久久久久久久 | 一级中国毛片 | 国产精品一区二区三区在线 | 99精品国产一区二区三区 | 羞羞视频在线观免费观看 | japanhd成人 | 成人午夜视频在线观看 | 成人精品一区二区三区四区 | 成人深夜小视频 | 日韩欧美二区 | 久久久久国产精品午夜一区 | 成人羞羞国产免费视频 | 一级片av | 日韩高清电影 | 欧美13videosex性极品 | 天天躁日日躁狠狠的躁天龙影院 | 亚洲网站在线观看 | 一区二区国产在线 | 国产欧美日韩综合精品一 | 亚洲欧美日韩激情 | 黄网站涩免费蜜桃网站 |