Надежные LCD-секундомер на Arduino Nano — без потенциометра
Компоненты и материалы
- Макетная плата (Breadboard) — 1 шт.
- Arduino Nano R3 — 1 шт.
- LCD-дисплей 16x2 (Quapass 1602A, белый на синем) — 1 шт.
- Тактильные кнопки 12 мм (SparkFun) — 3 шт.
- Резисторы 10 кОм — 5 шт.
- Резистор 221 Ом — 1 шт.
- Перемыечные провода — 26 шт.
О проекте
Этот учебный проект демонстрирует работу с LCD-дисплеем на базе Arduino Nano. Секундомер отсчитывает часы, минуты и секунды, а также позволяет регулировать яркость дисплея. В коде заложена возможность отсчёта сотых долей секунды, однако из-за ограничений частоты обновления экрана эта функция может работать нестабильно.
Автор подобрал временные константы так, что погодность составляет около 15% (на реальных 10 минут секундомер покажет 10 минут 2 секунды). При изменении кода тайминга в подпрограмме stopwatch необходимо скорректировать задержки, учитывающие время выполнения инструкций микроконтроллера.
Шаг 1: Сборка схемы
Соедините компоненты согласно принципиальной схеме (см. раздел «Схемы»). Подключение LCD выполняется в 4-битном режиме: пины RS, E, D4–D7 к выводам 12, 11, 5, 4, 3, 2 Arduino соответственно. Кнопки «Старт», «Стоп», «Сброс» подключены к пинам 8, 9, 10 через подтягивающие резисторы 10 кОм. Яркость подсветки управляется через PWM-пин 6 (резистор 221 Ом на аноде подсветки).
Шаг 2: Загрузка кода
Скопируйте приведённый ниже скетч в Arduino IDE, подключите плату через USB и нажмите «Загрузить».
Шаг 3: Использование
После загрузки устройство готово к работе. Нажмите «Старт» для начала отсчёта, «Стоп» — для паузы, «Сброс» — для обнуления. Яркость задаётся константой brightness (0–255) в начале скетча.
Код
Библиотека LiquidCrystal входит в стандартный набор Arduino IDE. Если её нет, установите через менеджер библиотек или скачайте с GitHub.
/* Простой LCD-секундомер с кнопками старт, стоп, сброс */
#include <LiquidCrystal.h>
// Пины LCD: RS, E, D4, D5, D6, D7
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
int h = 0, m = 0, s = 0, ms = 0;
const int start_pin = 8;
const int stop_pin = 9;
const int reset_pin = 10;
const int brightness_pin = 6;
int brightness = 100; // 0–255
void setup() {
analogWrite(brightness_pin, brightness);
lcd.begin(16, 2);
pinMode(start_pin, INPUT);
pinMode(stop_pin, INPUT);
pinMode(reset_pin, INPUT);
pinMode(brightness_pin, OUTPUT);
}
void loop() {
lcd.setCursor(0, 1);
lcd.print("STOPWATCH");
lcd.setCursor(0, 0);
lcd.print("TIME:");
lcd.print(h); lcd.print(":"); lcd.print(m); lcd.print(":"); lcd.print(s);
if (digitalRead(start_pin) == HIGH) {
stopwatch();
}
}
// --- Подпрограммы ---
void stopwatch() {
lcd.setCursor(0, 0);
lcd.print("TIME:");
lcd.print(h); lcd.print(":"); lcd.print(m); lcd.print(":"); lcd.print(s);
ms += 10;
delay(10);
if (ms == 590) lcd.clear();
if (ms == 590) { ms = 0; s++; }
if (s == 60) { s = 0; m++; }
if (m == 60) { m = 0; h++; }
lcd.setCursor(0, 1);
lcd.print("STOPWATCH");
if (digitalRead(stop_pin) == HIGH) {
stopwatch_stop();
} else {
stopwatch(); // рекурсивный вызов для непрерывного отсчёта
}
}
void stopwatch_stop() {
lcd.setCursor(0, 0);
lcd.print("TIME:");
lcd.print(h); lcd.print(":"); lcd.print(m); lcd.print(":"); lcd.print(s);
lcd.setCursor(0, 1);
lcd.print("STOPWATCH");
if (digitalRead(start_pin) == HIGH) {
stopwatch();
}
if (digitalRead(reset_pin) == HIGH) {
stopwatch_reset();
} else {
stopwatch_stop();
}
}
void stopwatch_reset() {
lcd.clear();
lcd.setCursor(0, 1);
lcd.print("STOPWATCH");
h = m = s = 0;
return;
}
Схемы
Принципиальная схема подключения приведена на изображении ниже. Обратите внимание на полярность подсветки LCD и подтягивающие резисторы на кнопках.

Производственный процесс
- Создание осциллографа на Arduino Nano с дисплеем Nokia 5110 (20 кГц): простое DIY-руководство
- Умные шторы: автоматическое управление светом на Arduino с солнечной энергией
- Строим Iron Man на Arduino: компоненты, сенсоры и пошаговый гайд
- Простой ИК-датчик препятствий на Arduino: ИК-светодиод и фотодиод
- Find Me: Умный поисковик вещей на Arduino и Bluetooth
- DIY-контроллер увлажнителя на Arduino с реле: безопасная работа с высоким напряжением
- Самодельный осциллограф на Arduino Nano (10 Гц – 50 кГц) с ЖК-дисплеем 128×64
- Своё рулевое управление (джойстик) для игр на Arduino
- Arduino 101: Пedometer с датчиком DHT11 и LCD-дисплеем
- Сборка RGB-микшера цветов на Arduino — пошаговое руководство