Water Level Indicator Using Arduino & Ultrasonic Sensor (Chỉ báo mức nước sử dụng Arduino và cảm biến siêu âm).
Chỉ báo mức nước sử dụng Arduino
Chỉ báo mức nước không dây sử dụng cảm biến siêu âm & Arduino là một dự án tuyệt vời và rất hữu ích. Mục tiêu của dự án này là thông báo cho người sử dụng lượng nước có trong bể chứa nước trên cao. Dự án này có thể được nâng cao hơn nữa để kiểm soát mực nước trong bể bằng cách BẬT khi mực nước THẤP và TẮT khi mực nước CAO. Do đó, chỉ báo mức nước Arduino giúp ngăn ngừa sự lãng phí nước trong bể chứa trên cao. Dự án này không dây nên nó rất dễ cài đặt và nó có thể hoạt động ở độ sâu 100 mét.
Trong dự án này, hai mạch được sử dụng: một mạch phát và một mạch thu. Mạch phát sử dụng cảm biến siêu âm để đo mực nước theo khoảng cách. Dữ liệu này được gửi đến mạch thu bằng giao tiếp RF. Mực nước được hiển thị theo tỷ lệ phần trăm trên mô-đun LCD 16 × 2, được kết nối với mạch thu.
Components Used
Trong dự án, hai mạch được sử dụng, Đầu tiên là máy phát và thứ hai là máy thu. Một cảm biến siêu âm được sử dụng trong mạch phát, đo khoảng cách của mực nước từ điểm trên của chai hoặc Bể chứa. Khoảng cách được đo bằng cm và được gửi đến mạch thu bằng giao tiếp RF.
Arduino Water Level Indicator Circuit
Trong dự án này, hai mạch được sử dụng
Transmitter Circuit
- Mạch phát được hiển thị trong hình bên dưới. Hình 1, trong mạch này, một cảm biến siêu âm được kết nối với chân D9 và chân D10 của Arduino. Cảm biến siêu âm được cấp nguồn bởi chân Vcc và GND, các chân này được kết nối với chân Vcc và GND của Arduino. Dữ liệu đo được truyền bằng máy phát RF. Chân dữ liệu của bộ phát RF được kết nối với chân D4 của Arduino Nano. Các chân Vcc và GND của máy phát RF được kết nối với các chân Vcc và GND của Arduino. Trong mạch phát này sử dụng một Antenna được kết nối với chân ANT của bộ phát RF, toàn bộ mạch được cấp nguồn bằng pin 9 volt. Pin được kết nối với chân Vin và GND của Arduino.
Mạch thu
Trong mạch thu, Máy thu RF được sử dụng để nhận dữ liệu từ máy phát. Chân dữ liệu của Bộ thu RF được kết nối với chân D4 của Arduino. Mực nước được hiển thị trên LCD và LCD được kết nối với Arduino từ chân D4 đến D9. LCD được cấp nguồn bởi chân Vcc và GND sử dụng Arduino, độ tương phản của LCD được thay đổi bằng cách di chuyển giá trị đặt trước, được kết nối với chân 3 của LCD. Mạch thu được cấp nguồn bằng pin 9 Volt thông qua một công tắc, được kết nối giữa Vcc và chân GND của Arduino. Mạch được hiển thị trong hình dưới đây.
Program/Code
Program for Water Level Controller (Transmitter)
#include <RCSwitch.h> #include <Ultrasonic.h> Ultrasonic ultrasonic(11,10); RCSwitch mySwitch = RCSwitch(); int i; void setup() { mySwitch.enableTransmit(4); } void loop() { i = ultrasonic.Ranging(CM); mySwitch.send(i, 24); delay(100); }
Program for Water Level Controller (Receiver)
#include <RCSwitch.h> #include <LiquidCrystal.h> LiquidCrystal lcd(4, 5, 6, 7, 8, 9); RCSwitch mySwitch = RCSwitch(); float level; int Hval=2; int Lval=12; int BUZZER = 10 ; void setup() { mySwitch.enableReceive(0); lcd.begin(16, 2); lcd.print("WATER LEVEL INDI"); pinMode(BUZZER,OUTPUT); } void loop() { if (mySwitch.available()) { level = mySwitch.getReceivedValue(); level = level/(Lval - Hval); level = level*100; if (level>100) {level=100;} lcd.setCursor(0, 1); lcd.print("LEVEL "); lcd.print(level); lcd.print(" % "); mySwitch.resetAvailable(); } digitalWrite(BUZZER,HIGH); if (level > 99) {digitalWrite(BUZZER,HIGH); delay(100); digitalWrite(BUZZER,LOW); delay(100);} else {digitalWrite(BUZZER,LOW);} }
Trong dự án này, hai mạch được sử dụng, cả hai đều được cung cấp bởi Arduino Nano. Mô-đun RF được sử dụng để giao tiếp giữa các mạch Máy phát và Máy thu.
Cách đính kèm thư viện
Tải xuống tệp thư viện từ liên kết https://github.com/sui77/rc-switch.
Giải nén tệp rc-switch-master.
Sao chép thư mục bên trong thư mục rc-switch-master.
Dán thư mục vào vị trí Tài liệu> Arduino> thư viện.
Đóng phần mềm Arduino IDE (nếu hoạt động).
Mở Arduino IDE.
Nhấp vào tệp> Ví dụ
Nếu thư viện được đính kèm, bạn có thể thấy rc-switch-master trong danh sách Ví dụ.
Hệ thống điều khiển
Trong mã hóa của phía máy phát, hai tệp tiêu đề được sử dụng. Đầu tiên là RCSwitch.h, được sử dụng cho máy phát RF và thứ hai là Ultrasonic.h, được sử dụng cho cảm biến siêu âm.
Bây giờ các chân của cảm biến siêu âm được khai báo bằng tên ultrasonic ở dòng 4, chân 11 là Trig và chân 10 là Echo. Trong dòng 5 RCSwitch được khai báo cho máy phát bằng tên “mySwitch”. Trong dòng 7, một số nguyên được khai báo bằng tên “i”.
Trong thiết lập void Transmitter được kích hoạt bởi chức năng “mySwitch.enableTransmit (4)”, trong đó chân dữ liệu của máy phát được kết nối với chân D4 của Arduino.
Trong vòng lặp void, khoảng cách được đo bằng hàm “ultrasonic.Ranging (CM)” và nó được gán bằng số nguyên “I”, khoảng cách này được đo bằng cm.
Trong dòng 15, khoảng cách đo được được truyền bằng hàm “mySwitch.send (i, 24)”, trong đó “i” là khoảng cách và 24 là định dạng bit. Sau khi tất cả “độ trễ” 100 mili giây được sử dụng, có nghĩa là Arduino gửi dữ liệu sau mỗi 100 mili giây.
Người nhận
Ở phía máy thu, hai tệp tiêu đề được sử dụng, tệp đầu tiên là “RCSwitch.h” được sử dụng cho giao tiếp RF giữa Máy phát và Máy thu và tệp thứ hai là “LiquidCrystal.h”, được sử dụng cho màn hình LCD.
Ở dòng 4, các chân Arduino được khai báo, được kết nối với LCD. Tổng số 6 chân được kết nối với Arduino là D4, D5, D6, D7, D8, D9. Trong dòng 5, “RCSwitch” được khai báo bằng tên “mySwitch”.
Trong dòng 7, phao được khai báo bằng tên "level", hiển thị mực nước và ở dòng 9 và 10, hai số nguyên được khai báo bằng tên "Hval" và "Lval" trong đó, "Hval" là giá trị trên của mực nước (khoảng cách từ cảm biến siêu âm) và “Lval” là Giá trị thấp hơn của mực nước (khoảng cách từ cảm biến siêu âm). Sau khi tất cả các chân của buzzer được khai báo bằng số nguyên “BUZZER” trong đó, 10 là mã PIN D10 của Arduino.
Trong thiết lập void Máy thu RF được kích hoạt bởi chức năng “mySwitch.enableReceiver (0)”, trong đó 0 là chân ngắt (INT0) là chân D2 của Arduino.
Trong dòng 16, màn hình LCD bắt đầu bằng hàm “lcd.begin (16, 2)” và ở dòng 17, “lcd.print” được sử dụng để hiển thị “CHỈ SỐ MỨC NƯỚC” trong hàng đầu tiên của màn hình LCD.
Trong dòng 19, “pinMode (BUZZER, OUTPUT)” khai báo chân BUZZER là OUTPUT.
Trong “void loop ()” trong begening “if (mySwitch.available ())” được sử dụng, điều đó có nghĩa là nếu bất kỳ dữ liệu nào được nhận từ Bộ thu RF, chương trình sẽ xuất hiện trong vòng lặp. Trong dòng 25, dữ liệu đến từ Bộ thu RF được giải mã bằng hàm “mySwitch.getRecivedValue” và được lưu trong một “cấp độ” float.
Trong dòng 27 và 28, "cấp độ" được xử lý và chuyển đổi thành phần trăm, bằng cách sử dụng một số biểu thức toán học. Trong dòng 30, điều kiện "Nếu" được sử dụng để giới hạn tỷ lệ phần trăm.
Trong dòng 32, 33, 34, 35, mức được in trên màn hình LCD và ở dòng 37, hàm “mySwitch.reset.Available ()” được sử dụng để đặt lại mô-đun RF.
Trong phần cuối của mã, điều kiện "Nếu" được sử dụng để bật bộ rung, nếu mức trở lên thì 99 phần trăm.