[Из песочницы] Измеритель температуры и влажности на контроллере Arduino c отображением значений на LCD дисплее

Недавно я начал изучать программирование микроконтроллера Arduino. После того, как я выполнил несколько базовых упражнений (мигание светодиодом, работа с дискретными и аналоговыми входами, вывод информации на ЖК дисплей и т.д.) мне захотелось сделать какое нибудь полезное устройство для дома.

Я решил сделать измеритель температуры и влажности в комнате, с индикацией параметров на ЖК дисплее. Также я сделал адаптивную подсветку дисплея, которая меняет яркость в зависимости от уровня освещенности в комнате. Это позволяет уменьшить энергопотребление устройства, и тем самым увеличить срок службы батарейки.
В проекте я использовал следующие комплектующие:

1. Плата Arduino Uno

image

2. Дисплей LCD1602 c модулем поддержки протокола I2C. Для того чтобы уменьшить число проводов и упростить подключение дисплея, я решил подключать его через протокол I2C, для этого я к LCD дисплею припаял специальный модуль преобразователь.

f7btri431tromzu6cozjepsz9_0.jpeg»

3. Датчик температуры и влажности DHT11. Он позволяет определять влажность от 20–80% и температуру от 0–50˚С. Датчик имеет 4 вывода, но используется только 3. Между выводом питания и выводом данных должен быть установлен резистор 10кОм. Я использовал уже готовый датчик, смонтированный на плате, с подключенным резистором, поэтому можно смело подключать его к плате Arduino.

c03dk0oqypyts8ai_aedbsvlod4.jpeg»

4. Фоторезистор. Подключается к плате Arduino с подтяжкой к GND, через резистор 10кОм.

-u1migrjwjsgyrrhbyii4ued2v8.jpeg

Схема подключения следующая:

gxxcj1fgpmazik_jldrvpuy-vjm.jpeg

Фоторезистор подключается к аналоговому входу А0 платы Arduino. Линия данных датчика DHT11 подключается к дискретному выводу 2, вывод питания подключается к +5В Arduino, соответственно вывод GND подключаем в земле платы Arduino. LCD дисплей подключается к питанию платы, вывод SDA подключается к А4, вывод SCL к А5. Линия управления яркостью подсветки подключается к выводу 9, на котором формируется ШИМ сигнал.

Ниже представлен исходный код:

#include "DHT.h"                  //Подключаем библиотеку для работы с датчиком DHT11
#include "Wire.h"               
#include "LiquidCrystal_I2C.h"    //Подключаем библиотеки для работы с LCD дисплеем

int LD;                           //Объявляем вспомогательную переменную

#define DHTPIN 2                  //Задаем PIN для подключения датчика DHT11
#define LED 9                     //Задаем PIN который выдает ШИМ-сигнал
#define FOTO 0                    //Задаем PIN для подключения фоторезистора

DHT dht(DHTPIN, DHT11);           //Инициализируем датчик DHT11
LiquidCrystal_I2C lcd(0x27,16,2); //Инициализируем дисплей


void setup() {
 pinMode(LED, OUTPUT);            //Настраиваем PIN LED как выход
 
 dht.begin();                     //Включаем датчик температуры и влажности
 
 lcd.init();                      //Включаем LCD дисплей
 lcd.backlight();
}


int light(int svet)               //Функция преобразования 
{                                 //значения с датчика освещенности 
  if (svet<25)                    //в значение ШИМ-сигнала
  {
    return 255;
  }

  if(svet>1020)
  {
    return 2;
  }
  else
  {
    int L=(int)(-0.2*svet+261.262);
    return L;
  }
}


void loop() {
   int f = analogRead(FOTO);              //Считываем значение с датчика освещенности
   LD=light(f);
   delay(2000);
   analogWrite(LED, LD);                  //Устанавливаем значение ШИМ 
   
   float h=dht.readHumidity();            //Считываем значение влажности
   float t=dht.readTemperature();         //Считываем значение температуры

    lcd.setCursor(0,0);                   //Устанавливаем курсор в нулевую позицию верхней строки
    lcd.print("Temp ");                   //Отображаем значение температуры
    lcd.print(t);
    
    lcd.setCursor(0,1);                   //Помещаем курсор в нулевую позицию нижней строки
    lcd.print("Hum ");                    //Отображаем значение влажности
    lcd.print(h);

}


Скомпилировав данный код, получаем вот такое работающее устройство:

azevtunygg3r0mcitcxbl1eiub4.jpeg

В дальнейшем планирую сделать еще какие-нибудь интересные и более сложные устройства на Arduino.

Также я сделал видеоролик, где показал как работает устройство:

© Habrahabr.ru