Оглавление:

Измерение влажности и температуры с помощью HTS221 и Arduino Nano: 4 шага
Измерение влажности и температуры с помощью HTS221 и Arduino Nano: 4 шага

Видео: Измерение влажности и температуры с помощью HTS221 и Arduino Nano: 4 шага

Видео: Измерение влажности и температуры с помощью HTS221 и Arduino Nano: 4 шага
Видео: AHT10 Датчик температуры и влажности STM32F1 2024, Июль
Anonim
Image
Image

HTS221 - это сверхкомпактный емкостной цифровой датчик относительной влажности и температуры. Он включает в себя чувствительный элемент и специализированную интегральную схему (ASIC) со смешанными сигналами для предоставления информации об измерениях через цифровые последовательные интерфейсы. Благодаря наличию такого количества функций, этот датчик является одним из наиболее подходящих для критических измерений влажности и температуры.

В этом руководстве было проиллюстрировано взаимодействие сенсорного модуля HTS221 с Arduino nano. Для считывания значений влажности и температуры мы использовали Arduino с адаптером I2C. Этот адаптер I2C делает подключение к модулю датчика простым и надежным.

Шаг 1: Требуемое оборудование:

Требуемое оборудование
Требуемое оборудование
Требуемое оборудование
Требуемое оборудование
Требуемое оборудование
Требуемое оборудование

Материалы, которые нам нужны для достижения нашей цели, включают следующие компоненты оборудования:

1. HTS221

2. Arduino Nano

3. Кабель I2C

4. I2C Shield для Arduino Nano.

Шаг 2: Подключение оборудования:

Подключение оборудования
Подключение оборудования
Подключение оборудования
Подключение оборудования

В разделе «Подключение оборудования» в основном объясняются проводные соединения, необходимые между датчиком и Arduino nano. Обеспечение правильных соединений является основной необходимостью при работе с любой системой для достижения желаемого результата. Итак, необходимые подключения следующие:

HTS221 будет работать по I2C. Вот пример схемы подключения, демонстрирующий, как подключить каждый интерфейс датчика.

Изначально плата настроена для интерфейса I2C, поэтому мы рекомендуем использовать это подключение, если вы не сторонник этого.

Все, что вам нужно, это четыре провода! Требуются только четыре соединения, выводы Vcc, Gnd, SCL и SDA, которые подключаются с помощью кабеля I2C.

Эти соединения показаны на рисунках выше.

Шаг 3: Код для измерения влажности и температуры:

Код для измерения влажности и температуры
Код для измерения влажности и температуры

Начнем с кода Arduino.

При использовании сенсорного модуля с Arduino мы включаем библиотеку Wire.h. Библиотека Wire содержит функции, которые облегчают обмен данными i2c между датчиком и платой Arduino.

Полный код Arduino приведен ниже для удобства пользователя:

#включают

// Адрес I2C HTS221 - 0x5F

#define Addr 0x5F

установка void ()

{

// Инициализируем связь I2C как МАСТЕР

Wire.begin ();

// Инициализируем последовательную связь, устанавливаем скорость передачи = 9600

Serial.begin (9600);

// Запуск передачи I2C

Wire.beginTransmission (адрес);

// Выбираем средний регистр конфигурации

Wire.write (0x10);

// Образцы средней температуры = 256, образцы средней влажности = 512

Wire.write (0x1B);

// Остановка передачи I2C

Wire.endTransmission ();

// Запуск передачи I2C

Wire.beginTransmission (адрес);

// Выбираем контрольный регистр1

Wire.write (0x20);

// Питание включено, непрерывное обновление, скорость вывода данных = 1 Гц

Wire.write (0x85);

// Остановка передачи I2C

Wire.endTransmission ();

задержка (300);

}

пустой цикл ()

{

данные типа int без знака [2];

беззнаковый int val [4];

целое число без знака H0, H1, H2, H3, T0, T1, T2, T3, raw;

// Значения калибровки влажности

для (int я = 0; я <2; я ++)

{

// Запуск передачи I2C

Wire.beginTransmission (адрес);

// Отправляем регистр данных

Wire.write ((48 + i));

// Остановка передачи I2C

Wire.endTransmission ();

// Запрос 1 байт данных

Wire.requestFrom (Адрес, 1);

// Читаем 1 байт данных

если (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Преобразование данных о влажности

H0 = данные [0] / 2;

H1 = данные [1] / 2;

для (int я = 0; я <2; я ++)

{

// Запуск передачи I2C

Wire.beginTransmission (адрес);

// Отправляем регистр данных

Wire.write ((54 + i));

// Остановка передачи I2C

Wire.endTransmission ();

// Запрос 1 байт данных

Wire.requestFrom (Адрес, 1);

// Читаем 1 байт данных

если (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Преобразование данных о влажности

H2 = (данные [1] * 256,0) + данные [0];

для (int я = 0; я <2; я ++)

{

// Запуск передачи I2C

Wire.beginTransmission (адрес);

// Отправляем регистр данных

Wire.write ((58 + i));

// Остановка передачи I2C

Wire.endTransmission ();

// Запрос 1 байт данных

Wire.requestFrom (Адрес, 1);

// Читаем 1 байт данных

если (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Преобразование данных о влажности

H3 = (данные [1] * 256,0) + данные [0];

// Значения калибровки температуры

// Запуск передачи I2C

Wire.beginTransmission (адрес);

// Отправляем регистр данных

Wire.write (0x32);

// Остановка передачи I2C

Wire.endTransmission ();

// Запрос 1 байт данных

Wire.requestFrom (Адрес, 1);

// Читаем 1 байт данных

если (Wire.available () == 1)

{

T0 = Wire.read ();

}

// Запуск передачи I2C

Wire.beginTransmission (адрес);

// Отправляем регистр данных

Wire.write (0x33);

// Остановка передачи I2C

Wire.endTransmission ();

// Запрос 1 байт данных

Wire.requestFrom (Адрес, 1);

// Читаем 1 байт данных

если (Wire.available () == 1)

{

T1 = Wire.read ();

}

// Запуск передачи I2C

Wire.beginTransmission (адрес);

// Отправляем регистр данных

Wire.write (0x35);

// Остановка передачи I2C

Wire.endTransmission ();

// Запрос 1 байт данных

Wire.requestFrom (Адрес, 1);

// Читаем 1 байт данных

если (Wire.available () == 1)

{

raw = Wire.read ();

}

raw = raw & 0x0F;

// Преобразуем значения калибровки температуры в 10-битные

T0 = ((raw & 0x03) * 256) + T0;

T1 = ((исходный & 0x0C) * 64) + T1;

для (int я = 0; я <2; я ++)

{

// Запуск передачи I2C

Wire.beginTransmission (адрес);

// Отправляем регистр данных

Wire.write ((60 + i));

// Остановка передачи I2C

Wire.endTransmission ();

// Запрос 1 байт данных

Wire.requestFrom (Адрес, 1);

// Читаем 1 байт данных

если (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Конвертируем данные

T2 = (данные [1] * 256,0) + данные [0];

для (int я = 0; я <2; я ++)

{

// Запуск передачи I2C

Wire.beginTransmission (адрес);

// Отправляем регистр данных

Wire.write ((62 + i));

// Остановка передачи I2C

Wire.endTransmission ();

// Запрос 1 байт данных

Wire.requestFrom (Адрес, 1);

// Читаем 1 байт данных

если (Wire.available () == 1)

{

data = Wire.read ();

}

}

// Конвертируем данные

T3 = (данные [1] * 256,0) + данные [0];

// Запуск передачи I2C

Wire.beginTransmission (адрес);

// Отправляем регистр данных

Wire.write (0x28 | 0x80);

// Остановка передачи I2C

Wire.endTransmission ();

// Запрос 4 байта данных

Wire.requestFrom (Адрес, 4);

// Читаем 4 байта данных

// влажность msb, влажность lsb, temp msb, temp lsb

если (Wire.available () == 4)

{

val [0] = Wire.read ();

val [1] = Wire.read ();

val [2] = Wire.read ();

val [3] = Wire.read ();

}

// Конвертируем данные

влажность с плавающей запятой = (val [1] * 256.0) + val [0];

влажность = ((1.0 * H1) - (1.0 * H0)) * (1.0 * влажность - 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;

// Выводим данные на последовательный монитор

Serial.print («Относительная влажность:»);

Серийный отпечаток (влажность);

Serial.println («% относительной влажности»);

Serial.print («Температура в градусах Цельсия:»);

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

Serial.print («Температура по Фаренгейту:»);

Serial.print (fTemp);

Serial.println ("F");

задержка (500);

}

В библиотеке проводов Wire.write () и Wire.read () используются для записи команд и чтения выходного сигнала датчика.

Serial.print () и Serial.println () используются для отображения выходных данных датчика на последовательном мониторе Arduino IDE.

Выход датчика показан на картинке выше.

Шаг 4: Приложения:

Приложения
Приложения

HTS221 может использоваться в различных потребительских товарах, таких как увлажнители воздуха, холодильники и т. Д. Этот датчик также находит свое применение в более широкой сфере, включая автоматизацию умного дома, промышленную автоматизацию, респираторное оборудование, отслеживание активов и товаров.

Рекомендуемые: