РАЗРАБОТКА ИГРЫ НА БАЗЕ МИКРОКОНТРОЛЛЕРА ARDUINO UNO И ТЕКСТОВОГО ДИСПЛЕЯ LCD1602
Секция: Технические науки
LII Студенческая международная научно-практическая конференция «Технические и математические науки. Студенческий научный форум»
РАЗРАБОТКА ИГРЫ НА БАЗЕ МИКРОКОНТРОЛЛЕРА ARDUINO UNO И ТЕКСТОВОГО ДИСПЛЕЯ LCD1602
Аннотация. Данная статья посвящена разработке игры «Бегущий человечек» на базе текстового дисплея LCD1602 и Arduino UNO.
Ключевые слова: игра, микроконтроллер, Arduino, дисплей.
Современные микроконтроллеры обладают достаточно высокими вычислительными мощностями, которые позволяют на одной микросхеме реализовать полнофункциональное устройство небольшого размера с низким энергопотреблением. Этого вполне достаточно для создания устройств, считывающих данные с датчиков, простых игр.
Для программирования микроконтроллеров используется «ArduinoIDE с поддержкой множества языков программирования, но фактически все программы пишутся на C/C++, а компилируются и собираются с помощью avr-gcc»[1]. ArduinoIDE по умолчанию уже содержатся примеры различных программ (Sketch) для проверки работоспособности микроконтроллера или быстрого создания своей программы на базе существующей, файлы с программой сохраняются с расширением «.ino». Была выбрана версия Arduino UNO R3, т. к. именно она оснащается достаточным количеством цифровых портов и является самой доступной. Также данная плата имеет удобную разметку, что позволяет с удобством производить разработку различных проектов [3].
Для разработки системы был проведен анализ типовых требований, в результате которого определены следующие требования:
- для сборки устройства используется ArduinoUNO и дисплей LCD 1602;
- вывод изображения на дисплей 16х2 символов; - реализовать подключение посредством использования 4 пинов;
- 1 кнопка для запуска и управления в игре; - питание платы ArduinoUNO производить от встроенного usb порта
Устройство должно иметь возможность считывать данные с кнопки. Для вывода текущих данных на экран и результатов был выбран LCD дисплей 16*2 символов. Дисплей умеет отображать все строчные и прописные буквы латиницы и кириллицы, а также типографские символы. Есть возможность создавать собственные иконки. Экран выполнен на жидкокристаллической матрице, которая отображает 2 строки по 16 символов. Каждый символ состоит из отдельного знакоместа 5×8 пикселей [6].
Кнопка (или кнопочный переключатель) – самый простой и доступный из всех видов датчиков. Нажав на нее, контроллеру подается сигнал, который затем приводит к каким-то действиям: включаются светодиоды, издаются звуки, запускаются моторы. Функциональная схема устройства представлена на рисунке 1.
Рисунок 1. Функциональная схема системы подключения
В соответствии с пользовательскими требованиями и функциональной спецификации требуется разработать принципиальную схему системы. Основой системы является плата ArduinoUNO и дисплей LCD 1602. Ниже приведены порты платы Arduino и дисплея [5].
Таблица 1.
Порты ArduinoUnoR3
Пины |
Назначение |
Цифровой пин 0 |
Вывод RX Serial порта |
Цифровой пин 1 |
Вывод TX Serial порта |
Цифровой пин 2-3 |
Вход для прерываний |
Цифровой пин 4-9 |
Цифровой вход-выход |
Цифровой пин 10 |
SPI (SS) |
Цифровой пин 11 |
SPI (MOSI) |
Цифровой пин 12 |
SPI (MISO) |
Цифровой пин 13 |
SPI (SCK) |
Аналоговые пины A0 – A3 |
Вход АЦП |
Аналоговые пины A4-A5 |
I2C (SCL) |
Таблица 2.
Порты Дисплея LCD 1602
Пины |
Назначение |
GND |
Вывод должен быть подключен к земле Arduino |
VCC |
Вывод питания для ЖК-дисплея, к которому мы подключается 5-вольтовый контакт Arduino |
Vo (LCD Contrast) |
Вывод контролирует контрастность и яркость ЖК-дисплея |
RS (RegisterSelect) |
Линия выбора регистра команд |
R/W (Read/Write) |
Линия выбора направления передачи |
EN (Enable) |
Линия тактирования по спаду. При сигнале высокого уровня, микроконтроллер переходит в рабочий режим, при сигнале низкого уровня - в режим энергосбережения |
D0-D7 (DataBus) |
Выводы, по которым передаются 8-битные данные на дисплей |
A - (Anode) |
Положительный вывод питания подсветки LCD дисплея |
K - (Cathode) |
Отрицательный вывод питания подсветки LCD дисплея |
Принципиальная схема системы представлена на рисунке 2.
Рисунок 2. Принципиальная схема системы
Программный код состоит из двух частей: функция voidloop() и voidsetup()
- Voidloop() – функция, в которой находится код, который постоянно работает на микроконтроллере.
- Voidsetup() – функция, которая инициализируется во время первого включения микроконтроллера. В ней устанавливаются необходимые переменные, инициализируется настройка дисплейного модуля.
Алгоритм инициализации системы представлен на рисунке 3. На этапе инициализации производится установка необходимых пинов на заранее назначенное состояние, установка прерывания и назначения функции на вектор прерывания на кнопку [4].
Рисунок 3. Алгоритм инициализации системы
Далее на рисунке 4 представлен алгоритм бесконечного цикла, в котором происходит логика старта игрового процесса.
Рисунок 4. Логика старта игры
В алгоритме, представленном на рисунке 4, происходит отрисовка начального экрана, а также ожидание нажатия кнопки. После того как кнопка нажата, происходит инициализация графики, и старт самой игры. В дальнейшем происходит отрисовка различных препятствий для героя на основе готовых заготовок «Спрайты». Постоянно данные препятствия передвигаются справа налево. Также отображается сам герой, и при вызове прерывания, спрайт игрока перемещаются на следующую позицию при последующем обновлении экрана.
После запуска проекта, микроконтроллер будет ожидать нажатия от пользователя. При нажатии на кнопку, игра стартует. МК сразу же отобразит их на дисплее. Пример представлен на рисунке 5.
Рисунок 5. Старт
При столкновении человечка с препятствием, игра закончится и предложит начать заново. С течением времени скорость будет увеличиваться, что отображается в правом углу дисплея. При нажатии на кнопку во время игры, персонаж подпрыгнет, что позволит ему увернуться от препятствия. Пример представлен на рисунке 6.
Рисунок 6. Результат прыжка
Таким образом, была разработана игра «Бегущий человечек» с графическим LCD дисплеем 2*16 символов на базе Arduino UNO.