Tư vấn: 0979.466.469 / 0938.128.290

MENU

Điều chỉnh mực nước sử dụng vi điều khiển 8051

Báo giá đặt hàng nhập

Điều chỉnh mực nước bằng sóng siêu âm sử dụng vi điều khiển 8051 và module HC-SR04

 

 

Điều khiển mực nước sử dụng vi điều khiển 8051

 

Bộ điều chỉnh mực nuớc đơn giản sử dụng module xác định phạm vi sóng siêu âm và vi điều khiển 8051 sẽ là tiêu điểm được thảo luận trong bài viết này. Đây chỉ là một phần ứng dụng của module sóng siêu âm. Bộ điều chỉnh mực nước này có thể giám sát và điều chỉnh một lượng thể tích nước bất kỳ độ sâu 2m, với sự sai số nhỏ hơn 1cm. Vì không sử dụng công tắc dòng chảy cơ học hay cực điện nên sẽ không có sự hao mòn cơ học hay hao mòn do oxi hoá, điều này làm hệ thống có sự chính xác cao. Thế nhưng sự chăm sóc và bảo dưỡng hợp lý cũng rất cần thiết do module siêu âm cần được thiết kế giảm xóc vì nó chứa nhiều linh kiện điện tử

 

Bộ module siêu âm HC-SR04

HC-SR04 bao gồm bộ truyền, bộ nhận sóng siêu âm và các thành phần điện tử cần thiết cho việc cấu thành nên một hệ thống hoạt động tách rời. Nguyên lý hoạt động của module này khá đơn giản. Nó sẽ truyền 8 xung sóng âm thanh tần số 40KHz và nhận các sóng phản xạ về. Thởi gian chênh lệch giữa việc truyền và nhận sẽ được tính toán, khoảng cách sẽ được tính theo công thức D=TS/2 với D là khoảng cách, T là thời gian trễ và S là vận tốc âm thanh. Ngõ ra của HC-SR04 sẽ là một xung với độ rộng tỷ lệ thuận với khoảng cách truyền đi. Từ datasheet, ta thấy độ rộng tín hiệu ngõ ra echo là 58uS với tương ứng với khoảng cách 1cm. Việc chúng ta cần làm là gửi một tín hiệu độ rộng 10uS tới ngõ vào trigger của module và chờ xung ngõ ra tại đầu ra echo của module.

 

Sơ đồ toàn mạch của bộ điều khiển mực nước bằng sóng siêu âm sử dụng vi điều khiển 8051 thể hiện như hình dưới đây

Chân Trigger của module siêu âm được kết nối với chân P3.0 của vi điều khiển. Chân Echo của module được kết nối với chân P3.1 của vi điều khiển. Các đường dữ liệu của LCD là module được giao tiếp qua Port0 của vi điều khiển. Các đường điều khiển RS, RW và E của module LCD được kết nối với các chân P2.7, P2.6 và P2.5 của vi điều khiển. Bơm (12V DC pump) được điều khiển bằng cổng P2.0 của vi điều khiển. Máy bơm được sử dụng ở đây là máy bơm nước rửa kính chắn gió cho ô tô. Các máy bơm khác cũng sẽ mắc theo mạch này nhưng mức dòng điện được cấp cho chúng phải phù hợp với rơle bạn đang sử dụng. Cẩn thận để tránh nguy cơ bị điện giật khi làm việc với nguồn điện khi các thiết bị hoạt động.

Ở đây, module siêu âm được đặt trên đỉnh bể đối diện với mặt nước. Nước phản xạ các xung siêu âm phát ra từ module. Module thu lại các sóng phản xạ và đo độ trễ thời gian. Khoảng cách giữa mặt nước và cảm biến được tính từ dữ liệu thu thập được và module tạo ra một xung có chiều rộng tỷ lệ thuận với khoảng cách. Bộ vi điều khiển đọc độ rộng của xung đầu ra này và thực hiện các phép toán cần thiết trên nó để có được khoảng cách. Ở đây chúng ta có thể thấy rằng mực nước được đo từ trên xuống dưới không giống như hầu hết các cảm biến đo mức từ dưới lên trên. Điều này được thực hiện để làm cho thiết bị này phù hợp với nhiều độ sâu. Vì cảm biến được đặt trên đỉnh bể, chúng ta cần trừ khoảng cách từ cảm biến đến mặt nước từ tổng độ sâu của bể để có được mức nước từ dưới lên trên. Vì các bể khác nhau có độ sâu khác nhau, người dùng cá nhân phải đo độ sâu của bể theo cách thủ công và thay đổi chương trình với dữ liệu này.

Vấn đề này được giải quyết bằng cách đo mức độ từ trên xuống dưới. Tại đây, thiết bị sẽ chuyển sang trạng thái bật máy bơm khi mức nước giảm xuống dưới 20 cm so với đỉnh và tắt bơm khi mức tăng lên 5 cm so với đỉnh (đỉnh ở đây là cảm biến). Mức hiển thị trên màn hình LCD thực sự là độ sâu của mặt nước từ trên xuống. Bể có độ sâu lên tới 1,5 mét sẽ phù hợp với dự án này.

Viết chường trình:

RS EQU P2.7                 ;equates RS to P2.7

RW EQU P2.6                 ;equates RW to P2.6              

E  EQU P2.5                 ;equates E to P2.5

ORG 00H                     ;origin

      MOV DPTR,#LUT         ;move starting address of LUT to DPTR       

      CLR P3.0              ;clears P3.0(output)      

      SETB P3.1             ;sets p3.1(input)    

      MOV TMOD,#00100001B   ;sets Timer1 as Mode2 timer and Timer0 as Mode1 timer

 MAIN:ACALL DINT            ;calls DINT subroutine

      ACALL TEXT1           ;calls TEXT1 subroutine

      MOV TL1,#200D         ;loads TL1 with start value 

      MOV TH1,#200D         ;loads TH1 with reload value  

      MOV A,#00000000B      ;loads A with all Zeros

      SETB P3.0             ;sets P3.0(trigger pulse) 

      ACALL DELAY1          ;calls DELAY1 subroutine (1uS)  

      CLR P3.0              ;clears P3.0

      HERE: JNB P3.1,HERE   ;loops here until echo is received

 BACK:SETB TR1              ;statrs Timer1     

HERE1:JNB TF1,HERE1         ;loop here until Timer1 roll over occurs

      CLR TR1               ;stops Timer1     

      CLR TF1               ;clears Timer Flag 1        

      INC A                 ;Increments accumulator        

      JB P3.1,BACK          ;jumps to label BACK if echo is still present    

      MOV R7,A              ;saves accumulator to R7

      ACALL SPLIT           ;calls SPLIT subroutine

      ACALL LINE2           ;calls LINE2 subroutine

      ACALL LEVEL           ;calls LEVEL subroutine

      ACALL TEXT2           ;calls TEXT2 subroutine

      ACALL TEXT3           ;calls TEXT3 subroutine

      ACALL CHECK           ;calls CHECK subroutine

      JB P2.0,JUMP          ;jumps to label JUMP if P2.0 is set

      ACALL TEXT4           ;calls TEXT4 subroutine

      SJMP EXIT2            ;jumps to label EXIT2

 JUMP:ACALL TEXT5           ;calls TEXT5 subroutine

EXIT2:ACALL DELAY2          ;calls DELAY2 subroutine(1S)

      SJMP MAIN             ;jumps to label MAIN

 

CHECK:MOV A,R7              ;loads value of R7 to accumulator

      SUBB A,#20D           ;subtracts 20D from A

      JNC ON                ;jumps to label ON if carry flag not set(A>20D)

      ACALL OFF             ;else calls OFF subrotine

      SJMP EXIT             ;jumps to label EXIT

   ON:SETB P2.0             ;sets P2.0 (motor ON)

Module điện tử 932*50

 EXIT:CLR CY                ;clears carry flag

      RET                   ;return from subroutine

  

OFF: MOV A,R7               ;loads value of R7 to accumulator

     SUBB A,#5D             ;subtracts 5D from A

     JNC EXIT1              ;jumps to label EXIT1 if carry flag not set(A>5D)

     CLR P2.0               ;else clears P2.0(motor OFF)

EXIT1:CLR CY                ;clears carry flag

      RET                   ;return from subroutine

 

DELAY1: MOV R6,#2D          ;loads R6 with 2D

LABEL1: DJNZ R6,LABEL1      ;loops here until R6 is 0

        RET                 ;return from subroutine

 

DELAY2:MOV R0,#15D          ;loads R0 with 15D

BACK1: MOV TH0,#00000000B   ;loads TH0 with start value

       MOV TL0,#00000000B   ;loads TL0 with start value

       SETB TR0             ;starts Timer0

HERE2: JNB TF0,HERE2        ;loops here until roll over occurs

       CLR TR0              ;stops Timer0

       CLR TF0              ;clear Timer Flag 0

       DJNZ R0,BACK1        ;loops the timer session 15 times for 1S delay

       RET                  ;return from subroutine

       

TEXT1: MOV A,#48H           ;ascii of "H"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#32H              ;ascii of "2"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#4FH              ;ascii of "0"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#20H              ;ascii of " "

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#4CH              ;ascii of "L"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#45H              ;ascii of "E"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#56H              ;ascii of "V"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#45H              ;ascii of "E"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#4CH              ;ascii of "L"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#20H              ;ascii of " "

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#43H              ;ascii of "c"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#54H              ;ascii of "T"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#52H              ;ascii of "R"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    MOV A,#4CH              ;ascii of "L"

    ACALL DISPLAY           ;calls DISPLAY subroutine

    RET                     ;return from subroutine

       

 TEXT2:  MOV A,#63H         ;ascii of "c"

Gia công pcb 932*150
Sản phẩm nổi bật
Chưa có dữ liệu
Hỗ trợ liên kết
0979466469
0899909838
0938128290
0899909838
Khiếu nại: 0964238397
0979466469
0868565469
0868565469

Hotline: 0979 466 469

Loading