2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
HTS221 - это сверхкомпактный емкостной цифровой датчик относительной влажности и температуры. Он включает в себя чувствительный элемент и специализированную интегральную схему (ASIC) со смешанными сигналами для предоставления информации об измерениях через цифровые последовательные интерфейсы. Благодаря наличию такого количества функций, этот датчик является одним из наиболее подходящих для критических измерений влажности и температуры. Вот демонстрация с Arduino nano.
Шаг 1: Что вам нужно..
1. Arduino Nano
2. HTS221
3. Кабель I²C
4. I²C Shield для Arduino Nano.
Шаг 2: Подключения:
Возьмите щит I2C для Arduino Nano и аккуратно наденьте его на контакты Nano.
Затем подключите один конец кабеля I2C к датчику HTS221, а другой конец - к экрану I2C.
Подключения показаны на картинке выше.
Шаг 3: Код:
Код Arduino для HTS221 можно загрузить из нашего репозитория github - сообщества DCUBE.
Вот ссылка на то же самое:
github.com/DcubeTechVentures/HTS221/blob/master/Arduino/HTS221.ino
Мы включаем библиотеку Wire.h для облегчения связи датчика I2c с платой Arduino.
Вы также можете скопировать код отсюда, он выглядит следующим образом:
// Распространяется по свободной лицензии.
// Используйте его как хотите, для получения прибыли или бесплатно, при условии, что он соответствует лицензиям на связанные с ним работы.
// HTS221
// Этот код предназначен для работы с мини-модулем HTS221_I2CS I2C
#включают
// Адрес 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);
}
Шаг 4: Приложения:
HTS221 может использоваться в различных потребительских товарах, таких как увлажнители воздуха, холодильники и т. Д. Этот датчик также находит свое применение в более широкой сфере, включая автоматизацию умного дома, промышленную автоматизацию, респираторное оборудование, отслеживание активов и товаров.