Создание меню на Nokia 5110 LCD с ротационным энкодером на Arduino UNO
Компоненты и расходные материалы
- Arduino UNO — 1 шт.
- Ротационный энкодер (с кнопкой) — 1 шт.
- Nokia 5110 LCD дисплей — 1 шт.
- Маленькая беспаечная плата и провода
Программное обеспечение и онлайн-сервисы
- Arduino IDE
О проекте
В этом уроке мы создадим собственное меню для популярного дисплея Nokia 5110, чтобы сделать проекты более удобными и функциональными.
На дисплее отображается простое меню. С помощью ротационного энкодера можно навигировать вверх/вниз и выбирать пункты нажатием встроенной кнопки. При выборе пункта открывается экран редактирования параметра. Повторное нажатие возвращает в главное меню. Меню содержит 6 пунктов с прокруткой (на экране видно 3 пункта одновременно).
Шаг 1: Приобретение компонентов
Стоимость проекта менее $10. Необходимые детали:
- Arduino Uno
- Nokia 5110 LCD дисплей
- Ротационный энкодер
- Маленькая беспаечная плата
- Провода-перемычки
Шаг 2: Дисплей Nokia 5110
Nokia 5110 — мой любимый дисплей для Arduino-проектов. Базовый графический LCD-экран (контроллер PCD8544), изначально для мобильных телефонов. Очень низкое потребление: 0.4 мА при включённой подсветке, <0.06 мА в спящем режиме. Интерфейс — последовательный (8 проводов). Подробный обзор дисплея доступен в прикреплённом видео. Цена ~$4.
Шаг 3: Ротационный энкодер
Электромеханическое устройство, преобразующее угловую позицию в цифровой код. Используется в промышленности, робототехнике, устройствах ввода. Наш дешёвый энкодер имеет встроенную кнопку и требует 5 проводов для подключения. Цена ~$1.5. Подробный урок по энкодерам прикреплён.
Шаг 4: Сборка проекта
Подключение дисплея:
- RST (Pin 1) → Arduino D3
- CE (Pin 2) → Arduino D4
- DC (Pin 3) → Arduino D5
- Din (Pin 4) → Arduino D11
- Clk (Pin 5) → Arduino D13
- VCC → 3.3V Arduino (через + шину макетной платы)
- BL (подсветка) → Arduino D7 (для программного управления)
- GND → GND Arduino (через - шину макетной платы)
Подключение энкодера:
- GND → - шина
- VCC → + шина
- SW (кнопка) → Arduino A2
- DT → Arduino A1
- CLK → Arduino A0
Схемотехнический диаграмм доступен в описании видео.
Шаг 5: Код проекта
Используются 4 библиотеки:
Ключевая функция drawMenu() отвечает за отрисовку меню и вызывается каждые несколько миллисекунд.
Глобальные переменные:
int menuitem = 1; // выбранный пункт меню
int frame = 1; // видимый фрейм (какие 3 пункта на экране)
int page = 1; // текущий экран: 1 — главное меню, 2 — редактирование
int lastMenuItem = 1;
Названия пунктов меню вынесены в переменные для лёгкой модификации:
String menuItem1 = "Contrast";
String menuItem2 = "Volume";
String menuItem3 = "Language";
String menuItem4 = "Difficulty";
String menuItem5 = "Light: ON";
String menuItem6 = "Reset";
boolean backlight = true;
int contrast = 60;
int volume = 50;
String language[3] = {"EN", "ES", "EL"};
int selectedLanguage = 0;
String difficulty[2] = {"EASY", "HARD"};
int selectedDifficulty = 0;
В loop() вызывается drawMenu(), затем считывается энкодер и кнопка. Логика навигации:
- На главном экране (page=1) вращение энкодера меняет
menuitem, перерисовка подсвечивает выбранный пункт. - Нажатие кнопки переходит на экран редактирования (page=2) для выбранного параметра.
- На экране редактирования вращение меняет значение параметра.
- Повторное нажатие возвращает в главное меню (page=1).
Код содержит ~400 строк, но структурирован для лёгкого понимания и модификации. Полный скетч прикреплён (файл Nokia5110MenuRotary.ino).
Шаг 6: Тестирование
После загрузки кода меню работает как ожидалось: навигация валом, выбор кнопкой. Проект можно улучшить: использовать прерывания вместо опроса кнопок — это снизит потребление и очистит код. Планируется отдельный урок по прерываниям.
Производственный процесс
- Создание потрясающей системы Ambilight для монитора на Arduino
- Создание осциллографа на Arduino Nano с дисплеем Nokia 5110 (20 кГц): простое DIY-руководство
- Создание анимации и игр на LCD 16×2 с Arduino UNO
- Умный вольтметр на Arduino и смартфоне — простое DIY-проект
- IoT-монитор пульса в реальном времени на Arduino и MAX30100
- Веб-сервер на Arduino Uno WiFi: управление LED через браузер
- Сборка вольтметра на Arduino с дисплеем Nokia 5110 — Пошаговое руководство
- Сборка точного измерительного колеса на Arduino Nano и вращательном энкодере
- Автоматизация игры «Динозавр» в Chrome на Arduino и LDR с Python
- Сборка компактного FM-радио на Arduino Nano и RDA5807M