В линейке trema-модулей есть три датчика температуры и влажности:
- Цифровой датчик температуры и влажности DHT11.
- Цифровой датчик температуры и влажности высокой точности DHT22.
- Цифровой датчик температуры и влажности I2C.
В этой статье, рассматривается модуль подключаемый к шине 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 гр.
Все модули линейки "Trema" выполнены в одном формате
Подключение:
Модуль подключается к аппаратной или программной шине I2C Arduino и имеет адрес 0x5C.
Для удобства подключения, предлагаем воспользоваться TremaShield.
Модуль удобно подключать 4 способами, в зависимости от ситуации:
Способ - 1: Используя проводной шлейф и Piranha UNO
Используя провода «Папа — Мама», подключаем напрямую к контроллеру Piranha UNO.
Способ - 2: Используя Trema Set Shield
Модуль можно подключить к любому из I2C входов Trema Set Shield.
Способ - 3: Используя проводной шлейф и Shield
Используя 4-х проводной шлейф, к Trema Shield, Trema-Power Shield, Motor Shield, Trema Shield NANO и тд.
Способ - 4: Подключение к программной шине I2C
При использовании программной шины I2C, модуль можно подключить к любым выводам Arduino, но потребуется дополнительно установить библиотеку iarduino_I2C_Software.h, для создания программной шины I2C, указав номера выбранных вами выводов. О том как это сделать читайте ниже в разделе «Подключение библиотеки», а так же на странице Wiki - Расширенные возможности библиотек iarduino для шины I2C.
Способ - 5: Альтернативный вариант подключения
Модуль можно подключить к любому выводу Arduino, как при подключении датчиков DHT11 и DHT22:
- Вывод SCL модуля нужно соединить с выводом GND до подачи питания.
- Вывод SDA модуля нужно подключить к любому выводу Arduino и подтянуть его к Vcc (+5V) через резистор 4,7 кОм ... 10 кОм.
- При таком варианте подключения, для работы с модулем потребуется библиотека iarduino_DHT, а не iarduino_AM2320.
- Преимуществом альтернативной схемы подключения является то, что к одной плате Arduino можно подключить множество модулей.
- Недостатком альтернативной схемы является то, что между опросами модуля должна выдерживаться пауза в 3-4 секунды.
Питание:
Модуль поддерживает питание 3,3 В или 5 В постоянного тока.
Подробнее о модуле:
Для работы с модулем, предлагаем воспользоваться библиотекой iarduino_AM2320, синтаксис которой идентичен библиотеке iarduino_DHT для работы с датчиками DHT11 и DHT22.
Подробнее про установку библиотеки читайте в нашей инструкции..
Примеры:
Получение данных от модуля в монитор последовательного порта, с выводом всех возможных ошибок:
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_AM2320. #include <iarduino_AM2320.h> // Подключаем библиотеку iarduino_AM2320. iarduino_AM2320 sensor; // Создаём объект sensor для работы с датчиком AM2320, используя функции и методы библиотеки iarduino_AM2320. // void setup(){ // sensor.begin(&Wire); // Инициируем работу с датчиком AM2320, указав ссылку на объект для работы с шиной I2C на которой находится датчик (по умолчанию &Wire). 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(2000); // ждём 2 секунды }
Результат работы скетча:
Описание основных функций библиотеки:
В данном разделе описаны функции библиотеки iarduino_AM2320 для работы с цифровыми датчиками температуры и влажности на базе чипа AM2320.
Библиотека iarduino_AM2320 может использовать как аппаратную, так и программную реализацию шины I2C. О том как выбрать тип шины I2C рассказано ниже в разделе «Подключение библиотеки», а так же на странице Wiki - расширенные возможности библиотек iarduino для шины I2C.
Подключение библиотеки:
- Если используется аппаратная шина I2C:
#include <Wire.h> // Подключаем библиотеку для работы с аппаратной шиной I2C, до подключения библиотеки iarduino_AM2320.h // #include <iarduino_AM2320.h> // Подключаем библиотеку для работы с модулем. iarduino_AM2320 sensor; // Создаём объект sensor, для работы с функциями библиотеки iarduino_AM2320 // void setup(){ // ... // sensor.begin(&Wire); // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). ... // Доступны объекты: &Wire, &Wire1, &Wire2... } //
- Если используется программная шина I2C:
#include <iarduino_I2C_Software.h> // Подключаем библиотеку для работы с программной шиной I2C, до подключения библиотеки iarduino_AM2320.h SoftTwoWire sWire(3,4); // Создаём объект программной шины I2C указав выводы которым будет назначена роль линий: SDA, SCL. // #include <iarduino_AM2320.h> // Подключаем библиотеку для работы с модулем. iarduino_AM2320 sensor; // Создаём объект sensor, для работы с функциями библиотеки iarduino_AM2320 // void setup(){ // ... // sensor.begin(&sWire); // Инициируем работу с модулем, указав ссылку на объект для работы с шиной I2C на которой находится модуль (по умолчанию &Wire). ... // } //
- В обоих примерах сначала подключается библиотека для работы с шиной I2C. Для аппаратной шины библиотека
Wire.h
(предустановлена в Arduino IDE), а для программной шины библиотека iarduino_I2C_Software.h, с созданием объекта которому указываются выбранные вами выводы шины, в примере выводы(3-SDA, 4-SCL)
. - Далее подключается библиотека и создаётся объект для работы с модулем.
- В коде
Setup()
, при инициализации работы с модулем указывается ссылка на объект работы с выбранной шиной I2Cbegin(&ШИНА)
. Остальные строки кода одинаковы для любой шины I2C.
Функция begin();
- Назначение: Инициализация работы с датчиком AM2320.
- Синтаксис: begin();
- Параметры:
- &ШИНА - Ссылка на объект для работы с шиной I2C на которой находится модуль.
- Для аппаратной шины: &Wire, &Wire1, &Wire2..., если подключена библиотека Wire.h
- Для программной шины: ссылка на объект библиотеки iarduino_I2C_Software.h.
- Параметр является не обязательным, по умолчанию используется ссылка &Wire.
- Возвращаемые значения: Нет.
- Примечание: Вызывается 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 обновляются только при успешном чтении данных датчика.
- Пример:
int A = sensor.read(); // Читаем показания датчика (данные с датчика будут записаны в переменные tem и hum, а в переменную A запишется результат чтения)
sensor.read(); // Читаем показания датчика (данные с датчика будут записаны в переменные tem и hum). В данном примере мы игнорируем результат чтения // Если данные от датчика прочитаны с ошибкой, то в переменных tem и hum останутся предыдущие значения
Переменные:
tem
: тип float, содержит значение температуры окружающей среды в °Chum
: тип float, содержит значение атмосферного давления в %- Значения переменных tem и hum обновляются только при успешном чтении данных датчика функцией read().
sensor.read(); // Читаем показания датчика float A = sensor.tem; // Сохраняем прочитанное значение температуры в переменную A float B = sensor.hum; // Сохраняем прочитанное значение влажности в переменную B
Применение:
- Метеостанции
- Проекты климат-контроля
Ссылки:
- Trema-модуль - цифровой датчик температуры и влажности I2C.
- Библиотека iarduino_AM2320.
- Библиотека iarduino_DHT - только для альтернативного метода подключения модуля.
- Библиотека iarduino_I2C_Software.
- Wiki - Расширенные возможности библиотек iarduino для шины I2C.
- Wiki - Установка библиотек в Arduino IDE.
- Урок 21.2 Метеостанция на базе датчика AM2320 I2C и четырехразрядного LED индикатора.
Обсуждение