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

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

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

提醒人們喝熱飲的記憶杯墊制作(原理圖+源代碼+制作過程)

  [復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:94097 發(fā)表于 2015-10-30 15:05 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式


這次作品的設(shè)計初衷是源自個人的生活經(jīng)驗,希望和我有著一樣麻煩的技術(shù)宅會喜歡這個設(shè)計。當(dāng)代快節(jié)奏的工作生活中,忙忙碌碌總使得我們疲憊不堪,一杯熱咖啡,一杯溫水也許是現(xiàn)代都市人最便捷的放松方式。對于長期坐在電腦前的技術(shù)宅來說,一杯熱飲除了可以補充我們必須的水分,也可以使我們適當(dāng)?shù)男№?/font>

筆者作為職業(yè)碼農(nóng),卻常常遇到這樣的困擾:早上沖好的咖啡,放著放著就涼了,同事胃不好,需要喝溫水,可一忙就忘記了,常常是整杯水都放涼了才想起。想必每個人都有這樣的經(jīng)歷,這次的設(shè)計,就是給大家解決這一問題,除了可以節(jié)約水資源,還能及時提醒人們飲用熱飲,喜歡喝熱飲的朋友,以后不必再因為冷卻的熱飲而苦皺眉頭了!
工作原理:
值得補充的是,這次的杯墊是用廢棄的光盤制作的(無意中給華碩做廣告了),中間的硬幣就是導(dǎo)熱材料,下面涂了硅脂,和DS18B20粘在一起。DS18B20就是這次設(shè)計的核心,通過感應(yīng)溫度、并記錄溫度達到提醒人們喝熱飲的功能。在使用非隔熱杯子的前提下(材料不限,只要不是隔熱的),杯子內(nèi)液體的溫度勢必會影響杯子表層溫度,雖然我們不確定杯子表層溫度的具體數(shù)值,但可以肯定的是,杯子的溫度是和里面液體的溫度是正比的。根據(jù)這個原理,當(dāng)使用者覺得某個時刻的熱飲溫度剛剛好適合自己飲用時,就把杯子放到杯墊上,稍等五六秒鐘,給DS18B20一點時間來升溫,然后按下“記憶”鍵,此時杯子外部的溫度就被記錄到了單片機的eeprom里了,即便是斷電后,此數(shù)據(jù)仍會存在。
當(dāng)下次沖好了一杯咖啡,就可以把杯子放到杯墊上面了,溫度傳感器會將采集到的溫度T值與eeprom里的數(shù)值A做比較,當(dāng)A-1 < T < A+1 時,杯墊側(cè)面的八個二極管就會閃爍,以此來提示主人喝咖啡!
溫度的差值也可以根據(jù)設(shè)計者自行改變,比如在比較寒冷的地區(qū),TA的差值可以通過改變程序來實現(xiàn),我在南方,實際測試的時候發(fā)現(xiàn)TA的值在正負(fù)1之間就足夠了。
記憶鍵在向單片機記錄溫度數(shù)據(jù)的時候,也會擦除之前的數(shù)據(jù),這樣一個按鈕就可以完成杯墊的操作。
作為單片機系統(tǒng)來說,其實就是DS18B20eeprom的應(yīng)用,國產(chǎn)的stc單片機大多數(shù)都自帶了一定大小的eeprom,這就給設(shè)計者帶來了極大的方便。為了讓電路更加簡潔,這次選用的是STC11F04E1T單片機,具備4K的程序存儲空間和1Keeprom空間,20管腳的封裝設(shè)計大大減小了PCB面積。下面就是原理圖:
程序設(shè)計:
這里要做出說明的是,大多數(shù)DS18B20程序代碼都是12T單片機下設(shè)計的,而1T單片機指令速度要比12T單片機快很多,這就導(dǎo)致了DS18B20程序不能直接拿來調(diào)用。筆者根據(jù)stc的官方資料,通過計算指令外加邏輯分析儀測試的方式,得出的結(jié)論是,11系列的1T單片機要比12T單片機指令快6.5倍左右,根據(jù)這個數(shù)據(jù)來修改原始DS18B20程序的延時程序和eeprom程序,這樣就能保證系統(tǒng)的穩(wěn)定性。
STC的官方資料很明確的給出了eeprom的原始程序,筆者根據(jù)自己的理解,對官方程序作了一些改動,為了使程序更加簡潔,應(yīng)用了C語言的宏定義,自己也是做了對應(yīng)的庫文件,方便實用,F(xiàn)在的程序代碼略長,我整理后會補發(fā)。原理圖我是用proteus畫的,并不是實物中的STC11F04E單片機,但端口是通用的,只需要根據(jù)原理圖對應(yīng)STC11F04E單片機連線即可。程序公開情況請關(guān)注工作室騰訊微博:Chinked-out@136678431)。
制作過程:
一、準(zhǔn)備工作
1

1、像圖1中這樣,給DS18B20接好導(dǎo)線,并做好絕緣。

2
2、利用易拉罐,剪出兩個直徑在3.5CM左右的圓形
3
3、準(zhǔn)備圖3中這種較厚的雙面膠,五金店里都有賣,很便宜
4、根據(jù)原理圖焊接好的電路板,由于電路很簡單,這里我就不做過多解釋了。
二、組裝
4
1、像圖4這樣,用雙面膠粘好溫度傳感器和一個金屬原片
5
2、如圖5,把剛剛步驟中的圓片粘在光盤上,注意是溫度傳感器在光盤中間的圓孔位置。
6
3、把光盤反過來,由于另一面已經(jīng)固定好了,就可以直接涂硅脂了,可以多涂點,保證下一步的順利
7
4、然后把四周涂有502膠水的金屬圓片像圖中那樣粘在光盤中間(因為大多數(shù)杯子的底部都是凹進去的,所以為了增加接觸面,可以用有一定厚度的金屬,比如一元硬幣,視頻中的實物就是硬幣)
8 9

待膠水干后,就可以在光盤的地面操作了,將電池盒(7號)和電路板粘在光盤上,用前文說的這種雙面膠效果很好的,不僅粘的結(jié)實,還可以調(diào)整高度,保證光盤翻過來放置時是水平的。

源代碼:
  1. #include "stc11fxx.h"
  2. #include "INTRINS.H"
  3. #include "basic.h"
  4. #include "STC11Fxx_IAP.H"
  5. #define Address        0x0200

  6. sbit DQ=P3^7;
  7. sbit key1 = P3^5;       
  8. sbit key2 = P3^4;
  9. sbit key3 = P3^3;              
  10. Word temp,t1,t2;                 
  11. Byte m,n,w,p;
  12. void delay(Word i);
  13. void Init_DS18B20();
  14. Byte ReadOneChar();
  15. Byte WriteOneChar(Byte dat);
  16. void tmpchange();
  17. void tmp();
  18. void display();
  19. void UartInit();
  20. void Delay500ms();
  21. void Delay150ms();
  22. void Delay50ms();
  23. void IAP_Wait ();
  24. Byte IAP_Read (Word addr);
  25. void IAP_Program (Word addr,Byte dat);
  26. void IAP_Erase (Word addr);
  27. void key();
  28. void Delay180ms();

  29. void main()
  30. {
  31.   Delay180ms();
  32. // P1=0x00;
  33.   w=IAP_Read(Address);
  34.    do
  35.    {
  36.      tmpchange();      
  37.      tmp();  
  38.          display();
  39.      P1=temp;
  40.          key();
  41.    }
  42.      while(1);
  43. }
  44. /*        延時子程序                   */  
  45. void delay(Word i)      //delay   
  46.    {
  47.       while(i--);
  48.    }  
  49. /*          初始化ds18b2子函數(shù)*                 */
  50. void Init_DS18B20()
  51.   {                                                                                
  52.      DQ = 0;               //單片機將DQ拉低
  53.      delay(390);            //精確延時 大于 480us
  54.      DQ = 1;               //拉高總線
  55.          delay(130);
  56.   }
  57. /*              讀字節(jié)子函數(shù)                     */
  58. Byte ReadOneChar()
  59.   {
  60.      Byte i = 0;
  61.      Byte dat = 0;
  62.    for (i=8;i>0;i--)
  63.     {
  64.       DQ = 0;              // 給脈沖信號
  65.       dat>>=1;             // 數(shù)據(jù)右移一位
  66.       DQ = 1;              // 給脈沖信號
  67.       if(DQ)               // DQ為1
  68.       dat|=0x80;          // 讀出數(shù)據(jù)
  69.       delay(45);            // 延時
  70.      }
  71.    return(dat);
  72.   }
  73. /*               寫字節(jié)子函數(shù)                    */
  74. Byte WriteOneChar(Byte dat)
  75.   {
  76.     Word i = 0;
  77.     for (i=8; i>0; i--)
  78.      {
  79.        DQ = 0;
  80.        DQ = dat&0x01;   //寫入一位數(shù)據(jù)
  81.        delay(45);
  82.        DQ = 1;
  83.        dat>>=1;        //右移一位數(shù)據(jù)
  84.      }
  85.          return(dat);
  86.   }
  87. /*         發(fā)送溫度轉(zhuǎn)換命令               */
  88. void tmpchange()          // DS18B20 begin change   
  89. {
  90.   Init_DS18B20();             // 初始化DS18B20
  91.   WriteOneChar(0xcc);         // 跳過序列號命令
  92.   WriteOneChar(0x44);         // 發(fā)送溫度轉(zhuǎn)換命令
  93. }
  94. /*            讀出溫度函數(shù)                */
  95. void tmp()                    //get the temperature
  96. {
  97.   Init_DS18B20();             // 初始化ds18b2子函數(shù)  
  98.   WriteOneChar(0xcc);         // 跳過ROM命令
  99.   WriteOneChar(0xbe);         // 發(fā)送讀取數(shù)據(jù)命令
  100.   m=ReadOneChar(); // 連續(xù)讀兩個字節(jié)數(shù)據(jù)
  101.   n=ReadOneChar();
  102.   temp=n;
  103.   temp<<=8;                                                
  104.   temp=temp|m;     // 兩字節(jié)合成一個整型變量。
  105.   temp=temp>>4;
  106. }  
  107. void Delay180ms()                //@11.0592MHz
  108. {
  109.         unsigned char i, j, k;

  110.         i = 8;
  111.         j = 145;
  112.         k = 99;
  113.         do
  114.         {
  115.                 do
  116.                 {
  117.                         while (--k);
  118.                 } while (--j);
  119.         } while (--i);
  120. }
  121. void IAP_Wait ()
  122. {
  123. IAP_CONTR = 0;
  124. IAP_CMD   = 0;
  125. IAP_TRIG  = 0;
  126. IAP_ADDRH = 0;
  127. IAP_ADDRL = 0;
  128. }
  129. Byte IAP_Read (Word addr)
  130. {
  131. Byte dat;

  132. Set_IAP_CMD(Read);                          
  133. Set_IAP_addr;
  134. Set_IAP_On;

  135. dat=IAP_DATA;

  136. IAP_Wait();

  137. return dat;
  138. }
  139. void IAP_Program (Word addr,Byte dat)
  140. {
  141.   Set_IAP_CMD(Program);
  142.   Set_IAP_addr;

  143.   IAP_DATA=dat;

  144.   Set_IAP_On;

  145.   IAP_Wait();

  146. }
  147. void IAP_Erase (Word addr)
  148. {
  149.   Set_IAP_CMD(Erase);
  150.   Set_IAP_addr;
  151.   Set_IAP_On;

  152.   IAP_Wait();

  153. }
  154. void key()
  155. {
  156.   if(key1==0)
  157.   {
  158.    Delay180ms();
  159.    if(key1==0)
  160.    {
  161.         IAP_Erase(Address);         
  162.     IAP_Program(Address,temp);  
  163.     p=IAP_Read(Address);
  164.    }
  165.   }
  166.    loop:if(key2==0)
  167.   {
  168.     p=IAP_Read(Address);
  169.         P1=p;
  170.     goto loop;
  171.   }
  172. }
  173. void display()
  174.   {
  175.   //loop2:
  176.    w=IAP_Read(Address);
  177.    tmpchange();      //溫度轉(zhuǎn)換
  178.    tmp();
  179.    t1=temp;
  180.    Delay150ms();
  181.    tmpchange();      //溫度轉(zhuǎn)換
  182.    tmp();
  183.    if(temp<t1)
  184.    {
  185.    if((w-1)<temp&&temp<(w+1))
  186.   {
  187.    loop2:
  188.    P1=0xaa;
  189.    Delay150ms();
  190.    P1=0x55;
  191.    Delay150ms();
  192.    goto loop2;
  193.   }
  194.   }
  195.   }
  196.   
  197. void Delay150ms()                //@11.0592MHz
  198. {
  199.         unsigned char i, j, k;

  200.         i = 7;
  201.         j = 78;
  202.         k = 167;
  203.         do
  204.         {
  205.                 do
  206.                 {
  207.                         while (--k);
  208.                 } while (--j);
  209.         } while (--i);
  210. }
  211. void Delay50ms()                //@11.0592MHz
  212. {
  213.         unsigned char i, j, k;

  214.         i = 3;
  215.         j = 26;
  216.         k = 223;
  217.         do
  218.         {
  219.                 do
  220.                 {
  221.                         while (--k);
  222.                 } while (--j);
  223.         } while (--i);
  224. }
復(fù)制代碼

原理圖與完整源代碼下載: 記憶杯墊(含源代碼).zip (70.19 KB, 下載次數(shù): 174)



評分

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

查看全部評分

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

使用道具 舉報

沙發(fā)
ID:94875 發(fā)表于 2015-11-6 15:13 | 只看該作者
感謝樓主 51黑論壇有你更精彩。!
回復(fù)

使用道具 舉報

板凳
ID:74079 發(fā)表于 2015-11-9 16:07 | 只看該作者
感謝樓主
回復(fù)

使用道具 舉報

地板
ID:92231 發(fā)表于 2015-11-16 11:10 來自手機 | 只看該作者
我改用stc15f104w八腳制作,體積很小,DQ3.4,key3.3,beep3.5,led3.2,試驗成功,感謝樓主開源!
回復(fù)

使用道具 舉報

5#
ID:92231 發(fā)表于 2015-11-16 11:13 來自手機 | 只看該作者
菜鳥一個,這段時間學(xué)習(xí)用DS18B20制作溫控編程,這例子很有參考價值
回復(fù)

使用道具 舉報

6#
ID:114802 發(fā)表于 2016-4-17 20:53 | 只看該作者
很好的創(chuàng)意,可以試著做一個
回復(fù)

使用道具 舉報

7#
ID:98607 發(fā)表于 2016-4-18 19:21 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

8#
ID:118924 發(fā)表于 2016-5-6 19:24 | 只看該作者
請問這里面的74HC245的作用是什么呢
回復(fù)

使用道具 舉報

9#
ID:118924 發(fā)表于 2016-5-6 19:26 | 只看該作者
請問這里的74hc245的作用是什么呢
回復(fù)

使用道具 舉報

10#
ID:120112 發(fā)表于 2016-5-11 18:50 | 只看該作者

很好的創(chuàng)意,可以試著做一個
回復(fù)

使用道具 舉報

11#
ID:118644 發(fā)表于 2016-5-13 18:49 | 只看該作者

感謝樓主分享。。
回復(fù)

使用道具 舉報

12#
ID:112990 發(fā)表于 2016-5-15 17:55 | 只看該作者
感謝樓主分享。。
回復(fù)

使用道具 舉報

13#
ID:379735 發(fā)表于 2018-7-27 09:59 | 只看該作者
樓主你好,
教程
回復(fù)

使用道具 舉報

14#
ID:352696 發(fā)表于 2018-9-25 15:59 | 只看該作者
樓主你好,你這個可以當(dāng)畢設(shè)嗎
回復(fù)

使用道具 舉報

15#
ID:409217 發(fā)表于 2018-10-13 21:45 | 只看該作者
很給力
回復(fù)

使用道具 舉報

16#
ID:408289 發(fā)表于 2018-10-15 13:51 | 只看該作者
51黑論壇有你更精彩!!!
回復(fù)

使用道具 舉報

17#
ID:425302 發(fā)表于 2018-11-12 21:19 | 只看該作者
很給力
回復(fù)

使用道具 舉報

18#
ID:426341 發(fā)表于 2018-11-15 16:48 | 只看該作者
謝謝樓主,創(chuàng)意不錯   等做完了來反饋一下
回復(fù)

使用道具 舉報

19#
ID:425302 發(fā)表于 2018-12-24 17:47 | 只看該作者
樓主大大,我可以用這個當(dāng)畢業(yè)設(shè)計嗎,謝謝
回復(fù)

使用道具 舉報

20#
ID:96470 發(fā)表于 2018-12-26 17:39 | 只看該作者
這是個好主意,學(xué)習(xí)。
回復(fù)

使用道具 舉報

21#
ID:456001 發(fā)表于 2018-12-26 23:35 | 只看該作者
51黑論壇有你更精彩。。
回復(fù)

使用道具 舉報

22#
ID:472844 發(fā)表于 2019-6-8 16:55 | 只看該作者
謝謝分享
回復(fù)

使用道具 舉報

23#
ID:429772 發(fā)表于 2019-6-26 14:40 | 只看該作者
感謝樓主 51黑論壇有你更精彩。!
回復(fù)

使用道具 舉報

24#
ID:673647 發(fā)表于 2023-3-10 10:05 | 只看該作者
謝謝分享,如果還帶保溫功能就更好了!
回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 日本久久福利 | 91视频中文| 亚洲午夜视频在线观看 | 高清免费av| 美女视频一区二区三区 | 99综合 | 国产小视频在线 | 中文字幕免费视频 | 中文字幕av在线播放 | 成人精品毛片 | 日韩电影一区 | 91精品国产综合久久精品 | 99国产精品久久久久 | 97超碰在线播放 | 俺去俺来也www色官网cms | 欧美一级久久久猛烈a大片 日韩av免费在线观看 | 精品区| 天天色综网| 成人久久久 | 一区精品国产欧美在线 | 一区二区在线 | h片在线看 | 久久99精品久久久 | 操久久 | 久久久久国产精品 | 国产免费a视频 | 青青久久av北条麻妃海外网 | 国产农村妇女精品一二区 | 亚洲91av | 亚洲福利片 | 婷婷色国产偷v国产偷v小说 | 国产aa | 黄色男女网站 | 精品一二三区在线观看 | 成年网站在线观看 | 国产精品毛片久久久久久 | 一级毛片免费看 | 亚洲精品小视频在线观看 | 国产精品欧美一区二区三区不卡 | 国产一级免费视频 | 亚洲三区在线播放 |