技术热线: 4007-888-234

使用8051单片机开发超声波水位控制器

更新时间: 2021-10-27
阅读量:2637

在本文中,我们使用超声波测距仪模块和8051单片机制作一个简单的水位控制器。该水位控制器可监测和控制深达2m的水箱,测量精度低至1cm。由于这里没有使用机械浮球开关或电极,不会有任何机械磨损或腐蚀,这使得系统高度可靠。由于超声波测距模块包含大量电子元件,因此必须以任何方式适当注意将其与阻尼隔离。

一、HC-SR04超声波测距模块

HC-SR04是这里使用的超声波测距模块。HC-SR04由超声波发射器、接收器和必要的电子设备组成,使其成为一个独立的系统。工作原理非常简单。它发送8个40KHz声波脉冲,并拾取反射波。测量发送和接收之间的时间延迟,并根据等式D=TS/2计算距离。其中D是距离,T是时间延迟,S是声速。HC-SR04的输出将是一个宽度与距离成正比的脉冲。从数据表中,输出信号的宽度将为58uS,距离为1cm。我们需要做的只是向模块的触发引脚发送一个10uS宽的触发信号,并等待模块的回波引脚处的输出脉冲。

HC-SR04-timing-diagram-and-pinout.jpg

超声波模块的触发引脚连接到单片机的P3.0。模块的回声引脚连接到单片机的P3.1。LCD模块的数据线通过单片机的Port0接口。LCD模块的控制线RS、RW和E分别连接到单片机的P2.7、P2.6和P2.5引脚。泵使用单片机的端口2.0进行控制。这里使用的泵是12V汽车挡风玻璃清洗泵。电源驱动的泵也将与此电路配合使用,但它们的额定电流必须与您使用的继电器匹配。无论如何,在使用电源驱动的情况下工作时要小心避免触电风险设备。

ultrasonic-water-level-controller.jpg

在这里,超声波测距模块放置在面向水面的水箱顶部。水反射模块发出的超声波脉冲。模块拍摄反射波并测量时滞。水面和传感器之间的距离是根据收集到的数据计算出来的,模块输出一个宽度与距离成正比的脉冲。单片机读取此输出脉冲的宽度,并对其进行必要的数学运算以获得距离。在这里我们可以看到水位是从上到下测量的,不像大多数传感器从下到上测量水位。这样做是为了使该设备适用于各种深度。由于传感器放置在水箱的顶部,我们需要从水箱的总深度中减去传感器到水面的距离,以获得从底部到顶部的水位。由于不同的水箱具有不同的深度,个人用户必须手动测量水箱的深度并使用此数据更改程序。

这个问题是通过测量从上到下的水平来解决的。在这里,当液位低于顶部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位单片机。