熱水器上水報警器 一、實驗目的 1. 了解水流量傳感器工作原理 2. 學會使用水流量傳感器檢測水流量 3. 會使用八段數碼管顯示熱水器水箱水量百分比 4. 學會使用蜂鳴器發出報警聲 二、實驗設備 1. 51單片機實驗板,以及電源線、下載線、杜邦線等 2. 水流量傳感器、蜂鳴器、數碼管顯示模塊 三、實驗項目要求 經常會看到某家屬樓外墻排水管水嘩嘩的流著,原來是某家太陽能熱水器上水忘記關閥門了,水白白浪費掉,非常可惜!為解決太陽能熱水器上水忘記關閥門問題,請設計一款熱水器上水報警器。該報警器通過水流量傳感器檢測上水的體積,并顯示已上水的體積占總體積的百分比(最大值為100),當水上滿后,啟動蜂鳴器報警提醒用戶關閉上水水閥。假設熱水器總容量為5升。 請按要求設計一個可行方案,包括設備選型、系統連接圖等,并編寫程序實現上述功能。 四、實驗步驟 1. 設計方案 ①方案:采用水流量傳感器來測上水的體積,把檢測到的體積送給單片機進行處理,讓數碼管顯示已上水多少,如果上水已經有1升了,蜂鳴器報警提示用戶關閉上水閥 ②設備選型: 水流量傳感器
水流量傳感器主要由塑料閥體 、水流轉子組件和 霍爾傳感器組成。它裝在熱水器進水端,用于檢測進 水流量,當水通過水流轉子組件時,磁性轉子轉動并 且轉速隨著流量變化而變化,霍爾傳感器輸出相應脈沖信號,反饋給控 制器,由控制器判斷水流量的大小,進行調控。 接線方式: 1 紅 IN 接正極 2 黃 OUT 信號輸出線(輸出波形圖: 方波) 3 黑 GND 接負極 脈沖信號頻率與水流量的關系: f=7.5q f—脈沖信號頻率,Hz;q—水流量,L/min ③系統連接圖: 
源程序: - Main.c
- //本工程基于普中單片機開發板,晶振12MHz
- #include <config.h>
- #include <1602.h>
- sbit beep=P1^5;//蜂鳴器
- u8 K=0; //統計T1中斷次數,中斷20次為1秒
- u16 n=0;//1秒后的T0計數值,即1秒后流量傳感器轉動圈數
- void delay_us(u16 n)//微秒延時
- {
- while(--n);
- }
- void delay_ms(u16 x)//毫秒延時函數
- {
- u16 i,j;
- for(i=0;i<x;i++)
- for(j=0;j<115;j++);
- }
- void Alarm(u8 t) //蜂鳴器報警,持續t秒,軟件延時
- {
- u8 k;
- u16 i,j;
- for(k=0;k<t;k++)
- {
- for(i=0;i<119;i++)//叮
- { beep=0;delay_us(50);beep=1;delay_us(50); }
- for(j=0;j<88;j++)//咚
- { beep=0;delay_us(110);beep=1;delay_us(110);}
- }
- }
- void ET_Init()//定時器計數器初始化
- {
- //T0工作于計數器模式,以流量傳感器輸出為外部計數脈沖,計數初值為0
- //T1工作于定時器模式,定時50ms,中斷20次,為1秒
- //每隔1秒讀出T0的計數值,即為1秒鐘流量傳感器轉動圈數
- K=0; //統計T1中斷次數,中斷20次為1秒
- TMOD=0X15;//計數器T0工作方式1、軟啟動、計數;定時器1工作方式1、軟啟動、定時
- TH0=0; //T0計數初值為0
- TL0=0;
- TH1=19664/256;//T1計數初值19664,晶振11.0592MHz,定時50ms,計數值45872,計數初值19664
- TL1=19664%256;
- EA=1; //中斷總允許
- ET1=1; //T1中斷允許
- TR0=1; //啟動計數器T0
- TR1=1; //啟動定時器T1
- }
- void main()
- {
- float q;//流量,單位:升/分鐘
- float v=0;//水量,單位:升
- u8 print[10];
- LCD1602_Init(); //1602初始化
- while(1) //每隔1s統計一次流量
- {
- ET_Init(); //定時器計數器初始化
- LCD1602_disstr("liuliang",0,0);
- while(K<20);//等待1s
- q=n*60/7.5; //計算流量,單位:轉/分鐘
- v=v+q/60;
- if(v>50)
- {
- Alarm(5);
- v=50;
- }
- sprintf(print,"%.1f",v*2);
- LCD1602_disstr(print,1,0);
- LCD1602_disch('%');
- }
- }
- void T1_INT() interrupt 3
- {
- K++; //每中斷一次(50ms),計數值加1,中斷20次即為1s
- if(K==20)
- {
- TR0=0; //關閉計數器0
- TR1=0; //關閉定時器1
- n=TH0;
- n=n*256+TL0; //1秒后的T0計數值,即1秒后流量傳感器轉動圈數
- }
- else
- {
- TH1=19664/256;//不足20次時,重裝初值,繼續計時
- TL1=19664%256;
- }
- }</font>
復制代碼 將hex文件下載到實驗板運行,描述實驗現象
實驗現象:
水流量傳感器檢測到的上水體積,然后上水體積除以5升,再乘以100,得到的結果實時送給單片機的數碼管進行顯示,并且當數碼管顯示的數據大于50時,蜂鳴器發出報警聲。
實驗總結
通過本次實驗大致了解了水流量傳感器工作原理,學會了使用水流量傳感器檢測水流量的編程性思維。
|