Cảm biến dây rung (vibrating wire): cấu tạo, nguyên lý, đổi digit ra biến dạng, áp lực, đo lâu dài
Cảm biến dây rung là gì: cấu tạo, vì sao tần số dây đổi theo biến dạng, đơn vị digit, công thức đổi ra biến dạng và áp lực nước lỗ rỗng có hiệu chỉnh nhiệt, so với strain gauge; script Python.
Cảm biến dây rung (vibrating wire) là loại cảm biến quen thuộc trong quan trắc công trình: đo biến dạng bê tông, cốt thép, áp lực nước lỗ rỗng trong nền đất, lực trong neo, độ mở khe nứt của đập, hầm, móng, mố cầu. Điểm khác biệt là tín hiệu ra là tần số chứ không phải điện áp, nhờ vậy cáp dài hàng km vẫn đọc đúng và cảm biến ổn định nhiều năm. Bài này giải thích cấu tạo, vì sao tần số đổi theo biến dạng, đơn vị "digit", cách đổi số đọc ra biến dạng và áp lực có hiệu chỉnh nhiệt độ, so sánh với strain gauge điện trở. Bài có script Python tính.
Lưu ý không nhầm với "cảm biến rung" (đo dao động của máy móc, thường có loại không dây): đó là gia tốc kế, đo rung động; cảm biến dây rung đo đại lượng tĩnh như biến dạng, áp lực.
1. Cấu tạo

- Dây thép căng sẵn giữa hai neo, nằm trong ống bảo vệ kín nước.
- Hai neo gắn vào kết cấu: chôn trong bê tông, hàn hoặc bắt vít lên thép. Kết cấu biến dạng kéo hai neo xa ra hoặc gần lại, lực căng của dây đổi theo.
- Nam châm và cuộn dây: bộ đọc gửi xung (hoặc quét tần số) qua cuộn dây để làm dây rung; sau đó cũng cuộn dây đó nhận tín hiệu cảm ứng khi dây dao động trong từ trường.
- Điện trở nhiệt đo nhiệt độ tại cảm biến, dùng để hiệu chỉnh.
Cảm biến áp lực nước lỗ rỗng (piezometer) dùng cùng nguyên lý: nước qua lớp lọc ép lên màng, màng võng kéo một đầu dây, lực căng dây giảm khi áp lực tăng.
2. Vì sao tần số đổi theo biến dạng
Dây căng dao động ở tần số riêng như dây đàn: f = (1 / 2L) × √(T / μ), với L là chiều dài, T là lực căng, μ là khối lượng một mét dây. Với dây thép, lực căng T = E·A·ε và μ = ρ·A, nên diện tích dây triệt tiêu:
f = (1 / 2L) × √(E·ε / ρ)

Dây thép dài 150 mm căng sẵn 2000 µε dao động khoảng 752 Hz. Bộ đọc chỉ cần đo tần số (đếm chu kỳ hoặc phân tích phổ); biên độ tắt dần nhanh hay chậm không ảnh hưởng kết quả.

Bình phương hai vế: ε = (4L²ρ / E) × f². Biến dạng tỉ lệ thẳng với f², không phải với f. Vì vậy bộ đọc dây rung thường hiện số đọc theo đơn vị digit = f² / 1000 (có hãng gọi là đơn vị B hoặc Hz²/1000): biến dạng thay đổi tỉ lệ thẳng với số digit thay đổi. Với dây 150 mm, lý thuyết cho khoảng 3,5 µε mỗi digit; hệ số thật của từng loại cảm biến khác một chút do kẹp dây, độ dài hiệu dụng, và được hãng ghi trong phiếu hiệu chuẩn.
3. Đổi số đọc ra biến dạng và áp lực
Quan trắc dây rung luôn đo so với lần đọc gốc: đọc R0 (digit) và T0 (°C) ngay sau khi lắp, các lần sau đọc R1, T1.
3.1 Cảm biến biến dạng
Biến dạng do tải (µε) = (R1 − R0) × B + (T1 − T0) × (C1 − C2)
- B: hệ số µε/digit của cảm biến (phiếu hiệu chuẩn).
- C1: hệ số giãn nở nhiệt của dây thép, khoảng 12,2 µε/°C; C2: của vật liệu kết cấu (bê tông thường khoảng 10 µε/°C, thép khoảng 12 µε/°C).
- Khi nhiệt độ tăng, cả dây và kết cấu cùng giãn: trên thép, hai bên giãn gần như nhau nên số hiệu chỉnh nhỏ; trên bê tông thì cần cộng phần chênh lệch.
Ví dụ: gốc 640,0 digit ở 28 °C; lần đọc sau 628,4 digit ở 33 °C; B = 3,5; C2 = 10: biến dạng = (628,4 − 640,0) × 3,5 + 5 × (12,2 − 10) = −29,6 µε (nén).
3.2 Piezometer (áp lực nước lỗ rỗng)
Áp lực (kPa) = G × (R0 − R1) + K × (T1 − T0), với G là kPa/digit, K là kPa/°C trong phiếu hiệu chuẩn. Áp lực tăng thì dây chùng, tần số giảm, R1 nhỏ hơn R0. Piezometer kiểu kín còn cần trừ thay đổi áp suất khí quyển nếu muốn độ chính xác cao. Ví dụ: gốc 8500,0 digit ở 27 °C; đọc 8166,0 digit ở 26 °C; G = 0,15; K = 0,02: áp lực ≈ 50,1 kPa, tương đương cột nước khoảng 5,1 m.
3.3 Script tính
# PYWORLD.VN - Cảm biến dây rung: tần số theo biến dạng của dây, đổi số đọc (digit = f²/1000) ra biến dạng và áp lực nước lỗ rỗng
# PYWORLD.VN - Công thức dạng chung của tài liệu các hãng; hệ số thật lấy trong phiếu hiệu chuẩn đi kèm từng cảm biến
# PYWORLD.VN - Chạy: python tinh_day_rung.py vat_ly | bien_dang R0 R1 T0 T1 | ap_luc R0 R1 T0 T1 | mau
"""Tính cho cảm biến dây rung (vibrating wire).
vat_ly tần số của dây thép dài L theo biến dạng căng sẵn, hệ số lý thuyết µε/digit
bien_dang R0 R1 T0 T1 biến dạng do tải (µε) = (R1 - R0) x B + (T1 - T0) x (C1 - C2)
ap_luc R0 R1 T0 T1 áp lực (kPa) = G x (R0 - R1) + K x (T1 - T0)
mau in ví dụ cho hình trong bài
R là số đọc theo digit (f² / 1000), T là nhiệt độ (°C) đọc từ điện trở nhiệt trong cảm biến; chỉ số 0 là lần đọc gốc.
"""
from __future__ import annotations
import argparse
import math
E_THEP = 200e9 # Pa, mô đun đàn hồi của dây thép
RHO_THEP = 7850.0 # kg/m³
C1_DAY = 12.2 # µε/°C, hệ số giãn nở của dây thép (giá trị hay dùng trong tài liệu hãng)
def tan_so(chieu_dai_m: float, bien_dang_day: float) -> float:
"""f = 1/(2L) x căn(T/µ) với T = E.A.ε, µ = ρ.A, nên f = 1/(2L) x căn(E.ε/ρ)."""
return math.sqrt(E_THEP * bien_dang_day / RHO_THEP) / (2 * chieu_dai_m)
def he_so_ly_thuyet(chieu_dai_m: float) -> float:
"""ε = 4L²ρ/E x f², đổi sang µε cho mỗi digit (1 digit = 1000 Hz²)."""
return 4 * chieu_dai_m ** 2 * RHO_THEP / E_THEP * 1e6 * 1000
def digit(f_hz: float) -> float:
return f_hz ** 2 / 1000
def bien_dang(r0, r1, t0, t1, b=3.5, c2=10.0) -> float:
"""B: hệ số µε/digit của cảm biến; C2: hệ số giãn nở của vật liệu kết cấu (bê tông khoảng 10, thép 12,2)."""
return (r1 - r0) * b + (t1 - t0) * (C1_DAY - c2)
def ap_luc(r0, r1, t0, t1, g=0.15, k=0.02) -> float:
"""G: kPa/digit của piezometer; K: kPa/°C hiệu chỉnh nhiệt (cả hai lấy từ phiếu hiệu chuẩn)."""
return g * (r0 - r1) + k * (t1 - t0)
def main() -> None:
ap = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
ap.add_argument("cach", choices=["vat_ly", "bien_dang", "ap_luc", "mau"])
ap.add_argument("so", nargs="*", type=float)
ap.add_argument("--L", type=float, default=0.15, help="chieu dai day, m (mac dinh 0.15)")
ap.add_argument("--B", type=float, default=3.5, help="he so cam bien bien dang, microstrain/digit")
ap.add_argument("--C2", type=float, default=10.0, help="he so gian no cua ket cau, microstrain/do C")
ap.add_argument("--G", type=float, default=0.15, help="he so piezometer, kPa/digit")
ap.add_argument("--K", type=float, default=0.02, help="hieu chinh nhiet piezometer, kPa/do C")
a = ap.parse_args()
if a.cach == "vat_ly":
print(f"Day thep dai {a.L * 1000:.0f} mm, he so ly thuyet {he_so_ly_thuyet(a.L):.2f} microstrain/digit")
for ue in (1000, 2000, 3000):
f = tan_so(a.L, ue * 1e-6)
print(f" cang san {ue} microstrain: f = {f:.0f} Hz = {digit(f):.0f} digit")
elif a.cach == "bien_dang":
print(f"Bien dang do tai: {bien_dang(*a.so, b=a.B, c2=a.C2):+.1f} microstrain")
elif a.cach == "ap_luc":
print(f"Ap luc nuoc lo rong: {ap_luc(*a.so, g=a.G, k=a.K):+.2f} kPa")
else:
L = 0.15
print(f"Day thep dai {L * 1000:.0f} mm, he so ly thuyet {he_so_ly_thuyet(L):.2f} microstrain/digit")
for ue in (1000, 2000, 3000):
f = tan_so(L, ue * 1e-6)
print(f" cang san {ue} microstrain: f = {f:.0f} Hz = {digit(f):.0f} digit")
print("Cam bien bien dang tren cot be tong (B = 3.5, C2 = 10):")
print(f" goc 640.0 digit, 28 do C; doc 628.4 digit, 33 do C -> {bien_dang(640.0, 628.4, 28, 33):+.1f} microstrain (nen)")
print("Piezometer (G = 0.15 kPa/digit, K = 0.02 kPa/do C):")
print(f" goc 8500.0 digit, 27 do C; doc 8166.0 digit, 26 do C -> {ap_luc(8500.0, 8166.0, 27, 26):+.2f} kPa")
if __name__ == "__main__":
main()
python tinh_day_rung.py vat_ly --L 0.15: tần số và hệ số lý thuyết cho dây dài 150 mm.python tinh_day_rung.py bien_dang 640 628.4 28 33 --B 3.5 --C2 10: biến dạng do tải.python tinh_day_rung.py ap_luc 8500 8166 27 26 --G 0.15 --K 0.02: áp lực nước lỗ rỗng.

4. Vì sao dùng cho đo lâu dài

- Tín hiệu tần số không sợ cáp dài: điện trở của cáp, rò rỉ nhẹ do ẩm, nhiễu điện làm sai lệch tín hiệu vài mV của strain gauge điện trở, nhưng không làm đổi tần số. Cảm biến đặt sâu trong thân đập nối cáp hàng trăm mét tới hàng km về trạm đọc vẫn đúng.
- Ổn định nhiều năm: không có lớp keo giữa dây và kết cấu (dây kẹp cơ khí vào neo), không bị trôi điểm 0 như strain gauge dán bị ẩm. Công trình theo dõi hàng chục năm vì thế hay chọn dây rung.
- Không đo động: mỗi lần đọc phải kích rung rồi chờ dây dao động, mất cỡ một phần giây; không bắt được rung động, va đập. Đo động dùng strain gauge điện trở hoặc sợi quang.
- Giá cảm biến và bộ đọc cao hơn strain gauge điện trở nhiều lần.
Strain gauge điện trở và cách dán cho thí nghiệm, đo ngắn hạn có ở bài cảm biến biến dạng (strain gauge): cấu tạo, nguyên lý; loại shop có bán là strain gauge 120 Ω, 350 Ω hàn sẵn dây.
5. Lưu ý khi lắp và đọc
- Đọc giá trị gốc sau khi cảm biến ổn định nhiệt với môi trường; với bê tông, đọc sau khi đổ và theo dõi cả giai đoạn bê tông đông kết, tỏa nhiệt.
- Ghi lại số seri, phiếu hiệu chuẩn (B hoặc G, K) của từng cảm biến; dùng nhầm hệ số giữa các cảm biến là lỗi hay gặp.
- Bảo vệ cáp, đánh dấu hai đầu cáp. Cảm biến không đọc được sau này thì không thay được nếu đã chôn trong bê tông.
- Bộ đọc cầm tay hoặc bộ ghi dữ liệu tự động phải hỗ trợ dải tần số của cảm biến (biến dạng thường vài trăm tới khoảng 1500 Hz, piezometer có thể tới 3000 Hz hoặc hơn).
6. Xem thêm
- Cảm biến biến dạng (strain gauge): cấu tạo, nguyên lý, các loại
- Đo biến dạng bằng cảm biến strain gauge
Bài cùng cụm chủ đề: quan trắc sức khỏe kết cấu (SHM); quan trắc công trình; dán strain gauge lên thép và bê tông; cầu Wheatstone.
Xem thêm