151-gcConsole — хардкорная игровая консоль на Arduino Pro Mini и 0.96 OLED I2C

Автор: | 09.05.2018

 

На картинке выше — игровая AVR-консоль. Эта консоль задумывалась как отладочная платформа для создания игр под Arduino+OLED (после первой моей игры gcRogue, есть желание создать еще парочку). Платформа вышла довольно неплохой, и даже претендует на полноценное устройство. Конечно, она не может конкурировать с действующими проектами подобных консолей:


— зато у моей консоли есть одно большое преимущество — ее можно без проблем собрать самому. Для сборки понадобятся всего несколько компонентов и немного времени. Приступим?

Справедливости ради должен отметить, что подобная консолька получится и для проекта arduboy. Только нужны будут Arduino Pro Micro и  OLED с SPI — интерфейсом. Это немного дороже и не так компактно, но зато есть много готовых игр под этот проект. Может быть позже сделаю статью и под вариант arduboy.

Нам понадобится:

– макетная плата для основы. Размер 30х70мм. Подойдет любая, но желательно, чтобы она выглядела презентабельно.

– Arduino Pro Mini (ATmega328p, 16MHz)

— дисплей – 0,9’ OLED I2C.

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

— для обеспечения правильной зарядки аккумулятора – плата драйвера заряда

— в качестве органов управления – тактовые кнопки (5х5мм – 6шт) и переключатель

— по мелочи – кусочки соединительных проводов, штырьки PLS, элементы крепления

 

Все перечисленное выше, без проблем можно приобрести и стоимость такого набора будет невысокой.

 

О конструкции.
Устройство без корпуса на макетной плате выглядит довольно своеобразно, но, с другой стороны, придает проекту изюминку — конструкция демонстрирует всем интересы своего владельца :).

Так как у конструкции нет корпуса, возникают определенные трудности, которые нужно учитывать при сборке:
— Конструкция получается довольно компактной за счет плотного расположения плат одна над другой. В виду этого, нужно следить при сборке за тем, чтобы не было соприкосновений плат между собой (либо оставлять достаточные зазоры, либо изолировать платы между собой диэлектрическим материалом).
— Так как конструкция не имеет корпуса, вся нагрузка при эксплуатации ложится на платы устройства. Соответственно, для плат необходимо предусматривать дополнительные усиливающие элементы для предотвращения их повреждения.

 

Сборка.
Элементы конструкции соединяются по следующей схеме:

На видео представлен общий процесс сборки и программирования консоли (простите за слегка затянутое видео — хотел ничего не  пропустить…).

Кратко последовательность сборки:

1 Первое, с чего необходимо начать – это припаять к Arduino Pro Mini штырьки для программирования. Дальше, кладем Ардуину на макетку и припаиваем к ней прямо через отверстия. Для того чтобы исключить замыкания между макеткой и Ардуиной нужно или подложить изоляцию или оставить небольшой промежуток между платами (на видео я оставил воздушный промежуток).

2 Припаиваем кнопки. Вариант установки кнопок зависит от конструкции самих кнопок и Вашей фантазии. Снизу макетки, согласно схеме, подсоединяем кнопки навесным монтажом (проводками) к соответствующим выводами Ардуины.

3 Припаиваем дисплей. Но перед пайкой подготавливаем провода для подключения дисплея. Провода питания проблем не создадут, а вот сигнальные провода шины I2C придется завести с другой стороны платы (I2C-выводы в Ардуине расположены в центре платы и к макетке их никак не припаять). Далее, устанавливаем дисплей, вплотную к Ардуине (не забывая про зазор между платами) и сзади платы пропаиваем выводы дисплея вместе с сигнальными проводами и проводами питания. Дополнительно закрепляем дисплей на макетной плате, пропаивая его через монтажные отверстия при помощи штырьков PLS.

4 Переходим к аккумулятору. Паяем все соединения аккумулятора, контроллера заряда и переключателя навесным монтажом на макетку. Подпаиваемся к соответствующим выводам питания Ардуины. Для жесткости конструкции, контроллер заряда устанавливаем на штырьки PLS. Сам аккумулятор можно закрепить на макетке либо горячим клеем, либо на двусторонний скотч, либо прихватить хомутиками (я приклеил акриловым клеем).

Сборка окончена. Теперь осталось только записать игру в консоль.

 

Запись прошивки.

В отличие от большинства плат, Arduino Pro Mini нельзя запрограммировать  через обычный USB-шнур — для этого нужен отдельный преобразователь USB-UART. Преобразователь лучше использовать как на картинке ниже (его можно подключать непосредственно к Ардуине), но подойдет и любой другой, только нужно правильно его подключить (смотри схему подключения ниже). Вообще для программирования достаточно сигналов TxD, RxD и «земли» с питанием от преобразователя, но в этом случае при программировании нужно удерживать нажатой кнопку сброса.

 

После того как подключен преобразователь, запускаем gcManager, обновляем устройства (Update), выбираем в нем проект gcConsole, устройство gcRogue (поймете по картинке, что это то что нужно), номер порта преобразователя и нажимаем иконку программирования. Через некоторое время игра будет записана в микроконтроллер и автоматически запустится. Подробней про работу gcManager читайте в соответствующей статье.

Теперь у Вас есть своя уникальная игровая консоль, собранная своими руками!

Заключение.

По факту использования консоли, скажу, что конструкция вышла довольно удобной и визуально привлекательной (конечно, нужно позаботиться о том, чтобы макетка и все остальные компоненты имели презентабельный вид). Небольшие размеры устройства позволяют его носить с собой в кармане (хотя, в виду угловатости конструкции, карман джинсов не очень хорошо подходит). Ток потребления консоли составляет порядка 30мА, соответственно, для моего аккумулятора 550мАч, время непрерывной работы будет в пределах 550/30=18 часов, что довольно неплохо.

Планирую еще что-то сделать под эту консоль, так что, возможно, будут варианты игр.

(Visited 960 times, 1 visits today)

151-gcConsole — хардкорная игровая консоль на Arduino Pro Mini и 0.96 OLED I2C: 18 комментариев

  1. Pav

    Даааа!!! Это случилось!!! Буду собирать в ближайшее время.

  2. destroyer

    Подумал что можно упростить устройство использовав аккумулятор от сотика,в нем встрорена защита.Только разъем для зарядки нужен и все..

  3. Ivan

    В использованном аккумуляторе тоже встроена защита. Так что нет никакого резона использовать модуль зарядки с защитой.

  4. GetChiper Автор записи

    Я допилил немного игру. Теперь она, во первых, помнит место где ее отключили и после включения начнет незаконченный уровень, ну и во вторых, шестая кнопка перезапускает текущий уровень.

    Я сейчас пишу статью с описанием игры — там будут все нюансы прописаны.

  5. GetChiper Автор записи

    Arduino Nano можно использовать по умолчанию. Nano и Pro Mini для gcManager идентичны. Подключайте к соответствующим выводам периферию и прошивайте прошивку из Менеджера.

  6. Andrew

    и какой же контроллер у этого OLED? ))))))))))))))))))))))))))))))))))

  7. GetChiper Автор записи

    SSD1306

  8. GetChiper Автор записи

    Боюсь Вас огорчить, но игра неспособна влезть в мегу168. Скорей всего половина спрайтов потеряна…
    Ну и загрузчик родной (если это Ардуина) тоже скорей всего затерт.

  9. boostmenova

    Доброго времени суток! Сейчас разбираюсь с этим экраном, и как раз увидел Ваш проект. На одном из видео я увидел как изображение плавно двигается сверху вниз, да еще при этом нет мерцания.
    1. Как Вы реализовали плавное движение сверху вниз? Просчитываете экран столбцами или записываете буфер, а затем выводите его на экран?
    2. Как Вам удалось избавиться от мерцания при перерисовке? Или их не видно только на камере?
    Если Вы представляете проект как открытый, то где можно увидеть исходники? Или хотя бы фрагмент кода с вычислениями положения изображения и его отрисовкой?

  10. GetChiper Автор записи

    Привет!
    Любое движение реализовано без применения аппаратного сдвига дисплея (такой способ мне не подходит, так как изменения происходят по всему кадру)
    Решил отказаться от буфера экрана в SRAM в пользу вывода изображения построчно (правда буфер для этой строки все-таки есть — 128 байт)
    Причина отсутствия мерцания не в буфере (если-бы буфер был — было-бы только лучше) а в частоте I2C интерфейса.
    В даташите драйвера дисплея прописана частота 400кГц (библиотеки для лучшей совместимости могут использовать и 200кГц) — этого мало для плавной картинки. У меня частота I2C поднята почти до 900кГц. Вот это и есть секрет плавной картинки.

    ПС. Ну и конечно не стоит очищать экран перед выводом новой картинки (я знаю, Вы так не делаете, но на всякий случай).
    ППС. Исходник планирую позже выложить — он еще не доведен до ума толком — много в планах чего переделать

  11. Andrew

    можно ли скомпилировать под SH1106 i2c?
    и да, а как ардуина на 16мГц работает от 3,7 вольт???

  12. GetChiper Автор записи

    Текущая прошивка не работает с этим дисплеем?
    Ардуина отлично работает с 3.7 вольтами.

  13. Andrew

    уже писали, что SH1106 i2c дает статичный мусор на экране и что то меняет в верхних несколько строк

  14. GetChiper Автор записи

    Скиньте мне на почту getchipblog@gmail.com фото дисплея с мусором на нем — попробую разобраться.

  15. SVN

    У меня ардуина нормально работает и с 3,3 Вольтами.

Добавить комментарий