Thứ Tư, Tháng Mười 27, 2021
Trang chủ DIY Arduino Tìm hiểu cách sử dụng các cảm biến Nhiệt độ & Độ...

Tìm hiểu cách sử dụng các cảm biến Nhiệt độ & Độ ẩm DHT

Chắc nhiều bạn sinh viên cũng quá quen mấy con này rồi nhỉ. Nói không sai, DHT có thể xem như cảm biến quốc dân giới sinh viên vậy 😅.

Do quá rẻ, à nhầm quá phổ biến nên có rất nhiều Thư viện hỗ trợ, ta chỉ việc down về và dùng thôi.

Tuy nhiên có bạn nào thắc mắc cách DHT hoạt động thế nào? Tại sao tốc độ đọc cho phép chỉ có 2s? Cũng như tính năng nâng cao giúp tính “Chỉ số Nhiệt” thường thấy có sẵn trong nhiều Thư viện để làm gì không? …

Bài viết này mình sẽ giải đáp phần nào những thắc mắc đó 🤔.

Ok, trước tiên bạn nào muốn biết về Heat Index là gì? Có thể xem qua bài này: Tìm hiểu về Nhiệt độ biểu kiến cũng như Cách ta cảm nhận nhiệt độ.

Giới thiệu các cảm biến DHT

_ DHT là viết tắt của chữ Digital-output Humidity and Temperature của công ty ASAIR. Có thể kể tên một số cảm biến tiêu biểu như: DHT11, DHT21, DHT22, …

_ Qua cái tên ta cũng thấy phần nào đặc trưng của nó rồi nhỉ?
_ Là cảm biến có khả năng đo cùng lúc 2 thông số “Nhiệt độ ℃” (Temperature) và “Độ ẩm %” (Humidity) trong không khí bằng duy nhất 1 pin Digital.

⚠️ Lưu ý: mặc dù nó chỉ sử dụng 1 pin để gửi data.
_ Nhưng nó KO TƯƠNG THÍCH với chuẩn Dallas One Wire (1-Wire).
_ Nó có “giao thức” (Protocol) riêng, cho nên mỗi pin Digital chỉ kết nối được một cảm biến DHT, tức càng dùng nhiều DHT thì càng cần nhiều pin Digital từ Vi điều khiển.

1. Pinout cảm biến?

_ Nhìn chung thì nó có 2 phiên bản:

    • Dạng ra dây (có 3 dây).
    • Dạng ra chân cắm (có 4 pin).

2. Sơ đồ chân kết nối?

DHT Vi điều khiển
VDD 5v hoặc 3,3v
DATA / SDA Digital
NULL / NC (Not connected)
GND Gnd

3. Cấu tạo bên trong?

_ Cảm biến DHT được làm từ 2 phần chính:

    • 1 cảm biến Độ ẩm (Humidity Sensing Component).
    • 1 cảm biến Nhiệt (NTC Thermistor).
    • Và các cảm biến này được kết nối đến 1 Vi điều khiển.

Inside DHTx (electronicsgate.com)

4. Nguyên lý hoạt động?

_ Về Humidity Sensing Component, nó có hai điện cực với “chất nền giữ ẩm” được đặt giữa chúng.
_ Khi “độ ẩm” thay đổi thì “độ dẫn điện” của chất nền này cũng thay đổi, làm cho “điện trở” giữa hai điện cực này thay đổi theo.

Do đó khi “độ ẩm” tương đối của không khí tăng sẽ làm giảm “điện trở” giữa hai điện cực và ngược lại.

Humidity Sensing Component (howtomechatronics.com)

_ Về Thermistor, nó thường được cấu tạo từ hỗn hợp các “bột oxit kim loại”, hỗn hợp này sau đó sẽ được nén chặt và qua quá trình “nung kết” tạo thành những hạt gốm sứ nhỏ.
_ Tùy theo cách pha trộn tỉ lệ các hỗn hợp, nó có chức năng thay đổi giá trị “điện trở” theo “nhiệt độ” tiếp xúc tương ứng.

Trong đó loại NTC viết tắt của Negative Temperature Coefficient, nghĩa là “nhiệt độ” tiếp xúc tăng sẽ làm giảm “điện trở” của cảm biến và ngược lại.

NTC Thermistor (howtomechatronics.com)

_ Còn Vi điều khiển bên trong DHT, ngoài chức năng chuyển đổi giá trị Analog của các cảm biến trên sang giá trị Digital (ADC), xử lý và gửi data tổng hợp theo “định dạng dữ liệu” của DHT qua 1 pin Digital duy nhất.

_ Mỗi cảm biến DHT được căn chỉnh lại trong phòng thí nghiệm đã hiệu chỉnh môi trường có giá trị Nhiệt độ & Độ ẩm cực kỳ chính xác.
_ Các hệ số này được lưu trữ trong bộ nhớ của Vi điều khiển và sẽ được gọi sử dụng trong quá trình xử lý data đọc được giúp “tăng độ chính xác” của DHT.

🤔 Vậy là Vi điều khiển này nó còn phải tốn thời gian tính toán nhiều thứ, rồi mới có thể quyết định khi nào phù hợp để gửi data và khi nào không. Đó cũng là lý do vì sao ta phải sử dụng đúng theo “thời gian lấy mẫu” (Sampling period) cho phép.

Tóm lại: tùy theo loại cảm biến Nhiệt, Độ ẩm và Vi điều khiển tích hợp vào DHT. Nó sẽ quyết định đến nhiều thông số như: Độ phân giải, Độ chính xác, Độ sai số, Phạm vi hoạt động, Tốc độ lấy mẫu, …

5. Cách sử dụng?

⚠️ Lưu ý: để sử dụng cảm biến DHT, chân DATA cần được mắc thêm 1 “điện trở kéo lên” (Pull-Up Resistor) có thể dùng giá trị trong khoảng [1kΩ – 10kΩ].

Điều này nhằm đưa đường truyền data (Bus) về “trạng thái nhàn rỗi” (IDLE – mức HIGH duy trì liên tục) khi không có thông tin liên lạc nào giữa DHT và Vi điều khiển (vd: Arduino, …).

_ Tuy nhiên, một số loại được NSX làm sẵn trở kéo lên rồi (chịu khó đọc trong Datasheet nhé ^^!). Hoặc bạn có thể mua các Module DHT làm sẵn, mình chỉ việc kết nối với Vi điều khiển và sử dụng thôi.

MLK-S14 temperature and humidity sensor
AM2301
DHT22


_ Khi mới cấp nguồn cho cảm biến, không gửi bất kỳ lệnh nào đến cảm biến trong vòng 1s, để vượt qua “trạng thái không ổn định”. Một tụ điện có giá trị 100nF có thể được thêm vào giữa VDDGND để lọc sóng.

! Theo cách đấu dây trên, có thể thấy mức Logic trên pin Digital của MCU cũng chính là mức Logic trên pin DATA của DHT. Tức cả hai cùng mức Logic trên 1 đường bus đó.

🤔 Vậy làm sao để DHT biết khi nào MCU cần lấy data, cũng như khi nào MCU có thể nhận data từ DHT?

6. Quá trình giao tiếp?

_ Để “giao tiếp đồng bộ” giữa Vi điều khiển và DHT qua 1 đường truyền, nó cần 1 “giao thức” chung. Trong đó:

    • MCU sẽ đóng vai trò Master và do đó chịu trách nhiệm cho việc bắt đầu giao tiếp.
    • DHT sẽ đóng vai trò Slave và chỉ phản ứng khi MCU yêu cầu.

_ Có thể tóm tắt quá trình thực hiện của “giao thức” này như sau:

  • Pin Digital của MCU đang là Input, nên Bus đang ở trạng thái IDLE (mức HIGH).
  • Step1: MCU set pin Digital Output và giữ Bus ở mức LOW trong ít nhất ≥18ms.
  • Step2: MCU set pin Digital Input, nên Bus sẽ trở lại mức HIGH và đợi phản hồi từ DHT, thường trong khoảng 20µs – 40µs.
  • Step3: Pin Digital vẫn đang là Input. Nếu DHT phản hồi bằng 1 xung có mức LOW 80µs và HIGH 80µs (là tín hiệu START) cho biết rằng nó đã sẵn sàng để gửi dữ liệu !!!
  • Step4: Pin Digital vẫn đang là Input. Lúc này DHT sẽ gửi “1 chuỗi bit data dưới dạng xung” được quy ước …
    Bit 1 = 1 xung có mức LOW 50µs và mức HIGH 70µs.
    Bit 0 = 1 xung có mức LOW 50µs và mức HIGH 26µs – 28µs.
  • Step5: Sau khi DHT gửi xong chuỗi trên, nó sẽ giữ Bus ở mức LOW khoảng 50ms (là tín hiệu END).
  • Sau đó Bus sẽ trở lại trạng thái IDLE (mức HIGH).

DHTxx Protocol (ocfreaks.com)

🤔 Vậy “chuỗi bit” trên có “định dạng” như thế nào?

7. DHT Data Format?

_ Dữ liệu gồm 40 bit được chia thành 5 Byte, với bit MSB (Most Significant Bit) được gửi đầu tiên. Trong đó:

    • 1st Byte: Dữ liệu Độ ẩm tương đối (Phần nguyên), đơn vị (%).
    • 2nd Byte: Dữ liệu Độ ẩm tương đối (Phần thập phân), đơn vị (%).
    • 3rd Byte: Dữ liệu Nhiệt độ (Phần nguyên), đơn vị (℃).
    • 4th Byte: Dữ liệu Nhiệt độ (Phần thập phân), đơn vị (℃).
    • 5th Byte: Checksum, là 8 bit cuối của tổng (1st Byte + 2nd Byte + 3rd Byte + 4th Byte) → giúp MCU kiểm tra lại data nhận được có đúng không?

DHTxx Data Format (ocfreaks.com)

Hết rồi!

Tới đây các bạn có thể thấy tổng thời gian mỗi lần giao tiếp tuy chỉ mất khoảng ~5ms thôi, nhưng ta vẫn phải tuân theo “thời gian lấy mẫu” cho phép của mỗi loại DHT, thường khoảng ~2s nhé, không có chuyện lấy data liên tục được đâu, trừ khi bạn chỉnh sửa được Firmware của Vi điều khiển bên trong DHT.

Các bạn có thể thử đọc nhanh hơn xem kết quả sẽ như thế nào 😁.

À về Code các bạn có thể gõ “DHT Github” tìm trên Google, hiện có rất nhiều Thư viện viết sẵn cho cảm biến này.

Mình cũng có viết sẵn một Thư viện cho DHT dành cho Arduino, link ở đây các bạn có thể tham khảo. Thư viện này mình clone từ Adafruit, chủ yếu để học tập, nên cũng edit lại lượt bỏ chỉnh sửa kha khá chỗ cho gọn, nhưng mà chạy được là zui rồi 😁.

See you ^^

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments

Most Popular

Tìm hiểu CRC

🤔 Có bạn nào thắc mắc là các thiết bị điện tử ngoài việc chúng có thể giao tiếp trao đổi thông tin với...

Tìm hiểu Giao thức I2C

Có bạn nào thắc mắc làm sao giữa các thiết bị điện tử chúng có thể giao tiếp trao đổi data qua lại lẫn...

Tìm hiểu cách sử dụng các cảm biến Nhiệt độ & Độ ẩm DHT

Chắc nhiều bạn sinh viên cũng quá quen mấy con này rồi nhỉ. Nói không sai, DHT có thể xem như cảm biến quốc...

Tìm hiểu về Nhiệt độ biểu kiến cũng như Cách ta cảm nhận nhiệt độ

Có bạn nào từng thắc mắc rằng, tại sao đôi khi nhiệt độ ngoài trời không cao lắm, nhưng ta lại thấy nóng nực...

Recent Comments

0
Would love your thoughts, please comment.x
()
x