Цифровой датчик температуры и влажности I2C (Trema-модуль)

Фото редактируется

В линейке trema-модулей есть три датчика температуры и влажности:

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

Общие сведения:

Модуль построен на базе чипа AM2320. По своим техническим характеристикам, модуль превосходит датчики DHT11 и DHT22. Модуль на базе чипа AM2320 позволяет проверять достоверность данных не проверкой контрольной суммой, как в датчиках DHT11 и DHT22, а проверкой циклически избыточного кода, что в разы уменьшает вероятность получения ошибочных данных.

Спецификация:

  • Интерфейс: I2C.
  • Питание: 3,1 ... 5,5 (номинально 5В).
  • Потребляемый ток:
    • В режиме ожидания: 8 ... 10 мкА.
    • В режиме измерений: 350 мкА, пиковый до 950 мкА.
  • Измерение температуры:
    • Допустимый диапазон: -40°C .. 80°C.
    • Максимальная погрешность: ±0,5°C.
    • Разрешение шкалы: 0,1°C.
  • Измерение относительной влажности:
    • Допустимый диапазон: 0...99,9%
    • Максимальная погрешность: ±3% при t=25°C
    • Разрешение шкалы: 0.1%
    • Уход показаний: 0,5%/год
  • Минимальное время между считываниями показаний: 2 сек
  • Габариты: 30х30х6,5 мм
  • Вес: 4 гр.

Подключение:

Модуль подключается к аппаратной шине I2C Arduino и имеет адрес 0x5C.
Для удобства подключения, предлагаем воспользоваться TremaShield.

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

Питание:

Модуль поддерживает питание 3,3 В или 5 В постоянного тока.

Работа с модулем:

Для работы с модулем, предлагаем воспользоваться библиотекой iarduino_AM2320, синтаксис которой идентичен библиотеке iarduino_DHT для работы с датчиками DHT11 и DHT22.

Пример:

Получение данных от модуля в монитор последовательного порта, с выводом всех возможных ошибок:
// Подключаем библиотеки:
#include <Wire.h>           // подключаем библиотеку для работы с шиной I2C
#include <iarduino_AM2320.h>// подключаем библиотеку для работы с датчиком температуры и влажности
// Объявляем переменные и константы:
iarduino_AM2320 sensor;     // объявляем объект sensor для работы с библиотекой iarduino_AM2320
void setup(){
  sensor.begin();           // инициируем работу с датчиком AM2320
  Serial.begin(9600);       // инициируем подключение по последовательному порту на скорости 9600 бит/с
}
void loop(){
  switch(sensor.read()){    // читаем показания датчика
    case AM2320_OK:         Serial.println((String) "CEHCOP AM2320:  T=" + sensor.tem + "*C, PH=" + sensor.hum + "%");  break;
    case AM2320_ERROR_LEN:  Serial.println("OTIIPABKA HEBO3M.");     break; // объем передаваемых данных превышает буфер I2C
    case AM2320_ERROR_ADDR: Serial.println("HET CEHCOPA");           break; // получен NACK при передаче адреса датчика
    case AM2320_ERROR_DATA: Serial.println("OTIIPABKA HEBO3M.");     break; // получен NACK при передаче данных датчику
    case AM2320_ERROR_SEND: Serial.println("OTIIPABKA HEBO3M.");     break; // ошибка при передаче данных
    case AM2320_ERROR_READ: Serial.println("HET OTBETA OT CEHCOPA"); break; // получен пустой ответ датчика
    case AM2320_ERROR_ANS:  Serial.println("OTBET HEKOPPEKTEH");     break; // ответ датчика не соответствует запросу
    case AM2320_ERROR_LINE: Serial.println("HEPABEHCTBO CRC");       break; // помехи в линии связи (не совпадает CRC)
  }
  delay(1000);
}
Результат работы скетча:

Описание функций библиотеки:

Подключение библиотек:
#include <Wire.h>             // Подключаем библиотеку Wire, для работы с шиной I2C
#include <iarduino_AM2320.h>  // Подключаем библиотеку iarduino_AM2320, для работы с модулем
iarduino_AM2320 sensor;       // Объявляем объект sensor, для работы с функциями библиотеки iarduino_AM2320

В библиотеке реализованы 2 функции:

Функция begin();
  • Назначение: Инициализация работы с датчиком AM2320.
  • Синтаксис: begin();
  • Параметры: Нет.
  • Возвращаемые значения: Нет.
  • Примечание: Вызывается 1 раз в коде setup.
  • Пример:
void setup(){
  sensor.begin();             // Инициируем работу с датчиком AM2320
}
Функция read();
  • Назначение: Чтение показаний датчика в переменные: tem и hum.
  • Синтаксис: read();
  • Параметры: Нет.
  • Возвращаемые значения:
    • AM2320_OK - успешное чтение данных
    • AM2320_ERROR_LEN - объем передаваемых данных превышает буфер I2C
    • AM2320_ERROR_ADDR - получен NACK при передаче адреса датчика
    • AM2320_ERROR_DATA - получен NACK при передаче данных датчику
    • AM2320_ERROR_SEND - ошибка при передаче данных
    • AM2320_ERROR_READ - получен пустой ответ датчика
    • AM2320_ERROR_ANS - ответ датчика не соответствует запросу
    • AM2320_ERROR_LINE - помехи в линии связи (не совпадает CRC)
  • Примечание: Значения переменных tem и hum обновляются только при успешном чтении данных датчика (когда функция возвращает значение AM2320_OK).
  • Пример:
int A = sensor.read();        // Читаем показания датчика (данные с датчика будут записаны в переменные tem и hum, а в переменную A запишется результат чтения)
sensor.read();                // Читаем показания датчика (данные с датчика будут записаны в переменные tem и hum). В данном примере мы игнорируем результат чтения
                              // Если данные от датчика прочитаны с ошибкой, то в переменных tem и hum останутся предыдущие значения
Переменные:
  • tem: тип float, содержит значение температуры окружающей среды в °C
  • hum: тип float, содержит значение атмосферного давления в %
  • Значения переменных tem и hum обновляются только при успешном чтении данных датчика функцией read().
sensor.read();                // Читаем показания датчика
float A = sensor.tem;         // Сохраняем прочитанное значение температуры в переменную A
float B = sensor.hum;         // Сохраняем прочитанное значение влажности в переменную B

Применение:

  • Метеостанции
  • Проекты климат-контроля

Ссылки:

Обсуждение

Присоединяйся

На главную