Подключение датчика температуры и влажности SHT31 к Arduino

Подключение датчика температуры и влажности SHT31 к Arduino

Хотите вести учёт климата в теплице, создать систему управления хьюмидором или отслеживать данные о температуре и влажности для метеостанции? Датчик температуры и влажности SHT31 может стать правильным выбором для вас!

Датчик SHT31 откалиброван на заводе и не требует внешних компонентов для работы. Поэтому с помощью всего нескольких подключений и кода Arduino вы сможете сразу начать измерять относительную влажность и температуру.

Обзор оборудования

Модуль содержит недорогой, простой в использовании, высокоточный цифровой датчик температуры и влажности от Sensirion — SHT31.

Подключение датчика температуры и влажности SHT31 к Arduino

Компактные размеры модуля позволяют использовать его практически для чего угодно: термостатов, регуляторов влажности, комнатных метеостанций и подобных устройств для мониторинга или управления влажностью и/или температурой.

Датчик SHT31 способен измерять влажность во всём диапазоне от 0 до 100% RH с типичной точностью ±2% в диапазоне от 20% до 80% RH (разрешение 0,01% RH).

Максимальный диапазон температур SHT31 составляет от -40 до 125°C. Типичная точность — ±0,3°C при 25°C (разрешение 0,015°C).

Внимание:

Датчик SHT31 имеет небольшое окошко, открывающее полимерную плёнку, отвечающую за измерение температуры и влажности. Рекомендуется не допускать попадания жидкостей, пыли или других загрязнений на неё, так как это может повлиять на точность датчика.

Требования к питанию

Сам датчик использует напряжение от 2,4В до 5,5В, что делает этот модуль совместимым как с 3В, так и с 5В. Поэтому вы можете использовать его с вашим любимым микроконтроллером на 3,3В или 5В без каких-либо опасений.

SHT31 потребляет менее 0,8 мА во время измерений и менее 0,2 мкА в режиме однократного измерения (без измерений). Такое низкое энергопотребление позволяет использовать его в устройствах с батарейным питанием, таких как мобильные телефоны, носимые устройства или смарт-часы.

Интерфейс I2C

SHT31 — это I2C-датчик, что означает, что он использует две линии данных/тактового сигнала I2C, доступные на большинстве микроконтроллеров, и может разделять эти контакты с другими I2C-датчиками, если у них нет конфликта адресов.

Датчик поддерживает два различных I2C-адреса: 0x44Hex и 0x45Hex. Это позволяет использовать два модуля SHT31 на одной шине или избежать конфликта адресов с другим устройством на шине.

Подключение датчика температуры и влажности SHT31 к Arduino

Вывод AD определяет I2C-адрес модуля. Этот вывод имеет встроенный подтягивающий к земле резистор. Поэтому, если оставить вывод AD неподключённым, I2C-адрес по умолчанию будет 0x44Hex, а при подключении к высокому уровню сигнала I2C-адрес станет 0x45Hex.

Режим оповещения

SHT31 имеет вывод оповещения (AL), который может срабатывать, когда условия окружающей среды (влажность и/или температура) превышают заданные пользователем пределы. Это позволяет выполнять измерения по прерываниям вместо циклического опроса, давая микроконтроллеру возможность выполнять другие задачи, пока датчик собирает данные.

Подключение датчика температуры и влажности SHT31 к Arduino

Когда влажность и/или температура превышают верхний предел, вывод Alert переходит в HIGH и остаётся в HIGH, пока температура не опустится ниже порога сброса. Аналогично, когда влажность и/или температура выходят за нижний предел, вывод Alert переходит в HIGH и остаётся в HIGH, пока температура не поднимется выше порога сброса.

На изображении ниже показаны различные пределы для режима оповещения.

Подключение датчика температуры и влажности SHT31 к Arduino

Подробнее можно прочитать в отдельном `руководстве по применению `_.

Технические характеристики

Вот полные характеристики:

Для получения дополнительной информации обратитесь к даташиту ниже.

Распиновка модуля SHT31

Рассмотрим распиновку.

Подключение датчика температуры и влажности SHT31 к Arduino

VCC — вывод питания. Поскольку датчик использует напряжение 2,4-5,5В, подайте на него то же напряжение, что и логический уровень вашего микроконтроллера — например, для микроконтроллера на 5В, такого как Arduino, используйте 5В.

GND — общий контакт земли для питания и логики.

SCL — вывод тактового сигнала I2C, подключается к линии тактового сигнала I2C вашего микроконтроллера.

SDA — вывод данных I2C, подключается к линии данных I2C вашего микроконтроллера.

AD — вывод определяет I2C-адрес модуля. Если оставить AD неподключённым, I2C-адрес по умолчанию — 0x44Hex, при подключении к высокому уровню — 0x45Hex.

AL — вывод срабатывает, когда условия окружающей среды (влажность и/или температура) превышают заданные пользователем пределы.

Подключение модуля SHT31 к Arduino

Подключение датчика SHT31 очень простое!

Необходимо подключить всего четыре контакта, чтобы начать использовать датчик. Один для VCC, один для GND и две линии данных для связи по I2C.

Подключите вывод SCL к контакту тактового сигнала I2C, а вывод SDA — к контакту данных I2C на Arduino. Обратите внимание, что у каждой платы Arduino контакты I2C расположены по-разному и должны быть подключены соответствующим образом. На платах Arduino с компоновкой R3 контакты SDA (линия данных) и SCL (тактовая линия) расположены на разъёмах рядом с контактом AREF. Они также известны как A5 (SCL) и A4 (SDA).

На следующей иллюстрации показана схема подключения.

Подключение датчика температуры и влажности SHT31 к Arduino

Установка библиотеки

Для запуска датчика необходимо установить библиотеку `Adafruit SHT31 `_. Она доступна в менеджере библиотек Arduino.

Для установки библиотеки перейдите в Sketch > Include Library > Manage Libraries… Подождите, пока менеджер библиотек загрузит индекс библиотек и обновит список установленных библиотек.

Подключение датчика температуры и влажности SHT31 к Arduino

Отфильтруйте поиск, введя „SHT31“, и установите библиотеку.

Подключение датчика температуры и влажности SHT31 к Arduino

Библиотека Adafruit_SHT31 внутренне использует вспомогательную библиотеку `Adafruit Bus IO `_ для абстрагирования транзакций I2C и SPI и работы с регистрами. Поэтому найдите в менеджере библиотек adafruit bus и установите её тоже.

Подключение датчика температуры и влажности SHT31 к Arduino

Код Arduino — Считывание температуры и влажности

Ниже приведён базовый скетч Arduino. Загрузите его в Arduino, и вы увидите текущую температуру и влажность в вашей комнате!

#include <Arduino.h>
#include <Wire.h>
#include "Adafruit_SHT31.h"

Adafruit_SHT31 sht31 = Adafruit_SHT31();

void setup() {
  Serial.begin(9600);

  if (! sht31.begin(0x44)) {   // Set to 0x45 for alternate I2C address
    Serial.println("Couldn't find SHT31");
    while (1) delay(1);
  }
}

void loop() {
  float t = sht31.readTemperature();
  float h = sht31.readHumidity();

  if (! isnan(t)) {  // check if 'is not a number'
    Serial.print("Temp *C = "); Serial.print(t); Serial.print("\t\t");
  } else {
    Serial.println("Failed to read temperature");
  }

  if (! isnan(h)) {  // check if 'is not a number'
    Serial.print("Hum. % = "); Serial.println(h);
  } else {
    Serial.println("Failed to read humidity");
  }

  delay(1000);
}

После загрузки кода откройте последовательный терминал на скорости 9600 бод. Вы должны увидеть что-то похожее на вывод, показанный ниже. Попробуйте подышать на датчик, чтобы увидеть изменение значений влажности и температуры!

Подключение датчика температуры и влажности SHT31 к Arduino

Пояснение к коду:

Код достаточно прост. В начале подключаются библиотеки Arduino.h, Wire.h и Adafruit_SHT31.h, и в глобальной области видимости создаётся объект Adafruit_SHT31.

#include <Arduino.h>
#include <Wire.h>
#include "Adafruit_SHT31.h"

Adafruit_SHT31 sht31 = Adafruit_SHT31();

В setup мы инициализируем последовательную связь с ПК и вызываем функцию begin().

Функция begin(<address>) инициализирует датчик, где <address> — I2C-адрес датчика. По умолчанию он равен 0x44Hex, вы также можете настроить датчик на 0x45Hex и передать это значение. Эта функция возвращает True, если датчик найден и ответил корректно, и False, если не найден.

void setup() {
  Serial.begin(9600);

  if (! sht31.begin(0x44)) {   // Set to 0x45 for alternate I2C address
    Serial.println("Couldn't find SHT31");
    while (1) delay(1);
  }
}

После инициализации вы можете обращаться к методам объекта (sht31) через оператор точки.

sht31.readTemperature() возвращает показание температуры в °C в формате числа с плавающей запятой (целая + дробная часть). Для перевода в градусы Фаренгейта умножьте на 1,8 и прибавьте 32.

sht31.readHumidity() возвращает показание влажности, также в формате числа с плавающей запятой от 0 до 100 (это показание в % влажности).

void loop() {
  float t = sht31.readTemperature();
  float h = sht31.readHumidity();

  if (! isnan(t)) {  // check if 'is not a number'
    Serial.print("Temp *C = "); Serial.print(t); Serial.print("\t\t");
  } else {
    Serial.println("Failed to read temperature");
  }

  if (! isnan(h)) {  // check if 'is not a number'
    Serial.print("Hum. % = "); Serial.println(h);
  } else {
    Serial.println("Failed to read humidity");
  }

  delay(1000);
}