Подключение датчика AHT20 + BMP280 к Arduino UNO

Введение

Сегодня расскажу о комбинированном датчике AHT20 + BMP280, позволяющем одновременно измерять температуру, влажность воздуха и атмосферное давление (Дешевая замена BME280). Этот модуль широко применяется в метеорологических станциях, экологическом мониторинге, интеллектуальных системах управления домом и зданиями.

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

  • Напряжение питания: 3,3В;
  • Ток потребления: 1мА;
  • Диапазон измерения и погрешность измерения: 0 — 100 % влажности (погрешность ±2%); — 40…+8585°C (погрешность ±0.3°C), 300…1100 гПа (погрешность ±1 гПа);
  • Максимальная частота I2C: 400кГц;
  • Габаритные размеры: 15 х 15 х 2 мм;
  • Вес: 2 грамма

Описание

Модуль оснащен двумя датчиками: AHT20 и BMP280. Первый датчик, AHT20, обеспечивает точное измерение относительной влажности воздуха в диапазоне от 0% до 100%, а также фиксирует температуру окружающей среды в пределах от −40°C до +85°C. Второй датчик, BMP280, позволяет измерять атмосферное давление в интервале от 300 гПа до 1100 гПа и дополнительно определяет температуру в аналогичном температурном диапазоне.

Обмен данными с модулем осуществляется посредством протокола I²C, который позволяет подключать модуль к микроконтроллеру Arduino или другим контроллерам.

Назначение контактов
► VCC  — питание модуля 3.3В;
► SDA — линия данных I²C;
► GND — земля;
► SDA — линия тактирования I²C.

Подключение модуля AHT20 и BMP280 к Arduino UNO

Приведу пример схемы подключения модуля AHT20+BMP280 к плате Arduino UNO, а также напишу простейший скетч, позволяющий выводить значения температуры, влажности и атмосферного давления непосредственно в последовательный интерфейс Arduino.

Необходимые детали

  • Контроллер Arduino UNO R3  x 1 шт.
  • Провода DuPont, 2,54 мм, 20 см x 1 шт.
  • Модуль измерения давления, температуры и влажности BMP280 и AHT20 x 1 шт.

Подключение

Подключение довольно простое и осуществляется посредством протокола I²C. Для этого соедините контакты A5 и A4 платы Arduino UNO соответственно с выводами SCL и SDA обоих датчиков AHT20 и BMP280. Далее обеспечьте подачу питания, подключив выводы VCC и GND модуля к соответствующим контактам +5В и GND Arduino UNO. Обратите внимание, что уровень напряжения выхода логики Arduino UNO составляет 5В, тогда как сам модуль рассчитан на работу от 3,3В. Желательно применять преобразователь логических уровней, однако в данном примере мы пренебрегаем этим требованием. Проверяем еще раз схему и приступаем к загрузке скетча.

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

Для работы, будем использовать библиотеки «Adafruit_BMP280» и «Adafruit_AHTX0» скачать можно используя интегрированную среду разработки Arduino IDE», для этого откройте «Скетч → Подключение библиотеки → Менеджер библиотек…», так же выложу библиотеки в конце статьи.

Установка «Adafruit_BMP280»

Для работы библиотеки необходимо установить зависимые библиотеки, нажимаем «Установить все»

Установка «Adafruit_AHTX0»

Для работы библиотеки необходимо установить зависимые библиотеки, нажимаем «Установить все»

Программа

Открываем среду разработки Arduino IDE и загружаем первую программу в Arduino UNO.

#include <Adafruit_BMP280.h>    // Подключаем библиотеку для работы с датчиком BMP280
#include <Adafruit_AHTX0.h>     // Подключаем библиотеку для работы с датчиком AHT20

Adafruit_BMP280 bmp;            // Создаем объект для работы с датчиком BMP280
Adafruit_AHTX0 aht;             // Создаем объект для работы с датчиком AHT20

void setup() 
{
  Serial.begin(9600);           // Инициализируем последовательного порт на скорости 9600

  if (!bmp.begin()) {           // Инициализация BMP280
    Serial.println("BMP280 sensor not found!");
    while (1);                  // Останавливаемся, если датчик не обнаружен
  }

  if (!aht.begin()) {           // Инициализация AHT20
    Serial.println("AHT20 sensor not found!");
    while (1);                  // Останавливаемся, если датчик не обнаружен
  }

  Serial.println("Sensors initialized.");
}

void loop() 
{
  sensors_event_t tempEvent, humidEvent;

  // Запрашиваем обновление показаний температуры и влажности
  aht.getEvent(&tempEvent, &humidEvent);

  float temperature = tempEvent.temperature;      // Читаем данные температуры с AHT20
  float humidity = humidEvent.relative_humidity;  // Читаем данные влажности с AHT20
  float pressure = bmp.readPressure() / 133.3F;   // Читаем данные давления с BMP280

  // Выводим результаты в сериал-порт
  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" °C");

  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.println("%");

  Serial.print("Pressure: ");
  Serial.print(pressure);
  Serial.println(" mm");

  delay(2000); // Пауза перед следующим чтением
}

Если все правильно сделали при открытия мониторинга порта увидим показания с датчиков

Описание программы:

Сначала подключаются необходимые библиотеки для работы с датчиками BMP280 и AHT20.

#include <Adafruit_BMP280.h>   
#include <Adafruit_AHTX0.h>     

Создаются объекты для работы с датчиками.

Adafruit_BMP280 bmp;            
Adafruit_AHTX0 aht;             

В функции setup, инициализируем последовательного порта со скорость 9600 бит/с., затем производим проверку доступности датчиков BMP280 и AHT20. Если датчик не найден, выводится сообщение об ошибке.

Serial.begin(9600);           

  if (!bmp.begin()) {           
    Serial.println("BMP280 sensor not found!");
    while (1);                  
  }

  if (!aht.begin()) {           
    Serial.println("AHT20 sensor not found!");
    while (1);                  
  }

  Serial.println("Sensors initialized.");

В основном цикле программы (loop) данные температуры и влажности запрашиваются методом aht.getEvent() и помещаются в структуру типа sensors_event_t. Полученные значения сохраняются в переменных temperature и humidity. Далее считываются показания давления, которые затем делятся на коэффициент 133.3 для перевода полученных показаний в миллиметры ртутного столба (мм рт. ст.).

sensors_event_t tempEvent, humidEvent;

  aht.getEvent(&tempEvent, &humidEvent);

  float temperature = tempEvent.temperature;      
  float humidity = humidEvent.relative_humidity;  
  float pressure = bmp.readPressure() / 133.3F;   

Далее, все показания отправляем в последовательный порт.

  Serial.print("Temperature: ");
  Serial.print(temperature);
  Serial.println(" °C");

  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.println("%");

  Serial.print("Pressure: ");
  Serial.print(pressure);
  Serial.println(" mm");

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

Вам может также понравиться...

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *