Cảm biến lực (load cell): cấu tạo, nguyên lý, cách chế tạo và tự đọc HX711 bằng ESP32

Load cell hoạt động thế nào: các dạng thân, bốn strain gauge nối cầu Wheatstone, quy trình chế tạo, FSR và cảm biến áp điện, giao thức HX711 và cách tự đọc HX711 bằng ESP32.

Cân điện tử, cân xe tải, máy ép, máy thử độ bền vật liệu, robot cảm nhận lực kẹp: tất cả đều cần đo lực. Cảm biến lực phổ biến nhất là load cell, một khối kim loại được tính toán để biến dạng rất ít dưới tải, trên đó dán các strain gauge nối thành cầu Wheatstone. Bài viết giải thích các dạng load cell, vì sao bốn strain gauge cho tín hiệu lớn gấp bốn lần một cái, quy trình chế tạo một load cell, các loại cảm biến lực khác (FSR, áp điện) và cách tự đọc HX711 bằng ESP32 mà không cần thư viện, để hiểu rõ từng bit dữ liệu.

1. Các dạng load cell

Sáu dạng load cell thường gặp: thanh uốn một điểm cho cân bàn, chữ S đo kéo hoặc nén, thanh chịu cắt cho cân bồn, dạng cột nén cho cân xe tải, nửa cầu trong cân sức khỏe và dạng nan hoa cho máy ép
Các dạng load cell và dải tải thường gặp (hình tự vẽ).
  • Thanh uốn một điểm: thanh nhôm có lỗ khoét hình ống nhòm, một đầu bắt vào khung, đầu kia đỡ mặt cân. Đặt vật ở góc hay giữa mặt cân đều cho cùng kết quả. Dùng trong cân bàn, cân nhà bếp, cân siêu thị.
  • Chữ S: đo được cả lực kéo và lực nén, treo được bằng hai lỗ ren; dùng cho cân treo, cân bồn treo, máy thử kéo.
  • Thanh chịu cắt và dạng cột nén: chịu tải lớn, đặt dưới chân bồn, dưới sàn cân xe; thường bằng thép hợp kim hoặc thép không gỉ.
  • Nửa cầu (cân sức khỏe): tấm thép nhỏ ba dây, mỗi cái chỉ chứa nửa cầu; bốn cái ở bốn góc cân ghép lại thành một cầu đủ.
  • Nan hoa: dạng đĩa thấp, chịu lực nén lớn và lệch tâm tốt; dùng trong máy ép, máy thử vật liệu.
Load cell bằng thép lắp dưới chân bồn hóa chất, giữa hai tấm đế bắt bulông trên sàn bê tông, dây tín hiệu đi ra bên cạnh
Load cell lắp dưới chân một bồn hóa chất để cân lượng chất lỏng trong bồn. Ảnh: GRALISTAIR, CC BY-SA 4.0, Wikimedia Commons, đã thu nhỏ.

2. Nguyên lý: biến dạng nhỏ, strain gauge và cầu Wheatstone

Thân load cell được thiết kế để ở tải định mức chỉ biến dạng khoảng 0,1 % chiều dài (cỡ 1000 µm/m) tại các vùng mỏng. Strain gauge là một lá điện trở mỏng dán chặt vào vùng đó: bị kéo dài thì điện trở tăng, bị nén thì giảm. Thay đổi điện trở rất nhỏ, chỉ khoảng 0,2 % với strain gauge kim loại, nên phải dùng cầu Wheatstone để đổi thành điện áp.

Nguyên lý load cell thanh uốn có lỗ ống nhòm: một đầu cố định, lực F đặt ở đầu kia, bốn strain gauge ở bốn vùng mỏng trên và dưới hai lỗ, hai cái bị kéo và hai cái bị nén, nối thành cầu Wheatstone đủ với các nút E cộng, E trừ, S cộng, S trừ
Bốn strain gauge trên load cell thanh uốn và cách nối thành cầu đủ (hình tự vẽ, độ cong phóng đại).
  • Lỗ khoét tạo bốn vùng mỏng. Khi đầu tự do bị ép xuống, thanh cong theo hình chữ S: hai vùng bị kéo, hai vùng bị nén.
  • Strain gauge bị kéo và bị nén được đặt ở hai nhánh kề nhau của cầu, nên tín hiệu của cả bốn cái cộng dồn, gấp bốn lần dùng một strain gauge.
  • Thay đổi nhiệt độ làm cả bốn điện trở cùng đổi như nhau, cầu vẫn cân bằng: đó là cách cầu đủ tự bù nhiệt.
  • Độ nhạy ghi bằng mV/V: load cell 2 mV/V được kích 5 V cho 10 mV ở tải định mức. Load cell thanh nhôm loại rẻ thường khoảng 1 mV/V.

Thông số khác trên nhãn: tải định mức (ví dụ 5 kg), quá tải an toàn (thường 120 đến 150 %), quá tải phá hủy (khoảng 200 đến 300 %), sai số tổng hợp, độ trôi khi giữ tải lâu (creep) và cấp chính xác. Đặt vật nặng quá tải phá hủy, dù chỉ một lần do va đập, sẽ làm thân biến dạng dẻo và load cell bị lệch điểm không vĩnh viễn.

Load cell nửa cầu tháo từ cân sức khỏe: tấm thép hình chữ E nhỏ có dán strain gauge ở giữa, ba sợi dây đỏ, trắng, đen
Load cell nửa cầu ba dây tháo từ một chiếc cân sức khỏe; bốn cái ở bốn góc cân ghép thành một cầu đủ. Ảnh: Gannu03, CC BY-SA 4.0, Wikimedia Commons, đã thu nhỏ.

3. Load cell được chế tạo như thế nào

Sáu bước chế tạo load cell: gia công thân bằng CNC và nhiệt luyện, làm sạch vùng dán, dán strain gauge bằng keo epoxy và sấy, nối cầu và bù nhiệt, phủ bảo vệ chống ẩm, hiệu chuẩn bằng quả cân chuẩn
Các bước chính trong chế tạo load cell (hình tự vẽ).
  1. Thân: phay CNC từ nhôm hợp kim (loại nhỏ, rẻ), thép hợp kim hoặc thép không gỉ (tải lớn, môi trường ẩm). Sau gia công phải nhiệt luyện và khử ứng suất dư, nếu không thân sẽ "bò" dần dưới tải.
  2. Chuẩn bị bề mặt: vùng dán được mài nhám, tẩy dầu và trung hòa để keo bám chắc. Bụi hay dầu sót lại là nguyên nhân chính làm strain gauge bong.
  3. Dán strain gauge: keo epoxy hai thành phần quét mỏng, kẹp ép đều rồi sấy theo chu trình nhiệt; lớp keo phải mỏng và không bọt khí để biến dạng truyền nguyên vẹn sang lá điện trở.
  4. Nối cầu và bù: hàn dây nối bốn strain gauge thành cầu, thêm các điện trở nhỏ để chỉnh điểm không về gần 0 mV/V và bù độ nhạy theo nhiệt độ.
  5. Bảo vệ: phủ silicone, keo bảo vệ, hoặc hàn kín bằng màng kim loại với loại chuẩn IP67, IP68.
  6. Hiệu chuẩn: đặt các quả cân chuẩn ở nhiều mức lên và xuống để đo độ nhạy, phi tuyến, độ trễ, rồi giữ tải để đo độ trôi. Mỗi chiếc có phiếu ghi độ nhạy mV/V thực tế.

Muốn tự làm một cảm biến lực đơn giản, có thể dán strain gauge 120 Ω hoặc 350 Ω lên một thanh nhôm theo đúng các bước trên; cách dán và đọc strain gauge có trong bài về cảm biến biến dạng của loạt này.

4. Các loại cảm biến lực khác

Điện trở cảm biến lực FSR: đĩa tròn mỏng màu đen có vân điện cực, đuôi dẻo dài với hai chân kim loại
Điện trở cảm biến lực (FSR): tấm polymer mỏng, ấn càng mạnh điện trở càng giảm. Ảnh: oomlout (ảnh gốc), Bomazi (bản cắt), CC BY-SA 2.0, Wikimedia Commons, đã thu nhỏ.
LoạiNguyên lýƯu điểmHạn chế
Load cell strain gaugeBiến dạng của thân kim loạiChính xác (tới 0,02 %), đo tĩnh và độngCần mạch khuếch đại tín hiệu vài mV
FSR (điện trở cảm biến lực)Lớp mực dẫn điện ép sát vào điện cực khi bị ấnMỏng, rẻ, đọc bằng cầu phân ápSai số lớn (10 % trở lên), trôi theo thời gian; chỉ để phát hiện chạm, ấn
Áp điện (thạch anh)Điện tích sinh ra khi tinh thể bị nénRất cứng, đo lực va đập nhanh tới hàng kHzKhông đo được lực tĩnh
Điện dungKhe hở giữa hai bản cực thay đổi theo lựcNhạy, tiêu thụ ít; dùng trong cảm biến xúc giác, màn hìnhDễ bị nhiễu, cần mạch đo điện dung
Thủy lựcLực ép lên piston làm tăng áp suất dầuKhông cần điện, chịu tải rất lớnCồng kềnh, kém chính xác hơn

5. HX711: bộ chuyển đổi 24 bit cho load cell

Tín hiệu vài mV quá nhỏ cho ADC 12 bit của ESP32. HX711 có sẵn bộ khuếch đại hệ số 128 và bộ chuyển đổi 24 bit, đo 10 lần mỗi giây (hoặc 80 lần khi chân RATE nối lên cao). Ở hệ số 128, dải đo vào khoảng ±20 mV khi nguồn tương tự 5 V, đủ cho hầu hết load cell. HX711 không dùng I2C hay SPI mà có giao thức riêng chỉ hai dây:

Giản đồ xung đọc HX711: chân DT xuống thấp báo có dữ liệu, ESP32 phát 24 xung trên SCK để lấy 24 bit từ bit cao nhất, xung thứ 25 chọn kênh A hệ số 128; ví dụ ba byte 0x07, 0xD8, 0xA2 bằng 514210
Giản đồ đọc một mẫu HX711 với giá trị ví dụ (hình tự vẽ, số liệu tính theo chương trình).
  1. Khi chân DT xuống mức thấp, HX711 đã đo xong một mẫu.
  2. Vi điều khiển phát 24 xung trên SCK; sau mỗi sườn lên, DT đưa ra một bit, bit cao nhất trước.
  3. Số xung thêm sau đó chọn kênh và hệ số cho lần đo kế tiếp: 1 xung là kênh A hệ số 128, 2 xung là kênh B hệ số 32, 3 xung là kênh A hệ số 64.
  4. Kết quả là số bù hai 24 bit, phải mở rộng dấu thành 32 bit trước khi tính.
  5. Nếu SCK ở mức cao quá 60 µs, HX711 chuyển sang chế độ nghỉ. Vì vậy chương trình tắt ngắt trong lúc phát chuỗi xung.

6. Thực hành: tự đọc HX711 bằng ESP32

Linh kiện

  • ESP32 DevKit V1 30 chân.
  • Module HX711.
  • Một load cell thanh uốn (ví dụ 1 kg, 5 kg), một tấm đế và một tấm mặt cân bắt vít vào hai đầu load cell.
  • Một vật có khối lượng biết trước để hiệu chuẩn (quả cân, chai nước đã cân sẵn).
  • Dây cắm test board.

Sơ đồ nối

Sơ đồ nối load cell với module HX711 và ESP32: dây đỏ vào E cộng, dây đen vào E trừ, dây trắng vào A trừ, dây xanh lá vào A cộng; HX711 GND vào GND, DT vào D32, SCK vào D33, VCC vào 3V3
Sơ đồ nối load cell, HX711 và ESP32 (hình tự vẽ).
HX711Nối tới
E+, E−Dây đỏ, dây đen của load cell (nguồn kích cầu)
A−, A+Dây trắng, dây xanh lá của load cell (tín hiệu)
VCC, GND3V3, GND của ESP32
DT, SCKD32, D33 của ESP32

Chương trình

Chương trình không dùng thư viện HX711 nào, chỉ digitalRead/digitalWrite có sẵn trong gói esp32. Nếu muốn dùng thư viện cho gọn, xem bài làm cân điện tử với ESP32, HX711 và load cell.

/*
  PYWORLD.VN - Cảm biến lực load cell với ESP32: tự đọc HX711 bằng xung SCK, không dùng thư viện
  HX711: VCC = 3V3, GND = GND, DT = GPIO32, SCK = GPIO33; load cell: E+ đỏ, E- đen, A- trắng, A+ xanh lá
  Gõ "t" trong Serial Monitor để trừ bì, "c500" để hiệu chuẩn bằng quả cân 500 g đặt trên load cell
*/

#define CHAN_DT 32
#define CHAN_SCK 33

const float GIA_TOC_TRONG_TRUONG = 9.80665;   // m/s², đổi khối lượng ra lực (N)
float heSo = 430.0;                           // Số đếm mỗi gam; mỗi load cell một khác, tìm bằng lệnh c<khối lượng>
int32_t diemKhong = 0;                        // Số đếm khi chưa có tải (bì)
portMUX_TYPE khoaNgat = portMUX_INITIALIZER_UNLOCKED;

// Đọc một mẫu 24 bit của kênh A, hệ số khuếch đại 128
bool docTho(int32_t *ketQua) {
  uint32_t batDau = millis();
  while (digitalRead(CHAN_DT) == HIGH) {      // DT xuống thấp khi HX711 có dữ liệu mới
    if (millis() - batDau > 500) {
      return false;                           // Không có dữ liệu: kiểm tra dây và nguồn
    }
    delay(1);
  }
  uint32_t giaTri = 0;
  // SCK ở mức cao quá 60 µs thì HX711 tự tắt, nên không cho ngắt chen vào giữa chuỗi xung
  portENTER_CRITICAL(&khoaNgat);
  for (int i = 0; i < 24; i++) {
    digitalWrite(CHAN_SCK, HIGH);
    delayMicroseconds(1);
    giaTri = (giaTri << 1) | (uint32_t)digitalRead(CHAN_DT);   // Bit cao nhất ra trước
    digitalWrite(CHAN_SCK, LOW);
    delayMicroseconds(1);
  }
  // Xung thứ 25: chọn lại kênh A, hệ số 128 cho lần đo kế tiếp (26 xung: kênh B; 27 xung: kênh A, 64)
  digitalWrite(CHAN_SCK, HIGH);
  delayMicroseconds(1);
  digitalWrite(CHAN_SCK, LOW);
  portEXIT_CRITICAL(&khoaNgat);

  if (giaTri & 0x800000) {
    giaTri |= 0xFF000000;                     // Mở rộng dấu: dữ liệu là số bù hai 24 bit
  }
  *ketQua = (int32_t)giaTri;
  return true;
}

bool docTrungBinh(int soMau, int32_t *ketQua) {
  int64_t tong = 0;
  for (int i = 0; i < soMau; i++) {
    int32_t mau;
    if (!docTho(&mau)) {
      return false;
    }
    tong += mau;
  }
  *ketQua = (int32_t)(tong / soMau);
  return true;
}

void xuLyLenh() {
  if (!Serial.available()) {
    return;
  }
  String lenh = Serial.readStringUntil('\n');
  lenh.trim();
  int32_t trungBinh;
  if (lenh == "t" && docTrungBinh(16, &trungBinh)) {
    diemKhong = trungBinh;
    Serial.printf("Da tru bi: diem khong = %ld\n", (long)diemKhong);
  } else if (lenh.startsWith("c") && docTrungBinh(16, &trungBinh)) {
    float khoiLuong = lenh.substring(1).toFloat();
    if (khoiLuong > 0) {
      heSo = (trungBinh - diemKhong) / khoiLuong;
      Serial.printf("He so moi: %.2f dem/g (ghi vao bien heSo trong code)\n", heSo);
    }
  }
}

void setup() {
  Serial.begin(115200);
  pinMode(CHAN_DT, INPUT);
  pinMode(CHAN_SCK, OUTPUT);
  digitalWrite(CHAN_SCK, LOW);
  delay(500);
  if (docTrungBinh(16, &diemKhong)) {
    Serial.printf("\nHX711 san sang, diem khong = %ld, he so = %.2f dem/g\n", (long)diemKhong, heSo);
  } else {
    Serial.println("\nKhong thay HX711: kiem tra DT, SCK, VCC, GND");
  }
}

void loop() {
  xuLyLenh();
  int32_t tho;
  if (!docTrungBinh(8, &tho)) {
    Serial.println("Khong doc duoc HX711");
    delay(1000);
    return;
  }
  int32_t lech = tho - diemKhong;
  float gam = lech / heSo;
  float newton = gam / 1000.0f * GIA_TOC_TRONG_TRUONG;
  Serial.printf("Tho %ld | Lech %ld | %.1f g | %.3f N\n", (long)tho, (long)lech, gam, newton);
  delay(300);
}

Hiệu chuẩn

  1. Nạp chương trình, mở Serial Monitor ở 115200, chọn kiểu kết thúc dòng "New Line".
  2. Để trống mặt cân, gõ t rồi Enter để trừ bì.
  3. Đặt vật đã biết khối lượng, ví dụ 500 g, gõ c500. Chương trình tính và in hệ số mới (số đếm mỗi gam).
  4. Ghi hệ số đó vào biến heSo trong chương trình rồi nạp lại để lần sau không phải hiệu chuẩn.

Kết quả mong đợi

Hình minh họa Serial Monitor đọc load cell bằng HX711 và ESP32: số đếm thô, độ lệch so với điểm không, khối lượng theo gam và lực theo newton; đặt cốc nước 500 gam đọc khoảng 500 gam, gõ t để trừ bì thì về khoảng 0 gam
Kết quả mong đợi trên Serial Monitor (hình minh họa; số đếm thô là ví dụ).

Lực tính theo F = m × g với g = 9,80665 m/s²: vật 500 g tạo lực khoảng 4,9 N lên load cell. Số đọc dao động vài số đếm là bình thường; dao động vài chục gam thường do mặt cân rung, dây dài hoặc nguồn nhiễu.

7. Xử lý lỗi thường gặp

Hiện tượngNguyên nhân thường gặpCách xử lý
"Khong thay HX711"Sai chân DT, SCK; thiếu nguồnKiểm tra dây, đo VCC của module phải khoảng 3,3 V
Số đọc âm khi đặt tảiLoad cell lắp ngược chiều hoặc đổi chỗ A+, A−Đổi hai dây tín hiệu, hoặc lật load cell theo mũi tên
Số đọc không đổi khi ấnLoad cell bị kẹp cả hai đầu vào cùng một tấmMỗi đầu bắt vào một tấm riêng, chừa khe để thanh uốn được
Số đọc trôi dầnLoad cell vừa cấp nguồn còn ấm lên; keo, thân bị quá tải trước đóChờ vài phút sau khi bật; thay load cell nếu điểm không lệch mãi
Kết quả sai tỉ lệChưa hiệu chuẩn, hoặc hiệu chuẩn bằng vật quá nhẹHiệu chuẩn bằng vật nặng khoảng một nửa tải định mức
Cân bốn góc lệch nhauDùng nhiều load cell nửa cầu nhưng nối sai cặpNối đúng sơ đồ ghép cầu của bốn load cell

8. Xem thêm


Tin tức liên quan

Chuẩn IP67 là gì? Vali chống nước IP67 bảo vệ thiết bị ra sao
Chuẩn IP67 là gì? Vali chống nước IP67 bảo vệ thiết bị ra sao

IP67 nghĩa là kín bụi hoàn toàn và chịu ngâm tạm thời tới 1 m trong 30 phút. Bài giải thích cách đọc mã IP, vali chống nước kín nhờ gioăng và chốt ép, giới hạn của IP67 và cách giữ vali luôn kín.

Hiệu chuẩn cảm biến laser đo khoảng cách và extensometer theo ISO 9513: bề mặt, cấp và sai số lệch
Hiệu chuẩn cảm biến laser đo khoảng cách và extensometer theo ISO 9513: bề mặt, cấp và sai số lệch

Hiệu chuẩn cảm biến laser tam giác lượng và extensometer: ảnh hưởng của bề mặt, trình tự trên bàn trượt, bảng cấp ISO 9513 với giới hạn tương đối và tuyệt đối, ví dụ extensometer 50 mm.

Hiệu chuẩn áp kế lò xo và áp kế hiện số: trình tự A, B, C, sai số, độ trễ và độ không đảm bảo
Hiệu chuẩn áp kế lò xo và áp kế hiện số: trình tự A, B, C, sai số, độ trễ và độ không đảm bảo

Hiệu chuẩn áp kế lò xo và áp kế hiện số theo ĐLVN 76:2001, EURAMET cg-17: ba trình tự đo, cách tính sai số, độ trễ, độ lặp lại, độ không đảm bảo và ví dụ áp kế 0–10 bar cấp 0,6.

Cảm biến gia tốc áp điện RION PV-90B (charge output)
Cảm biến gia tốc áp điện RION PV-90B (charge output)

Trong lĩnh vực đo rung động và phân tích dao động, yêu cầu về độ chính xác, tốc độ phản hồi và độ bền cơ học ngày càng trở nên khắt khe hơn. Đặc biệt với các ứng dụng trong lĩnh vực nghiên cứu kết cấu, cơ học dao động, kiểm định máy móc và đo modal, một cảm biến nhỏ gọn nhưng có độ nhạy cao là yếu tố sống còn. Cảm biến RION PV-90B chính là một trong những đại diện xuất sắc của dòng cảm biến gia tốc piezoelectric hiện nay – đến từ thương hiệu danh tiếng RION – Nhật Bản.

Modbus TCP/IP (phần 2): ESP32 làm máy khách và cổng chuyển đổi Modbus TCP sang RTU
Modbus TCP/IP (phần 2): ESP32 làm máy khách và cổng chuyển đổi Modbus TCP sang RTU

Hướng dẫn dùng ESP32 làm máy khách Modbus TCP đọc thanh ghi của một thiết bị trong mạng, và làm cổng chuyển đổi Modbus TCP sang Modbus RTU qua RS-485: cách đổi khung, mã thiết bị, thời gian chờ, mã lỗi 0x0B.

Đo biến dạng bằng cảm biến strain gauge
Đo biến dạng bằng cảm biến strain gauge

Giải thích strain, hệ số gauge, cầu Wheatstone, cấu hình quarter/half/full bridge và các bước thiết lập phép đo biến dạng tin cậy.

Thực hành hiệu chuẩn load cell bằng quả cân với HX711 và ESP32: khớp đa thức và độ không đảm bảo
Thực hành hiệu chuẩn load cell bằng quả cân với HX711 và ESP32: khớp đa thức và độ không đảm bảo

Tự hiệu chuẩn load cell 5 kg bằng quả cân với HX711, ESP32: ghi điểm kèm độ lệch chuẩn, khớp đa thức bậc 1, bậc 2, lưu hệ số, kiểm tra lại và ước lượng độ không đảm bảo.

Cảm biến mức: phao, điện cực, thủy tĩnh, siêu âm, radar – cấu tạo, nguyên lý và chế tạo
Cảm biến mức: phao, điện cực, thủy tĩnh, siêu âm, radar – cấu tạo, nguyên lý và chế tạo

Cảm biến mức hoạt động thế nào: phao, điện cực, điện dung, áp suất thủy tĩnh, siêu âm, radar, âm thoa rung, cách chế tạo và đo mức bồn nước bằng HC-SR04 với ESP32 có bù nhiệt độ.


Bình luận
Đã thêm vào giỏ hàng