Датчик влажности SHT31

Датчик SHT31 — точный и быстрый датчик влажности и температуры, который приходит в мир DIY на замену устаревшему DHT11 (см. урок про DHT11). Датчик работает по шине I2C и легко подключается к любому контроллеру, будь то Arduino, ESP8266 или STM32.

Характеристики датчика SHT31

  • напряжение питания: от 3,3 до 5 В;
  • рабочий ток: 100 мкА;
  • рабочая температура: от -40 до 125 ℃;
  • измеряемая температура: от -40 до 125 ℃;
  • точность измерения температуры: ±0.3°C;
  • измеряемая относительная влажность: от 0% до 100%;
  • точность измерения влажности: ±2%;
  • размер: 23 х 23 мм;
  • расстояние между монтажными отверстиями: 18 мм.
Датчик влажности SHT31 RobotClass

На плате имеется семь контактов для подключения:

  • VIN — питание, от 4,5 до 5,5 В;
  • GND — земля GND;
  • SCL, SDA — контакты шины I2C;
  • ADR — выбор адреса шины I2C;
  • RST — сброс, активный низкий;
  • ALR — источник прерываний для МК.


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

Список необходимых компонентов

Для выполнения простого примера с датчиком SHT31 от RobotClass, кроме самого модуля датчика, потребуется Ардуино-совместимый контроллер и немного проводов вилка-розетка. Если вам не хватает чего-то из этого, можно добавить необходимые компоненты в корзину прямо здесь и затем оформить заказ в нашем интернет-магазине.

В корзину
В корзину
В корзину

Подключение

Для подключения к Ардуино будем использовать интерфейс I2C. Датчик SHT31 поддерживает два рабочих напряжения: 5В и 3,3В, а значит его можно подключать и к Ардуино и к 3-Вольтовым контроллерам типа ESP или STM32. Ниже представлена схема подключения к Ардуино.

Подключение SHT31 I2C

Arduino UnoGnd5VA4A5
SHT31 ROCGndVINSDASCL

Программа

Для теста напишем программу, которая будет выводить значение температуры и относительной влажности в последовательный порт. Используем библиотеку Adafruit_SHT31, которую можно найти в репозитории Arduino IDE.

#include "Adafruit_SHT31.h"

bool enableHeater = false;
uint8_t loopCnt = 0;

Adafruit_SHT31 sht31 = Adafruit_SHT31();

void setup() {
    Serial.begin(9600);
    sht31.begin(0x44); // инициализация датчика с адресом 0x44
}

void loop() {
    float t = sht31.readTemperature(); // считывание температуры
    float h = sht31.readHumidity(); // считывание отн. влажности

    // если t - это число
    // выводим его в последовательный порт
    if (! isnan(t)) {
        Serial.print("t = ");
        Serial.print(t);
        Serial.print("\t");
    } else { 
        Serial.println("Failed to read temperature");
    }
  
    // если h - это число
    // выводим его в последовательный порт
    if (! isnan(h)) {  // проверка, что t - это число
        Serial.print("h = ");
        Serial.println(h);
    } else { 
        Serial.println("Failed to read humidity");
    }

    delay(100);
}

Загружаем программу на Ардуино и открываем монитор последовательного порта. Если подышать на датчик, можно заметить, как значение относительной влажности резко растёт почти до 100%.

Для наглядности, откроем плоттер по последовательному порту.
Серый график — относительная влажность. Зелёный — температура.

Полезные ссылки

Спецификация производителя

Исходный код Adafruit_SHT31

Принципиальная схема платы SHT31 от RobotClass

Датчик влажности SHT31 RobotClass. Принципиальная схема

Изменено:

Добавить комментарий

Ваш адрес email не будет опубликован.