Sử dụng cảm biến HX711 với Arduino làm cân điện tử

1. Loadcell là gì?

Cảm biến cân nặng loadcell là cảm biến có thể chuyển đổi một lực, trọng lượng thành một tín hiệu điện. Giá trị tác dụng tỉ lệ với sự thay đổi điện trở cảm ứng trong cầu điện trở, do đó trả về tín hiệu điện áp tỉ lệ. Loadcell điện trở làm việc dựa vào nguyên lý áp lực – trở kháng. Khi một tải trọng, một lực tác động lên cảm biến sẽ làm trở kháng thay đổi. Sự thay đổi trở kháng này dẫn đến dự thay đổi điện áp đầu ra khi điện áp đầu vào được cấp.

Cảm biến loadcell được ứng dụng rộng rãi trong đời sống như: đo khối lượng của vật, phân phối đều trọng lượng sản phẩm trong các dây truyền tự động hóa, đo trọng lượng xe tải…

2. Cấu tạo và nguyên lý hoạt động

  • Cấu tạo

Loadcell được cấu tạo bởi hai thành phần là: Strain gage và Load. Một loadcell thường bao gồm các strain gage được dán vào bề mặt của thân loadcell. Thân loadcell là một khối kim loại đàn hồi và tùy theo từng loại loadcell và mục đích sử dụng loadcell, thân loadcell được thiết kế nhiều hình dạng khác nhau, chế tạo bằng nhiều vật liệu khác nhau (nhôm hợp kim, thép không gỉ…)

  • Strain gage là một điện trở đặc biệt, có điện trở thay đổi khi bị nén hay kéo dãn và được nuôi bằng một nguồn ổn định.
  • Load là một thanh kim loại có tính đàn hồi.

R = Điện trở strain gauge (Ohm)
L = Chiều dài của sợi kim loại strain gauge (m)
A  =  Tiết diện của sợi kim loại strain gauge (m2)
r=  Điện trở suất vật liệu của sợi kim loại strain gauge
Khi dây kim loại bị lực tác động sẽ thay đổi điện trở
Khi dây bị lực nén, chiều dài strain gauge giảm, điện trở sẽ giảm xuống.
Khi dây bi kéo dãn, chiều dài strain gauge tăng, điện trở sẽ tăng lên
Điện trở thay đổi tỷ lệ với lực tác động.

Thông số kĩ thuật cơ bản:

– Độ chính xác: cho biết phần trăm chính xác trong phép đo. Độ chính xác phụ thuộc tính chất phi tuyến tính, độ trễ, độ lặp.

– Công suất định mức: giá trị khối lượng lớn nhất mà Loadcell có thể đo được.

– Dải bù nhiệt độ: là khoảng nhiệt độ mà đầu ra Loadcell được bù vào, nếu nằm ngoài khoảng này, đầu ra không được đảm bảo thực hiện theo đúng chi tiết kĩ thuật được đưa ra.

– Cấp bảo vệ: được đánh giá theo thang đo IP, (ví dụ: IP65: chống được độ ẩm và bụi).

– Điện áp: giá trị điện áp làm việc của Loadcell (thông thường đưa ra giá trị lớn nhất và giá trị nhỏ nhất 5 – 15 V).

– Độ trễ:hiện tượng trễ khi hiển thị kết quả dẫn tới sai số trong kết quả. Thường được đưa ra dưới dạng % của tải trọng.

– Trở kháng đầu vào: trở kháng được xác định thông qua S- và S+ khi Loadcell chưa kết nối vào hệ thống hoặc ở chế độ không tải.

– Điện trở cách điện: thông thường đo tại dòng DC 50V. Giá trị cách điện giữa lớp vỏ kim loại củaLoadcell và thiết bị kết nối dòng điện.

– Phá hủy cơ học: giá trị tải trọng mà Loadcell có thể bị phá vỡ hoặc biến dạng.

– Giá trị ra: kết quả đo được (đơn vị: mV).

– Trở kháng đầu ra: cho dưới dạng trở kháng được đo giữa Ex+ và EX- trong điều kiện load cell chưa kết nối hoặc hoạt động ở chế độ không tải.

– Quá tải an toàn: là công suất mà Loadcell có thể vượt quá (ví dụ: 125% công suất).

– Hệ số tác động của nhiệt độ: Đại lượng được đo ở chế độ có tải, là sự thay đổi công suất củaLoadcell dưới sự thay đổi nhiệt độ, (ví dụ: 0.01%/10°C nghĩa là nếu nhiệt dộ tăng thêm 10°C thì công suất đầy tải của Loadcell tăng thêm 0.01%).

– Hệ số tác động của nhiệt độ tại điểm 0: giống như trên nhưng đo ở chế độ không tải.

  • Nguyên lý hoạt động:

Một điện áp được cung cấp cho ngõ vào loadcell (2 góc (1) và (4) của cầu điện trở Wheatstone) và điện áp tín hiệu ra được đo giữa hai góc khác.

Tại trạng thái cân bằng (trạng thái không tải), điện áp tín hiệu ra là số không hoặc gần bằng không khi bốn điện trở được gắn phù hợp về giá trị. Khi có tải trọng hoặc lực tác động lên thân loadcell làm cho thân loadcell bị biến dạng (giãn hoặc nén), dẫn đến sự thay đổi về chiều dài và tiết diện của các sợi kim loại của điện trở strain gage -> thay đổi giá trị điện trở -> thay đổi điện áp đầu ra.

Hình ảnh mô tả hoạt động của loadcell:

Lưu ý: Hành động như đặt đột ngột hay thảy vật cân có khối lượng cân nặng lên bàn cân rất dễ làm cho thanh kim loại bị biến dạng đột ngột làm cân sẽ không chính xác và mau hỏng Strain Gauge. Không nên cân một vật có khối lượng lớn vượt qua khỏi thang đo của cân.

3. Hướng dẫn sử dụng cảm biến loadcell với arduino để làm một cân điện tử đơn giản

Như các bạn đã biết các loại cân điện tử hiện nay thường dùng các cảm biến loadcell để đo khối lượng, với độ chính xác, độ ổn định cao, nên được ứng dụng nhiều trong đời sống.

Hôm nay, mình sẽ hướng dẫn các bạn làm một cái cân điện tử đơn giản với Arduino và màn hình LCD.

Để làm theo hướng dẫn này bạn phải chuẩn bị một mạch Arduino Uno, một màn hình LCD 1602 kèm I2C, một cảm biến loadcell 20kg (bạn có thể chọn loại cân nặng cao hơn hoặc thấp hơn tùy nhu cầu), một mạch chuyển đổi ADC HX711, một nút nhấn và dây nối. Các bạn có thể mua tại link sau:

  • Arduino UNO R3 DIP (kèm cáp):
  • Bộ Cảm Biến Cân Nặng Loadcell 20kg + Khung Bàn Cân Mica
  • LCD 1602 kèm module I2C màu xanh lá

Kết nối theo sơ đồ sau:

Sau khi kết nối xong, tiến hành nạp code cho arduino:

Code hiệu chỉnh giá trị cho loadcell:


#include "HX711.h"  
 
#define DOUT  3
#define CLK  2
 
HX711 scale(DOUT, CLK);

float calibration_factor = -103525; 
 
//=============================================================================================
//                         SETUP
//=============================================================================================
void setup() {
  Serial.begin(9600);
  Serial.println("HX711 Calibration");
  Serial.println("Remove all weight from scale");
  Serial.println("After readings begin, place known weight on scale");
  Serial.println("Press a,s,d,f to increase calibration factor by 10,100,1000,10000 respectively");
  Serial.println("Press z,x,c,v to decrease calibration factor by 10,100,1000,10000 respectively");
  Serial.println("Press t for tare");
  scale.set_scale();
  scale.tare(); //Reset giá trị về 0
 
  long zero_factor = scale.read_average(); //đọc thông tin
  Serial.print("Zero factor: "); 
  Serial.println(zero_factor);
}
 
//=============================================================================================
//                         LOOP
//=============================================================================================
void loop() {
 
  scale.set_scale(calibration_factor); //điều chỉnh theo hệ số hiệu chỉnh
 
  Serial.print("Reading: ");
  Serial.print(scale.get_units(), 3);
  Serial.print(" kg"); //Thay đổi giá trị này thành kg và điều chỉnh lại hệ số hiệu chuẩn
  Serial.print(" calibration_factor: ");
  Serial.print(calibration_factor);
  Serial.println();
 
  if(Serial.available())
  {
    char temp = Serial.read();
    if(temp == '+' || temp == 'a')
      calibration_factor += 10;
    else if(temp == '-' || temp == 'z')
      calibration_factor -= 10;
    else if(temp == 's')
      calibration_factor += 100;  
    else if(temp == 'x')
      calibration_factor -= 100;  
    else if(temp == 'd')
      calibration_factor += 1000;  
    else if(temp == 'c')
      calibration_factor -= 1000;
    else if(temp == 'f')
      calibration_factor += 10000;  
    else if(temp == 'v')
      calibration_factor -= 10000;  
    else if(temp == 't')
      scale.tare();  //Reset giá trị về 0
  }
}

Sau khi nạp code các bạn cần hiệu chỉnh bằng cách dùng quả cân chuẩn hoặc một vật mà bạn đã biết đúng khối lượng đặt lên bàn cân => Mở cửa sổ Serial Monitor của Arduino IDE=> Gõ “a, s, d ,f” rồi Enter để tăng giá trị đo được, “z, x, c, v” rồi Enter  để giảm giá trị đo được sao cho bằng với giá trị quả cân chuẩn => Ghi lại giá trị calibration_factor làm giá trị hiệu chỉnh để cho vào code full.

Code full hiển thị giá trị cân nặng lên lcd:

#include "HX711.h"
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
 
HX711 scale(3, 2);
 
int rbutton = 7; // nút nhấn được sử dụng để reset giá trị trọng lượng về 0
float weight;
float calibration_factor = -100525; // giá trị này bạn lấy từ code hiệu chỉnh
 
void setup() 
{
  Serial.begin(9600);
  pinMode(rbutton, INPUT_PULLUP); 
  scale.set_scale();
  scale.tare(); //Reset giá trị về 0
  long zero_factor = scale.read_average(); //đọc thông tin 
  
  lcd.begin();
}
 
void loop() 
 
{
  scale.set_scale(calibration_factor); //điều chỉnh theo hệ số hiệu chỉnh
 
  weight = scale.get_units(5); 
 
  lcd.setCursor(0, 0);
  lcd.print("Trong luong:");
  lcd.setCursor(0, 1);
  lcd.print(weight);
  lcd.print(" KG  ");
  delay(1000);

  Serial.print("Weight: ");
  Serial.print(weight);
  Serial.println(" KG");
  Serial.println();
  
 
  if ( digitalRead(rbutton) == LOW)
{
  scale.set_scale();
  scale.tare(); //Reset giá trị về 0
}
 
}

Kết quả:

Sau khi nạp code xong là bạn đã có một cái cân điện tử hoàn thiện. Các bạn có thể chế thêm nguồn pin để tiện lợi hơn khi sử dụng.

Leave a Reply

Your email address will not be published. Required fields are marked *