Есть такой хороший датчик температуры и влажности, как AM2320. По характеристикам он почти идентичен с более известными датчиками серии DHT, но в то же время имеет возможность работы по I2C.
Сравнение аналогов
Если сравнивать датчики серии DHT и AM2320, получаем следующую картину:
Характеристика | Датчик | ||
---|---|---|---|
DHT11 | DHT22 | AM2320 | |
Диапазон температур | 0 … +50°C | -40 … +80°C | -40 … +80°C |
Шаг измерения температуры | 1°C | 0,1°C | 0,1°C |
Погрешность температуры | ±2°C | ±0,5°C | ±0,5°C |
Диапазон влажности | 20 … 90% | 0 … 100% | 0 … 99,9% |
Шаг измерения влажности | 1% | 0,1% | 0,1% |
Погрешность влажности | ±5% | ±5% | ±3% |
Цена | 70 руб. | 260 руб. | 190 руб. |
Цены для сравнения взяты из одного и того же магазина (какого – рекламы делать не буду). Так что выбор в пользу AM2320 был очевиден.
Достаточно непонятный момент – зачем делать такой шаг измерения, если погрешность превышает его в десятки раз? Но это вопрос скорее риторический.
Особенности работы
Важное преимущество этого датчика перед DHT – умение работать по шине I2C, но это же является причиной одного из главных недостатков. Дело в том, что работа по I2C предполагает обмен данными по запросу, при этом передаётся адрес устройства (от 0 до 127). И проблема в том, что датчики имеют один и тот же адрес, соответственно, подключить на эту шину более одного датчика будет очень сложно. Тем не менее, мне встречались упоминания о возможности.
Если у вас несколько таких датчиков, работать с ними следует как с DHT – по одному проводу. Для этого достаточно заземлить четвёртый вывод, который в режиме I2C используется для синхронизации AM2320.
Чтение данных с датчика
Мы в примере будем использовать работу по I2C. Для работы с датчиком скачаем соответствующую библиотеку, а также для поддержки I2C подключим библиотеку Wire. Поскольку нашей целью является работы с датчиком, а не с дисплеем, вместо отображения будем отправлять данные в последовательный порт, а смотреть их при помощи монитора порта в среде разработки.
Выводы датчика подключаем следующим образом:
- 1 – к выводу +5В.
- 2 – к выводу SDA (A4 для Arudino Uno);
- 3 – к выводу 0В.
- 4 – к выводу SCL (A5 для Arudino Uno).
И получаем следующую конструкцию:
Стоит отметить, что функция чтения информации с датчика передаёт код завершения операции, по которому можно судить об отсутствии ошибок. Скетч для работы с датчиком будет достаточно простой, поэтому весь код будет приведён здесь, а файла для скачивания не будет.
#include <Wire.h> #include <AM2320.h> AM2320 th; void setup() { Serial.begin(9600); } void loop() { switch(th.Read()) { case 0: Serial.print("T: "); Serial.print(th.t); Serial.print(", H: "); Serial.println(th.h); break; case 1: Serial.println("Sensor is offline!"); break; case 2: Serial.println("Data CRC error!"); break; default: Serial.println("Something impossible..."); } delay(1000); }
После запуска приложения открываем монитор порта и наблюдаем передачу данных с датчика.
Comments: