Метеостанция на Ардуино с дисплеем

СОДЕРЖАНИЕ ►
Метеостанция на Ардуино с дисплеем 1602 и DHT11 (DHT22) — это один из самых популярных проектов у начинающих мейкеров на Arduino. Рассмотрим, как сделать домашнюю метеостанцию с выводом температуры, влажности и давления на LCD монитор I2C. В скетче будут использованы русские буквы для вывода информации, все необходимые библиотеки можно будет скачать на этой странице одним архивом.
Если у вас есть в наличии Bluetooth модуль HC-06, то вы можете сделать его прошивку и получать данные со своей метеостанции уже на своем смартфоне. Данный модуль может обеспечивать передачу сигнала до 30 метров, что вполне достаточно для небольших квартир и частных домов. Пример такой метеостанции с датчиком DHT11 подробно рассмотрен в еще одном проекте Метеостанция на Ардуино и Андроид.
Сборка метеостанции с дисплеем 1602 и DHT11
Для этого проекта нам потребуется:
- плата Arduino UNO (NANO);
- жидкокристаллический дисплей 1602 с I2C;
- цифровой датчик DHT11 или DHT22;
- провода «папа-мама», «папа-папа»;
- макетная плата (при необходимости).
К Arduino Nano и Uno все датчики и дисплей подключаются по одной схеме — распиновка и подключение уже рассматривались на нашем сайте, поэтому не будем подробно останавливаться на этом моменте. Если у вас есть вопросы, то посмотрите следующие записи: Подключение DHT11 к Ардуино и Подключение LCD 1602 к Ардуино. Соберите метеостанцию на Ардуино с дисплеем 1602 и dht11, как на схеме ниже.
Ардуино. Метеостанция на LCD 1602 и DHT11

После сборки схемы, загрузите в микроконтроллер следующий скетч (здесь ссылка на скачивание архива со скетчем для метеостанции и необходимыми библиотеками). Информация с датчика DHT22 выводиться будет на монитор порта Arduino IDE и на жидкокристаллический дисплей 1602a, для отображения информации использован русский шрифт для LCD и символы (в скетче есть подробные комментарии).
Скетч для метеостанции с DHT11 на Ардуино
#include <Wire.h> // библиотека для протокола IIC #include <LiquidCrystal_I2C.h> // подключаем библиотеку LCD IIC LiquidCrystal_I2C lcd(0x27,20,2); // присваиваем имя lcd для дисплея #include "DHT.h" // подключаем библиотеку для DHT11 DHT dht(2, DHT11); // к какому порту подключаем датчик // создаем символ градуса и присваиваем имя "gradus" byte gradus[8] = { 0b01100,0b10010,0b10010,0b01100,0b00000,0b00000,0b00000,0b00000 }; // создаем русскую букву "П" byte P[8] = { 0b11111,0b10001,0b10001,0b10001,0b10001,0b10001,0b10001,0b00000 }; // создаем русскую букву "У" byte Y[8] = { 0b10001,0b10001,0b10001,0b01111,0b00001,0b00001,0b01110,0b00000 }; // создаем русскую букву "Л" byte L[8] = { 0b00111,0b01001,0b10001,0b10001,0b10001,0b10001,0b10001,0b00000 }; // создаем русскую букву "Ж" byte ZH[8] = { 0b10101,0b10101,0b10101,0b01110,0b10101,0b10101,0b10101,0b00000 }; // создаем русскую букву "Ь" byte znak[8] = { 0b10000,0b10000,0b10000,0b11110,0b10001,0b10001,0b11110,0b00000 }; void setup() { Serial.begin(9600); // запуск последовательного порта lcd.init(); // инициализация LCD дисплея lcd.backlight(); // включение подсветки дисплея lcd.createChar(1, gradus); lcd.createChar(2, P); lcd.createChar(3, Y); lcd.createChar(4, L); lcd.createChar(5, ZH); lcd.createChar(6, znak); } void loop() { // если нужны точные значение, то используйте float, вместо byte byte h = dht.readHumidity(); // считываем значение температуры byte t = dht.readTemperature(); // считываем значение влажности Serial.print("Temperature: "); Serial.println(t); // отправляем значение температуры на монитор Serial.print("Humidity: "); Serial.println(h); // отправляем значение температуры на монитор Serial.println(" "); // пустая строка lcd.setCursor(0,0); // ставим курсор на 1 символ первой строки lcd.print("TEM"); // используем латинские буквы lcd.print(char(2)); // выводим русскую букву "П" lcd.print("EPAT"); // используем латинские буквы lcd.print(char(3)); // выводим русскую букву "У" lcd.print("PA: "); // используем латинские буквы lcd.print(t); // выводим значение температуры на LCD lcd.print(char(1)); // выводим знак градуса lcd.setCursor(2,1); // ставим курсор на 3 символ второй строки lcd.print("B"); // используем латинские буквы lcd.print(char(4)); // выводим русскую букву "Л" lcd.print("A"); // используем латинские буквы lcd.print(char(5)); // выводим русскую букву "Ж" lcd.print("HOCT"); // используем латинские буквы lcd.print(char(6)); // выводим русскую букву "Ь" lcd.print(": "); // используем латинские буквы lcd.print(h); // выводим значение влажности на LCD lcd.print("%"); // выводим знак процент delay(1000); }
Пояснения к коду:
- в скетче можно использовать до 8 русских букв и символов, при необходимости заменяйте буквы из кириллицы — латинскими буквами;
- скорость обновления данных замените на необходимое значение.
Заключение. Мы рассмотрели, как сделать простую домашнюю метеостанцию на Ардуино c дисплеем 1602а и датчиком температуры и влажности воздуха DHT11. Данный проект можно доработать, добавив к схеме еще больше датчиков для анализа метеоусловий. Также можно сделать беспроводную метеостанцию на Arduino Uno, используя блютуз или радио модули для передачи информации на расстояние.
Подборка на тему: Метеостанция на Ардуино с дисплеем
8 комментариев для “Метеостанция на Ардуино с дисплеем”
Добавить комментарий
Записи похожие на: Метеостанция на Arduino с дисплеем
- Мемы про Ардуино на русском
- Сертификат на дополнительное образование
- Участие в конкурсе Ученые будущего
- Arduino IDE скачать на русском
Проекты похожие на: Метеостанция на Arduino с дисплеем
При показании температуры состоящей из одной цифры отображается два знака «градус»
Добавьте команду lcd.clear(); в самом низу скетча метеостанции, чтобы очистить экран дисплея перед выводом новой информации
Спасибо за нормально работающий скетч с пояснениями к 8 русским буквам, правда 1 секунда обновления мало, батарейка быстро садится, себе я поставил 5 секунд
Почему то не выводит латинские буквы, и значение температуры и влажности стоит на на 3 градусах и 3% влажности. Такое ощущение что он не дописывает единичный порядок цифр ( то есть должно выводиться что вроде 30 градусов и 30% влажности)
Вот еще один рабочий скейч добавлено реле для включения вентилятора. Прошу не кидаться помидорами, это мой самый первый скетч, и первое познание Ардуино вообще. Автору этого сайта, огромное спасибо, благодаря ему, я как то познал что это такое вообще.
// указываем условие, если переменная "h" (влажность) больше 40%
// то включаем реле, которое приводит в действие вентилятор
if (h < 35) { digitalWrite (Relay, LOW); }
//иначе реле будет выключено, вентилятор не работает
else { digitalWrite (Relay, HIGH); }
Я весь код не стал добавлять 🙂 Кто захочет — добавит в программу метеостанции эти два условия для включения/выключения вентилятора в зависимости от влажности воздуха.
Спасибо.
Дисплей горит но на нем ничего нет
Проверьте подключение дисплея, отрегулируйте яркость экрана потенциометром на задней стороне дисплея