Cảm biến biến dạng (strain gauge): cấu tạo, nguyên lý, các loại, chế tạo và đo bằng ADS1115, ESP32
Cảm biến biến dạng hoạt động thế nào: vì sao điện trở đổi khi bị kéo, gauge factor, strain gauge lá kim loại, bán dẫn, dây rung, sợi quang, bù nhiệt, cách chế tạo và đo µε bằng ADS1115, ESP32.
Cảm biến biến dạng đo xem một chi tiết bị kéo dài hay nén ngắn đi bao nhiêu, thường chỉ vài phần nghìn phần trăm. Từ biến dạng tính ra ứng suất trong dầm cầu, thân máy bay, trục quay; và hầu hết cảm biến lực, cân điện tử, cảm biến áp suất, cảm biến mô men đều có strain gauge ở bên trong. Bài viết đi sâu vào lý do điện trở thay đổi khi bị kéo, các loại cảm biến biến dạng (lá kim loại, bán dẫn, dây rung, cách tử Bragg sợi quang), hình dạng lưới, cách bù nhiệt, quy trình chế tạo strain gauge lá kim loại, rồi hướng dẫn đo biến dạng bằng một strain gauge mắc cầu 1/4 với ADC 16 bit ADS1115 và ESP32. Các cấu hình cầu 1/4, 1/2, cầu đủ và cách hiệu chuẩn bằng điện trở shunt đã có trong bài đo biến dạng bằng cảm biến strain gauge.
1. Biến dạng và cấu tạo strain gauge

- Biến dạng ε = ΔL / L không có đơn vị và rất nhỏ, nên hay ghi bằng µε (micro strain): 1 µε = 10⁻⁶. Một thanh thép dài 1 m dãn thêm 1 mm là 1000 µε; thép kết cấu thường làm việc trong khoảng vài trăm đến khoảng 1500 µε.
- Strain gauge lá kim loại là một lưới hợp kim dày vài µm, uốn qua lại nhiều lần trên một màng nhựa polyimide mỏng. Đoạn dọc dài và mảnh, đoạn nối ở hai đầu ngắn và to, nên gauge gần như chỉ nhạy theo trục dọc của lưới.
- Gauge được dán bằng keo lên bề mặt chi tiết; chi tiết dãn bao nhiêu thì lưới dãn bấy nhiêu. Vạch căn hướng in trên đế giúp đặt đúng trục cần đo.
- Điện trở danh định thường là 120 Ω, 350 Ω hoặc 1000 Ω; chiều dài lưới từ dưới 1 mm (đo chỗ tập trung ứng suất) tới hàng chục mm (đo bê tông, vật liệu không đồng nhất).

2. Vì sao điện trở thay đổi: gauge factor

Điện trở của một dây dẫn là R = ρL/A. Khi bị kéo, cả ba đại lượng cùng đổi:
- Chiều dài L tăng đúng bằng ε, làm R tăng theo tỉ lệ ε.
- Tiết diện A giảm vì dây mảnh đi theo hệ số Poisson ν (khoảng 0,3 với kim loại), làm R tăng thêm khoảng 2ν·ε.
- Điện trở suất ρ đổi vì cấu trúc tinh thể bị ứng suất (hiệu ứng áp trở). Với kim loại phần này nhỏ; với bán dẫn silic nó lớn hơn hai phần trên hàng chục lần.
Gộp lại: ΔR/R = GF·ε, với hệ số gauge GF = 1 + 2ν + (Δρ/ρ)/ε. Hợp kim constantan có GF khoảng 2. Ở 1000 µε, gauge 350 Ω chỉ đổi khoảng 0,7 Ω, tức 0,2 %. Thay đổi nhỏ như vậy phải đo bằng mạch cầu Wheatstone và bộ khuếch đại hoặc ADC độ phân giải cao.
Constantan được chọn vì GF gần như không đổi trên dải biến dạng rộng, điện trở suất ít đổi theo nhiệt độ và có thể xử lý nhiệt để bù nhiệt (mục 4). Hợp kim karma dùng cho nhiệt độ cao hơn; hợp kim isoelastic có GF khoảng 3,6 và chịu mỏi tốt, dùng đo rung động, nhưng rất nhạy nhiệt nên ít dùng đo tĩnh.
3. Các loại cảm biến biến dạng

- Dây kim loại. Kiểu đầu tiên (cuối thập niên 1930): sợi dây hợp kim rất mảnh uốn qua lại, dán trên giấy. Nay hầu như được thay bằng lá kim loại, trừ một số ứng dụng nhiệt độ cao.
- Lá kim loại. Lưới khắc bằng quang khắc nên kích thước chính xác, mỏng, tản nhiệt tốt, bám chi tiết tốt; là loại dùng trong gần như mọi load cell và phép đo ứng suất.
- Bán dẫn. Một thanh silic nhỏ, hoặc các điện trở được khuếch tán thẳng vào màng silic của cảm biến áp suất MEMS. GF tới 50 đến 150 nên tín hiệu lớn gấp hàng chục lần, nhưng phi tuyến và nhạy nhiệt độ, cần mạch bù.
- Màng mỏng. Lớp cách điện và lưới kim loại được phún xạ thẳng lên màng thép của cảm biến áp suất, không dùng keo; rất bền và ổn định lâu dài.
- Dây rung. Một sợi dây thép căng giữa hai neo gắn vào kết cấu. Biến dạng làm lực căng đổi, tần số rung riêng của dây đổi theo (biến dạng tỉ lệ với bình phương tần số). Cuộn dây vừa gảy vừa đo tần số; tín hiệu tần số không bị ảnh hưởng bởi điện trở dây dài hàng trăm mét, nên được dùng trong quan trắc cầu, đập, đường hầm suốt nhiều năm.
- Cách tử Bragg sợi quang (FBG). Các vạch khắc tuần hoàn trong lõi sợi quang phản xạ đúng một bước sóng; kéo dãn sợi làm khoảng cách vạch đổi nên bước sóng phản xạ dịch đi (khoảng 1,2 pm mỗi µε ở vùng 1550 nm). Một sợi có thể chứa hàng chục điểm đo, không sợ nhiễu điện từ và sét.

4. Hình dạng lưới và bù nhiệt

- Một trục: khi biết chắc hướng ứng suất, ví dụ dọc thanh chịu kéo.
- Hai lưới vuông góc: một lưới dọc, một lưới ngang, mắc vào cầu 1/2 để tăng tín hiệu theo hệ số Poisson và bù nhiệt.
- Hoa hồng ba lưới (0°, 45°, 90°): khi không biết hướng ứng suất chính; từ ba số đo tính ra độ lớn và hướng của hai ứng suất chính.
- Chữ V 90°: hai lưới nghiêng ±45° so với trục, đo biến dạng cắt; dán trên trục quay để đo mô men xoắn.
- Màng tròn: lưới vòng ở tâm và lưới hướng kính ở mép, dán dưới màng của cảm biến áp suất; vùng tâm bị kéo, vùng mép bị nén nên mắc được cầu đủ trên một miếng.
Nhiệt độ là nguồn sai số lớn nhất của strain gauge. Khi chi tiết nóng lên, nó giãn nở (lưới bị kéo theo) và điện trở của lá kim loại cũng đổi, sinh ra một "biến dạng giả" dù không có tải. Strain gauge bù nhiệt tự thân (STC) được xử lý nhiệt để hai hiệu ứng gần triệt tiêu nhau trên đúng một loại vật liệu, nên khi mua phải chọn đúng loại cho thép (khoảng 11 ppm/°C) hay nhôm (khoảng 23 ppm/°C). Phần còn lại được bù bằng gauge giả không chịu tải, hoặc bằng cầu 1/2, cầu đủ có các gauge cùng nhiệt độ.
5. Chế tạo strain gauge lá kim loại

- Cán lá hợp kim. Constantan hoặc karma được cán mỏng còn vài µm và ủ nhiệt; chế độ ủ quyết định hệ số nhiệt, tức gauge sẽ bù nhiệt cho thép hay cho nhôm.
- Dán lên đế. Lá kim loại được ép lên màng polyimide (hoặc nền epoxy, phenol cho nhiệt độ cao) bằng keo chịu nhiệt.
- Quang khắc. Phủ chất cản quang, chiếu tia UV qua một mặt nạ in hình lưới; mỗi tấm lớn chứa hàng trăm gauge giống hệt nhau.
- Ăn mòn hóa học. Phần lá không được che bị ăn mòn, để lại lưới, chỗ hàn và vạch căn hướng. Cách làm giống chế tạo mạch in nhưng nét chỉ rộng vài chục µm.
- Tinh chỉnh và phủ. Điện trở từng gauge được chỉnh về đúng 120 Ω hoặc 350 Ω, phủ lớp bảo vệ, có loại hàn sẵn dây; cắt rời từng gauge.
- Kiểm tra theo lô. Đo điện trở từng chiếc; lấy mẫu dán lên dầm chuẩn cho biến dạng biết trước để xác định GF và đường cong bù nhiệt, ghi lên nhãn gói.
Dán gauge lên chi tiết cũng là một phần của "chế tạo cảm biến": mài nhẵn, làm sạch, căn trục, dán bằng keo chuyên dụng, hàn dây có chỗ giảm lực kéo và phủ chống ẩm. Các bước này được trình bày trong bài đo biến dạng bằng strain gauge đã dẫn ở đầu bài.
6. Thực hành: đo biến dạng bằng cầu 1/4, ADS1115 và ESP32
Ví dụ dán một strain gauge lên một thước thép kẹp một đầu vào mép bàn, ấn đầu kia để thước uốn và đọc biến dạng. Tín hiệu rất nhỏ: với nguồn kích 3,3 V và GF = 2, mỗi 1000 µε chỉ cho khoảng 1,65 mV ở ngõ ra cầu. ADS1115 ở dải ±0,256 V có bước 7,8125 µV, tương ứng khoảng 4,7 µε mỗi bước, đủ để thấy rõ biến dạng khi uốn thước.
Linh kiện
- ESP32 DevKit V1 30 chân.
- Strain gauge hàn sẵn dây, nên chọn loại 350 Ω (ít tự nóng hơn loại 120 Ω), và ba điện trở cùng giá trị với gauge, sai số 0,1 % đến 1 %.
- Module ADC ADS1115.
- Một thước thép hoặc thanh nhôm dẹt, keo dán nhanh (cyanoacrylate), giấy nhám mịn, cồn; breadboard, dây cắm.
Dán gauge
- Chọn chỗ gần đầu kẹp của thước (biến dạng uốn lớn nhất ở đó), đánh nhám nhẹ, lau bằng cồn đến khi giấy lau không còn bẩn.
- Đặt gauge sao cho lưới nằm dọc thước, nhỏ một giọt keo, đặt một miếng băng dính nilon lên trên rồi lấy ngón tay ấn đều khoảng một phút; gỡ băng dính sau khi keo khô.
- Cố định dây dẫn bằng băng dính cách gauge một đoạn để khi dây bị kéo, lực không truyền vào chỗ hàn.
Sơ đồ nối

| Nối từ | Nối tới |
|---|---|
| 3V3 | R1 và R3 (đỉnh trên của cầu) |
| Nút A (giữa R1 và gauge) | ADS1115 AIN0 |
| Nút B (giữa R3 và R4) | ADS1115 AIN1 |
| Gauge và R4 (đỉnh dưới) | GND |
| 3V3 | ADS1115 AIN2 (đo điện áp kích); AIN3 không dùng |
| ADS1115 VDD, GND, SCL, SDA | ESP32 3V3, GND, GPIO22, GPIO21 |
| ADS1115 ADDR | GND (địa chỉ 0x48) |
Giữ dây từ gauge tới cầu ngắn và xoắn đôi: trong cầu 1/4, điện trở dây nằm nối tiếp với gauge, nên dây dài vừa làm giảm độ nhạy vừa trôi theo nhiệt độ. Cách nối ba dây để bù điện trở dây được giải thích trong bài đo biến dạng bằng strain gauge.
Chương trình
/*
PYWORLD.VN - Đo biến dạng (µε) bằng strain gauge cầu 1/4 và ADC 16 bit ADS1115 đọc vi sai, ESP32 ghi thanh ghi qua I2C
Cầu: 3V3 -> R1 -> A -> gauge -> GND và 3V3 -> R3 -> B -> R4 -> GND (ba điện trở bằng điện trở gauge). A vào AIN0, B vào AIN1, 3V3 vào AIN2
ADS1115: SDA GPIO21, SCL GPIO22, ADDR nối GND (0x48). Khởi động khi chưa tải để lấy điểm 0; gõ "z" để lấy lại
*/
#include <Wire.h>
#define CHAN_SDA 21
#define CHAN_SCL 22
const uint8_t DIA_CHI_ADS = 0x48;
const uint8_t THANH_GHI_KET_QUA = 0x00;
const uint8_t THANH_GHI_CAU_HINH = 0x01;
// Cấu hình (đo một lần, 128 mẫu/s, tắt bộ so sánh): AIN0 - AIN1, dải ±0,256 V và AIN2 so với GND, dải ±4,096 V
const uint16_t CAU_HINH_VI_SAI = 0x8B83;
const uint16_t CAU_HINH_KICH = 0xE383;
const float LSB_VI_SAI_UV = 7.8125; // µV mỗi đơn vị ở dải ±0,256 V
const float LSB_KICH_UV = 125.0; // µV mỗi đơn vị ở dải ±4,096 V
const float HE_SO_GF = 2.0; // Gauge factor ghi trên gói strain gauge
const float MO_DUN_E_MPA = 200000.0; // Mô đun đàn hồi của thép (MPa) để đổi biến dạng ra ứng suất
const int SO_LAN_TB = 8;
float vr0 = 0; // Tỉ số Vra/Vkich lúc không tải (cầu lệch sẵn do sai số điện trở)
int16_t docAds(uint16_t cauHinh) {
Wire.beginTransmission(DIA_CHI_ADS);
Wire.write(THANH_GHI_CAU_HINH);
Wire.write(cauHinh >> 8);
Wire.write(cauHinh & 0xFF);
Wire.endTransmission();
delay(9); // Một lần chuyển đổi ở 128 mẫu/s mất khoảng 7,8 ms
Wire.beginTransmission(DIA_CHI_ADS);
Wire.write(THANH_GHI_KET_QUA);
Wire.endTransmission();
if (Wire.requestFrom(DIA_CHI_ADS, (uint8_t)2) != 2) {
return 0;
}
uint8_t cao = Wire.read();
uint8_t thap = Wire.read();
return (int16_t)((cao << 8) | thap);
}
// Tỉ số Vra/Vkich (không đơn vị), trung bình SO_LAN_TB lần; điện áp kích đo lại mỗi lần
float docTiSo(float &uKichMv) {
float tong = 0;
float tongKich = 0;
for (int i = 0; i < SO_LAN_TB; i++) {
float uRa = docAds(CAU_HINH_VI_SAI) * LSB_VI_SAI_UV;
float uKich = docAds(CAU_HINH_KICH) * LSB_KICH_UV;
tong += uRa / uKich;
tongKich += uKich;
}
uKichMv = tongKich / SO_LAN_TB / 1000;
return tong / SO_LAN_TB;
}
void layDiemKhong() {
float uKich;
vr0 = docTiSo(uKich);
Serial.printf("Diem 0: %.4f mV/V (kich %.0f mV)\n", vr0 * 1000, uKich);
}
void setup() {
Serial.begin(115200);
Wire.begin(CHAN_SDA, CHAN_SCL, 400000);
Serial.println("\nDo bien dang: strain gauge cau 1/4 + ADS1115");
Wire.beginTransmission(DIA_CHI_ADS);
if (Wire.endTransmission() != 0) {
Serial.println("Khong thay ADS1115 o dia chi 0x48: kiem tra day SDA, SCL va chan ADDR");
}
layDiemKhong();
}
void loop() {
if (Serial.available()) {
String lenh = Serial.readStringUntil('\n');
lenh.trim();
if (lenh == "z") {
layDiemKhong();
}
}
float uKich;
float vr = docTiSo(uKich) - vr0;
float bienDang = 4 * vr / (HE_SO_GF * (1 - 2 * vr)); // Cầu 1/4, gauge ở nhánh dưới: kéo cho số dương
float ungSuat = MO_DUN_E_MPA * bienDang;
Serial.printf("Vr %+.4f mV/V | bien dang %+.0f ue | ung suat %+.1f MPa (thep)\n", vr * 1000, bienDang * 1e6, ungSuat);
delay(500);
}
Giải thích
- Chương trình không dùng thư viện mà ghi thẳng thanh ghi cấu hình của ADS1115:
0x8B83là đo một lần, vi sai AIN0 − AIN1, dải ±0,256 V, 128 mẫu/s;0xE383là đo AIN2 so với GND ở dải ±4,096 V. Sau mỗi lần ghi cấu hình, chờ khoảng 9 ms rồi đọc hai byte ở thanh ghi kết quả. - Điện áp kích (3V3) được đo lại mỗi lần và lấy tỉ số Vr = U_ra / U_kích. Nhờ vậy nguồn 3V3 dao động vài phần trăm cũng không làm sai kết quả.
- Lúc khởi động (chưa tải) chương trình lấy tỉ số ban đầu làm điểm 0, vì ba điện trở và gauge không bao giờ bằng nhau tuyệt đối nên cầu luôn lệch sẵn một chút. Gõ
zđể lấy lại điểm 0. - Với gauge nằm ở nhánh dưới bên phải, biến dạng tính bằng ε = 4·Vr / (GF·(1 − 2·Vr)); số hạng (1 − 2·Vr) sửa phần phi tuyến nhỏ của cầu 1/4. Kéo cho số dương, nén cho số âm.
- Ứng suất σ = E·ε với E = 200 GPa của thép chỉ đúng khi chi tiết chịu ứng suất một trục, còn trong vùng đàn hồi, như mặt trên của thước khi uốn. Với nhôm, sửa
MO_DUN_E_MPAthành khoảng 70 000. - Cần độ phân giải cao hơn (đo biến dạng vài µε, làm cân) thì dùng module HX711 với hệ số khuếch đại 128, như trong bài làm cân điện tử với ESP32 và HX711.
Kết quả mong đợi

Số đọc nhảy vài µε giữa các lần là nhiễu của phép đo cầu 1/4 với ADC 16 bit. Để yên vài phút, số 0 có thể trôi nhẹ do gauge và điện trở nóng lên vì dòng kích; đây là lý do các phép đo thật dùng cầu 1/2 hoặc cầu đủ, gauge 350 Ω trở lên và điện áp kích vừa phải.
7. Xử lý lỗi thường gặp
| Hiện tượng | Nguyên nhân thường gặp | Cách xử lý |
|---|---|---|
| Báo "Khong thay ADS1115" | Nhầm SDA với SCL, chân ADDR không nối GND | Kiểm tra dây; quét địa chỉ I2C |
| Điểm 0 lệch rất lớn (hàng chục mV/V) | Một nhánh cầu hở hoặc sai giá trị, gauge đứt | Đo điện trở gauge (phải gần 120 Ω hoặc 350 Ω) và ba điện trở còn lại |
| Uốn thước mà số đọc gần như không đổi | Keo chưa bám (gauge bong), dán sai hướng, dán quá xa đầu kẹp | Dán lại sau khi làm sạch kỹ; lưới dọc thước, gần chỗ kẹp |
| Uốn xuống ra số âm thay vì dương | Gauge ở mặt bị nén, hoặc đổi chỗ AIN0 với AIN1 | Bình thường; đổi dây AIN0 và AIN1 nếu muốn đổi dấu |
| Số 0 trôi liên tục | Tự nóng do dòng kích, gió thổi vào gauge, dây dài | Dùng gauge 350 Ω, che gió, rút ngắn dây, chờ ổn định rồi gõ z |
| Thả tay ra không về đúng 0 | Thước bị uốn quá giới hạn đàn hồi, hoặc keo bị trượt | Uốn nhẹ hơn; dán lại gauge |
8. Xem thêm
- Đo biến dạng bằng cảm biến strain gauge: cầu 1/4, 1/2, cầu đủ, lắp đặt và hiệu chuẩn shunt.
- Đo điện áp 16 bit bằng ADS1115 với ESP32.
- I2C là gì và cách đọc ghi thanh ghi trên ESP32.
- Các bài khác trong loạt: cảm biến lực (load cell), cảm biến mô men xoắn, cảm biến áp suất; cả ba đều dùng strain gauge bên trong.
Xem thêm