在本文中,我們使用超聲波測距儀模塊和8051單片機制作一個簡單的水位控制器。該水位控制器可監測和控制深達2m的水箱,測量精度低至1cm。由于這里沒有使用機械浮球開關或電極,不會有任何機械磨損或腐蝕,這使得系統高度可靠。由于超聲波測距模塊包含大量電子元件,因此必須以任何方式適當注意將其與阻尼隔離。
一、HC-SR04超聲波測距模塊
HC-SR04是這里使用的超聲波測距模塊。HC-SR04由超聲波發射器、接收器和必要的電子設備組成,使其成為一個獨立的系統。工作原理非常簡單。它發送8個40KHz聲波脈沖,并拾取反射波。測量發送和接收之間的時間延遲,并根據等式D=TS/2計算距離。其中D是距離,T是時間延遲,S是聲速。HC-SR04的輸出將是一個寬度與距離成正比的脈沖。從數據表中,輸出信號的寬度將為58uS,距離為1cm。我們需要做的只是向模塊的觸發引腳發送一個10uS寬的觸發信號,并等待模塊的回波引腳處的輸出脈沖。
超聲波模塊的觸發引腳連接到單片機的P3.0。模塊的回聲引腳連接到單片機的P3.1。LCD模塊的數據線通過單片機的Port0接口。LCD模塊的控制線RS、RW和E分別連接到單片機的P2.7、P2.6和P2.5引腳。泵使用單片機的端口2.0進行控制。這里使用的泵是12V汽車擋風玻璃清洗泵。電源驅動的泵也將與此電路配合使用,但它們的額定電流必須與您使用的繼電器匹配。無論如何,在使用電源驅動的情況下工作時要小心避免觸電風險設備。
在這里,超聲波測距模塊放置在面向水面的水箱頂部。水反射模塊發出的超聲波脈沖。模塊拍攝反射波并測量時滯。水面和傳感器之間的距離是根據收集到的數據計算出來的,模塊輸出一個寬度與距離成正比的脈沖。單片機讀取此輸出脈沖的寬度,并對其進行必要的數學運算以獲得距離。在這里我們可以看到水位是從上到下測量的,不像大多數傳感器從下到上測量水位。這樣做是為了使該設備適用于各種深度。由于傳感器放置在水箱的頂部,我們需要從水箱的總深度中減去傳感器到水面的距離,以獲得從底部到頂部的水位。由于不同的水箱具有不同的深度,個人用戶必須手動測量水箱的深度并使用此數據更改程序。
這個問題是通過測量從上到下的水平來解決的。在這里,當液位低于頂部20cm時,設備打開泵,當液位升至距頂部5cm時關閉泵。LCD屏幕上顯示的水位實際上是從頂部開始的水面深度。
二、原理介紹
單片機的P3.0用于觸發HC-SR04超聲波模塊,單片機的P3.1用于接收回波信號。本項目使用了8051單片機的兩個定時器。Timer1在MODE2(8位自動重載)下運行,Timer0(16位)在MODE1下運行。給超聲波模塊的觸發引腳一個1uS寬的觸發信號,單片機在模塊的回波引腳等待回波信號。模塊的echopin與單片機的P3.1相連。使用JNB指令輪詢該引腳的狀態。當此引腳接收到有效回波信號時,Timer1啟動。計時器從200D計數到255D(55個計數),然后翻轉。每次翻轉后,再次檢查回聲引腳,如果存在任何回聲信號,則重新啟動定時器。
從HC-SR04的數據表中可以清楚地看出,58uS寬的回波脈沖表示1cm。這里我們實際上是在統計eco信號中58uS寬的block的數量,這個count直接表示距離的cm。由于單片機使用12MHz晶振計時,因此55計數意味著55uS。在每個定時器周期內執行的其他指令花費大約3uS,因此在每個定時器周期內總共花費58uS。定時器周期數,即;累加器中的計數表示以厘米為單位的距離。
然后對累加器值進行必要的操作,并顯示在LCD屏幕上。這里的程序設置為當液位低于頂部20cm(低液位)時打開泵,當液位上升時關閉泵從頂部到5厘米(高水平)。通過從累加器值中減去20D來識別開關ON條件。如果未設置進位標志,則表示水位距離頂部低于20cm,并且電機已接通。
如果未設置進位標志,則調用OFF子程序。在該子程序中,從累加器中存儲的值中減去5D,并使用JNC指令檢查進位標志的狀態。如果未設置進位標志,則表示液位距離頂部低于5cm,泵保持開啟。如果設置了進位標志,則表示液位距頂部5厘米以上,并且泵已關閉。
泵通過單片機的P2.0控制。使用JB指令檢查該引腳的狀態。如果此引腳為高電平,則表示泵已開啟,并且LCD上會顯示“電機開啟”狀態信息。如果P2.0引腳為低電平,則表示泵處于關閉狀態,并且LCD屏幕上顯示狀態消息“電機關閉”。
三、代碼
RS EQU P2.7 RW EQU P2.6 E EQU P2.5 ORG 00H MOV DPTR,#LUT CLR P3.0 SETB P3.1 MOV TMOD,#00100001B MAIN:ACALL DINT ACALL TEXT1 MOV TL1,#200D MOV TH1,#200D MOV A,#00000000B SETB P3.0 ACALL DELAY1 CLR P3.0 HERE: JNB P3.1,HERE BACK:SETB TR1 HERE1:JNB TF1,HERE1 CLR TR1 CLR TF1 INC A JB P3.1,BACK MOV R7,A ACALL SPLIT ACALL LINE2 ACALL LEVEL ACALL TEXT2 ACALL TEXT3 ACALL CHECK JB P2.0,JUMP ACALL TEXT4 SJMP EXIT2 JUMP:ACALL TEXT5 EXIT2:ACALL DELAY2 SJMP MAIN CHECK:MOV A,R7 SUBB A,#20D JNC ON ACALL OFF SJMP EXIT ON:SETB P2.0 EXIT:CLR CY RET OFF: MOV A,R7 SUBB A,#5D JNC EXIT1 CLR P2.0 EXIT1:CLR CY RET DELAY1: MOV R6,#2D LABEL1: DJNZ R6,LABEL1 RET DELAY2:MOV R0,#15D BACK1: MOV TH0,#00000000B MOV TL0,#00000000B SETB TR0 HERE2: JNB TF0,HERE2 CLR TR0 CLR TF0 DJNZ R0,BACK1 RET TEXT1: MOV A,#48H ACALL DISPLAY MOV A,#32H ACALL DISPLAY MOV A,#4FH ACALL DISPLAY MOV A,#20H ACALL DISPLAY MOV A,#4CH ACALL DISPLAY MOV A,#45H ACALL DISPLAY MOV A,#56H ACALL DISPLAY MOV A,#45H ACALL DISPLAY MOV A,#4CH ACALL DISPLAY MOV A,#20H ACALL DISPLAY MOV A,#43H ACALL DISPLAY MOV A,#54H ACALL DISPLAY MOV A,#52H ACALL DISPLAY MOV A,#4CH ACALL DISPLAY RET TEXT2: MOV A,#63H ACALL DISPLAY MOV A,#6DH ACALL DISPLAY RET TEXT3:MOV A,#20H ACALL DISPLAY MOV A,#4DH ACALL DISPLAY MOV A,#6FH ACALL DISPLAY MOV A,#74H ACALL DISPLAY MOV A,#6FH ACALL DISPLAY MOV A,#72H ACALL DISPLAY MOV A,#20H ACALL DISPLAY RET TEXT5: MOV A,#4FH ACALL DISPLAY MOV A,#4EH ACALL DISPLAY RET TEXT4:MOV A,#4FH ACALL DISPLAY MOV A,#46H ACALL DISPLAY MOV A,#46H ACALL DISPLAY RET SPLIT:MOV B,#10D DIV AB MOV R3,B MOV B,#10D DIV AB MOV R2,B MOV R1,A RET LEVEL:MOV A,R1 ACALL ASCII ACALL DISPLAY MOV A,R2 ACALL ASCII ACALL DISPLAY MOV A,R3 ACALL ASCII ACALL DISPLAY RET DINT:MOV A,#0CH ACALL CMD MOV A,#01H ACALL CMD MOV A,#06H ACALL CMD MOV A,#80H ACALL CMD MOV A,#3CH ACALL CMD RET LINE2:MOV A,#0C0H ACALL CMD RET CMD: MOV P0,A CLR RS CLR RW SETB E CLR E ACALL DELAY RET DISPLAY:MOV P0,A SETB RS CLR RW SETB E CLR E ACALL DELAY RET DELAY: CLR E CLR RS SETB RW MOV P0,#0FFH SETB E MOV A,P0 JB ACC.7,DELAY CLR E CLR RW RET ASCII: MOVC A,@A+DPTR RET LUT: DB 48D DB 49D DB 50D DB 51D DB 52D DB 53D DB 54D DB 55D DB 56D DB 57D END
以上就是英銳恩單片機開發工程師分享的“使用8051單片機開發超聲波水位控制器”。英銳恩專注單片機應用方案設計與開發,提供8位單片機、16位單片機、32位單片機。