標(biāo)題:
提醒人們喝熱飲的記憶杯墊制作(原理圖+源代碼+制作過程)
[打印本頁]
作者:
愛_51黑
時(shí)間:
2015-10-30 15:05
標(biāo)題:
提醒人們喝熱飲的記憶杯墊制作(原理圖+源代碼+制作過程)
http://www.tudou.com/v/vGKS-d7Xw9Y/&resourceId=0_04_02_99/v.swf
這次作品的設(shè)計(jì)初衷是源自個(gè)人的生活經(jīng)驗(yàn),希望和我有著一樣麻煩的技術(shù)宅會(huì)喜歡這個(gè)設(shè)計(jì)。當(dāng)代快節(jié)奏的工作生活中,忙忙碌碌總使得我們疲憊不堪,一杯熱咖啡,一杯溫水也許是現(xiàn)代都市人最便捷的放松方式。對(duì)于長期坐在電腦前的技術(shù)宅來說,一杯熱飲除了可以補(bǔ)充我們必須的水分,也可以使我們適當(dāng)?shù)男№?/font>
筆者作為職業(yè)碼農(nóng),卻常常遇到這樣的困擾:早上沖好的咖啡,放著放著就涼了,同事胃不好,需要喝溫水,可一忙就忘記了,常常是整杯水都放涼了才想起。想必每個(gè)人都有這樣的經(jīng)歷,這次的設(shè)計(jì),就是給大家解決這一問題,除了可以節(jié)約水資源,還能及時(shí)提醒人們飲用熱飲,喜歡喝熱飲的朋友,以后不必再因?yàn)槔鋮s的熱飲而苦皺眉頭了!
工作原理:
值得補(bǔ)充的是,這次的杯墊是用廢棄的光盤制作的(無意中給華碩做廣告了),中間的硬幣就是導(dǎo)熱材料,下面涂了硅脂,和
DS18B20
粘在一起。
DS18B20
就是這次設(shè)計(jì)的核心,通過感應(yīng)溫度、并記錄溫度達(dá)到提醒人們喝熱飲的功能。在使用非隔熱杯子的前提下(材料不限,只要不是隔熱的),杯子內(nèi)液體的溫度勢(shì)必會(huì)影響杯子表層溫度,雖然我們不確定杯子表層溫度的具體數(shù)值,但可以肯定的是,杯子的溫度是和里面液體的溫度是正比的。根據(jù)這個(gè)原理,當(dāng)使用者覺得某個(gè)時(shí)刻的熱飲溫度剛剛好適合自己飲用時(shí),就把杯子放到杯墊上,稍等五六秒鐘,給
DS18B20
一點(diǎn)時(shí)間來升溫,然后按下“記憶”鍵,此時(shí)杯子外部的溫度就被記錄到了單片機(jī)的
eeprom
里了,即便是斷電后,此數(shù)據(jù)仍會(huì)存在。
當(dāng)下次沖好了一杯咖啡,就可以把杯子放到杯墊上面了,溫度傳感器會(huì)將采集到的溫度
T
值與
eeprom
里的數(shù)值
A
做比較,當(dāng)
A-1 < T < A+1
時(shí),杯墊側(cè)面的八個(gè)二極管就會(huì)閃爍,以此來提示主人喝咖啡!
溫度的差值也可以根據(jù)設(shè)計(jì)者自行改變,比如在比較寒冷的地區(qū),
T
與
A
的差值可以通過改變程序來實(shí)現(xiàn),我在南方,實(shí)際測(cè)試的時(shí)候發(fā)現(xiàn)
T
與
A
的值在正負(fù)
1
之間就足夠了。
記憶鍵在向單片機(jī)記錄溫度數(shù)據(jù)的時(shí)候,也會(huì)擦除之前的數(shù)據(jù),這樣一個(gè)按鈕就可以完成杯墊的操作。
作為單片機(jī)系統(tǒng)來說,其實(shí)就是
DS18B20
和
eeprom
的應(yīng)用,國產(chǎn)的
stc
單片機(jī)大多數(shù)都自帶了一定大小的
eeprom
,這就給設(shè)計(jì)者帶來了極大的方便。為了讓電路更加簡潔,這次選用的是
STC11F04E
的
1T
單片機(jī),具備
4K
的程序存儲(chǔ)空間和
1K
的
eeprom
空間,
20
管腳的封裝設(shè)計(jì)大大減小了
PCB
面積。下面就是原理圖:
程序設(shè)計(jì):
這里要做出說明的是,大多數(shù)
DS18B20
程序代碼都是
12T
單片機(jī)下設(shè)計(jì)的,而
1T
單片機(jī)指令速度要比
12T
單片機(jī)快很多,這就導(dǎo)致了
DS18B20
程序不能直接拿來調(diào)用。筆者根據(jù)
stc
的官方資料,通過計(jì)算指令外加邏輯分析儀測(cè)試的方式,得出的結(jié)論是,
11
系列的
1T
單片機(jī)要比
12T
單片機(jī)指令快
6.5
倍左右,根據(jù)這個(gè)數(shù)據(jù)來修改原始
DS18B20
程序的延時(shí)程序和
eeprom
程序,這樣就能保證系統(tǒng)的穩(wěn)定性。
STC
的官方資料很明確的給出了
eeprom
的原始程序,筆者根據(jù)自己的理解,對(duì)官方程序作了一些改動(dòng),為了使程序更加簡潔,應(yīng)用了
C
語言的宏定義,自己也是做了對(duì)應(yīng)的庫文件,方便實(shí)用,F(xiàn)在的程序代碼略長,我整理后會(huì)補(bǔ)發(fā)。原理圖我是用
proteus
畫的,并不是實(shí)物中的
STC11F04E
單片機(jī),但端口是通用的,只需要根據(jù)原理圖對(duì)應(yīng)
STC11F04E
單片機(jī)連線即可。程序公開情況請(qǐng)關(guān)注工作室騰訊微博:
Chinked-out
(
@136678431
)。
制作過程:
一、準(zhǔn)備工作
圖
1
1
、像圖
1
中這樣,給
DS18B20
接好導(dǎo)線,并做好絕緣。
圖
2
2
、利用易拉罐,剪出兩個(gè)直徑在
3.5CM
左右的圓形
圖
3
3
、準(zhǔn)備圖
3
中這種較厚的雙面膠,五金店里都有賣,很便宜
4
、根據(jù)原理圖焊接好的電路板,由于電路很簡單,這里我就不做過多解釋了。
二、組裝
圖
4
1
、像圖
4
這樣,用雙面膠粘好溫度傳感器和一個(gè)金屬原片
圖
5
2
、如圖
5
,把剛剛步驟中的圓片粘在光盤上,注意是溫度傳感器在光盤中間的圓孔位置。
圖
6
3
、把光盤反過來,由于另一面已經(jīng)固定好了,就可以直接涂硅脂了,可以多涂點(diǎn),保證下一步的順利
圖
7
4
、然后把四周涂有
502
膠水的金屬圓片像圖中那樣粘在光盤中間(因?yàn)榇蠖鄶?shù)杯子的底部都是凹進(jìn)去的,所以為了增加接觸面,可以用有一定厚度的金屬,比如一元硬幣,視頻中的實(shí)物就是硬幣)
圖
8
圖
9
待膠水干后,就可以在光盤的地面操作了,將電池盒(
7
號(hào))和電路板粘在光盤上,用前文說的這種雙面膠效果很好的,不僅粘的結(jié)實(shí),還可以調(diào)整高度,保證光盤翻過來放置時(shí)是水平的。
源代碼:
#include "stc11fxx.h"
#include "INTRINS.H"
#include "basic.h"
#include "STC11Fxx_IAP.H"
#define Address 0x0200
sbit DQ=P3^7;
sbit key1 = P3^5;
sbit key2 = P3^4;
sbit key3 = P3^3;
Word temp,t1,t2;
Byte m,n,w,p;
void delay(Word i);
void Init_DS18B20();
Byte ReadOneChar();
Byte WriteOneChar(Byte dat);
void tmpchange();
void tmp();
void display();
void UartInit();
void Delay500ms();
void Delay150ms();
void Delay50ms();
void IAP_Wait ();
Byte IAP_Read (Word addr);
void IAP_Program (Word addr,Byte dat);
void IAP_Erase (Word addr);
void key();
void Delay180ms();
void main()
{
Delay180ms();
// P1=0x00;
w=IAP_Read(Address);
do
{
tmpchange();
tmp();
display();
P1=temp;
key();
}
while(1);
}
/* 延時(shí)子程序 */
void delay(Word i) //delay
{
while(i--);
}
/* 初始化ds18b2子函數(shù)* */
void Init_DS18B20()
{
DQ = 0; //單片機(jī)將DQ拉低
delay(390); //精確延時(shí) 大于 480us
DQ = 1; //拉高總線
delay(130);
}
/* 讀字節(jié)子函數(shù) */
Byte ReadOneChar()
{
Byte i = 0;
Byte dat = 0;
for (i=8;i>0;i--)
{
DQ = 0; // 給脈沖信號(hào)
dat>>=1; // 數(shù)據(jù)右移一位
DQ = 1; // 給脈沖信號(hào)
if(DQ) // DQ為1
dat|=0x80; // 讀出數(shù)據(jù)
delay(45); // 延時(shí)
}
return(dat);
}
/* 寫字節(jié)子函數(shù) */
Byte WriteOneChar(Byte dat)
{
Word i = 0;
for (i=8; i>0; i--)
{
DQ = 0;
DQ = dat&0x01; //寫入一位數(shù)據(jù)
delay(45);
DQ = 1;
dat>>=1; //右移一位數(shù)據(jù)
}
return(dat);
}
/* 發(fā)送溫度轉(zhuǎn)換命令 */
void tmpchange() // DS18B20 begin change
{
Init_DS18B20(); // 初始化DS18B20
WriteOneChar(0xcc); // 跳過序列號(hào)命令
WriteOneChar(0x44); // 發(fā)送溫度轉(zhuǎn)換命令
}
/* 讀出溫度函數(shù) */
void tmp() //get the temperature
{
Init_DS18B20(); // 初始化ds18b2子函數(shù)
WriteOneChar(0xcc); // 跳過ROM命令
WriteOneChar(0xbe); // 發(fā)送讀取數(shù)據(jù)命令
m=ReadOneChar(); // 連續(xù)讀兩個(gè)字節(jié)數(shù)據(jù)
n=ReadOneChar();
temp=n;
temp<<=8;
temp=temp|m; // 兩字節(jié)合成一個(gè)整型變量。
temp=temp>>4;
}
void Delay180ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 8;
j = 145;
k = 99;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void IAP_Wait ()
{
IAP_CONTR = 0;
IAP_CMD = 0;
IAP_TRIG = 0;
IAP_ADDRH = 0;
IAP_ADDRL = 0;
}
Byte IAP_Read (Word addr)
{
Byte dat;
Set_IAP_CMD(Read);
Set_IAP_addr;
Set_IAP_On;
dat=IAP_DATA;
IAP_Wait();
return dat;
}
void IAP_Program (Word addr,Byte dat)
{
Set_IAP_CMD(Program);
Set_IAP_addr;
IAP_DATA=dat;
Set_IAP_On;
IAP_Wait();
}
void IAP_Erase (Word addr)
{
Set_IAP_CMD(Erase);
Set_IAP_addr;
Set_IAP_On;
IAP_Wait();
}
void key()
{
if(key1==0)
{
Delay180ms();
if(key1==0)
{
IAP_Erase(Address);
IAP_Program(Address,temp);
p=IAP_Read(Address);
}
}
loop:if(key2==0)
{
p=IAP_Read(Address);
P1=p;
goto loop;
}
}
void display()
{
//loop2:
w=IAP_Read(Address);
tmpchange(); //溫度轉(zhuǎn)換
tmp();
t1=temp;
Delay150ms();
tmpchange(); //溫度轉(zhuǎn)換
tmp();
if(temp<t1)
{
if((w-1)<temp&&temp<(w+1))
{
loop2:
P1=0xaa;
Delay150ms();
P1=0x55;
Delay150ms();
goto loop2;
}
}
}
void Delay150ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 7;
j = 78;
k = 167;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay50ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 3;
j = 26;
k = 223;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
復(fù)制代碼
原理圖與完整源代碼下載:
記憶杯墊(含源代碼).zip
(70.19 KB, 下載次數(shù): 174)
2015-10-30 15:03 上傳
點(diǎn)擊文件名下載附件
下載積分: 黑幣 -5
作者:
ida
時(shí)間:
2015-11-6 15:13
感謝樓主
51黑論壇有你更精彩!!
作者:
a610300
時(shí)間:
2015-11-9 16:07
感謝樓主
作者:
whengfu
時(shí)間:
2015-11-16 11:10
我改用stc15f104w八腳制作,體積很小,DQ3.4,key3.3,beep3.5,led3.2,試驗(yàn)成功,感謝樓主開源!
作者:
whengfu
時(shí)間:
2015-11-16 11:13
菜鳥一個(gè),這段時(shí)間學(xué)習(xí)用DS18B20制作溫控編程,這例子很有參考價(jià)值
作者:
2910475930
時(shí)間:
2016-4-17 20:53
很好的創(chuàng)意,可以試著做一個(gè)
作者:
這個(gè)好玩嗎
時(shí)間:
2016-4-18 19:21
謝謝分享
作者:
kosen
時(shí)間:
2016-5-6 19:24
請(qǐng)問這里面的74HC245的作用是什么呢
作者:
kosen
時(shí)間:
2016-5-6 19:26
請(qǐng)問這里的74hc245的作用是什么呢
作者:
cnyouw
時(shí)間:
2016-5-11 18:50
很好的創(chuàng)意,可以試著做一個(gè)
作者:
fatty0724
時(shí)間:
2016-5-13 18:49
感謝樓主分享。。
作者:
我愛你的不懂
時(shí)間:
2016-5-15 17:55
感謝樓主分享。。
作者:
權(quán)xh
時(shí)間:
2018-7-27 09:59
樓主你好,
教程
作者:
a18859921708
時(shí)間:
2018-9-25 15:59
樓主你好,你這個(gè)可以當(dāng)畢設(shè)嗎
作者:
灌溉夢(mèng)想
時(shí)間:
2018-10-13 21:45
很給力
作者:
zhaozhenrong
時(shí)間:
2018-10-15 13:51
51黑論壇有你更精彩。。
作者:
Citrus0918
時(shí)間:
2018-11-12 21:19
很給力
作者:
奕發(fā)
時(shí)間:
2018-11-15 16:48
謝謝樓主,創(chuàng)意不錯(cuò) 等做完了來反饋一下
作者:
Citrus0918
時(shí)間:
2018-12-24 17:47
樓主大大,我可以用這個(gè)當(dāng)畢業(yè)設(shè)計(jì)嗎,謝謝
作者:
sky12000
時(shí)間:
2018-12-26 17:39
這是個(gè)好主意,學(xué)習(xí)。
作者:
z353388
時(shí)間:
2018-12-26 23:35
51黑論壇有你更精彩。!
作者:
zhongzl728
時(shí)間:
2019-6-8 16:55
謝謝分享
作者:
Andy-51
時(shí)間:
2019-6-26 14:40
感謝樓主 51黑論壇有你更精彩。!
作者:
cwb2038
時(shí)間:
2023-3-10 10:05
謝謝分享,如果還帶保溫功能就更好了!
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1