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 часов, что довольно неплохо.

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

Update 28.07.2018
Появился звук
Появилась библиотека для Arduino IDE
Портировал несколько игр с проекта ArduBoy
Об изменениях читаем здесь

(Visited 10 428 times, 10 visits today)

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

  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 Вольтами.

  16. mr.alex-236

    Здравствуйте.
    У меня не работает кнопка действия на ардуино нано. Не знаю почему. Помогите пожалуйста.

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

    Привет!
    Нужно взять мультиметр и измерить напряжение на 4 выводе ардуины (куда подключена кнопка действия).
    В нормальном состоянии там должен быть высокий уровень (5 вольт). Если кнопку нажать — низкий (ноль).
    Возможно где-то нет контакта, или кнопка сломана.

  18. Иван

    А можно вместо кнопок использовать джостик?

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

    В gcManager есть варианты игры и для джойстика. Правда — это демо варианты), но все равно попробовать можно.

  20. Sherhi

    Хочу пересобрать вариант твоей консоли на Nano V3.0 3,0 чтоб не мучаться с программатором. Вопрос программно твоя игра с ней совместима?

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

    Да, — Nano и Pro mini — это одно и тоже. Так что все будет работать.

  22. GHOST_UB

    Доброго времени суток. Такой вопрос, а на Arduino Pro Mini 3.3 V 8 MHz будет работать? Или надо покупать 5 V 16 MHz всё равно? Спасибо за ранее)))

  23. GHOST_UB

    Ещё завалялась Arduino Pro Micro, но я так понимаю она не подойдёт сюда совсем, я же прав?

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

    Привет!
    Arduino Pro Mini 3.3 V 8 MHz, возможно и заработает, но так как частота задающего генератора в 2 раза меньше — все будет страшно медленно.

    Arduino Pro Micro — точно не подойдет.

  25. GHOST_UB

    Привет)) Такой вопрос есть, у меня похожий экран (по сути тот же), но там выходы GND, VDD, SCK, SDA. Тут в проекте SCL выход вместо SCK как у меня. Тогда мне SCK на 13 пин (SCK) запаять получается вместо A5 (SCL)?

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

    Привет!
    Да, попробуй так.

  27. polaris

    Евгений Здравствуйте! Хотел повторить вашу игровую консоль но не получается обновить gcManager в логе написано что ошибка создания FTP сессии. В чём может быть проблема?

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

    Привет!
    Да действительно не было доступа к FTP (на сервере менялось программное обеспечение).
    Теперь должно заработать.

  29. polaris

    Спасибо! FTP в работе.

  30. Рус

    Не в упрек уважаемому автору, но точности для.
    В проекте использовался дисплей 1,3″ против указанного 0,96″.
    Вот пруф https://yadi.sk/i/Ymk48KnbmJYQSw

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

    На фотке два одинаковых 0,96″ дисплея.
    Если есть мой gcManager http://www.getchip.net/gcmanager/ , то можно там посмотреть фотки вариантов игры под разные дисплеи. Дисплей 1.3″ заметно больше.

  32. Рус

    Тема мне интересна. Давайте разберемся.
    На фотке два дисплея. Верхний имеет длииную сторону 27мм. Нижний ту же сторону 24мм. Диагональ согласно линейке у них 0,96 и 1,3 инча соответственно. На Ваших изображениях дисплей предположительно 1,3″ расположен на макетке, что позволяет предположить его длину = 14 пинов = 32мм примерно. Это заставляет думать о размере в 2 с небольшим дюйма.
    Где берете такие хорошие дисплеи? Прошу ссылку.

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

    Размер дисплея считается по диагонали области отображения. Если при хорошем освещении присмотреться, эту область видно — она немного светлее. При этом размер стекла и платы может быть разным (зависит от производителя).
    Размер диагонали для
    0,96″ — чуть меньше 25мм
    1,3″ — 33мм
    Дисплеи специально где то в одном месте не покупаю — попадают ко мне разными путями и из разных магазинов…

  34. Колян

    привет! подскажи почему у меня выдаёт разные ошибки когда я заливаю твою игру ,что я только не делал ….и отпаивал все выводы от ардуино и вывод с экрана SCL на пин 13 сажал,ничего не помогает, вечно ошибки какие то лезут типо такие: stk500_getsyncattempt 1 of 10 : not in sync: resp=04f причём каждый раз меняются цифры в коде ошибки ( resp=03f или resp=06f и тд) , братан !подскажи что делать? хотел сына порадовать а получил геморой на голову=(. (ИЗВИНЯЮСЬ ,ПРОШЛОЕ СООБЩЕНИЕ НЕ ТУДА НАПИСАЛ, СКОПИРОВАЛ СЮДА ЧТОБ ПОНЯТНЕЙ БЫЛО ПО КАКОЙ ИГРЕ У МЕНЯ ВОПРОС)

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

    Привет!
    Как подключал ардуину?
    Что за преобразователь?
    Есть другая ардуина (например Nano) для проверки?

  36. Колян

    я использовал 2 ардуинки сначала мини затем нано в обеих случаях нифига не выходит подключение всё по твоей инструкции ,всё по схеме подключено,скажу сразу что экран и ардуинки в порядке ,заливал примеры и даже свой небольшой текс написал на экране, игра категорически не хочет заливаться через твою прогу))) если есть вк или ватсам то могу скинуть фотографии , помоги пожалуйста!

  37. Колян

    добавлю,,….пробовал даже с ардуино уно,всё равно выдаёт ошибки если даже ничего не подключено

  38. Колян

    и ещё! преобразователь у меня USB -TTL PL2303,через него заливал любые скетчи,всё отлично именно если заливать через ардуино IDE

  39. Колян

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

  40. Колян

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

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

    У ардуин есть несколько вариантов загрузчика (старые/новые версии), поэтому возможно что одни не прошиваются, другие прошились без проблем.
    В любом случае, в проекте есть HEХ-файл, который можно прошить любым удобным способом.

  42. Колян

    вобщем игруху я запустил) всё нормально за исключением ,я пробовал щас загрузить другие игры и они негрузятся опять ошибка, попробовал на свою нано (ту что пробовал до этого) и она успешно принела игру,но как только я подклчаю снова свой (ардубой) то опять ничего не грузится,летят ошибки в логе,что может быть не так?

  43. Колян

    можно тебя попросить инфу про hex вайл в твоих играх? потому как с таким файлом как hex, я не знаю что с ним делать и как его вообще другим способом грузить на ардуинки. кстати я тут закончил собирать под себя твой проект) кнопки я правда по особенному расположил. и ещё……. звук из писчалки на игре с приведением не идёт, может если у меня получится загрузить другие игры, тогда звук появиься? и чуть не забыл есть очень класная игра hollow seeker. тут вот тип её показал),но как и откуда её загрузить так и не оставил ссылок, можешь ты что знаешь про неё?

  44. Колян

    Getchiper(у), вобщем я разобрался что было) RX плохо припаял. все игры теперь грузятся как положено, главное не забывать наживать кнопку сброса на ардуино, спасибо тебе Getchiper за помощь. но не могбы ты портировать игру про которую я тебе говорил в прошлых постах???

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

    Привет!
    По моей игре — она еще не закончена и звук предполагалось делать в самом конце. Так что пока без звука.
    По другим играм с ардубоя — как нибуть займусь — времени никак нет (

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