Датчик 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 мм.
На плате имеется семь контактов для подключения:
- 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 Uno | Gnd | 5V | A4 | A5 |
SHT31 ROC | Gnd | VIN | SDA | SCL |
Программа
Для теста напишем программу, которая будет выводить значение температуры и относительной влажности в последовательный порт. Используем библиотеку 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%.
Полезные ссылки
Принципиальная схема платы SHT31 от RobotClass