Подключение датчика температуры и влажности AM2320 к Arduino
Хотите вести журнал климата в вашей теплице, создать систему контроля увлажнителя или отслеживать данные температуры и влажности для проекта метеостанции? Датчик температуры и влажности AM2320 может стать правильным выбором для вас!
Датчик AM2320 откалиброван на заводе и требует минимум внешних компонентов для работы. Поэтому, выполнив несколько подключений и написав код для Arduino, вы можете сразу начать измерять относительную влажность и температуру.
Обзор оборудования
AM2320 — это недорогой, простой в использовании и достаточно точный цифровой датчик температуры и влажности от AOSONG. Он выглядит как популярные датчики температуры и влажности DHT11/DHT22, но в отличие от классических датчиков DHT имеет интерфейс I2C!
Датчик AM2320 способен измерять влажность во всём диапазоне от 0 до 100% RH с типичной точностью ±3% в диапазоне от 20% до 80% RH (разрешение 0,024% RH).
Он имеет максимальный диапазон температур от -40 до 80°C и типичную точность ±0,5°C при 25°C (разрешение 0,01°C).
AM2320 может выдавать данные с максимальной частотой дискретизации 0,5 Гц, то есть одно измерение каждые две секунды.
Требования к питанию
Сам датчик работает от 3,3 В до 5,5 В, что делает его совместимым с 3 В и 5 В. Поэтому вы можете использовать его с вашим любимым 3,3-вольтовым или 5-вольтовым микроконтроллером без проблем.
AM2320 потребляет менее 0,95 мА во время измерений и менее 10 мкА в спящем режиме. Такое низкое энергопотребление позволяет использовать его в устройствах с батарейным питанием, таких как мобильные телефоны, носимые устройства или умные часы.
Интерфейс I2C
AM2320 — это датчик с I2C-интерфейсом, что означает использование двух линий данных/тактирования I2C, доступных на большинстве микроконтроллеров, и может разделять эти выводы с другими I2C-датчиками при условии отсутствия конфликта адресов.
Датчик имеет фиксированный I2C-адрес 0x5C в шестнадцатеричной системе. Для связи с несколькими датчиками AM2320 на одной шине требуется мультиплексор.
Технические характеристики
Вот полные технические характеристики:
Для получения дополнительной информации обратитесь к техническому описанию ниже.
Распиновка датчика AM2320
Теперь давайте рассмотрим распиновку.
VDD — это вывод питания. Поскольку датчик работает от 3,3 до 5,5 В постоянного тока, подайте на него такое же напряжение, как логический уровень вашего микроконтроллера — например, для 5-вольтового микроконтроллера, такого как Arduino, используйте 5 В.
SDA — это вывод данных I2C, требуется подтягивающий резистор от 2,2 кОм до 10 кОм к VDD.
GND — общая земля для питания и логики.
SCL — это вывод тактирования I2C, требуется подтягивающий резистор от 2,2 кОм до 10 кОм к VDD.
Схема подключения AM2320 к Arduino
Поскольку используется шина I2C, подключение AM2320 к Arduino довольно просто!
Нужно подключить только четыре вывода для начала работы с датчиком. Один для VCC, один для GND и две линии данных для I2C-связи.
Подключите вывод SCL к выводу тактирования I2C, а вывод SDA — к выводу данных I2C на Arduino. Обратите внимание, что каждая плата Arduino имеет разные выводы I2C, которые следует подключать соответственно. На платах Arduino с компоновкой R3 линии SDA (данные) и SCL (тактирование) находятся на штыревых разъёмах рядом с выводом AREF. Они также известны как A5 (SCL) и A4 (SDA).
AM2320 не имеет внутренних подтягивающих резисторов для шины I2C. Поэтому их нужно добавить внешне. Подойдёт любое значение от 2,2 кОм до 10 кОм. Резисторы подключаются от VDD к SCL и SDA соответственно.
На следующей иллюстрации показана схема подключения.
Установка библиотеки
Чтобы запустить датчик, вам потребуется установить библиотеку Adafruit AM2320. Она доступна в менеджере библиотек Arduino.
Для установки библиотеки перейдите в Sketch > Include Library > Manage Libraries… Дождитесь, пока менеджер библиотек загрузит индекс и обновит список установленных библиотек.
Отфильтруйте поиск, набрав „am2320“, и установите библиотеку.
Библиотека Adafruit_AM2320 использует бэкенд поддержки Adafruit Sensor. Поэтому найдите в менеджере библиотек Adafruit Unified Sensor и установите его тоже (возможно, придётся прокрутить вниз).
Вам также нужно установить вспомогательную библиотеку Adafruit Bus IO. Она абстрагирует транзакции и регистры I2C и SPI.
Код Arduino — чтение температуры и влажности
Ниже приведён базовый скетч для Arduino. Загрузите его на Arduino. Вы увидите текущую температуру и влажность в вашей комнате!
#include "Adafruit_Sensor.h"
#include "Adafruit_AM2320.h"
Adafruit_AM2320 am2320 = Adafruit_AM2320();
void setup() {
Serial.begin(9600);
while (!Serial) {
delay(10); // hang out until serial port opens
}
am2320.begin();
}
void loop() {
Serial.print("Temp: ");
Serial.print(am2320.readTemperature());
Serial.print(" C");
Serial.print("\t\t");
Serial.print("Humidity: ");
Serial.print(am2320.readHumidity());
Serial.println(" \%");
delay(2000);
}
После загрузки кода откройте монитор последовательного порта на скорости 9600 бод. Вы должны увидеть что-то похожее на вывод ниже. Попробуйте подышать на датчик, чтобы увидеть изменение обоих значений — влажности и температуры!
Объяснение кода
Это, пожалуй, один из самых простых скетчей. В начале подключаются библиотеки Adafruit_Sensor.h и Adafruit_AM2320.h, и создаётся объект Adafruit_AM2320 в глобальной области видимости.
#include "Adafruit_Sensor.h"
#include "Adafruit_AM2320.h"
Adafruit_AM2320 am2320 = Adafruit_AM2320();
В функции setup мы инициализируем последовательную связь с ПК и вызываем функцию begin() для инициализации объекта.
void setup() {
Serial.begin(9600);
while (!Serial) {
delay(10); // hang out until serial port opens
}
am2320.begin();
}
После инициализации объекта вы можете обращаться к методам объекта (am2320) через оператор точки.
am2320.readTemperature() возвращает значение температуры с плавающей точкой (целая + дробная часть) в °C. Вы можете преобразовать в градусы Фаренгейта, умножив на 1,8 и добавив 32.
am2320.readHumidity() возвращает показание влажности, также в виде числа с плавающей точкой от 0 до 100 (это показывает % влажности).
void loop() {
Serial.print("Temp: ");
Serial.print(am2320.readTemperature());
Serial.print(" C");
Serial.print("\t\t");
Serial.print("Humidity: ");
Serial.print(am2320.readHumidity());
Serial.println(" \%");
delay(2000);
}