Данный измеритель потребовался для оценки температуры и влажности в помещении в ряде нескольких экспериментов, которые лягут в основу будущих статей. Собиралось из того, что было под рукой, и, несомненно, каждый из компонентов, при должном старании, может быть заменен на функциональный аналог.
Конструкция
Под рукой обнаружилось:
Arduino Uno - плата контроллера на ATmega328. В моем случае это качественная китайская реплика оригинальной платы.

LCD Keypad Shield - модуль двустрочного экрана

Экран используется для вывода информации об измеряемых параметрах. Кнопки, присутствующие на плате, задействованы не будут. Просто данный экземпляр был в наличии.
GY-21 - сенсор температуры и влажности.

Представляет собой высокоточный модуль на основе датчика SHT21 для измерения температуры и влажности. Обладает очень низкой погрешностью в своём классе: при измерении температуры - 0.4%, влажности - 2%. Использует интерфейс I2C.
Конструкция экрана в сочетании с Arduino Uno удобно складываются в компактный "бутерброд", а датчик аккуратно подпаяем навесным монтажом.


Портативность и мобильность будет обеспечивать обычный повербанк на 5В для зарядки гаджетов.
Прошиваем и включаем устройство.

Программа
Для работы с LCD-экраном будем использовать библиотеку LiquidCrystal . Для нашей платы требуется использовать такой вариант конфигурации выводов: LiquidCrystal lcd(8, 9, 4, 5, 6, 7).
Для работы с датчиком поможет библиотека GY-21.
Весь код программы:
// обмен по I2C
#include <Wire.h>
// подключаем библиотеку экрана:
#include <LiquidCrystal.h>
// библиотека датчика
#include <GY21.h>
// конфигурируем выводы arduino Uno
const int rs = 8, en = 9, d4 = 4, d5 = 5, d6 = 6, d7 = 7;
// инициализируем библиотеку
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
// инициализируем сенсор
GY21 sensor;
void setup() {
// количество столбцов и строк экрана:
lcd.begin(16, 2);
// вывод сообщения на экран.
lcd.setCursor(0, 0);
lcd.print("T:");
lcd.setCursor(8, 0);
lcd.print("H:");
Wire.begin();
}
void loop() {
// получение и вывод температуры
float temp = sensor.GY21_Temperature();
lcd.setCursor(2, 0);
lcd.print(temp);
// получение и вывод влажности
float hum = sensor.GY21_Humidity();
lcd.setCursor(10, 0);
lcd.print(hum);
// задержка 1 сек
delay(1000);
}
Наше устройство готово!