Метеостанция на Arduino с оценкой условий в помещении

от автора

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

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

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

Датчик DHT11 или DHT22

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

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

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

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

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

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

I2C OLED 128×64

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);

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

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

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

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

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

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

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

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

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

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

А на этом всё!


ссылка на оригинал статьи https://habr.com/ru/articles/918722/