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

Cấu tạo cảm biến biến dạng dây rung: ống bảo vệ, hai neo ở hai đầu, dây thép căng sẵn giữa hai neo, nam châm và cuộn dây để kích rung và đo, điện trở nhiệt, cáp 4 lõi
Cảm biến biến dạng dây rung (hình minh họa).
  • 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·ε / ρ)

Đồ thị dao động tắt dần của dây 150 mm căng sẵn 2000 microstrain, tần số 752 Hz, 566 digit, trong 20 ms
Dây dao động ở tần số riêng rồi tắt dần.

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ả.

Đồ thị tần số theo biến dạng căng của dây thép dài 150 mm: 1000 microstrain 532 Hz 283 digit, 2000 microstrain 752 Hz 566 digit, 3000 microstrain 922 Hz 849 digit
Biến dạng tỉ lệ với bình phương tần số.

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.
Kết quả script: dây thép 150 mm hệ số lý thuyết 3,53 microstrain mỗi digit; căng sẵn 1000, 2000, 3000 microstrain cho 532, 752, 922 Hz; ví dụ biến dạng trên cột bê tông -29,6 microstrain; ví dụ piezometer 50,08 kPa
Hệ số trong ví dụ là số minh họa.

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

Bảng so sánh dây rung, strain gauge điện trở và sợi quang FBG theo tín hiệu, cáp dài, ổn định nhiều năm, đo động, nhiễu điện và ẩm, giá
Mỗi loại mạnh ở một việc.
  • 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

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.


Tin tức liên quan

CAT III là gì: cấp an toàn CAT II, CAT III, CAT IV của đồng hồ vạn năng và cách chọn
CAT III là gì: cấp an toàn CAT II, CAT III, CAT IV của đồng hồ vạn năng và cách chọn

CAT III đồng hồ vạn năng là gì, các cấp đo lường CAT O, II, III, IV theo vị trí trong hệ thống điện, điện áp xung phải chịu được, cách đọc ký hiệu và chọn đồng hồ theo công việc.

Đồ án ESP32, Arduino cho sinh viên: chọn đề tài, linh kiện, nguồn, hộp và lỗi hay gặp khi bảo vệ
Đồ án ESP32, Arduino cho sinh viên: chọn đề tài, linh kiện, nguồn, hộp và lỗi hay gặp khi bảo vệ

Làm đồ án ESP32, Arduino cho sinh viên: dựng sơ đồ khối, gợi ý đề tài theo độ khó, chọn linh kiện, kế hoạch theo tuần, nguồn, hộp và các lỗi hay gặp khi bảo vệ.

Chọn mạch ESP32 nào: DevKit 30 hay 38 chân, CH340 hay CP2102, bản có OLED, có pin 18650
Chọn mạch ESP32 nào: DevKit 30 hay 38 chân, CH340 hay CP2102, bản có OLED, có pin 18650

Mạch ESP32 là gì, dùng để làm gì và cách chọn bản phù hợp: 30 hay 38 chân, CH340 hay CP2102, Type-C hay Micro USB, anten rời, bản có OLED, có pin 18650, ESP32 Lite.

An toàn điện 220 V khi tự làm mạch: cách ly, cầu chì, varistor, khoảng cách cách điện trên mạch in
An toàn điện 220 V khi tự làm mạch: cách ly, cầu chì, varistor, khoảng cách cách điện trên mạch in

An toàn điện 220 V khi tự làm mạch ESP32, Arduino: chia hai phía cách ly, cầu chì, varistor, khoảng cách cách điện và khe phay trên mạch in, bề rộng đường mạch theo dòng, kiểm tra trước khi cắm điện.

MOSFET: logic-level, điện trở gate, đóng cắt tải dòng lớn bằng PWM của ESP32
MOSFET: logic-level, điện trở gate, đóng cắt tải dòng lớn bằng PWM của ESP32

MOSFET kênh N, kênh P là gì, vì sao chọn MOSFET logic-level cho ESP32 3,3 V, VGS(th) và RDS(on), mạch đóng cắt phía thấp có điện trở gate, PWM và thí nghiệm chỉnh độ sáng dải LED 12 V.

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
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.

OLED 0.96 hay 1.3 inch, SSD1306 hay SH1106: chọn màn hình nào và dùng thư viện nào cho đúng
OLED 0.96 hay 1.3 inch, SSD1306 hay SH1106: chọn màn hình nào và dùng thư viện nào cho đúng

So sánh OLED 0,96 inch và 1,3 inch, SSD1306 khác SH1106 ở đâu, chương trình kiểm tra màn dùng chip nào, hiện tượng khi chọn nhầm thư viện và cách đổi chương trình từ SSD1306 sang SH1106.

Pin 18650 dòng xả cao: Samsung 25R, 30Q, LG HG2, Murata VTC6, C-rate và chọn cell cho khối pin
Pin 18650 dòng xả cao: Samsung 25R, 30Q, LG HG2, Murata VTC6, C-rate và chọn cell cho khối pin

Pin 18650 dòng xả cao là gì: dòng xả liên tục, C-rate, đánh đổi với dung lượng, điện trở trong và sụt áp, bảng cell Samsung, LG, Murata theo datasheet, chọn số cell song song; có script.


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