Search Code

Bài 35: Sử dụng cảm biến nhiệt độ HTU21D với Arduino

Bài 35: Sử dụng cảm biến nhiệt độ HTU21D với Arduino

Bài 35: Sử dụng cảm biến nhiệt độ HTU21D với Arduino

Trong hướng dẫn này, chúng ta sẽ tìm hiểu cách kết nối cảm biến nhiệt độ HTU21D với Arduino. Cảm biến này cho phép đo nhiệt độ và độ ẩm chính xác bằng giao tiếp I2C, giúp dễ dàng tích hợp vào nhiều dự án khác nhau. Đến cuối bài học này, bạn sẽ có thể đọc giá trị nhiệt độ và độ ẩm từ cảm biến và hiển thị chúng trên Serial Monitor.

HTU21D module

Đối với dự án này, chúng ta sẽ sử dụng thư viện Adafruit, cung cấp một cách đơn giản để giao tiếp với cảm biến HTU21D. Bạn sẽ học cách thiết lập hệ thống dây điện, viết mã và hiểu các định danh chính được sử dụng trong chương trình. Nếu bạn cần làm rõ bất kỳ phần nào của quy trình, bạn có thể tham khảo video (trong video tại 0:00).

Phần cứng được giải thích

HTU21D là cảm biến nhiệt độ và độ ẩm kỹ thuật số. Nó hoạt động ở dải điện áp từ 1,5V đến 3,6V, phù hợp cho cả hệ thống 3,3V và 5V. Cảm biến giao tiếp qua I2C, chỉ cần hai dây để truyền dữ liệu: Đường dữ liệu nối tiếp (SDA) và Đường xung nhịp nối tiếp (SCL). Cảm biến có mức tiêu thụ điện năng rất thấp, chỉ tiêu thụ 0,02 µA khi ở chế độ chờ và lên đến 450 µA trong quá trình đo.

Ngoài cảm biến, bạn sẽ cần một bo mạch Arduino và một số dây jumper để kết nối mọi thứ. Các kết nối rất đơn giản: cấp nguồn cho cảm biến, kết nối các đường dữ liệu và bạn đã sẵn sàng. Đảm bảo các kết nối của bạn chắc chắn để tránh các sự cố giao tiếp.

Chi tiết từ bảng dữ liệu

Nhà sản xuất TE Connectivity
Số bộ phận HTU21D-F
Điện áp logic/IO 1,5 - 3,6 V
Điện áp cấp nguồn 3,3 V
Dòng điện đầu ra (điển hình) 0,02 µA (chờ), 450 µA (hoạt động)
Dải nhiệt độ -40 đến +125 °C
Dải độ ẩm 0 đến 100 % RH
Độ phân giải (nhiệt độ) 0,01 °C
Độ phân giải (độ ẩm) 0,04 % RH
Kiểu đóng gói DFN-8

 

  • Đảm bảo điện áp cấp nguồn phù hợp (1,5 - 3,6 V) để tránh hư hỏng.
  • Sử dụng điện trở kéo lên trên các đường SDA và SCL nếu cần.
  • Giữ dây nối ngắn để giảm nhiễu trong giao tiếp I2C.
  • Kiểm tra các kết nối cẩn thận để tránh đầu vào trôi nổi.
  • Sử dụng tản nhiệt nếu hoạt động gần giới hạn nhiệt độ tối đa.

Hướng dẫn nối dây

Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor

Để nối cảm biến HTU21D với Arduino của bạn, hãy bắt đầu bằng cách kết nối các chân nguồn. Kết nối chân bên trái của cảm biến với đầu ra 3,3V trên Arduino. Chân thứ hai nên được kết nối với đất (GND). Tiếp theo, kết nối chân SDA của cảm biến với chân A4 trên Arduino, đóng vai trò là đường dữ liệu cho giao tiếp I2C. Cuối cùng, kết nối chân SCL của cảm biến với chân A5 trên Arduino, đóng vai trò là đường xung nhịp. Đảm bảo tất cả các kết nối chắc chắn để duy trì giao tiếp đáng tin cậy.

Nếu bạn đang sử dụng một bo mạch khác, các chân SDA và SCL có thể khác nhau, vì vậy hãy kiểm tra thông số kỹ thuật của bo mạch. Trong video, các tùy chọn nối dây thay thế được thảo luận ngắn gọn (trong video tại 1:30).

Ví dụ mã & Hướng dẫn chi tiết

Bây giờ chúng ta sẽ xem mã giao tiếp với cảm biến HTU21D. Đầu tiên, chúng ta cần bao gồm các thư viện cần thiết cho giao tiếp I2C và cảm biến HTU21D. Đoạn trích sau đây hiển thị hàm thiết lập:

void setup() {
  Serial.begin(9600);
  if (!htu.begin()) {
    Serial.println("Không tìm thấy cảm biến!");
    while (1);
  }
}

Ở đây, chúng ta khởi tạo Serial Monitor ở tốc độ truyền 9600. Sau đó, chúng ta cố gắng khởi tạo cảm biến bằng htu.begin(). Nếu không tìm thấy cảm biến, chương trình sẽ in thông báo lỗi và dừng lại.

Tiếp theo, chúng ta liên tục đọc giá trị nhiệt độ và độ ẩm trong hàm vòng lặp:

void loop() {
    float temp = htu.readTemperature();
    float rel_hum = htu.readHumidity();
    Serial.print("Nhiệt độ: "); Serial.print(temp); Serial.println(" C");
    Serial.print("Độ ẩm: "); Serial.print(rel_hum); Serial.println(" %");
    delay(500);
}

Trong vòng lặp này, chúng ta đọc nhiệt độ bằng htu.readTemperature() và lưu trữ vào biến temp. Tương tự, chúng ta đọc độ ẩm bằng htu.readHumidity(). Các giá trị sau đó được in ra Serial Monitor mỗi 500 mili giây.

Để có cách tiếp cận có cấu trúc hơn, bạn có thể định nghĩa các hàm để xử lý việc đọc. Mã đầy đủ sẽ được tải xuống bên dưới bài viết này, cung cấp cho bạn quyền truy cập đầy đủ vào tất cả các chức năng đã thảo luận.

Trình diễn / Điều gì sẽ xảy ra

Khi bạn tải mã lên Arduino và mở Serial Monitor, bạn sẽ thấy các chỉ số liên tục về nhiệt độ và độ ẩm. Các giá trị sẽ cập nhật mỗi nửa giây. Nếu cảm biến phát hiện nhiệt độ trên giới hạn tối đa 125 °C, nó có thể hiển thị giá trị bằng không hoặc sai. Đây là một lỗi phổ biến cần chú ý trong quá trình kiểm tra (trong video tại 4:30).

Dấu mốc thời gian trong video

  • [00:00] Giới thiệu
  • [00:22] Tổng quan về cảm biến
  • [01:22] Xem xét bảng dữ liệu
  • [02:28] Nối dây
  • [03:03] Cài đặt thư viện
  • [04:05] Giải thích mã (Phần 1)
  • [08:33] Giải thích mã (Phần 2)
  • [07:34] Trình diễn trực tiếp

Hình ảnh

thumb_robojax_HTU21DF_types-1756423961-8524
thumb_robojax_HTU21DF_types-1756423961-8524
Arduino wiring for HTU21DF light intesity sensor
Arduino wiring for HTU21DF light intesity sensor
HTU21D module
HTU21D module
HTU21D module-back
HTU21D module-back
212-Arduino code using HTU21D-F Humidity & Temperature Sensor (basic)
Ngôn ngữ: C++
++
/***************************************************
  This is an example for the HTU21D-F Humidity & Temperature Sensor

  Designed specifically to work with the HTU21D-F sensor from Adafruit
  ----> https://www.adafruit.com/products/1899

  These module use I2C to communicate; 2 pins are required to
  interface
 ****************************************************/

#include <Wire.h>
#include "Adafruit_HTU21DF.h"

// Connect Vin to 3-5VDC
// Connect GND to ground
// Connect SCL to I2C clock pin (A5 on UNO)
// Connect SDA to I2C data pin (A4 on UNO)

Adafruit_HTU21DF htu1 = Adafruit_HTU21DF();//create object for first HTU21DF sensor
Adafruit_HTU21DF htu2 = Adafruit_HTU21DF();//create object for second HTU21DF sensor
//Adafruit_HTU21DF htu3 = Adafruit_HTU21DF();//create object for third HTU21DF sensor (disabled, remove // from begging of code)

void setup() {
  Serial.begin(9600);
  Serial.println("HTU21D-F test for two modules");

  if (!htu.begin()) {
    Serial.println("Couldn't find sensor!");
    while (1);
  }
}

void loop() {
	//get value for sensor 1
    float temp1 = htu1.readTemperature();
    float rel_hum1 = htu1.readHumidity();

	//get value for sensor 2
    float temp2 = htu2.readTemperature();
    float rel_hum2 = htu2.readHumidity();	

	//get value for sensor 3
    float temp3 = htu3.readTemperature();
    float rel_hum3 = htu3.readHumidity();	
	
	//print values for sensor 1
    Serial.print("Sensor 1 Temp : "); Serial.print(temp1); Serial.print(" C");
    Serial.print("\t\t");
    Serial.print("Sensor 1 Humidity: "); Serial.print(rel_hum1); Serial.println(" %");

	//print values for sensor 2
    Serial.print("Sensor 2 Temp : "); Serial.print(temp2); Serial.print(" C");
    Serial.print("\t\t");
    Serial.print("Sensor 2 Humidity: "); Serial.print(rel_hum2); Serial.println(" %");	
	
	//print values for sensor 3
    //Serial.print("Sensor 3 Temp : "); Serial.print(temp3); Serial.print(" C");
    //Serial.print("\t\t");
    //Serial.print("Sensor 3 Humidity: "); Serial.print(rel_hum3); Serial.println(" %");	
	
    delay(500);
}

Nghĩ bạn có thể cần

Tài nguyên & tài liệu tham khảo

Tập tin📁

Thư viện Arduino (tệp nén)