標(biāo)題: 單片機(jī)水流量傳感器使用 熱水器上水報(bào)警器源程序 [打印本頁(yè)]

作者: fvsaegawgarg    時(shí)間: 2021-1-5 10:57
標(biāo)題: 單片機(jī)水流量傳感器使用 熱水器上水報(bào)警器源程序
熱水器上水報(bào)警器

一、實(shí)驗(yàn)?zāi)康?/strong>

1. 了解水流量傳感器工作原理

2. 學(xué)會(huì)使用水流量傳感器檢測(cè)水流量

3. 會(huì)使用八段數(shù)碼管顯示熱水器水箱水量百分比

4. 學(xué)會(huì)使用蜂鳴器發(fā)出報(bào)警聲

二、實(shí)驗(yàn)設(shè)備

1. 51單片機(jī)實(shí)驗(yàn)板,以及電源線、下載線、杜邦線等

2. 水流量傳感器、蜂鳴器、數(shù)碼管顯示模塊

三、實(shí)驗(yàn)項(xiàng)目要求

經(jīng)常會(huì)看到某家屬樓外墻排水管水嘩嘩的流著,原來(lái)是某家太陽(yáng)能熱水器上水忘記關(guān)閥門(mén)了,水白白浪費(fèi)掉,非常可惜!為解決太陽(yáng)能熱水器上水忘記關(guān)閥門(mén)問(wèn)題,請(qǐng)?jiān)O(shè)計(jì)一款熱水器上水報(bào)警器。該報(bào)警器通過(guò)水流量傳感器檢測(cè)上水的體積,并顯示已上水的體積占總體積的百分比(最大值為100),當(dāng)水上滿后,啟動(dòng)蜂鳴器報(bào)警提醒用戶關(guān)閉上水水閥。假設(shè)熱水器總?cè)萘繛?升。

請(qǐng)按要求設(shè)計(jì)一個(gè)可行方案,包括設(shè)備選型、系統(tǒng)連接圖等,并編寫(xiě)程序?qū)崿F(xiàn)上述功能。

四、實(shí)驗(yàn)步驟

1. 設(shè)計(jì)方案

①方案:采用水流量傳感器來(lái)測(cè)上水的體積,把檢測(cè)到的體積送給單片機(jī)進(jìn)行處理,讓數(shù)碼管顯示已上水多少,如果上水已經(jīng)有1升了,蜂鳴器報(bào)警提示用戶關(guān)閉上水閥

②設(shè)備選型:

水流量傳感器主要由塑料閥體 、水流轉(zhuǎn)子組件和

霍爾傳感器組成。它裝在熱水器進(jìn)水端,用于檢測(cè)進(jìn)

水流量,當(dāng)水通過(guò)水流轉(zhuǎn)子組件時(shí),磁性轉(zhuǎn)子轉(zhuǎn)動(dòng)并

且轉(zhuǎn)速隨著流量變化而變化,霍爾傳感器輸出相應(yīng)脈沖信號(hào),反饋給控              制器,由控制器判斷水流量的大小,進(jìn)行調(diào)控。

接線方式:

1 紅  IN   接正極

2 黃  OUT  信號(hào)輸出線(輸出波形圖: 方波)

3 黑  GND  接負(fù)極

脈沖信號(hào)頻率與水流量的關(guān)系:

                   f=7.5q

     f—脈沖信號(hào)頻率,Hz;q—水流量,L/min

③系統(tǒng)連接圖:

源程序:

  1. Main.c
  2. //本工程基于普中單片機(jī)開(kāi)發(fā)板,晶振12MHz
  3. #include <config.h>
  4. #include <1602.h>
  5. sbit beep=P1^5;//蜂鳴器
  6. u8 K=0; //統(tǒng)計(jì)T1中斷次數(shù),中斷20次為1秒
  7. u16 n=0;//1秒后的T0計(jì)數(shù)值,即1秒后流量傳感器轉(zhuǎn)動(dòng)圈數(shù)
  8. void delay_us(u16 n)//微秒延時(shí)
  9. {
  10.     while(--n);
  11. }
  12. void delay_ms(u16 x)//毫秒延時(shí)函數(shù)
  13. {
  14.               u16 i,j;
  15.               for(i=0;i<x;i++)
  16.                   for(j=0;j<115;j++);
  17. }
  18. void Alarm(u8 t) //蜂鳴器報(bào)警,持續(xù)t秒,軟件延時(shí)
  19. {
  20.               u8 k;
  21.               u16 i,j;                           
  22.               for(k=0;k<t;k++)
  23.               {
  24.                             for(i=0;i<119;i++)//叮
  25.                             {  beep=0;delay_us(50);beep=1;delay_us(50);  }
  26.                             for(j=0;j<88;j++)//咚
  27.                     {  beep=0;delay_us(110);beep=1;delay_us(110);}
  28.               }
  29. }
  30. void ET_Init()//定時(shí)器計(jì)數(shù)器初始化
  31. {
  32. //T0工作于計(jì)數(shù)器模式,以流量傳感器輸出為外部計(jì)數(shù)脈沖,計(jì)數(shù)初值為0
  33. //T1工作于定時(shí)器模式,定時(shí)50ms,中斷20次,為1秒
  34. //每隔1秒讀出T0的計(jì)數(shù)值,即為1秒鐘流量傳感器轉(zhuǎn)動(dòng)圈數(shù)
  35.               K=0;              //統(tǒng)計(jì)T1中斷次數(shù),中斷20次為1秒
  36.               TMOD=0X15;//計(jì)數(shù)器T0工作方式1、軟啟動(dòng)、計(jì)數(shù);定時(shí)器1工作方式1、軟啟動(dòng)、定時(shí)
  37.               TH0=0;              //T0計(jì)數(shù)初值為0
  38.               TL0=0;
  39.               TH1=19664/256;//T1計(jì)數(shù)初值19664,晶振11.0592MHz,定時(shí)50ms,計(jì)數(shù)值45872,計(jì)數(shù)初值19664
  40.               TL1=19664%256;
  41.               EA=1;  //中斷總允許
  42.               ET1=1; //T1中斷允許
  43.               TR0=1;              //啟動(dòng)計(jì)數(shù)器T0
  44.               TR1=1;              //啟動(dòng)定時(shí)器T1
  45. }
  46. void main()
  47. {
  48.               float q;//流量,單位:升/分鐘
  49.               float v=0;//水量,單位:升
  50.               u8 print[10];
  51.               LCD1602_Init();              //1602初始化
  52.               while(1) //每隔1s統(tǒng)計(jì)一次流量
  53.               {   
  54.                             ET_Init();              //定時(shí)器計(jì)數(shù)器初始化
  55.                             LCD1602_disstr("liuliang",0,0);
  56.                             while(K<20);//等待1s
  57.                             q=n*60/7.5; //計(jì)算流量,單位:轉(zhuǎn)/分鐘
  58.                             v=v+q/60;
  59.                             if(v>50)
  60.                             {
  61.                                           Alarm(5);
  62.                                           v=50;
  63.                             }
  64.                             sprintf(print,"%.1f",v*2);
  65.                             LCD1602_disstr(print,1,0);
  66.                             LCD1602_disch('%');
  67.               }
  68. }
  69. void T1_INT() interrupt 3
  70. {
  71.               K++;  //每中斷一次(50ms),計(jì)數(shù)值加1,中斷20次即為1s
  72.               if(K==20)
  73.               {
  74.                             TR0=0; //關(guān)閉計(jì)數(shù)器0
  75.                             TR1=0; //關(guān)閉定時(shí)器1
  76.                             n=TH0;
  77.                             n=n*256+TL0; //1秒后的T0計(jì)數(shù)值,即1秒后流量傳感器轉(zhuǎn)動(dòng)圈數(shù)
  78.               }
  79.               else
  80.               {
  81.         TH1=19664/256;//不足20次時(shí),重裝初值,繼續(xù)計(jì)時(shí)
  82.         TL1=19664%256;
  83.     }                                                           
  84. }</font>
復(fù)制代碼
將hex文件下載到實(shí)驗(yàn)板運(yùn)行,描述實(shí)驗(yàn)現(xiàn)象
實(shí)驗(yàn)現(xiàn)象:

水流量傳感器檢測(cè)到的上水體積,然后上水體積除以5升,再乘以100,得到的結(jié)果實(shí)時(shí)送給單片機(jī)的數(shù)碼管進(jìn)行顯示,并且當(dāng)數(shù)碼管顯示的數(shù)據(jù)大于50時(shí),蜂鳴器發(fā)出報(bào)警聲。

實(shí)驗(yàn)總結(jié)
通過(guò)本次實(shí)驗(yàn)大致了解了水流量傳感器工作原理,學(xué)會(huì)了使用水流量傳感器檢測(cè)水流量的編程性思維。







歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1