LCD ekraan
5.1 Katse LCD ekraani kasutamine
Используемые компоненты:
- Arudiono Uno 1 шт
- Плата 1 шт
- Резистор 220 Om
- Потенциометр 1 шт
- Провода 14 шт
- LCD экран 1 шт
Схема соединения:

Код:
// lisame LiquidCrystal library
#include <LiquidCrystal.h>
// määrame, milliste digitaalpesadega ekraan ühendatud on
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
// loome erisümbolid
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() {
// algväärtustatakse LDC ekraani read ja veerud
lcd.begin(16, 2);
// defineerime erisümbolid
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() {
// koht kuhu hakkame joonistama - 3. veerg, esimene rida
lcd.setCursor(2, 0);
// joonistame kassi
lcd.write(5);
// ja tüdruku
lcd.write(6);
//muudame kursori asukohta: 2. rida 14. veerg
lcd.setCursor(13, 1);
// joonistame poisi
lcd.write(3);
delay(400);
//muudame kursori asukohta: 1. rida 5. veerg
lcd.setCursor(4, 0);
//joonistame for tsükli abil väikese pausiga 10 smaili
for (int koht = 0; koht < 10; koht++) {
lcd.write(1);
delay(400);
}
lcd.setCursor(13, 1);
lcd.write(4);
//loobime südameid
for (int koht = 13; koht >= 4; koht--) {
lcd.setCursor(koht, 0);
lcd.write(7);
delay(400);
}
delay(400);
}
Пояснение кода:
Ülesanne 5 – Interaktiivne infoekraan “Ilmajaam”
Описание работы:
Создать интерактивную метеостанцию на базе Arduino, отображающую погодные условия, полезные советы и другую информацию на LCD-дисплее, используя сенсоры и ручное управление с помощью потенциометра.
Используемые компоненты:
- Arudiono Uno 1 шт
- Плата 1 шт
- Температурный датчик 1 шт
- Фоторезистор 1 шт
- Резистор 220 Om 2 шт
- Резистор 10 кOm 2 шт
- Потенциометр 10 кОм 1 шт
- Провода 23 шт
- LCD экран 1 шт
Схема соединения:


Код:
#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; // LDR
const int potPin = A5; // Потенциометр
// Иконки: солнце, дождь, снег
byte sun[8] = {
0b00100, 0b10101, 0b01110,
0b11111, 0b01110, 0b10101,
0b00100, 0b00000
};
byte rain[8] = {
0b00100, 0b01110, 0b11111,
0b01110, 0b00100, 0b01010,
0b10101, 0b00000
};
byte snow[8] = {
0b01010, 0b00100, 0b11111,
0b00100, 0b01010, 0b00000,
0b00000, 0b00000
};
// Фразы
char* ilmTekstid[] = {
"Tana on selge paev",
"Valmistu vihmaks",
"Udu piirab nakke",
"Soojad riided selga!",
"Naudi suveilma!"
};
void setup() {
lcd.begin(16, 2);
lcd.createChar(0, sun);
lcd.createChar(1, rain);
lcd.createChar(2, snow);
lcd.setCursor(0, 0);
lcd.print("PaiksePesa");
lcd.setCursor(0, 1);
lcd.print("Laen andmeid...");
delay(2000);
lcd.clear();
}
int previousZone = -1; // глобально
void loop() {
int potValue = analogRead(potPin);
float voltage = analogRead(tempPin) * 5.0 / 1023.0;
float tempC = (voltage - 0.5) * 100.0;
int light = analogRead(ldrPin);
int currentZone = potValue / 200; // 0–5
if (currentZone != previousZone) {
lcd.clear();
previousZone = currentZone;
switch (currentZone) {
case 0: // Режим 1 — погода
lcd.setCursor(0, 0);
if (tempC < 5) {
lcd.print("Vaga kylm! ");
lcd.write(byte(2));
} else if (tempC > 20 && light > 800) {
lcd.print("Soe ja m6nus ");
lcd.write(byte(0));
} else {
lcd.print("Vihmane ilm ");
lcd.write(byte(1));
}
lcd.setCursor(0, 1);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.print(" C");
break;
case 1: // Режим 2 — фраза
lcd.setCursor(0, 0);
lcd.print("Ilmajaam ytleb:");
lcd.setCursor(0, 1);
lcd.print(ilmTekstid[random(0, 5)]);
break;
case 2: // Режим 3 — совет
lcd.setCursor(0, 0);
lcd.print("Soovitus:");
lcd.setCursor(0, 1);
lcd.print("Joo teed ja naudi!");
break;
case 3: // Режим 4 — данные
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(tempC, 1);
lcd.print(" C");
lcd.setCursor(0, 1);
lcd.print("Valgus: ");
lcd.print(light);
break;
case 4: // Режим 5 — сводка
lcd.setCursor(0, 0);
lcd.print("Temp ");
lcd.print(tempC, 0);
lcd.print("C L:");
lcd.print(light);
lcd.setCursor(0, 1);
lcd.print("PaiksePesa <3");
break;
default:
lcd.setCursor(0, 0);
lcd.print("V2ljaspool vaadet");
break;
}
}
delay(1000); // плавная смена при вращении
}
Процесс работы:
Инициализация оборудования
- Подключается дисплей с помощью библиотеки
LiquidCrystal
. - Загружаются пользовательские символы: солнце, дождь, снег.
- На экране отображается заставка:
PäiksePesa
и сообщение «Laen andmeid…».
Считывание данных
- Измеряется температура с TMP36, преобразуемая из напряжения
- читывается уровень освещённости с LDR.
- С потенциометра считывается значение от 0 до 1023, далее оно делится на 200 для получения “зоны” (режима отображения).
Переключение режимов
В зависимости от положения потенциометра, выбирается один из режимов (switch-case):
Режим | Значение potValue | Описание |
0 | 0–199 | Погода: иконка и температура |
1 | 200–399 | Случайная фраза |
2 | 400–599 | Совет: «Joo teed ja naudi!» |
3 | 600–799 | Отображение температуры и света |
4 | 800–1023 | Мини-сводка «Temp XXC L:YYY» и подпись |
default | — | Сообщение об ошибке диапазона |
Примеры отображения:
- Температура < 5°C → «Väga külm!»
- Температура > 20°C и яркий свет → «Soe ja mõnus»
- В остальных случаях → «Vihmane ilm»
- Фраза: случайная из массива
"Ilmajaam ytleb: ..."
- Совет: всегда «Joo teed ja naudi!»
- Сводка: «Temp 24C L:682» + подпись «PäiksePesa <3»
Улучшение UX
- Значение режима сохраняется в
previousZone
, и обновление экрана происходит только при изменении положения ручки. Это предотвращает ненужное мерцание дисплея. - Задержка в 1000 мс делает интерфейс плавным и отзывчивым.
Видео:
Применение LCD экрана в разных проектах:
Учебные и хобби-проекты
- Погодная станция — отображает температуру, влажность, время и даже иконки солнца или дождя.
- Таймер обратного отсчёта — отображает, сколько времени осталось, например, до старта ракеты.
- Меню настроек Arduino — выбор режимов, управление кнопками или энкодером.
- Простой калькулятор — показывает ввод и результат.
- Секундомер или часы — отсчёт времени с отображением на экране.
Умный дом
- Панель управления климатом — показывает температуру, режим обогрева/охлаждения.
- Дисплей состояния системы — «дверь открыта», «окно закрыто», «охрана активирована».
- Умный холодильник DIY — отображение температуры камер и напоминаний о продуктах.
- Система автоматического полива — вывод текущей влажности почвы и расписания полива.
Автомобильные проекты
- Бортовой компьютер — скорость, температура двигателя, напряжение аккумулятора.
- Сигнализация с дисплеем — выводит статус «дверь открыта», «движение обнаружено».
- GPS-навигация на Arduino — текущие координаты и направление.
- Система парковки — отображение расстояния до препятствия.
Робототехника и мехатроника
- Экран состояния робота — пишет “Зарядка”, “Атака!”, “Сплю…”.
- Диагностика датчиков — показывает данные с ультразвука, гироскопа и т.п.
- Настройка режимов работы — выбор поведения или маршрута.
- Робот-курьер — показывает маршрут или сообщение получателю.
Арт и инсталляции
- Цитатник на экране — каждый день новая фраза или шутка.
- Интерактивные стихи — реагируют на датчики движения или освещённости.
- Сенсорные эмоции — «LCD-лицо» показывает эмоции в зависимости от ситуации.
- Музейная этикетка 2.0 — краткая информация о предмете при приближении посетителя.
Научные и лабораторные приборы
- Измеритель температуры/влажности/рН — результат сразу на экране.
- Логгер данных — отображение текущих измерений до сохранения.
- Счётчик радиоактивности (Geiger) — показывает число импульсов в минуту.
- Мультиметр своими руками — измерения напряжения, сопротивления и прочего.