Подключение датчика качества воздуха, температуры и влажности ENS160 + AHT21 к Arduino
Сегодня расскажу о модуле с двумя датчиками ENS160 и AHT21, которые представляют собой передовое решение для мониторинга окружающей среды, комбинируя в себе высокую точность и многофункциональность. Устройство предназначено для измерения качества воздуха в помещении, включая различные газы и летучие органические соединения, так же измеряет температуру и влажность.
Технические параметры
► Обнаруживаемые газы: различные газы и летучие органические соединения (ЛОС), включая толуол, водород, этанол, азот и озон;
► Диапазон: 0-65535ppb;
► Диапазон измерения температуры: -40°C-120°C ±0,3°C;
► Диапазон измерения влажности: 0-100%RH ±2%RH;
► Разрешение измерения температуры: 0,01°C;
► Разрешение измерения влажности: 0,024% RH;
► Время нагрева: 5-60 минут;
► Выход: TVOC, eCO2, AQI;
► Интерфейс: I2С/SPI;
► Предварительный нагрев: менее 1 минуты;
► Рабочее напряжение: 2-5,5V.
Краткий обзор ENS160 + AHT21.
На данный момент, по модулю ENS160 + AHT21 мало информации в интернете, даже не получилось найти принципиальную схему.


Если посмотреть на модуль, слева расположен датчик ENS160 (собран в корпусе LGA), который специально разработан для мониторинга качества воздуха в помещениях. ENS160 это цифровой мультигазовый датчик, основанный на технологии оксида металла (MOX) и оснащенный четырьмя сенсорными элементами. Каждый сенсорный элемент имеет независимое управление для обнаружения широкого спектра газов, например летучих органических соединений (VOCs), включая этанол, толуол, а также водород и диоксид азота. Датчик ENS160 может работать по двум интерфейсам I2C и SPI, все кантаты разведены на плату, выбор интерфейса осуществляется с помощью вывода CS (низкий уровень SPI, высокий уровень SPI).
Для питания датчиков на модуле установлен два стабилизатора напряжения 662K на 3.3В и 65k5 на 1.8В их можно увидеть слева на плате в корпусе SOT-23.
Справа установлен датчик температуры и влажности AHT21 в SMD корпусе с небольшими габаритами 3 х 3 мм и высотой 0.8 мм. Диапазон измеряемой температуры составляет -40 до +120 градусов с точностью 0.3% и диапазон измеряемой влажности от 0 до 100% с точностью 2%. Датчик работает только по интерфейсу I2C.
Так же, для связи внизу расположена резисторная сборка и две транзисторные сборки с маркировкой 72k, которые служат для согласования уровней.
Конфигурация контактов NS160 + AHT21
► VIN — питание модуля 5В
► 3V3 — питание модуля 3.3В;
► GND — минус от источника.
► SCL/SCLK — шины данных I2C (SPI);
► SDA/MOSI— шины данных I2C (SPI);
► ADD/MISO — шины данных SPI;
► SC — шины данных SPI (выбор интерфейса);
► INT — Вывод прерывания с ENS160/
Подключение модуля ENS160 и AHT21 к Arduino
В примере приведу схему подключения модуля ENS160 и AHT21 к плате Arduino UNO. Показания выведем в «Последовательный порт»
Необходимые компоненты.
► Arduino UNO R3 x 1 шт.
► Датчик качества воздуха, температуры и влажности ENS160 + AHT21 x 1 шт.
► Провод DuPont, 2,54 мм, 20 см, F-M (Female — Male) x 1 шт.
► Кабель USB 2.0 A-B x 1 шт
Подключение.
Для подключения модуля ENS160 + AHT21 к плате Arduino необходимо задействовать в общей сложности 4 провода. Подключаем контакты 3V3 и GND с ENS160 + AHT21 к контактам 3.3 В и GND на Arduino UNO, а контакт SCL и SDA с ENS160 + AHT21 подключаем к контакту А5 и A4 к Arduino UNO.

Установка библиотек:
Для работы, будем использовать библиотеку «SparkFun_Qwiic_Humidity_AHT20″ и «SparkFun_ENS160», скачать их можно с сайта github и github, так же выложу в конце статьи.
Программа №1 — Считывание температуры и влажности.
Открываем среду разработки Arduino IDE и загружаем первую программу в Arduino UNO.
#include <Wire.h> // Подключаем библиотеку для работы по I2C
#include <SparkFun_Qwiic_Humidity_AHT20.h> // ПОдключаем библиотеку от SparkFun
AHT20 humiditySensor; // Создаем объект, для работы с датчиком
void setup()
{
Serial.begin(115200); // Открываем последовательную связь
Wire.begin(); // Инициализация связи I2C
// Проверка связи с датчиком
if (humiditySensor.begin() == false)
{
Serial.println("AHT20 not detected. Please check wiring. Freezing.");
while (1);
}
Serial.println("AHT20 acknowledged.");
}
void loop()
{
if (humiditySensor.available() == true) // Если доступно новое измерение
{
// Считываем показания температуры и влажности
float temperature = humiditySensor.getTemperature();
float humidity = humiditySensor.getHumidity();
// Отправка данных в последовательный порт
Serial.print("Temperature: ");
Serial.print(temperature, 2);
Serial.print(" C\t");
Serial.print("Humidity: ");
Serial.print(humidity, 2);
Serial.print("% RH");
Serial.println();
}
delay(2000); // Пауза 2 секунды
}
Открываем мониторинг порта, где можем увидеть показания температуры и влажности.

Программа №2 — Считывание качества воздуха с ENS160
Открываем среду разработки Arduino IDE и загружаем первую программу в Arduino UNO.
#include <Wire.h> // Подключаем библиотеку для работы по I2C
#include "SparkFun_ENS160.h" // ПОдключаем библиотеку от SparkFun
SparkFun_ENS160 myENS; // Создаем объект, для работы с датчиком
int ensStatus; // Создаем переменную
void setup()
{
Serial.begin(115200); // Открываем последовательную связь
Wire.begin(); // Инициализация связи I2C
if(!myENS.begin()) // Инициализация датчика
{
Serial.println("Could not communicate with the ENS160, check wiring.");
while(1);
}
if(myENS.setOperatingMode(SFE_ENS160_RESET)) // Сброс настроек датчика.
Serial.println("Ready.");
delay(100);
myENS.setOperatingMode(SFE_ENS160_STANDARD); // Установка стандартный режим работы
// Статус работы датчика:
// 0 - Работает нормально: Стандартная работа
// 1 - Прогрев: выполняется в течение 3 минут после включения питания.
// 2 - Первоначальный запуск: выполняется в течение первого часа работы.
// 3 - Неверный вывод
ensStatus = myENS.getFlags();
Serial.print("Gas Sensor Status Flag (0 - Standard, 1 - Warm up, 2 - Initial Start Up): ");
Serial.println(ensStatus);
}
void loop()
{
if( myENS.checkDataStatus() )
{
Serial.print("Air Quality Index (1-5) : ");
Serial.println(myENS.getAQI());
Serial.print("Total Volatile Organic Compounds: ");
Serial.print(myENS.getTVOC());
Serial.println("ppb");
Serial.print("CO2 concentration: ");
Serial.print(myENS.getECO2());
Serial.println("ppm");
Serial.print("Gas Sensor Status Flag (0 - Standard, 1 - Warm up, 2 - Initial Start Up): ");
Serial.println(myENS.getFlags());
Serial.println();
}
delay(200);
}
Открываем мониторинг порта, где можем увидеть показания с датчика ENS160.

Ссылки
Документация AHT21
Библиотека SparkFun_Qwiic_Humidity_AHT20 v.1.0.3
Документация ENS160
Библиотека SparkFun_ENS160 v.1.1.0
Купить на Aliexpress
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Купить в Самаре и области
Контроллер Arduino UNO R3 на CH340G
Контроллер Arduino UNO R3 на Atmega16U2
Провода DuPont, 2,54 мм, 20 см
Датчик качества воздуха, температуры и влажности ENS160 + AHT21

Спасибо!!!
На практике: завышение температуры на 2 градуса, без кондёра по питанию не работает С02
Здравствуйте! После 24х часов работы записались параметры во внутреннюю память. Режим initial setup пройден. Теперь чувствительность датчика низкая. Можно ли вернуть его в изначальное состояние?