Пульт-игра симулятор космического корабля по типу игры «Звёздный патруль»

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Приветствую!

Вдруг кому-то будет интересно.

Суть задумки в следующем.

Сделать небольшой пульт со встроенной электронной игрой наподобие старой текстовой «Стартрек» (один из более поздних вариантов назывался «звёздный патруль»), но с красивым отображением всех элементов.

Примерный внешний вид предполагается таким:

https://s8.hostingkartinok.com/uploads/images/2019/12/8eea325e2ec84d0d3cf54fdfce2edd48.png

Используемые модули обозначены на этой схеме:

https://s8.hostingkartinok.com/uploads/images/2019/12/c260bf5a49510ba3221c40e239657e7d.png

Предполагаемое время исполнения (в упрощённом варианте) – полгода-год.

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

Предыдущее подобное (по назначению, но не по функционалу) изделие было собрано мной без применения цифровых элементов, и поэтому не удалось реализовать очень много из «хотелок».

Долго думал, выбрать MEGA или DUE, всё же решил пока остановится на Меге.

Пока тестирую скетчи на УНО.

Если кто-то дочитал до этого места, то кратко об успехах и фейлах на данный момент.

Успехи:

- освоено подключение и работа с адресными светодиодами (относительно легко)

- освоено подключение и работа с модулем ТМ1638 (относительно легко)

- освоено подключение и работа с клавиатурой PS/2 (не с первого раза, но получилось)

- освоено подключение и работа с экраном 1,8 TFT ST7735 160х128 (получилось не всё, что хотел, но на данный момент этого достаточно)

- освоено подключение и работа с SD card (пока только вывод на экран изображений, без чтения/записи файлов)

- сделаны наброски скетчей по отображению положения корабля, планет(баз) и врагов на карте галактике и карте системы, сейчас отрабатываю перемещение корабля.

Фейлы:

- при проверке умудрился сжечь аж три барграфа (жёлтые сегменты) – сам виноват, не посмотрел описание, не думал, что производитель заложил свое напряжение на каждый цвет!!!

- не получилось задействовать ММС карточки – ни одна не заработала, только SD (и те не все). Размерность – все 2 Гб или меньше. Почему не каждая SD карточка работает, так и не понял – форматировал все одинаково. Так или иначе, есть несколько рабочих, пока этого достаточно.

- не получилось ускорить вывод картинки с карточки на экран (полный экран 160х128 выводится примерно за 1 с, что в некоторых ситуациях слишком долго). В результате пока остановился на выводе в «боевом» режиме монохромных картинок, которые выводятся намного быстрее, хотя и занимают место в памяти. Но пока их немного, это не так критично.

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Красиво. А куда поставите потом? 

Картинку быстро выводить на дисплей для ардуины - это не просто. Надо контроллер дисплея с двумя страницами искать - пока с одной рефрешится, на другую выводится.

Так же - можно посмотреть в сторону HMI-дисплеев. Часть из них хранят картинки унутре и позволяют просто переключаться между ними.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Вопрос куда ставить для меня сейчас второстепенный, программу бы осилить, чтобы всё работало как надо :)

Вероятнее всего, в какой-нибудь чемоданчик вмонтирую.

По поводу картинки - пробовал менять частоту SPI, но или она не менялась, или это не влияет на скорость вывода (скорее всего второе). Так же пробовал выводить 16 битные картинки вместо 24 битных, но у них оказалась та же скорость вывода (насколько я понял, из-за того, что 24 бита перед выводом преобразуются в 16 бит).

Уменьшение картинки тоже не сильно помогло.

Единственный способ, мной не опробованный, это применить DUE - но такой платы у меня нет. 

А вот монохром реально быстро работает, и мне должно этого хватить для "боя".

Там же, где скорость не критична, можно и подождать 800-1000 мс, пока полноцветная картинка высветится.

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Я давеча на ютубах смотрел обзоры дисплеев для ардуин - народ высказывает мнение, что проблема в связке МК-SD. Надо стараться этот этап исключить.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

На самом деле, если монохромная картинка с большой степенью заполнения - тоже не сильно быстро выводит. А она в памяти сидит, не на SD.

Учитывая, что одна картинка на полный экран весит 60кБ, вариантов исключить SD я не вижу :)

Даже в базовом варианте картинок будет не один десяток, скорее всего.

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Могу на nextion-e (320x240) картинки ваши покрутить - он их у себя в памяти держит, не будет лишних пересылок по spi.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

А "мои" картинки ничем особенным не отличаются в этом плане - обычные 24-битные БМП 160х128 (или меньше, если не полный экран).

Дисплей посмотрел, интересная штука! Стоит только не сильно дёшево. Но это уже не дисплей по сути, а миникомпьютер какой-то :)

И за сколько времени он выводит полный экран (320х240 , 24 бита) из своей памяти?

Хотя он ведь, наверно, не только с BMP форматом может работать.

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Сейчас залил обои какие-то в JPG для 240x320 - листает только в путь. FPS глазом не могу измерить, могу видео скинуть - писните на wrk.sadman@gmail.com

По цене там варианты есть.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Alex_Perm пишет:

- при проверке умудрился сжечь аж три барграфа (жёлтые сегменты) – сам виноват, не посмотрел описание, не думал, что производитель заложил свое напряжение на каждый цвет!!!

Свое напряжение на каждый цвет заложила природа. Она и является производителем? Вы эти барграфы с дерева сорвали?

Однако, если посмотреть на Вашу схему, они не должна были гореть ни в каком случае - пофиг на напряжения. 7219 (если правильно подключена) обеспечит им правильный ток. Что-то здесь не так.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Я посмотрел, пишут про 20 кадров в секунду.

Для следующих проектов буду иметь ввиду. Но это по сути не ардуино уже, хотя его можно с ним подружить.

И не до конца понял, можно там SD использовать кроме как для прошивки или нет.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

ЕвгенийП пишет:

Свое напряжение на каждый цвет заложила природа. Она и является производителем? Вы эти барграфы с дерева сорвали?

Ну я как-то избаловался в последнее время, привык, что современные и зелёные и красные и белые светодиоды обычно не сгорают от 2,8 в.

А тут поди ж ты... конфуз.

Производитель мог бы токоограничительные резисторы добавить внутрь. Но видно, у него свои резоны.

Говорю ж, сам виноват.

ЕвгенийП пишет:

Однако, если посмотреть на Вашу схему, они не должна были гореть ни в каком случае - пофиг на напряжения. 7219 (если правильно подключена) обеспечит им правильный ток. Что-то здесь не так.

Вы совершенно правы. Я сжег их при проверке пайки, ещё до подключения к 7219 :(

Которую, кстати, пока ещё не подключал, потому что не закончил паять "барграфную" плату.

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

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Почему это - не Arduino? Я с Nano листал картинки. Скетч накидать - 15 минут (с заливкой картинок в дисплей).

Максимальная скорость (без дилеев в лупе): https://yadi.sk/i/-80ucDnVfLZ95w

Конкретно в Nextion SD для замены прошивки, в которой хранятся картинки. В других HMI есть и варианты хранения на SD вроде бы. Для разового проекта это не сильно дорого, если учесть, что можно Мегу сразу поменять на что-то более мелкое. А ежели ещё покопаться в китайских аналогах...

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Если я правильно понял, там своя среда разработки, и оно может работать само без всяких Ардуин.

У меня стоимость электроники для проекта примерно 3 тыр (естественно, считая цены с али), а тут один экранчик в районе 1000 (тоже с али). 

Для дисплей-ориентированных проектов, конечно, он больше подходит.

Насчёт замены Меги - я опасаюсь, как бы её ОЗУ не оказалось слишком маленьким... в основном из-за этого и думал про DUE, но пока не решился.

 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Дело хозяйское, не уговариваю. Более простого варианта для подобной скорости наврядли найдёте. А если ещё и DUE начнёте покупать -- вообще бессмысленно растратите бюджет.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Странно, если

Alex_Perm пишет:
с электроникой знаком не первый год
То откуда же
Alex_Perm пишет:
современные и зелёные и красные и белые светодиоды обычно не сгорают от 2,8 в.
они и от 28В не сгорают, есть правильный ток выставить, разве нет? И уж, тем более
Alex_Perm пишет:
Производитель мог бы токоограничительные резисторы добавить внутрь
Ну, вот скажите, как бы он мог добавить туда резисторы, если он не знает какое Вы будете подавать напряжение - 3В или 33В? Как? Какие резисторы?

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Мне не хотелось бы развивать эту тему, но всё же отвечу.

Управлять током (и яркостью) на светодиоде можно как источником напряжения, так и источником тока (ваш КО).

Допустим, синий светодиод даёт максимальную яркость при подаче на него (без всяких резисторов, источником напряжения) 3.8 вольт (при этом ток, допустим, 50 мА).

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

Тогда, поставив последовательно с красным светодиодом резистор на 36 Ом (падение напряжения на нём будет 1.8 вольт), мы получим, что при подаче 3.8 вольт на прибор оба светодиода будут гореть с максимальной яркостью.

Больше 3.8 вольт подавать непосредственно на прибор нельзя, ибо сгорит уже и синий светодиод. 

Если же мы хотим яркость уменьшить, то подадим меньше 3.8 вольт при управлении источником напряжения, или уменьшим ток при управлении источником тока.

Вот пример трехцветного диода, у которого все цвета запитаны от одного напряжения:

http://dalincom.ru/goods-10248.html

Конечно, там внутри не только три диода, а ещё много всего. Но пользователю достаточно подать 3,2 вольта, чтобы он заработал, несмотря на то, что цвета разные.

А вот у этого трёхцветного диода, как и в барграфе, разные максимальные напряжения:

https://www.chipdip.ru/product/bl-l515rgbw-cc

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

Но это послезнание. 

Надеюсь, я ответил на вопрос и тему на этом можно закрыть.

 

 

 

 

 

 

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

sadman41 пишет:

Дело хозяйское, не уговариваю. Более простого варианта для подобной скорости наврядли найдёте. А если ещё и DUE начнёте покупать -- вообще бессмысленно растратите бюджет.

Ну, честно говоря, на Али разница между Мега и DUE рублей 300, если не меньше (примерно 500 против 800).

Учитывая разницу в частоте в 5 раз и объёме памяти ОЗУ в 12 раз, это даже не смешно.

В основном меня отпугивает несовместимость библиотек. 

sadman41
Онлайн
Зарегистрирован: 19.10.2016

Alex_Perm пишет:

Ну, честно говоря, на Али разница между Мега и DUE рублей 300, если не меньше (примерно 500 против 800).

Учитывая разницу в частоте в 5 раз и объёме памяти ОЗУ в 12 раз, это даже не смешно.

В основном меня отпугивает несовместимость библиотек. 

https://www.arduino.cc/en/Guide/ArduinoDue#toc11 -> The microcontroller mounted on the Arduino Due runs at 3.3V, this means that you can power your sensors and drive your actuartors only with 3.3V. Connecting higher voltages, like the 5V commonly used with the other Arduino boards will damage the Due.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Да, вот эти вот 3,3 В вместо 5 В тоже слегка напрягают, но это при необходимости можно решить, поставив преобразователь уровня. В моём проекте их понадобится два (для 7219 и для PS/2). 

Хотя встречал инфу, что 7219 и от 3,3 В работает.

Так же, тут пишут, что и PS/2 работает с 3,3 В:

https://forum.arduino.cc/index.php?topic=393453.0

Всё остальное вроде нормально должно работать и с 3,3 В логикой.

С другой стороны, экран я сейчас подключаю через резисторы, хотя и пишут, что можно без них. 

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Ну вот, запрограммировал блок навигации - движение по системе, между системами, отображение планет(баз), врагов, звёзд.

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

Отображение на радаре, карте галактики и сканере.

Есть и отображение состояния систем барграфами, но пока ещё не проверял его на железе.

Начал программировать боевой блок.

Пока удалось сделать стрельбу лазерами по 4-м направлениям и "залочивание" конкретного врага.

Навигационный блок + начало боевого заняли 40% флэш и 40% ОЗУ.

Вывод на экран пока не добавил, поскольку скетч только вывода с карточки на экран + 2 маленьких картинки во флэше занимает примерно 66% флэш и 46% ОЗУ. То есть вместе они тупо не влезут. Заказал мегу, когда приедет - тогда буду объединять.

 

Столкнулся с несколько неприятным моментом при подключении клавиатуры.

В самый первый раз никаких реакций на клавиши не было.

Добавил вывод переменных в сом-порт, чтобы посмотреть их состояние.

Увидел, что они меняются, при этом клавиатура заработала!!!

Решил, что был глюк - убрал вывод. Работать перестала.

Задумался.

Вместо вывода переменных в сом-порт ввёл задержку 50 мс. Заработало!!!

Так и не понял пока,  в чем дело, подозреваю, что в библиотеке.

Но лезть туда не стал, ибо для проекта это не фатально, хотя delay в loop-е мне не нравится, даже сокращённый до 30 мс.

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

Возможно, это связано с длинным проводом от клавиатуры.

Когда доделаю всё остальное, надо будет поразбираться с этим.

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Alex_Perm пишет:

- не получилось ускорить вывод картинки с карточки на экран (полный экран 160х128 выводится примерно за 1 с, что в некоторых ситуациях слишком долго).

Alex_Perm пишет:

А "мои" картинки ничем особенным не отличаются в этом плане - обычные 24-битные БМП 160х128 (или меньше, если не полный экран).

IMHO Ваша проблема в попытках использовать для Ардуино стандартный формат хранения картинок.

Как правило, цветные дисплеи для Ардуино имеют аппаратные средства для ускорения вывода прямоугольных картинок. Посмотрите по дэйташиту на конкретный дисплейный контроллер, что на него надо отправлять для максимально быстрого вывода, и на ПК перекодируйте Ваши BMP  формат оптмимальный для отображения на дисплее. Ардуина должна читать с карточки файл побайтно и тут же отправлять его на дисплей без перекодировки, тогда будет быстро. Хотя, если и карточка и дисплей подключены по одному интерфейсу (SPI), то, возможно, читать и отправлять на дисплей следует блоками оптимального размера.

Alex_Perm
Offline
Зарегистрирован: 14.12.2019

Спасибо, но боюсь, пока я не настолько поднаторел, чтобы напрямую работать с контроллером, без библиотеки.

Карточка и дисплей действительно подключены по одному интерфейсу (SPI), но мои попытки изменить размер блока не дали результата в плане увеличения скорости вывода.

Я думаю, что для этого проекта мне хватит монохромных картинок (в "боевом" режиме), тем более, что можно их выводить разными цветами.

А на будущее, вероятно, воспользуюсь советом насчет дисплея с памятью. Хотя он мне не нравится тем, что не может выводить изображения с карточки, а своей памяти у него не так уж и много. Но время идёт, может появятся недорогие и с этой функцией.