Модуль климатических измерений GY-21 базируется на CMOS-схеме, которая объединяет в себе элементы датчиков температуры и относительной влажности воздуха окружающей среды, а также компоненты для обработки данных (встроенный АЦП, калибровочные данные, I2C интерфейс для взаимодействия с другими устройствами).
Обладает компактными (13 x 10 x 3 мм) размерами и легко может быть закреплен в корпусе вашего будущего устройства при помощи предусмотренного в печатную плату отверстия под винт.
На плате имеется встроенный стабилизатор напряжения, а потому данный модуль совместим как с 3.3-вольтовыми, так и 5-вольтовыми контроллерами и отладочными платами. Калибровка для работы не требуется: она производится на заводе-изготовителе, а ее данные прошиваются в энергонезависимую память.
Среди других преимуществ модуля — сверхмалое энергопотребление (до 180 мкА в процессе измерений и 0.6 мкА в режиме ожидания). В плату модуля уже встроен резистор 4.7 кОм, а потому дополнительная обвязка для его подключения не потребуется. Обладает высокой точностью и стабильностью измерений для своего ценового сегмента.
При работе в Arduino IDE используйте готовую библиотеку от Adafruit.
Технические характеристики:
Микросхема датчика: SI7021
Напряжение питания: 3…5 В постоянного тока
Измерение относительной влажности: 0…80 % с погрешностью ±3 %
Измерение температуры: -10…+85 °C с погрешностью ±0.4 °C
Энергопотребление: 150 мкА при измерении (активный режим) и 60 нА в режиме ожидания
Схема подключения SI7021 к Arduino:
Программный код для SI7021 и Arduino:
#include "Adafruit_Si7021.h"
bool enableHeater = false;
uint8_t loopCnt = 0;
Adafruit_Si7021 sensor = Adafruit_Si7021();
void setup() {
Serial.begin(9600);
while (!Serial) {
delay(10);
}
Serial.println("Si7021 test!");
if (!sensor.begin()) {
Serial.println("Did not find Si7021 sensor!");
while (true)
;
}
Serial.print("Found model ");
switch(sensor.getModel()) {
case SI_Engineering_Samples:
Serial.print("SI engineering samples"); break;
case SI_7013:
Serial.print("Si7013"); break;
case SI_7020:
Serial.print("Si7020"); break;
case SI_7021:
Serial.print("Si7021"); break;
case SI_UNKNOWN:
default:
Serial.print("Unknown");
}
Serial.print(" Rev(");
Serial.print(sensor.getRevision());
Serial.print(")");
Serial.print(" Serial #"); Serial.print(sensor.sernum_a, HEX); Serial.println(sensor.sernum_b, HEX);
}
void loop() {
Serial.print("Humidity: ");
Serial.print(sensor.readHumidity(), 2);
Serial.print("\tTemperature: ");
Serial.println(sensor.readTemperature(), 2);
delay(1000);
if (++loopCnt == 30) {
enableHeater = !enableHeater;
sensor.heater(enableHeater);
Serial.print("Heater Enabled State: ");
if (sensor.isHeaterEnabled())
Serial.println("ENABLED");
else
Serial.println("DISABLED");
loopCnt = 0;
}
}