Giao tiếp cảm biến lưu lượng nước với màn hình LCD 16×2 và Arduino

Giao tiếp cảm biến lưu lượng nước với màn hình LCD 16×2 và Arduino

Trong hướng dẫn này, các bạn sẽ sử dụng Arduino để đọc tín hiệu từ cảm biến lưu lượng nước và hiển thị kết quả lưu lượng lên màn hình LCD 16×2. Cảm biến đo lưu lượng nước sẽ gửi tín hiệu xung tương ứng với lưu lượng qua chân kết nối với Arduino. Arduino sẽ đếm số xung và tính toán lưu lượng nước dựa trên công thức và thông số kỹ thuật của cảm biến.

Sau đó, Arduino sẽ gửi thông tin lưu lượng nước đến màn hình LCD 16×2 để hiển thị. Với sự kết hợp giữa cảm biến lưu lượng dòng chảy, Arduino và màn hình LCD 16×2, các bạn có thể tạo ra một giao diện đơn giản và trực quan để theo dõi lưu lượng nước một cách dễ dàng và thuận tiện.

Để tạo động lực cho Team Arduino KIT ra nhiều bài viết chất lượng hơn, các bạn có thể ủng hộ mình bằng cách Donate qua MoMo, Ngân hàng, Paypal…Nhấn vào link bên dưới nhé.

Linh kiện cần thiết cho dự án

TÊN LINH KIỆN SỐ LƯỢNG NƠI BÁN
Arduino Uno R3 1 Shopee | Cytron
Cảm biến đo lưu lượng nước YFS201 1 Shopee | Cytron
Màn hình LCD 16×2 1 Shopee | Cytron
Biến trở vuông 10K 1 Shopee | Cytron
Điện trở 220R 1 Shopee | Cytron
Dây cắm 10-20 Shopee | Cytron
Breadboard 1 Shopee | Cytron

Tổng quan về cảm biến lưu lượng nước YFS201

Cảm biến đo lưu lượng nước YFS201 là một loại cảm biến dùng để đo và theo dõi lưu lượng nước chảy qua ống dẫn. Nó được sử dụng rộng rãi trong các ứng dụng liên quan đến giám sát và điều khiển lưu lượng nước trong các hệ thống thủy lực, hệ thống làm mát, hệ thống cấp nước và các ứng dụng công nghiệp khác.

Thông số kỹ thuật

  • Điện áp hoạt động: 5V DC
  • Dòng tiêu thụ: ≤15mA
  • Dải lưu lượng: 1-30L/phút
  • Độ chính xác: ±3%
  • Đầu ra tín hiệu: Tín hiệu xung tương ứng với lưu lượng nước
  • Kết nối: 3 chân (Vcc, GND, Output)
  • Vật liệu vỏ: Nhựa ABS
  • Nhiệt độ hoạt động: 0-80°C
  • Áp suất làm việc tối đa: 1.75MPa
  • Tuổi thọ: ≥10 triệu lần

Nguyên lý hoạt động cảm biến lưu lượng nước YFS201

Cảm biến lưu lượng nước dựa trên nguyên lý cảm ứng từ Hall là một thiết bị được sử dụng để đo lưu lượng nước trong các ứng dụng và hệ thống khác nhau. Cảm biến này sử dụng hiện tượng Hall để phát hiện và đo lượng dòng chảy của nước trong ống dẫn.

Nguyên lý hoạt động của cảm biến lưu lượng nước Hall dựa trên sự thay đổi trong từ trường khi dòng chảy nước qua một dây dẫn dạng ống. Cảm biến chứa một cặp nam châm và hai điện cực Hall. Khi nước chảy qua ống, nó tạo ra một từ trường. Dòng chảy của nước sẽ tác động lên từ trường và tạo ra một tín hiệu điện tương ứng.

Sơ đồ chân cảm biến đo lưu lượng nước YFS201

  • Dây đỏ: Chân VCC thường được cấp nguồn 5V
  • Dây đen: Chân GND, được nối đất
  • Dây vàng: Chân tín hiệu đầu ra, thường được kết nối với Arduino

Sơ đồ đấu nối cảm biến lưu lượng nước với Arduino

Sơ đồ đấu nối màn hình LCD 16×2 với Arduino Uno R3

LCD 16X2 Arduino
D4 – D7 9, 10, 11, 12
E 7
RS 4
VEE POT (Middle Leg)
VSS Ground
VDD +5V
D+ +5V
D- Ground

Sơ đồ đấu nối Arduino với cảm biến lưu lượng nước YFS201

Arduino Water Flow Sensor
D2 Signal Output
5V VCC
GND GND

Code cảm biến lưu lượng nước

Đoạn code này cho phép Arduino đọc tín hiệu từ cảm biến lưu lượng dòng chảy YF-S201 và tính toán tỷ lệ dòng chảy của nước. Kết quả được hiển thị trên màn hình LCD 16×2 và gửi thông qua giao tiếp Serial để theo dõi trên máy tính.

Xem ngay: Hướng dẫn sử dụng màn hình LCD 16×2 với Arduino

/*YF- S201 water Flow sensor code for Arduino */
#include <LiquidCrystal.h>
LiquidCrystal lcd(4, 7, 9, 10, 11, 12);
const int Output_Pin = 2;

volatile int  Pulse_Count;
unsigned int  Liter_per_hour;
unsigned long Current_Time, Loop_Time;

void setup()
{ 
   pinMode(Output_Pin, INPUT);
   Serial.begin(9600); 
   attachInterrupt(0, Detect_Rising_Edge, FALLING);
                                     
   Current_Time = millis();
   Loop_Time = Current_Time;
   lcd.begin(16, 2);
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("Water Flow Meter");
   lcd.setCursor(0,1);
   lcd.print("ArduinoKIT");
} 

void loop ()    
{
   Current_Time = millis();
   if(Current_Time >= (Loop_Time + 1000))
   {
      Loop_Time = Current_Time;
      Liter_per_hour = (Pulse_Count * 60 / 7.5);
       if(Pulse_Count != 0){
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Rate: ");
      lcd.print(Liter_per_hour);
      lcd.print(" L/M");
      Pulse_Count = 0;
      Serial.print(Liter_per_hour, DEC);
      Serial.println(" Liter/hour");
       }
    else {
      Serial.println(" flow rate = 0 ");
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Rate: ");
      lcd.print( Liter_per_hour );
      lcd.print(" L/M");
    }
   }
   
}
void Detect_Rising_Edge ()
{ 
   Pulse_Count++;
} 

Giải thích code

#include <LiquidCrystal.h>

Được sử dụng để khai báo thư viện LiquidCrystal để điều khiển màn hình LCD 16×2.

LiquidCrystal lcd(4, 7, 9, 10, 11, 12);
const int Output_Pin = 2;

Khai báo đối tượng LiquidCrystal với các chân kết nối của LCD Arduino được định nghĩa là 4, 7, 9, 10, 11 và 12.

Khai báo chân đầu ra của cảm biến đo lưu lượng nước, ở đây là chân D2.

volatile int  Pulse_Count;
unsigned int  Liter_per_hour;
unsigned long Current_Time, Loop_Time;

Khai báo biến và khởi tạo giá trị ban đầu.

void setup()
{ 
   pinMode(Output_Pin, INPUT);
   Serial.begin(9600); 
   attachInterrupt(0, Detect_Rising_Edge, FALLING);
                                     
   Current_Time = millis();
   Loop_Time = Current_Time;
   lcd.begin(16, 2);
   lcd.clear();
   lcd.setCursor(0,0);
   lcd.print("Water Flow Meter");
   lcd.setCursor(0,1);
   lcd.print("ArduinoKIT");
} 

Cấu hình các chân và các thao tác khởi tạo ban đầu của Arduino, cài đặt ngắt và hiển thị thông báo trên màn hình LCD 16×2.

void loop ()    
{
   Current_Time = millis();
   if(Current_Time >= (Loop_Time + 1000))
   {
      Loop_Time = Current_Time;
      Liter_per_hour = (Pulse_Count * 60 / 7.5);
       if(Pulse_Count != 0){
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Rate: ");
      lcd.print(Liter_per_hour);
      lcd.print(" L/M");
      Pulse_Count = 0;
      Serial.print(Liter_per_hour, DEC);
      Serial.println(" Liter/hour");
       }
    else {
      Serial.println(" flow rate = 0 ");
      lcd.clear();
      lcd.setCursor(0,0);
      lcd.print("Rate: ");
      lcd.print( Liter_per_hour );
      lcd.print(" L/M");
    }
   }
   
}

Vòng lặp chính của chương trình. Tính toán tỷ lệ dòng chảy của nước và hiển thị trên màn hình LCD 16×2. Nếu không có dòng chảy nước, hiển thị thông báo và giá trị 0.

void Detect_Rising_Edge ()
{ 
   Pulse_Count++;
} 

Hàm ngắt được kích hoạt bởi sự thay đổi của chân đầu ra của cảm biến lưu lượng dòng chảy. Mỗi khi có sự thay đổi, biến Pulse_Count sẽ được tăng lên.

Bài viết liên quan

Subscribe
Notify of
guest

1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
do nga

Cái này hay quá, cảm ơn bạn chia sẻ, mà mình thấy có một vấn đề là khi mất điện thì khối lượng thể tích nước (lít) sẽ chạy lại từ 0, bạn có cách nào để khi có điện trở lại thì thể tích nước sẽ đếm tiếp không.