Оглавление:

Измерение влажности и температуры с использованием HTS221 и частиц Photon: 4 шага
Измерение влажности и температуры с использованием HTS221 и частиц Photon: 4 шага

Видео: Измерение влажности и температуры с использованием HTS221 и частиц Photon: 4 шага

Видео: Измерение влажности и температуры с использованием HTS221 и частиц Photon: 4 шага
Видео: Программирование МК STM32. УРОК 55. Подключаем датчик влажности HTS221. Часть 1 2024, Июнь
Anonim
Image
Image

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

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

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

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

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

1. HTS221

2. Частичный фотон

3. Кабель I2C

4. I2C Shield для фотонов частиц

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

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

Раздел подключения оборудования в основном объясняет проводные соединения, необходимые между датчиком и фотоном частицы. Обеспечение правильных соединений является основной необходимостью при работе с любой системой для достижения желаемого результата. Итак, необходимые подключения следующие:

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

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

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

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

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

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

А теперь давайте начнем с кода частицы.

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

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

#включают

#включают

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

#define Addr 0x5F

двойная влажность = 0,0;

двойной cTemp = 0,0;

двойной fTemp = 0,0;

int temp = 0;

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

{

// Устанавливаем переменную

Particle.variable («i2cdevice», «HTS221»);

Particle.variable («Влажность», влажность);

Particle.variable ("cTemp", cTemp);

// Инициализируем связь 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 ();

}

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

влажность = (значение [1] * 256,0) + значение [0];

влажность = ((1.0 * H1) - (1.0 * H0)) * (1.0 * влажность - 1.0 * H2) / (1.0 * H3 - 1.0 * H2) + (1.0 * H0);

темп = (значение [3] * 256) + значение [2]; cTemp = (((T1 - T0) / 8.0) * (temp - T2)) / (T3 - T2) + (T0 / 8.0);

fTemp = (cTemp * 1.8) + 32;

// Выводим данные в дашборд

Particle.publish («Относительная влажность:», String (влажность));

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

Particle.publish («Температура в градусах Цельсия:», String (cTemp));

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

Particle.publish («Температура по Фаренгейту:», String (fTemp));

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

}

Функция Particle.variable () создает переменные для хранения выходных данных датчика, а функция Particle.publish () отображает выходные данные на панели инструментов сайта.

Выходной сигнал датчика показан на рисунке выше для справки.

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

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

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

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