【51單片機(jī)系列】DS18B20溫度傳感器擴(kuò)展實(shí)驗(yàn)之設(shè)計(jì)一個智能溫控系統(tǒng)

本文是關(guān)于DS18B20溫度傳感器的一個擴(kuò)展實(shí)驗(yàn)。

本擴(kuò)展實(shí)驗(yàn)實(shí)現(xiàn)的功能:利用DS18B20設(shè)計(jì)一個智能溫度控制系統(tǒng),具有溫度上下限值設(shè)定怜珍。當(dāng)溫度高于上限值時,電機(jī)開啟凤粗,同時蜂鳴器報(bào)警酥泛;當(dāng)溫度低于下限值時繼電器工作加熱今豆,同時蜂鳴器報(bào)警,當(dāng)溫度處于上下限間正常工作柔袁。

首先系統(tǒng)運(yùn)行后呆躲,可以通過按鍵設(shè)置溫度上下限,當(dāng)按下開始運(yùn)行按鍵后溫控系統(tǒng)開始工作捶索。默認(rèn)溫度上下限為23~25°C插掂。溫控系統(tǒng)開始運(yùn)行后會在數(shù)碼管中顯示當(dāng)前溫度。

使用到的硬件資源有:

  • 獨(dú)立按鍵腥例;
  • 蜂鳴器+ULN2003辅甥;
  • 直流電機(jī);
  • 繼電器燎竖;
  • 共陰極數(shù)碼管+74HC128+74HC245璃弄;
  • DS18B20溫度傳感器;

一构回、相關(guān)元件介紹

當(dāng)按鍵按下時夏块,按鍵兩端管腳電平一致,按鍵處理時需要延時消抖+二次確認(rèn)纤掸。

要驅(qū)動蜂鳴器發(fā)聲脐供,分為有源蜂鳴器和無源蜂鳴器。對于有源蜂鳴器控制其中一端管腳為高電平或低電平即可發(fā)聲茁肠;對于無源蜂鳴器患民,需要一定頻率的脈沖才可發(fā)聲。驅(qū)動蜂鳴器需要比較大的電流垦梆,使用ULN2003芯片實(shí)現(xiàn)放大電流的功能匹颤。本實(shí)驗(yàn)使用有源蜂鳴器。

要驅(qū)動直流電機(jī)轉(zhuǎn)動托猩,在其一端管腳輸入高電平印蓖,另一端管腳輸入低電平,使直流電機(jī)有電流通過即可轉(zhuǎn)動京腥,高低電平在不同位置赦肃,僅控制轉(zhuǎn)動的方向。要驅(qū)動直流電機(jī)也需要比較大的電流公浪,使用ULN2003芯片實(shí)現(xiàn)放大電流的功能他宛。

使用一個PNP三極管驅(qū)動繼電器,添加一個二極管用于保護(hù)繼電器欠气。

使用74HC138芯片控制數(shù)碼管的位選厅各,74HC245控制數(shù)碼管的段選。

DS1302溫度傳感器是單總線通信预柒,不需要外圍元件队塘。具有可編程的分辨率袁梗,內(nèi)含64位的ROM(64位的序列號,識別當(dāng)前使用的芯片)憔古、一個包含9字節(jié)的高速暫存器RAM和一個非易失性可電擦除EEPROM遮怜。

不考慮64位ROM序列號,DS1302讀取溫度過程:初始化→發(fā)送CCH命令跳過ROM→發(fā)送溫度轉(zhuǎn)換命令44H→延時→初始化→發(fā)送CCH命令跳過ROM→發(fā)送讀RAM命令BEH→連續(xù)讀出數(shù)據(jù)鸿市。

設(shè)置溫度上下限過程:初始化→發(fā)送CCH命令跳過ROM→發(fā)送48H命令將RAM2锯梁、3字節(jié)的內(nèi)容復(fù)制到EEPROM中→延時→初始化→發(fā)送CCH命令跳過ROM→發(fā)送4EH命令將溫度限值寫入RAM→發(fā)送連個字節(jié)的數(shù)據(jù)。

二焰情、實(shí)驗(yàn)分析

本實(shí)驗(yàn)實(shí)現(xiàn)的是一個溫度控制系統(tǒng)涝桅,當(dāng)溫度超過設(shè)定范圍時觸發(fā)一定操作。溫度超過上限時烙样,電機(jī)開啟同時蜂鳴器報(bào)警;溫度低于下限時蕊肥,繼電器工作同時蜂鳴器報(bào)警谒获;溫度處于上下限之間時,系統(tǒng)正常工作壁却。系統(tǒng)通過按鍵調(diào)節(jié)上限批狱、下限和工作開始或停止。

本系統(tǒng)的需求包括:

  • 按鍵控制系統(tǒng)的開始和停止展东;
  • 按鍵調(diào)節(jié)上限和下限赔硫;
  • 溫度超過范圍報(bào)警,溫度在范圍內(nèi)正常工作盐肃;
  • 調(diào)節(jié)溫度上下限時對應(yīng)的上下限溫度會顯示在數(shù)碼管中爪膊;
  • 系統(tǒng)工作時的溫度實(shí)時顯示在數(shù)碼管中;

三砸王、proteus原理圖設(shè)計(jì)

proteus仿真原理圖如下推盛。P3.0~P3.3口控制獨(dú)立按鍵K1 ~ K4,P3.0 ~ 03.3口為低電平時表示按鍵按下谦铃。K1向上調(diào)溫度上限耘成,K2向下調(diào)溫度下限,按K3確定溫度的上下限驹闰,按K4 溫度控制系統(tǒng)開始工作瘪菌。P3.7口作為溫度傳感器DS18B20的輸入/輸出。

通過ULN2003芯片起到放大電流的作用嘹朗,用來控制蜂鳴器师妙、繼電器和直流電機(jī)。P1.0控制直流電機(jī)骡显,P1.0為高電平時直流電機(jī)工作疆栏,為低電平時直流電機(jī)不工作曾掂。P1.5控制蜂鳴器,P1.5為低電平是蜂鳴器不發(fā)聲壁顶,為高電平時蜂鳴器發(fā)聲珠洗。P1.1口控制繼電器,P1.1為低電平時繼電器工作若专,為高電平時繼電器不工作许蓖。

獨(dú)立按鍵-溫度傳感器-蜂鳴器-直流電機(jī)-繼電器模塊

P0口通過74HC245控制數(shù)碼管的段選,P2.2~P2.4通過74HC138控制數(shù)碼管的位選调衰。P0口為高電平時膊爪,對應(yīng)數(shù)碼管的段亮。

共陰極數(shù)碼管模塊

四嚎莉、軟件設(shè)計(jì)

按鍵函數(shù)處理如下:

void DataPros()
{
    int temp=curTmp*100;
    if(temp<0)
    {
        display[0]=0x40;  // -
    } 
    else
    {
        display[0]=0x00;
    }
    display[1]=smg[temp%10000/1000];
    display[2]=smg[temp%1000/100]|0x80;  // |0x80顯示小數(shù)點(diǎn)
    display[3]=smg[temp%100/10];
    display[4]=smg[temp%10/1];
    display[5]=0x39;
    
}

// 按鍵處理函數(shù)
void KeyPros()
{
    u8 i;
    // K1上調(diào)溫度上限
    if(0==K1)
    {
        delay1ms(10);
        if(0 == K1)
        {
            tmpH=tmpH+1;
            if(tmpH>125)
                tmpH=125;
            curTmp=tmpH;
            DataPros();
        }
        while(!K1);
    }
    
    // K2下調(diào)溫度下限
    if(0==K2)
    {
        delay1ms(10);
        if(0 == K2)
        {
            tmpL=tmpL-1;
            if(tmpL<-55)
                tmpL=-55;
            curTmp=tmpL;
            DataPros();
        }
        while(!K2);
    }
    
    // 按K4米酬,系統(tǒng)開始運(yùn)行,讀取當(dāng)前溫度趋箩,判斷是否超過溫度范圍
    if(0==K4)
    {
        delay1ms(10);
        if(0==K4)
        {
            enRead=~enRead;
            if(0==enRead)
            {
                for(i=0;i<8;i++)
                {
                    display[i]=0;
                }
            }
        }
        while(!K4);
    }
}

溫度處理函數(shù)如下:

// 溫度處理函數(shù)
void TempPros(int temp)
{
    float tp;
    if(temp<0)
    {
        display[0]=0x40;  // -
        temp=temp-1;
        temp=~temp;
        tp=temp;
        temp=tp*0.0625*100+0.5;
    }
    else
    {
        display[0]=0x00;
        tp=temp;
        temp=tp*0.0625*100+0.5;
    }
    
    // 如果溫度超過上限赃额,蜂鳴器發(fā)聲,電機(jī)轉(zhuǎn)動
    if((tp*0.0625)>tmpH)
    {
        BEEP=1;
        MOTOR=1;
        RELAY=1;
        
    }
    else if((tp*0.0625)<tmpL)  // 如果溫度低于下限叫确,蜂鳴器發(fā)聲跳芳,繼電器工作
    {
        BEEP=1;
        MOTOR=0;
        RELAY=0;
    }
    else
    {
        BEEP=0;
        MOTOR=0;
        RELAY=1;
    }
    
    display[1]=smg[temp%10000/1000];
    display[2]=smg[temp%1000/100]|0x80;  // |0x80顯示小數(shù)點(diǎn)
    display[3]=smg[temp%100/10];
    display[4]=smg[temp%10/1];
    display[5]=0x39;
}

主函數(shù):

void main()
{
    enRead=0;
    BEEP=0;
    MOTOR=0;
    RELAY=1;

    while(1)
    {
        if(0!=enRead)
            TempPros(DS18B20ReadTemp());  // 系統(tǒng)運(yùn)行時默認(rèn)數(shù)碼管不顯示,當(dāng)按了K4時顯示實(shí)時溫度
        KeyPros();
        DigDisplay();
    }
}

仿真結(jié)果:

溫度控制系統(tǒng)仿真結(jié)果
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末竹勉,一起剝皮案震驚了整個濱河市飞盆,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌次乓,老刑警劉巖吓歇,帶你破解...
    沈念sama閱讀 219,539評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異檬输,居然都是意外死亡照瘾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,594評論 3 396
  • 文/潘曉璐 我一進(jìn)店門丧慈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來析命,“玉大人,你說我怎么就攤上這事逃默【榉撸” “怎么了?”我有些...
    開封第一講書人閱讀 165,871評論 0 356
  • 文/不壞的土叔 我叫張陵完域,是天一觀的道長软吐。 經(jīng)常有香客問我,道長吟税,這世上最難降的妖魔是什么凹耙? 我笑而不...
    開封第一講書人閱讀 58,963評論 1 295
  • 正文 為了忘掉前任姿现,我火速辦了婚禮,結(jié)果婚禮上肖抱,老公的妹妹穿的比我還像新娘备典。我一直安慰自己,他們只是感情好意述,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,984評論 6 393
  • 文/花漫 我一把揭開白布提佣。 她就那樣靜靜地躺著,像睡著了一般荤崇。 火紅的嫁衣襯著肌膚如雪拌屏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,763評論 1 307
  • 那天术荤,我揣著相機(jī)與錄音倚喂,去河邊找鬼。 笑死瓣戚,一個胖子當(dāng)著我的面吹牛务唐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播带兜,決...
    沈念sama閱讀 40,468評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吨灭!你這毒婦竟也來了刚照?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤喧兄,失蹤者是張志新(化名)和其女友劉穎无畔,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吠冤,經(jīng)...
    沈念sama閱讀 45,850評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡浑彰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,002評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拯辙。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片郭变。...
    茶點(diǎn)故事閱讀 40,144評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖涯保,靈堂內(nèi)的尸體忽然破棺而出诉濒,到底是詐尸還是另有隱情,我是刑警寧澤夕春,帶...
    沈念sama閱讀 35,823評論 5 346
  • 正文 年R本政府宣布未荒,位于F島的核電站,受9級特大地震影響及志,放射性物質(zhì)發(fā)生泄漏片排。R本人自食惡果不足惜寨腔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,483評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望率寡。 院中可真熱鬧迫卢,春花似錦、人聲如沸勇劣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,026評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽比默。三九已至幻捏,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間命咐,已是汗流浹背篡九。 一陣腳步聲響...
    開封第一講書人閱讀 33,150評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留醋奠,地道東北人榛臼。 一個月前我還...
    沈念sama閱讀 48,415評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像窜司,于是被迫代替她去往敵國和親沛善。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,092評論 2 355