Đo chuyển vị bằng cảm biến laser khoảng cách: chọn loại, lắp đặt, sai số, theo dõi nâng hạ kết cấu

Dùng cảm biến laser đo khoảng cách để đo chuyển vị khi nâng hạ kết cấu: chọn loại tam giác, đo pha, ToF; lắp trên khung chuẩn; sai số nhiệt, cosin; ESP32 đọc 4–20 mA qua ADS1115, ngưỡng dừng nâng.

Cảm biến laser đo khoảng cách đo chuyển vị không cần chạm vào vật: chiếu tia laser lên một tấm đích gắn trên kết cấu và cho ra khoảng cách, đổi khoảng cách đó thành chuyển vị. Khi nâng, hạ dầm, sàn, bể chứa bằng kích thủy lực, cảm biến laser cho biết từng điểm đã lên bao nhiêu milimét, hai đầu có lên đều không, để dừng kích trước khi kết cấu bị vặn. Bài này hướng dẫn chọn loại cảm biến laser, lắp đặt trên khung chuẩn, các nguồn sai số đáng kể, và chương trình ESP32 đọc hai cảm biến ngõ ra 4–20 mA qua ADS1115 có ngưỡng cảnh báo, ngưỡng dừng nâng.

1. Chọn loại cảm biến

Bảng ba loại cảm biến laser đo khoảng cách: tam giác dải 10 tới 500 mm phân giải 1 tới 50 µm ngõ ra 4–20 mA; đo pha dải tới 100 m phân giải 0,1 tới 1 mm; ToF nhỏ dải 4 m sai số vài mm ngõ ra I2C
Theo dõi nâng hạ dùng loại tam giác.
  • Laser tam giác: chiếu tia lên đích, đo vị trí điểm sáng phản xạ trên cảm biến ảnh; dải ngắn (vài chục tới vài trăm mm) nhưng phân giải tới micromét, có ngõ ra 4–20 mA, 0–10 V hoặc RS-485. Đúng loại cho nâng hạ, thí nghiệm kết cấu.
  • Máy đo xa đo pha: dải tới hàng chục mét, sai số khoảng 1 mm, dùng cho lún, nghiêng đo từ xa.
  • Cảm biến ToF nhỏ (loại VL53L0X, VL53L1X): rẻ, giao tiếp I2C, sai số vài milimét; hợp với mô hình, thử nghiệm, không đủ cho theo dõi kết cấu thật.

Cấu tạo, nguyên lý của các loại cảm biến chuyển vị (biến trở, LVDT, điện dung, laser) có ở bài cảm biến chuyển vị.

2. Lắp đặt

Lắp đặt hai cảm biến laser A và B trên khung chuẩn độc lập ở hai đầu dầm, chiếu lên tấm đích dán dưới dầm, kích thủy lực đặt dưới dầm, khung chuẩn đứng trên nền ổn định
Khung chuẩn phải đứng yên khi kết cấu chuyển động.
  • Khung chuẩn: cột thép ngắn, chân đặt trên nền ổn định, không chạm kích, không nối với kết cấu được nâng. Mọi chuyển động của khung đều vào thẳng số đo.
  • Tấm đích: tấm nhôm hoặc nhựa sáng màu, mặt nhám, dán chắc dưới dầm, vuông góc với tia laser. Mặt bóng, sơn đen, bê tông ướt làm tín hiệu yếu hoặc nhảy.
  • Đặt cảm biến ở giữa dải đo lúc bắt đầu, chừa dải cho cả chiều lên và chiều xuống; dải 100 mm thì đặt khoảng giữa.
  • Hai điểm trở lên ở hai đầu dầm (hoặc mỗi kích một điểm) để biết nâng có đều không.
  • Che nắng trực tiếp cho cảm biến và giá đỡ; nắng chiếu vào đích cũng làm cảm biến khó đọc.

3. Nguồn sai số

Bảng sai số ở chuyển vị 10 mm: lệch góc 2 độ 0,0061 mm, lệch 5 độ 0,0381 mm, giãn nở giá đỡ nhôm cao 200 mm nhiệt độ đổi 10 độ C 0,046 mm, thép 0,024 mm, điện trở 0,1 % 0,010 mm, bước ADS1115 0,0052 mm
Giãn nở nhiệt của giá đỡ thường là sai số lớn nhất.

Với chuyển vị 10 mm, lệch góc vài độ chỉ gây sai số vài phần trăm milimét; còn giá đỡ nhôm cao 200 mm khi nắng chiếu làm nóng thêm 10 °C đã dài ra 0,046 mm. Giá đỡ ngắn, bằng thép, che nắng, và ghi nhiệt độ kèm số đo khi theo dõi qua nhiều giờ. Cách tính sai số cosin, Abbe, giãn nở nhiệt có ở bài sai số Abbe, cosin và giãn nở nhiệt; cách hiệu chuẩn cảm biến laser có ở bài hiệu chuẩn cảm biến laser theo ISO 9513.

4. Đọc ngõ ra 4–20 mA bằng ESP32

Sơ đồ khối đọc cảm biến laser 4–20 mA: cảm biến cấp 24 V, dòng ra qua điện trở 150 Ω thành 0,6 tới 3,0 V, ADS1115 đọc kênh A0 A1 qua I2C, ESP32 xử lý và bật còi GPIO25
Một điện trở chính xác biến dòng thành áp.
  • Ngõ ra dòng 4–20 mA ít bị ảnh hưởng bởi dây dài và nhiễu, hợp công trường. 4 mA là đầu dải, 20 mA là cuối dải; dòng dưới khoảng 3,8 mA nghĩa là đứt dây hoặc cảm biến lỗi.
  • Điện trở 150 Ω (sai số 0,1 %) đổi 4–20 mA thành 0,6–3,0 V, nằm trong dải đo ±4,096 V của ADS1115 khi ADS1115 chạy 3,3 V.
  • 0 V của nguồn 24 V nuôi cảm biến nối chung với GND của ADS1115 và ESP32.

Đo ngõ ra 4–20 mA và sơ đồ vòng dòng có thêm ở bài hiệu chuẩn transmitter 4–20 mA.

// PYWORLD.VN - Theo dõi chuyển vị khi nâng hạ kết cấu bằng 2 cảm biến laser ngõ ra 4–20 mA: ESP32 đọc qua ADS1115 16 bit
// PYWORLD.VN - Dòng 4–20 mA qua điện trở 150 Ω thành 0,6–3,0 V; đổi ra mm theo dải đo, lấy điểm 0 bằng lệnh "z", báo vượt ngưỡng và chênh lệch 2 điểm
// PYWORLD.VN - ADS1115: SDA -> D21, SCL -> D22, VDD -> 3V3; cảm biến A vào kênh A0, cảm biến B vào kênh A1; còi báo GPIO25

#include <Wire.h>
#include <Adafruit_ADS1X15.h>

Adafruit_ADS1115 ads;
const float R_SHUNT = 150.0f;                      // Ω, loại sai số 0,1 %
const float DAI_DO_MM = 100.0f;                    // 4 mA = 0 mm, 20 mA = 100 mm (sửa theo cảm biến)
const float NGUONG_CANH_BAO = 5.0f, NGUONG_DUNG = 8.0f;   // mm so với điểm 0
const float NGUONG_LECH = 3.0f;                    // mm: chênh lệch giữa hai điểm (nâng không đều)
const int CHAN_COI = 25, SO_MAU = 16;
float diemKhong[2] = {0, 0};

// Trả về mm của một kênh, NAN nếu dòng ngoài 3,8–20,5 mA (đứt dây, cảm biến lỗi, ngoài dải)
float docMm(uint8_t kenh) {
  float tong = 0;
  for (int i = 0; i < SO_MAU; i++) tong += ads.computeVolts(ads.readADC_SingleEnded(kenh));
  float mA = tong / SO_MAU / R_SHUNT * 1000.0f;
  if (mA < 3.8f || mA > 20.5f) return NAN;
  return (mA - 4.0f) / 16.0f * DAI_DO_MM;
}

void setup() {
  Serial.begin(115200);
  pinMode(CHAN_COI, OUTPUT);
  Wire.begin(21, 22);
  if (!ads.begin(0x48)) {
    Serial.println("Khong thay ADS1115 o 0x48");
    while (true) delay(1000);
  }
  ads.setGain(GAIN_ONE);                           // ±4,096 V, 0,125 mV mỗi bước
  ads.setDataRate(RATE_ADS1115_128SPS);
  Serial.println("Go z de lay diem 0 truoc khi bat dau nang");
}

void loop() {
  if (Serial.available() && Serial.read() == 'z') {
    for (int k = 0; k < 2; k++) diemKhong[k] = docMm(k);
    Serial.printf("Diem 0: A %.3f mm, B %.3f mm\n", diemKhong[0], diemKhong[1]);
  }
  float a = docMm(0) - diemKhong[0], b = docMm(1) - diemKhong[1];
  const char *muc = "OK";
  if (isnan(a) || isnan(b)) {
    muc = "LOI CAM BIEN";                           // dòng ngoài dải: coi như nguy hiểm, dừng nâng
  } else if (fabsf(a) >= NGUONG_DUNG || fabsf(b) >= NGUONG_DUNG || fabsf(a - b) >= NGUONG_LECH) {
    muc = "DUNG NANG";
  } else if (fabsf(a) >= NGUONG_CANH_BAO || fabsf(b) >= NGUONG_CANH_BAO) {
    muc = "CANH BAO";
  }
  digitalWrite(CHAN_COI, strcmp(muc, "OK") != 0 ? HIGH : LOW);
  Serial.printf("A %+7.3f mm | B %+7.3f mm | lech %+6.3f mm | %s\n", a, b, a - b, muc);
  delay(500);
}
  • Gõ z trong Serial Monitor trước khi bắt đầu nâng để lấy điểm 0 cho cả hai cảm biến.
  • Ba mức: CANH BAO khi một điểm đã chuyển vị từ 5 mm; DUNG NANG khi một điểm từ 8 mm hoặc hai điểm lệch nhau từ 3 mm; LOI CAM BIEN khi dòng ngoài dải. Còi kêu ở mọi mức khác OK. Các ngưỡng là ví dụ: lấy theo biện pháp thi công và tính toán kết cấu của từng công trình.
  • Sửa DAI_DO_MM đúng dải của cảm biến (ghi trong datasheet: 4 mA ứng với bao nhiêu, 20 mA ứng với bao nhiêu).
Serial Monitor theo dõi nâng: hai điểm A B lên dần, A qua 5 mm báo CANH BAO, B tụt lại làm chênh lệch quá 3 mm báo DUNG NANG
Quá trình nâng giả định.

Hệ thống này là công cụ hỗ trợ theo dõi; quyết định dừng nâng vẫn do người chỉ huy thi công. Cần lưu số liệu lâu dài, gửi lên điện thoại thì ghép thêm phần ghi thẻ nhớ hoặc gửi MQTT.

5. Lỗi hay gặp

Hiện tượngNguyên nhânCách xử lý
Báo LOI CAM BIEN dù cảm biến sáng đènĐích ngoài dải đo, đứt dây tín hiệu, thiếu dây 0 V chungDời cảm biến về giữa dải; kiểm tra dây, nối chung 0 V
Số nhảy vài phần mười mm khi đứng yênMặt đích bóng, tối, nắng chiếu, rungĐổi tấm đích nhám sáng, che nắng; tăng số mẫu trung bình
Số trôi chậm theo giờ trong ngàyGiá đỡ, khung chuẩn giãn nở theo nhiệtGiá đỡ thép ngắn, che nắng; ghi nhiệt độ để hiệu chỉnh
Hai điểm báo lệch nhưng nhìn thấy nâng đềuMột khung chuẩn bị chạm, bị kéo theo kết cấuKiểm tra khung chuẩn đứng độc lập
Chuyển vị đúng chiều nhưng sai độ lớnSai DAI_DO_MM hoặc sai giá trị điện trởĐối chiếu datasheet; đo lại điện trở

Sản phẩm dùng trong bài: mạch ADC ADS1115 16 bit, ESP32 DevKit V1 30 chân.

Bài cùng cụm chủ đề: quan trắc lún công trình bằng hệ thủy lực; đo dao động công trình bằng gia tốc kế.


Tin tức liên quan

Điều khiển hồng ngoại hoạt động thế nào: sóng mang 38 kHz, giao thức NEC và ESP32
Điều khiển hồng ngoại hoạt động thế nào: sóng mang 38 kHz, giao thức NEC và ESP32

Giải thích điều khiển hồng ngoại: sóng mang 38 kHz, mắt thu và giao thức NEC với khung 32 bit, mã lặp. Hướng dẫn tự giải mã phím điều khiển và tự phát lệnh bằng ESP32, không dùng thư viện ngoài.

Chọn bo mạch lập trình đầu tiên cho học sinh: ESP32, Arduino Nano hay micro:bit
Chọn bo mạch lập trình đầu tiên cho học sinh: ESP32, Arduino Nano hay micro:bit

So sánh ESP32 DevKit V1, Arduino Nano và micro:bit cho học sinh: có sẵn gì trên mạch, lập trình bằng gì, làm được dự án gì, chọn theo mục tiêu và những thứ cần mua kèm.

Đồng hồ nhiệt độ, độ ẩm mini: đọc chỉ số, độ ẩm phòng bao nhiêu là vừa, mùa nồm và khi cất máy ảnh
Đồng hồ nhiệt độ, độ ẩm mini: đọc chỉ số, độ ẩm phòng bao nhiêu là vừa, mùa nồm và khi cất máy ảnh

Đồng hồ nhiệt độ, độ ẩm mini: các loại, cách đặt và đọc chỉ số, độ ẩm trong phòng bao nhiêu là vừa, mùa nồm và điểm sương, kiểm tra bằng muối ăn, theo dõi khi cất máy ảnh.

RS-485 là gì: cặp dây vi sai, điện trở đầu cuối và cách dùng module MAX485 với ESP32
RS-485 là gì: cặp dây vi sai, điện trở đầu cuối và cách dùng module MAX485 với ESP32

Giải thích chuẩn RS-485: tín hiệu vi sai trên hai dây A, B, điện trở đầu cuối 120 Ω, truyền bán song công với chân DE, RE. Kèm sơ đồ nối module MAX485 và chương trình hỏi đáp giữa hai mạch ESP32.

Mạch RC: tụ nạp xả, hằng số thời gian và đo điện dung bằng ESP32
Mạch RC: tụ nạp xả, hằng số thời gian và đo điện dung bằng ESP32

Tụ nạp và xả qua điện trở, hằng số thời gian τ = R × C, các mốc 63,2 % và 5τ, ứng dụng lọc thông thấp, lọc PWM, chống dội nút nhấn, thí nghiệm đo τ và điện dung tụ bằng ESP32.

Bộ lọc Kalman là gì: Kalman một chiều cho cảm biến, chọn Q và R, quan hệ với lọc EMA
Bộ lọc Kalman là gì: Kalman một chiều cho cảm biến, chọn Q và R, quan hệ với lọc EMA

Bộ lọc Kalman là gì, giải thích bằng ví dụ một chiều: dự đoán và cập nhật, ý nghĩa Q, R, P, K; mô phỏng ba giá trị Q; K ổn định và quan hệ với EMA; cách chọn Q, R; code ESP32 tự đo nhiễu R.

Trò chơi đo phản xạ với ESP32 và màn hình OLED 4 nút: đo thời gian, tính trung bình
Trò chơi đo phản xạ với ESP32 và màn hình OLED 4 nút: đo thời gian, tính trung bình

Làm trò chơi đo phản xạ bằng ESP32 và màn hình OLED kèm 4 nút: kiểm tra nút, đo thời gian bằng millis, chờ ngẫu nhiên, tính trung bình 5 lượt, thí nghiệm cho học sinh.

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.


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