Mục lục:

Arduino Nano - HTS221 Hướng dẫn cảm biến nhiệt độ và độ ẩm tương đối: 4 bước
Arduino Nano - HTS221 Hướng dẫn cảm biến nhiệt độ và độ ẩm tương đối: 4 bước

Video: Arduino Nano - HTS221 Hướng dẫn cảm biến nhiệt độ và độ ẩm tương đối: 4 bước

Video: Arduino Nano - HTS221 Hướng dẫn cảm biến nhiệt độ và độ ẩm tương đối: 4 bước
Video: Arduino Nano - HTS221 Relative Humidity and Temperature Sensor Tutorial 2024, Tháng mười một
Anonim
Image
Image

HTS221 là một cảm biến kỹ thuật số điện dung siêu nhỏ gọn cho độ ẩm và nhiệt độ tương đối. Nó bao gồm một phần tử cảm biến và một mạch tích hợp dành riêng cho ứng dụng tín hiệu hỗn hợp (ASIC) để cung cấp thông tin đo lường thông qua các giao diện nối tiếp kỹ thuật số. Được tích hợp rất nhiều tính năng, đây là một trong những cảm biến thích hợp nhất cho các phép đo nhiệt độ và độ ẩm quan trọng. Đây là phần trình diễn với arduino nano.

Bước 1: Những gì bạn cần.. !

Những gì bạn cần.. !!
Những gì bạn cần.. !!

1. Arduino Nano

2. HTS221

3. Cáp I²C

4. Tấm chắn I²C cho Arduino Nano

Bước 2: Kết nối:

Kết nối
Kết nối
Kết nối
Kết nối
Kết nối
Kết nối
Kết nối
Kết nối

Lấy một tấm chắn I2C cho Arduino Nano và nhẹ nhàng đẩy nó qua các chân của Nano.

Sau đó kết nối một đầu của cáp I2C với cảm biến HTS221 và đầu kia với tấm chắn I2C.

Các kết nối được hiển thị trong hình trên.

Bước 3: Mã:

Mã số
Mã số

Mã arduino cho HTS221 có thể được tải xuống từ kho lưu trữ github của chúng tôi - Cộng đồng DCUBE.

Đây là liên kết cho cùng một:

github.com/DcubeTechVentures/HTS221/blob/master/Arduino/HTS221.ino

Chúng tôi bao gồm thư viện Wire.h để tạo điều kiện giao tiếp I2c của cảm biến với bảng Arduino.

Bạn cũng có thể sao chép mã từ đây, nó được đưa ra như sau:

// Được phân phối với một giấy phép tự do.

// Sử dụng nó theo bất kỳ cách nào bạn muốn, lợi nhuận hoặc miễn phí, miễn là nó phù hợp với giấy phép của các tác phẩm liên quan.

// HTS221

// Mã này được thiết kế để hoạt động với Mô-đun nhỏ HTS221_I2CS I2C

#bao gồm

// Địa chỉ I2C HTS221 là 0x5F

#define Addr 0x5F

void setup ()

{

// Khởi tạo giao tiếp I2C dưới dạng MASTER

Wire.begin ();

// Khởi tạo giao tiếp nối tiếp, đặt tốc độ truyền = 9600

Serial.begin (9600);

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Chọn thanh ghi cấu hình trung bình

Wire.write (0x10);

// Mẫu trung bình nhiệt độ = 256, mẫu trung bình độ ẩm = 512

Wire.write (0x1B);

// Dừng truyền I2C

Wire.endTransmission ();

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Chọn thanh ghi điều khiển1

Wire.write (0x20);

// BẬT nguồn, Cập nhật liên tục, Tốc độ đầu ra dữ liệu = 1 Hz

Wire.write (0x85);

// Dừng truyền I2C

Wire.endTransmission ();

chậm trễ (300);

}

void loop ()

{

dữ liệu int không dấu [2];

unsigned int val [4];

không dấu int H0, H1, H2, H3, T0, T1, T2, T3, nguyên;

// Giá trị đo độ ẩm

for (int i = 0; i <2; i ++)

{

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Gửi dữ liệu đăng ký

Wire.write ((48 + i));

// Dừng truyền I2C

Wire.endTransmission ();

// Yêu cầu 1 byte dữ liệu

Wire.requestFrom (Addr, 1);

// Đọc 1 byte dữ liệu

if (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Chuyển đổi dữ liệu Độ ẩm

H0 = dữ liệu [0] / 2;

H1 = dữ liệu [1] / 2;

for (int i = 0; i <2; i ++)

{

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Gửi dữ liệu đăng ký

Wire.write ((54 + i));

// Dừng truyền I2C

Wire.endTransmission ();

// Yêu cầu 1 byte dữ liệu

Wire.requestFrom (Addr, 1);

// Đọc 1 byte dữ liệu

if (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Chuyển đổi dữ liệu Độ ẩm

H2 = (dữ liệu [1] * 256.0) + dữ liệu [0];

for (int i = 0; i <2; i ++)

{

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Gửi dữ liệu đăng ký

Wire.write ((58 + i));

// Dừng truyền I2C

Wire.endTransmission ();

// Yêu cầu 1 byte dữ liệu

Wire.requestFrom (Addr, 1);

// Đọc 1 byte dữ liệu

if (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Chuyển đổi dữ liệu Độ ẩm

H3 = (dữ liệu [1] * 256.0) + dữ liệu [0];

// Giá trị đo nhiệt độ

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Gửi dữ liệu đăng ký

Wire.write (0x32);

// Dừng truyền I2C

Wire.endTransmission ();

// Yêu cầu 1 byte dữ liệu

Wire.requestFrom (Addr, 1);

// Đọc 1 byte dữ liệu

if (Wire.available () == 1)

{

T0 = Wire.read ();

}

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Gửi dữ liệu đăng ký

Wire.write (0x33);

// Dừng truyền I2C

Wire.endTransmission ();

// Yêu cầu 1 byte dữ liệu

Wire.requestFrom (Addr, 1);

// Đọc 1 byte dữ liệu

if (Wire.available () == 1)

{

T1 = Wire.read ();

}

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Gửi dữ liệu đăng ký

Wire.write (0x35);

// Dừng truyền I2C

Wire.endTransmission ();

// Yêu cầu 1 byte dữ liệu

Wire.requestFrom (Addr, 1);

// Đọc 1 byte dữ liệu

if (Wire.available () == 1)

{

raw = Wire.read ();

}

raw = raw & 0x0F;

// Chuyển đổi các giá trị đo nhiệt độ thành 10-bit

T0 = ((thô & 0x03) * 256) + T0;

T1 = ((nguyên & 0x0C) * 64) + T1;

for (int i = 0; i <2; i ++)

{

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Gửi dữ liệu đăng ký

Wire.write ((60 + i));

// Dừng truyền I2C

Wire.endTransmission ();

// Yêu cầu 1 byte dữ liệu

Wire.requestFrom (Addr, 1);

// Đọc 1 byte dữ liệu

if (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Chuyển đổi dữ liệu

T2 = (dữ liệu [1] * 256.0) + dữ liệu [0];

for (int i = 0; i <2; i ++)

{

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Gửi dữ liệu đăng ký

Wire.write ((62 + i));

// Dừng truyền I2C

Wire.endTransmission ();

// Yêu cầu 1 byte dữ liệu

Wire.requestFrom (Addr, 1);

// Đọc 1 byte dữ liệu

if (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Chuyển đổi dữ liệu

T3 = (dữ liệu [1] * 256.0) + dữ liệu [0];

// Bắt đầu truyền I2C

Wire.beginTransmission (Addr);

// Gửi dữ liệu đăng ký

Wire.write (0x28 | 0x80);

// Dừng truyền I2C

Wire.endTransmission ();

// Yêu cầu 4 byte dữ liệu

Wire.requestFrom (Addr, 4);

// Đọc 4 byte dữ liệu

// độ ẩm msb, độ ẩm lsb, msb nhiệt độ, nhiệt độ lsb

if (Wire.available () == 4)

{

val [0] = Wire.read ();

val [1] = Wire.read ();

val [2] = Wire.read ();

val [3] = Wire.read ();

}

// Chuyển đổi dữ liệu

độ ẩm phao = (val [1] * 256.0) + val [0];

độ ẩm = ((1.0 * H1) - (1.0 * H0)) * (1.0 * độ ẩm - 1.0 * H2) / (1.0 * H3 - 1.0 * H2) + (1.0 * H0);

int temp = (val [3] * 256) + val [2];

float cTemp = (((T1 - T0) / 8.0) * (temp - T2)) / (T3 - T2) + (T0 / 8.0);

float fTemp = (cTemp * 1.8) + 32;

// Xuất dữ liệu ra màn hình nối tiếp

Serial.print ("Độ ẩm tương đối:");

Serial.print (độ ẩm);

Serial.println ("% RH");

Serial.print ("Nhiệt độ tính bằng độ C:");

Serial.print (cTemp); Serial.println ("C");

Serial.print ("Nhiệt độ tính bằng Fahrenheit:");

Serial.print (fTemp);

Serial.println ("F");

chậm trễ (500);

}

Bước 4: Ứng dụng:

HTS221 có thể được sử dụng trong các sản phẩm tiêu dùng khác nhau như máy làm ẩm không khí và tủ lạnh, v.v. Cảm biến này cũng được ứng dụng trong một lĩnh vực rộng lớn hơn bao gồm tự động hóa nhà thông minh, tự động hóa công nghiệp, thiết bị hô hấp, theo dõi tài sản và hàng hóa.

Đề xuất: