Всех приветствую! Сегодня мы сделаем метеостанцию, которая выводит температуру, влажность, а также статусные уведомления о влажности, которые оценивают условия в помещении. Проект написан для использования внутри здания, комнаты, помещения, но вы можете переписать проект для использования на улице или в теплице.

Для работы нам понадобится

Плата Arduino UNO (Nano, Leonardo и тд тоже можно использовать)

Датчик DHT11 или DHT22

I2C OLED 128x64 (у данного дисплея 4 пина)

Схема подключения

Схема подключения
Схема подключения

Так как я делал схему подключения впервые, может быть криво.

Пины для подключения

I2C OLED 128x64

Arduino Uno

GND

GND

VCC(VDD)

3v3

SCL(SCK)

A5

SDA

A4

DHT11 / DHT22 (пины считаются слева направо)

Arduino Uno

VCC

5V

DATA

4

NC

(не задействован)

GND

GND

Библиотеки для кода

Для работы с кодом требуется установить библиотеки DHT.h и ASOLED.h

Библиотека ASOLED.h поддерживает русский, украинский, белорусский языки. Библиотека Wire.h предустановлена уже вместе с Arduino IDE

Код программы

Данный код предназначен для датчика DHT11, строка, которую нужно изменить для работы с датчиком DHT22 будет после кода. В коде указал, что за что отвечает.

float T = 0;
float H = 0;

#include <Wire.h>
#include "ASOLED.h"
#include "DHT.h"

DHT dht_4(4, DHT11);

void setup() {
  LD.init();
  LD.clearDisplay();
  Serial.begin(9600);
  dht_4.begin();
}

void loop() {
    T = dht_4.readTemperature();
    H = dht_4.readHumidity();
    
    // Вывод температуры
    LD.printString_12x16("", 0, 0);
    LD.printNumber((long)T);
    LD.printString_12x16("C°", 40, 0);
    
    // Вывод влажности
    LD.printString_12x16("", 80, 5);
    LD.printNumber((long)H);
    LD.printString_12x16("ВЛАГА", 0, 5);
    
    // Очистка области сообщения (16 пробелов)
    LD.printString_6x8("                ", 0, 11);
    
    // Вывод сообщения в зависимости от влажности
    if (H < 30) {
      LD.printString_6x8("Опасная сухость", 0, 11);
    }
    else if (H < 40) {
      LD.printString_6x8("Очень сухо", 0, 11);
    }
    else if (H < 55) {
      LD.printString_6x8("Суховато", 0, 11);
    }
    else if (H < 70) {
      LD.printString_6x8("Нормальная влага", 0, 11);
    }
    else if (H < 80) {
      LD.printString_6x8("Высокая влажность", 0, 11);
    }
    else {
      LD.printString_6x8("Опасная влага", 0, 11);
    }
    
    delay(2000); // Обновление данных каждые две секунды
}

Строка для замены (чтобы DHT22 работал):

8 строка:

DHT dht_4(4, DHT22);

А получилось у меня вот так:

Взял рандомную коробку
Взял рандомную коробку

Обозначения сообщений про влагу

Опасная сухость — воздух экстремально сухой, обязательное использование увлажнителя, избегайте длительного нахождения в помещении, есть риск пересыхания слизистых при таких условиях.

Очень сухо — влажность, некомфортная для человека, рекомендуется увлажнитель. Также контролируйте состояние кожи и дыхательных путей.

Суховато — умеренно сухой воздух, допустимый для кратковременного пребывания в помещении. Подходит для большинства людей, но чувствительным лицам стоит увлажнять воздух.

Нормальная влага — идеальный диапазон для здоровья и комфорта. Поддерживайте этот уровень (оптимален для дыхания, кожи и мебели).

Высокая влажность — повышенная влажность, возможна духота. Проветривайте помещение, включите осушитель или кондиционер.

Опасная влага — высокая влажность. Срочно проветрите помещение или включите осушитель, есть риск порчи мебели, электроники, стен и текстиля, книг и документов. Риск плесени.

А на этом всё!

Комментарии (10)


  1. Isiirk
    16.06.2025 09:37

    Чем эта публикация отличается еще от таких же 100500 на просторах интернет?


  1. kumkurum
    16.06.2025 09:37

    что-то она не шибко умная, сухо или влажно человек и сам поймёт, другое дело если б она связывалась с обогревателем или вентилятором или увлажнителем и нормализовала условия среды до оптимума, то да...


    1. GeekTechno Автор
      16.06.2025 09:37

      Постараюсь реализовать. Из похожих идей было подцепить мини ультразвуковой увлажнитель, но я отодвинул её в сторону подумав, что особой эффективности не будет.


  1. v645
    16.06.2025 09:37

    Как говорится

    Что не делай на ардуино - получится метеостанция


  1. k12th
    16.06.2025 09:37

    Даже метеостанцию можно было бы сделать поинтереснее. Регулировать яркость дисплея в зависимости от освещенности. Обновлять изображение на мониторе так, чтобы пиксели не выгорали. Добавить датчик качества воздуха.


    1. GeekTechno Автор
      16.06.2025 09:37

      Возьму на заметку.

      Соглашусь, слишком типичный пост получился (особо ничего нового помимо статусных уведомлений). На основе комментариев что нибудь сделаю и выкачу обновлённую метеостанцию.

      Спасибо за идеи.


    1. randomsimplenumber
      16.06.2025 09:37

      гууглим://метеостанция из кирпича


  1. Dimanchik_ZX
    16.06.2025 09:37

    Если это метеостанция, где измерение силы и направления ветра? Давления атмосферного? А так это просто гигрометр.


  1. selfdoor
    16.06.2025 09:37

    На схеме случайно не пропущен подтягивающий резистор номиналом 10кОм между выходами питания и сигналом? (если у нас голый датчик, а не модуль)

    https://arduinomaster.ru/datchiki-arduino/datchiki-temperatury-i-vlazhnosti-dht11-dht22/
    https://arduinomaster.ru/datchiki-arduino/datchiki-temperatury-i-vlazhnosti-dht11-dht22/


    1. GeekTechno Автор
      16.06.2025 09:37

      Спасибо за поправку