Data logger là gì: chọn data logger quan trắc theo số kênh, độ phân giải, nguồn pin và chống sét
Data logger là gì, gồm những gì; các loại ngõ vào 4–20 mA, mV, nhiệt độ, dây rung, xung, RS-485; cách tính độ phân giải ADC, bộ nhớ, pin, tấm pin mặt trời; chống sét, chống nước ngoài trời.
Data logger là gì? Data logger (bộ ghi dữ liệu) là thiết bị tự đo các cảm biến theo chu kỳ và ghi lại số liệu kèm thời gian, chạy một mình nhiều ngày tới nhiều năm: đo nhiệt độ kho lạnh, mực nước giếng quan trắc, áp lực đất, biến dạng công trình, lượng mưa, điện năng. Bài này giải thích cấu tạo của một data logger, các loại ngõ vào cảm biến, cách tính độ phân giải ADC, dung lượng bộ nhớ, thời gian chạy pin, tấm pin mặt trời, và các biện pháp chống sét, chống nước khi đặt ngoài trời, kèm script Python tính nhanh.
1. Data logger gồm những gì

Khác với một mạch đo thông thường, data logger phải tự chạy lâu không có người: ngủ phần lớn thời gian để tiết kiệm điện, thức dậy đúng giờ (nhờ đồng hồ thời gian thực RTC), cấp nguồn cho cảm biến, đo, ghi vào bộ nhớ không mất khi mất điện, thỉnh thoảng gửi số liệu về máy chủ. Temperature data logger (bộ ghi nhiệt độ) là loại đơn giản nhất: một hoặc vài cảm biến nhiệt, pin, bộ nhớ, thường dùng cho kho lạnh, xe chở vắc-xin, thực phẩm.
2. Các loại ngõ vào

Logger thương mại ghi rõ số kênh từng loại; logger tự làm thì phải có mạch tương ứng cho từng loại: điện trở đo cho 4–20 mA (xem bài vòng dòng 4–20 mA), đầu vào vi sai cho tín hiệu mV, mạch kích riêng cho cảm biến dây rung. Cảm biến số RS-485 Modbus ngày càng phổ biến vì chống nhiễu tốt và một đôi dây nối được nhiều cảm biến.
3. Tính độ phân giải, bộ nhớ, pin

- Độ phân giải: số bit cần ≈ log₂(khoảng đo ÷ bước nhỏ nhất muốn thấy), cộng thêm vài bit vì nhiễu làm mất các bit thấp. ADC 12 bit của vi điều khiển chỉ đủ cho đo thô; đo 4–20 mA, cầu điện trở nên dùng ADC 16 bit như ADS1115 hoặc 24 bit.
- Bộ nhớ: ghi dạng số nhị phân rất ít tốn chỗ; 8 kênh, 10 phút một lần cả năm chỉ khoảng 2 MB. Ghi dạng chữ CSV tốn gấp vài lần nhưng vẫn nhỏ so với thẻ nhớ.
- Pin: phần tốn nhất thường là cấp nguồn cho cảm biến (vòng 4–20 mA ở 24 V) và gửi qua 4G, không phải vi điều khiển. Chỉ bật nguồn cảm biến vài giây lúc đo, gửi gom theo giờ thay vì mỗi lần đo.
- Tấm pin mặt trời: năng lượng mỗi ngày chia cho số giờ nắng tương đương (miền Nam khoảng 4–5, miền Bắc mùa đông thấp hơn nhiều) và hệ số tổn hao, rồi nhân dư nhiều lần cho những ngày mưa liên tiếp.
# PYWORLD.VN - Tính nhanh khi chọn data logger quan trắc: độ phân giải ADC cần, dung lượng bộ nhớ, thời gian chạy pin, công suất tấm pin mặt trời
# PYWORLD.VN - Ví dụ: 8 kênh (4–20 mA, nhiệt độ), đo 10 phút một lần, gửi 4G mỗi giờ, chạy pin có sạc mặt trời ở công trường
# PYWORLD.VN - Chạy: python chon_data_logger.py (sửa các số trong phần __main__ theo hệ của bạn)
import math
def bit_can(khoang_do: float, do_phan_giai_can: float, du_phong_nhieu: int = 2) -> int:
"""Số bit ADC cần để thấy được do_phan_giai_can trên khoảng đo; cộng thêm vài bit vì nhiễu làm mất bit thấp."""
return math.ceil(math.log2(khoang_do / do_phan_giai_can)) + du_phong_nhieu
def bo_nho_mb(so_kenh: int, chu_ky_phut: float, so_ngay: float, byte_moi_kenh: int = 4, byte_thoi_gian: int = 8) -> float:
so_lan = so_ngay * 24 * 60 / chu_ky_phut
return so_lan * (so_kenh * byte_moi_kenh + byte_thoi_gian) / 1e6
def nang_luong_ngay_mah(ngu_ma: float, do_ma: float, t_do_s: float, chu_ky_do_s: float, gui_ma: float, t_gui_s: float, chu_ky_gui_s: float) -> float:
"""Dung lượng tiêu thụ mỗi ngày (mAh): ngủ phần lớn thời gian, thức dậy đo, thỉnh thoảng gửi."""
ngay = 86400
t_do = ngay / chu_ky_do_s * t_do_s
t_gui = ngay / chu_ky_gui_s * t_gui_s
return (ngu_ma * (ngay - t_do - t_gui) + do_ma * t_do + gui_ma * t_gui) / 3600
def tam_pin_w(mah_ngay: float, v_pin: float = 3.7, gio_nang: float = 3.5, he_so: float = 0.6) -> float:
"""Công suất tấm pin mặt trời: năng lượng ngày ÷ (giờ nắng tương đương × hệ số tổn hao: bộ sạc, bụi, góc nghiêng, nhiệt)."""
return mah_ngay / 1000 * v_pin / (gio_nang * he_so)
if __name__ == "__main__":
print(f"4-20 mA qua 150 Ohm (0,6-3 V), muon thay 0,01 % thang: can {bit_can(2.4, 2.4 * 1e-4)} bit")
print(f"Nhiet do -20..80 C, muon thay 0,05 C: can {bit_can(100, 0.05)} bit")
print(f"8 kenh, 10 phut/lan, 1 nam: {bo_nho_mb(8, 10, 365):.1f} MB")
# lúc đo: ESP32 80 mA + 8 cảm biến 4–20 mA (tối đa 20 mA ở 24 V) qua mạch tăng áp hiệu suất 80 % từ pin 3,7 V
dong_cam_bien = 8 * 0.020 * 24 / (3.7 * 0.8) * 1000
mah = nang_luong_ngay_mah(ngu_ma=0.15, do_ma=80 + dong_cam_bien, t_do_s=3, chu_ky_do_s=600, gui_ma=250, t_gui_s=25, chu_ky_gui_s=3600)
print(f"Luc do: {80 + dong_cam_bien:.0f} mA trong 3 s (cam bien chiem {dong_cam_bien:.0f} mA)")
print(f"Tieu thu: {mah:.0f} mAh/ngay -> pin 18650 x2 song song (6000 mAh, dung 80 %): {6000 * 0.8 / mah:.0f} ngay khong co nang")
w = tam_pin_w(mah)
print(f"Tam pin mat troi toi thieu {w:.2f} W; nhan 5 lan cho ngay mua, mua dong: {math.ceil(w * 5)} W")
ESP32 ngủ sâu chỉ tốn khoảng vài µA tới vài chục µA tùy mạch (mạch DevKit có đèn, chip USB thì tốn hơn nhiều); xem bài Deep Sleep trên ESP32.
4. Chống sét và bảo vệ ngoài trời

- Dây cảm biến dài hàng chục mét ở công trường, bờ kè là "ăng-ten" bắt xung sét. Mỗi đầu vào cần linh kiện kẹp xung (TVS, ống phóng khí) nối về một điểm đất chung bằng dây ngắn; cổng nguồn 220 V cần thiết bị chống sét lan truyền.
- Nhiều cảm biến ở xa nhau thì đất mỗi nơi một khác: cách ly ngõ vào hoặc đo vi sai để tránh vòng đất.
- Hộp IP65 trở lên, dây vào qua ống luồn và đầu siết cáp; có lỗ thông hơi chống đọng nước. Hộp đen phơi nắng có thể nóng trên 60 °C: pin Li-ion không được sạc khi quá nóng.
5. Mua hay tự làm
Quan trắc có yêu cầu pháp lý (môi trường, công trình theo hợp đồng) thường phải dùng thiết bị có chứng nhận, hiệu chuẩn. Đo phục vụ nghiên cứu, theo dõi nội bộ, nông nghiệp thì tự làm bằng ESP32 vừa rẻ vừa linh hoạt: ESP32 làm bộ điều khiển, ADS1115 hoặc ADC 24 bit làm phần đo, module thẻ nhớ Micro SD làm bộ nhớ (xem bài dùng thẻ Micro SD với ESP32), pin 18650 kèm mạch sạc mặt trời.
Mạch dùng trong bài: ESP32 DevKit V1 30 chân.
Bài cùng cụm chủ đề: tự làm data logger nhiều kênh với ESP32 và ADC 24 bit ADS1256; đo nhiệt độ bê tông khối lớn; vòng đất và cáp chống nhiễu.
Xem thêm