Всех приветствую! Сегодня мы сделаем метеостанцию, которая выводит температуру, влажность, а также статусные уведомления о влажности, которые оценивают условия в помещении. Проект написан для использования внутри здания, комнаты, помещения, но вы можете переписать проект для использования на улице или в теплице.
Для работы нам понадобится
• Плата 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/
Добавить комментарий