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

Метеостанция с дисплеем LCD 1602 и DHT11

Метеостанция на Ардуино с дисплеем 1602 и DHT11 (DHT22) — это один из самых популярных проектов у начинающих мейкеров на Arduino. Рассмотрим, как сделать домашнюю метеостанцию с выводом температуры, влажности и давления на LCD монитор I2C. В скетче будут использованы русские буквы для вывода информации, все необходимые библиотеки можно будет скачать на этой странице одним архивом.

Сборка метеостанции с дисплеем 1602 и DHT11

Для этого проекта нам потребуется:

  • плата Arduino UNO (NANO);
  • жидкокристаллический дисплей 1602 с I2C;
  • цифровой датчик DHT11 или DHT22;
  • провода «папа-мама», «папа-папа»;
  • макетная плата (при необходимости).

К Arduino Nano и Uno все датчики и дисплей подключаются по одной схеме — распиновка и подключение уже рассматривались на нашем сайте, поэтому не будем подробно останавливаться на этом моменте. Если у вас есть вопросы, то посмотрите следующие записи: Подключение DHT11 к Ардуино и Подключение LCD 1602 к Ардуино. Соберите метеостанцию на Ардуино с дисплеем 1602 и dht11, как на схеме ниже.

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

Ардуино. Метеостанция на LCD 1602 и DHT11

После сборки схемы, загрузите в микроконтроллер следующий скетч (здесь ссылка на скачивание архива со скетчем для метеостанции и необходимыми библиотеками). Информация с датчика DHT22 выводиться будет на монитор порта Arduino IDE и на жидкокристаллический дисплей 1602a, для отображения информации использован русский шрифт для LCD и символы (в скетче есть подробные комментарии).

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

Пояснения к коду:

  1. В скетче можно использовать до 8 русских букв и символов;
  2. На дисплее 1602а заменяйте буквы из кириллицы — латиницей;
  3. Скорость обновления данных замените на необходимое значение.

Если у вас есть в наличии Bluetooth модуль HC-06, то вы можете сделать его прошивку и получать данные со своей метеостанции уже на своем смартфоне. Данный модуль может обеспечивать передачу сигнала до 30 метров, что вполне достаточно для небольших квартир и частных домов. Пример такой метеостанции с датчиком DHT11 подробно рассмотрен в еще одном проекте Метеостанция на Ардуино и Андроид.


1 Star2 Stars3 Stars4 Stars5 Stars (3 votes, average: 5,00 out of 5)
Загрузка...

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

  1. При показании температуры состоящей из одной цифры отображается два знака «градус»

    1. Добавьте команду lcd.clear(); в самом низу скетча метеостанции, чтобы очистить экран дисплея перед выводом новой информации

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *