LCD ekraan

Использование тестового ЖК-экрана

Компоненты:

  • 1 LCD экран (1602)
  • 1 Потенциометр 
  • 1 Резистор 220 Ω

Схема:

Код:

// добавляем библиотеку LiquidCrystal
#include <LiquidCrystal.h>

// указываем, к каким цифровым пинам подключён LCD экран
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// создаём пользовательские символы (пиксельные изображения 5x8)

byte smiley[8] ={0b00000,0b00000,0b01010,0b00000,0b00000,0b10001,0b01110,0b00000};

byte armsDown[8] ={0b00100,0b01010,0b00100,0b00100,0b01110,0b10101,0b00100,0b01010};

byte armsUp[8] ={0b00100,0b01010,0b00100,0b10101,0b01110,0b00100,0b00100,0b01010};

byte kass[8] ={0b00000,0b00000,0b00000,0b10000,0b10011,0b11111,0b01110,0b01010};

byte tydruk[8] ={0b00100,0b01010,0b00100,0b11111,0b00100,0b00100,0b01110,0b11111};

byte v2ikesyda[8] ={0b00000,0b00000,0b00000,0b11011,0b11111,0b11111,0b01110,0b00100};

void setup() {
  // инициализируем LCD экран: 16 столбцов, 2 строки
  lcd.begin(16, 2);

  // сохраняем пользовательские символы в память LCD
  lcd.createChar(1, smiley);
  lcd.createChar(3, armsDown);  // мальчик с опущенными руками
  lcd.createChar(4, armsUp);    // мальчик с поднятыми руками
  lcd.createChar(5, kass);      // кот
  lcd.createChar(6, tydruk);    // девочка
  lcd.createChar(7, v2ikesyda); // сердце
}

void loop() {
  // ставим курсор на 3-й столбец первой строки
  lcd.setCursor(2, 0);

  // рисуем кота
  lcd.write(5);

  // рисуем девочку
  lcd.write(6);

  // устанавливаем курсор: 2-я строка, 14-й столбец
  lcd.setCursor(13, 1);

  // рисуем мальчика с опущенными руками
  lcd.write(3);

  delay(400);

  // курсор: 1-я строка, 5-й столбец
  lcd.setCursor(4, 0);

  // рисуем 10 смайликов с паузой
  for (int koht = 0; koht < 10; koht++) {
    lcd.write(1);
    delay(400);
  }

  // заменяем мальчика на вариант с поднятыми руками
  lcd.setCursor(13, 1);
  lcd.write(4);

  // "разбрасываем" сердечки справа налево
  for (int koht = 13; koht >= 4; koht--) {
    lcd.setCursor(koht, 0);
    lcd.write(7);
    delay(400);
  }

  delay(400);
}

Объяснение, что делает программа:

  1. Подключение и инициализация LCD экрана:
    Устанавливается соединение с 16×2 дисплеем через пины Arduino.
  2. Создание пользовательских символов:
    Используются байты (0 и 1), чтобы нарисовать:
    • смайлик,
    • мальчика с руками вверх/вниз,
    • кота,
    • девочку,
    • маленькое сердечко.
  3. Вывод на экран:
    • Кот и девочка появляются рядом в первой строке.
    • Мальчик с опущенными руками появляется в конце второй строки.
    • После паузы начинается анимация: 10 смайликов выводятся друг за другом.
    • Затем мальчик поднимает руки.
    • Сердечки двигаться в сторону девочки

Счетчик времени безотказной работы в последовательном мониторе

Компоненты:

Arduino Uno

Код:

unsigned long algusAeg;
unsigned long kestus;

void setup() {
  Serial.begin(9600);
  algusAeg = millis(); // Сохраняем момент старта
  Serial.println("Too algas!");
}

void loop() {
  kestus = millis() - algusAeg;

  unsigned long sekundid = kestus / 1000;
  unsigned int tunnid = sekundid / 3600;
  unsigned int minutid = (sekundid % 3600) / 60;
  unsigned int sek = sekundid % 60;

  Serial.print("Töö kestus: ");
  if (tunnid &lt; 10) Serial.print('0');
  Serial.print(tunnid);
  Serial.print(':');
  if (minutid &lt; 10) Serial.print('0');
  Serial.print(minutid);
  Serial.print(':');
  if (sek &lt; 10) Serial.print('0');
  Serial.println(sek);

  delay(1000);
}

Можно увидить результат и выводить информацию на Serial Monitor.

В данный момент мы видим сколько секунд/минут работает наша программа.

Интерактивный информационный экран «Метеостанция»

Компоненты:

  • 1 LCD экран (1602)
  • 1 Потенциометр 
  • 1 Резистор 220 Ω
  • 1 Резистор 10 КΩ
  • Температурный датчик
  • Фоторезистр

Схема:

Код:

#include <LiquidCrystal.h>

// Подключение LCD по пинам: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

const int tempPin = A0;  // TMP36
const int ldrPin  = A1;  // Фоторезистор

unsigned long lastUpdate = 0;
unsigned long startTime;

// Кастомные символы
byte snow[8] = {
	0b00000,
	0b10001,
	0b01010,
	0b01110,
	0b01010,
	0b10001,
	0b00000,
	0b00000
};

byte sun[8] = {
	0b00000,
	0b10101,
	0b01110,
	0b11111,
	0b01110,
	0b10101,
	0b00000,
	0b00000
};

byte rain[8] = {
	0b11110,
	0b11110,
	0b00111,
	0b01000,
	0b00010,
	0b01000,
	0b00010,
	0b01000
};

byte tea[8] = {
	0b00001,
	0b01110,
	0b10000,
	0b01100,
	0b00000,
	0b11111,
	0b01110,
	0b01110
};

void setup() {
  lcd.begin(16, 2);
  Serial.begin(9600);

  // Загрузка масива в память дисплея (ячейки 0–3)
  lcd.createChar(0, snow);
  lcd.createChar(1, sun);
  lcd.createChar(2, rain);
  lcd.createChar(3, tea);

  // Приветствие
  lcd.setCursor(0, 0);
  lcd.print("PaiksePesa");
  lcd.setCursor(0, 1);
  lcd.print("Loading...");
  delay(3000);
  lcd.clear();
}

void loop() {
  unsigned long currentMillis = millis();

  // Температура и свет обновляются каждые 5 секунд
  if (currentMillis - lastUpdate >= 5000) {
    lastUpdate = currentMillis;

    // Температура
    int tempValue = analogRead(tempPin);
    float voltage = tempValue * 5.0 / 1024.0;
    float temperatureC = (voltage - 0.5) * 100;

    // Свет
    int ldrValue = analogRead(ldrPin);
    Serial.print("Temp: "); Serial.print(temperatureC);
    Serial.print("  Light: "); Serial.println(ldrValue);

    // Очистим только верхнюю строку (где погода)
    lcd.setCursor(0, 0);
    lcd.print("                "); //чтобы стереть пишим пустую строку
    lcd.setCursor(0, 0);

    // Условия погоды
    if (temperatureC < 10) {
      lcd.print("Vaga kulm! ");
      lcd.write(byte(0));
    } else if (ldrValue >300) {
      lcd.print("Vihmane ilm ");
      lcd.write(byte(2));
    } else {
      lcd.print("Soe ja monus ");
      lcd.write(byte(1));
    }

    // Кофе / т.к. С чаем все плохо было
    lcd.setCursor(0, 1);
    lcd.print("Coffie ");
    lcd.write(byte(3));
  }

  // Отображение часов
  unsigned long seconds = (millis() - startTime) / 1000;
  unsigned int mins = (seconds / 60) % 60;
  unsigned int hrs  = (seconds / 3600);
  unsigned int sec  = seconds % 60;

  // Часы справа на нижней строке
  lcd.setCursor(9, 1);  // после "Coffie"
  if (hrs < 10) lcd.print("0");
  lcd.print(hrs);
  lcd.print(":");
  if (mins < 10) lcd.print("0");
  lcd.print(mins);
  lcd.print(":");
  if (sec < 10) lcd.print("0");
  lcd.print(sec);
}

#include <LiquidCrystal.h>

Подключает библиотеку для работы с LCD 16×2 (или 20×4) дисплеем, который работает по 4-битному интерфейсу.

LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

Указывает, какие пины Arduino подключены к дисплею:

LCD ПинНазначениеArduino Пин
RSРегистр12
EEnable11
D4Данные5
D5Данные4
D6Данные3
D7Данные2

lcd.begin(16, 2);

Запускает дисплей размером 16 символов на 2 строки.

lcd.setCursor(colum, row);

Устанавливает позицию курсора перед тем как печатать текст.

lcd.print("текст");

Печатает строку текста на дисплей с текущей позиции курсора.

lcd.clear();

Очищает весь экран и устанавливает курсор в начало (0,0).

lcd.createChar(номер, массив);

Создаёт символ, например снежинку, солнце или чашку чая.

millis()

Функция Arduino, которая возвращает количество миллисекунд, прошедших с момента включения платы.

unsigned long seconds = (millis() - startTime) / 1000;
unsigned int mins = (seconds / 60) % 60;
unsigned int hrs  = (seconds / 3600);
unsigned int sec  = seconds % 60;

Расчёт времени с начала работы

Как пользователь видит работу:

1.Включение

При подключении питания на дисплее появляется:

PaiksePesa Loading...

Заголовок станции и сообщение о загрузке

2. Определение погоды

Через 3 секунды начинается отображение текущей погоды, и пользователь видит:

Пример при холоде:

Vaga kulm! ❄
Coffie ☕ 00:0
0:20
  • Указывает, что очень холодно
  • Советы: выпей чай, грейся

Пример при темноте (дождливая погода):

Vihmane ilm 🌧
Coffie ☕ 00:00:45

Пример при свете и тёплой температуре:

Soe ja monus ☀
Coffie ☕ 00:01:29

Погода обновляется каждые 5 секунд, и пользователь замечает изменение символов и текста.

⏰ 3. Часы

Внизу справа отображаются часы с момента включения:

00:12:08

Идут в реальном времени — это добавляет ощущения, что устройство «живое».

Видео

Видео схемы, как работает код на www.tinkercad.com

Так же видео как работает в реальности наш проект метеостанция

клип получился из несколько частей, т.к. был сделан за 2 учебных дня

Где можно применять такой проект

🏡 1. Умный дом

  • Установить на подоконнике или у входа
  • Показывает температуру, свет, часы, и настроение
  • Можно добавить влажность, Wi-Fi или управление окнами

🎓 2. Обучение Arduino

  • Идеален как проект для школы или колледжа
  • Показывает:
    • чтение аналоговых датчиков
    • работу с LCD
    • кастомные символы
    • millis() без delay()

🎁 3. Подарок

  • Это милый подарок своими руками (особенно с названием PaiksePesa — “солнечное гнёздышко”)
  • Можно персонализировать:
    • Заменить надписи на пожелания
    • Добавить имена или дни рождения

4. Кухонный индикатор

  • Показывает: “Погода классная — выпей кофе ☕”
  • Можно добавить датчик влажности или ароматизатор