Ülesanne 5 LCD ekraan

Katse LCD ekraani kasutamine

Цель:

Научиться подключать LCD-дисплей 1602 к Arduino, выводить на него текст и рисовать движущиеся пользовательские символы с помощью функции lcd.createChar().

Использованные компоненты:

  • 1 × Arduino UNO
  • 1 × LCD-дисплей 1602
  • 1 × Потенциометр (для настройки контрастности экрана)
  • 1 × Резистор (220 Ω для подсветки дисплея)
  • Провода
  • Макетная плата (breadboard)

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

Код программы:

#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

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.begin(16, 2);
  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() {
  lcd.setCursor(2, 0); lcd.write(5); lcd.write(6); // кот и девочка
  lcd.setCursor(13, 1); lcd.write(3); // мальчик (руки опущены)
  delay(400);

  lcd.setCursor(4, 0);
  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);

Демонстрация работы:

Töö kestus milles() abil

Подходит для проектов:

  • Часы, таймеры, отображение температуры, меню с кнопками и др.
  • Простой способ визуализировать любую информацию с Arduino.

Что делает схема:

  • LCD получает питание и управляющие сигналы от Arduino.
  • Потенциометр регулирует контрастность текста на экране.
  • Через пины D12, D11, D5, D4, D3, D2 передаются команды и данные.

Программный код:

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("Too kestus: ");
  if (tunnid < 10) Serial.print('0');
  Serial.print(tunnid);
  Serial.print(':');
  if (minutid < 10) Serial.print('0');
  Serial.print(minutid);
  Serial.print(':');
  if (sek < 10) Serial.print('0');
  Serial.println(sek);

  delay(1000); // Обновление каждую секунду
}

Projektiülesanne: Ilmajaam LCD-ekraaniga

Цель:

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

Используемые компоненты:

  • Микроконтроллер: Arduino Uno
  • Дисплей: ЖК-дисплей 16×2
  • Датчик температуры: TMP36
  • Датчик освещенности: Фоторезистор (LDR)
  • Потенциометр: для регулировки контрастности дисплея
  • Соединительные провода и макетная плата

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

Программный код:

#include <LiquidCrystal.h>

// LCD RS, E, D4–D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

// Пины
const int TMP_PIN = A1;
const int LDR_PIN = A0;

unsigned long lastUpdate = 0;
int displayIndex = 0;

char* ilmTekstid[] = {
  "Paev selge ja soe", 
  "Pime ja vihmane", 
  "Udu piirab nakke", 
  "Riietu soojalt!", 
  "Naudi suvepaeva"
};

char* reklaam[] = {
  "Naerata! :)",
  "Joo teed",
  "Roheline maailm",
  "Paikseenergia!",
  "Ilus ilm!"
};

// Иконки
byte sun[8] = {
  0b00100, 0b10101, 0b01110, 0b11111,
  0b01110, 0b10101, 0b00100, 0b00000
};

byte rain[8] = {
  0b00100, 0b01110, 0b10101, 0b00100,
  0b01010, 0b10001, 0b00000, 0b00000
};

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

byte fog[8] = {
  0b00000, 0b11011, 0b00100, 0b11011,
  0b00000, 0b10101, 0b00000, 0b00000
};

byte clockicon[8] = {
  0b01110, 0b10001, 0b10111, 0b10101,
  0b10001, 0b01110, 0b00000, 0b00000
};

void setup() {
  lcd.begin(16, 2);
  lcd.createChar(0, sun);
  lcd.createChar(1, rain);
  lcd.createChar(2, snow);
  lcd.createChar(3, fog);
  lcd.createChar(4, clockicon);

  lcd.setCursor(0, 0);
  lcd.print("Ilmajaam: PaiksePesa");
  lcd.setCursor(0, 1);
  lcd.print("Laen andmeid...");
  delay(3000);
  lcd.clear();
}

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

  if (currentMillis - lastUpdate > 5000) {
    lastUpdate = currentMillis;
    showWeather(displayIndex);
    displayIndex = (displayIndex + 1) % 5;
  }
}

void showWeather(int i) {
  int light = analogRead(LDR_PIN);
  int tempRaw = analogRead(TMP_PIN);
  float voltage = tempRaw * 5.0 / 1023;
  float temperature = (voltage - 0.5) * 100;

  lcd.clear();
  lcd.setCursor(0, 0);
  lcd.print(ilmTekstid[i]);

  // Иконка: на основе температуры и освещения
  lcd.setCursor(15, 0);
  if (temperature < 5)
    lcd.write(byte(2)); // ❄️
  else if (light > 800)
    lcd.write(byte(0)); // ☀️
  else if (light > 500)
    lcd.write(byte(3)); // 🌫️
  else
    lcd.write(byte(1)); // 🌧️

  // Время и температура
  lcd.setCursor(0, 1);
  lcd.write(byte(4)); // часы
  lcd.print(" ");
  lcd.print((millis() / 1000 / 60) % 24);
  lcd.print(":");
  int mins = (millis() / 1000) % 60;
  if (mins < 10) lcd.print("0");
  lcd.print(mins);

  // Реклама (первая буква)
  lcd.setCursor(12, 1);
  lcd.print("*");
  lcd.print(reklaam[random(0, 5)][0]);
}

Демонстрация проекта:

🔗 Видео по ссылке + запись из tinkercad ⤵️


✅ Выводы

Во время этого задания я научилась подключать LCD-экран 1602 к Arduino и выводить на него текст. Также я попробовала создавать свои символы, например, смайлики и другие картинки, используя lcd.createChar(). Это было интересно, потому что дало возможность сделать экран более «живым».

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

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