Тетрис негабаритный светодиодный

Люблю игру Тетрис во всех возможных исполнениях. Хочу поделиться небольшой историей сборки своего самого крупного Тетриса. Под катом много текста.

Пришла в голову идея сделать Тетрис, со стандартной сеткой 10х20 пикселей, в формате картины или же светильника. А еще я хотел, чтобы он был беспроводным, то есть, работал от встроенного аккумулятора и принимал команды по WiFi. Подобные проекты существуют в разных вариациях. У меня вот своя.

Конструкция в сборе
Конструкция в сборе

Далее, много текста, из чего строится проект:

Микроконтроллер. В качестве микроконтроллера выбрал знакомый мне ESP8266. Небольшое энергопотребление, наличие WiFi и возможность обновления кода по воздуху. Памяти под код 4 МБ. Если в Arduino Nano влезают мои костыли, то на этом контроллере можно запускать ракету.

Свет. Светить будет адресная светодиодная лента с напряжением 5V и плотностью светодиодов 30 штук на метр. Тетрис, согласно сетке, состоит из 200 ячеек, значит нужно купить 7 метров.

Аккумулятор. Если зажечь все пиксели сразу, то по моим подсчетам 200 светодиодов с потреблением 46 мА на каждый, должны потреблять почти 10 Ампер. Схемотехник из меня не лучший, если я неправильно посчитал нагрузку, то напишите в комментарии. Конечно, все ячейки в Тетрисе горят редко. Можно подкрутить яркость и тогда гореть они будут в пол силы (половину времени). Но вдруг я захочу использовать эту штуку как ночник. Плюс микроконтроллер. Исходя из потребностей, я решил использовать 4 аккумулятора 18650 с рабочим напряжением 3.7V и выходом тока 2.5А. Я решил, что, собрав их параллельно, ток 8-9 Ампер аккумуляторы мне обеспечат.

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

Плата BMS. Защита собранной батареи от перезаряда/разряда и прочих издевательств обеспечивается купленной на барахолке BMS платой, работающей в режиме 1S, отстреливающей при 15 амперах. Я считаю, что мои аккумуляторы, собранные параллельно в одну большую батарею, балансируют себя сами, а плата BMS подходит.

Плата зарядки. Выбрал знакомый мне модуль TP4056, с током зарядки 1 ампер. Медленно, но уверенно. На нем есть все необходимые пятаки, чтобы припаяться.

Type-C выход. Чтобы заряжать аккумуляторы не через ЛБП, припаял выход зарядки как у современных устройств.

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

Плата преобразователя напряжения для микроконтроллера. Он же DC-DC понижающий/повышающий. Микроконтроллер питается от 3.3V. Заряженный аккумулятор имеет напряжение 4.2V, разряженный 2.8V. Чтобы поддерживать его стабильную работу нужен такой преобразователь.

Провода и термоусадка. Провода с большим сечением. Я распустил несколько силовых кабелей питания от ПК.

Еще пару важных деталей. Резистор 500 Ом на сигнальный провод ленты. Два любых конденсатора на питание микроконтроллера и преобразователя.

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

Стекло. Заказать нужного размера на стеклорезке. Толщина моего 3мм.

Тонировка и рассеиватель. Купил тонировку американку 30%. На маркетплейсе купил матовую пленку для окон. Еще нужен РОЗОВЫЙ мусорный пакет. Это важно.

Что мне не понадобилось, так это два повышающих преобразователя напряжения для светодиодной ленты. Я думал, что у аккумуляторов просядет напряжение и они не смогут ее питать. Поэтому заказал два. Выходной ток у них около 5 ампер. Но они большие и страшно грелись. К счастью лента работает и без них.

Схема подключения всего на картинке.

Принципиальная схема устройства
Принципиальная схема устройства

Процесс сборки:

Сначала я попробовал резать пеноплекс. Получалось плохо. Поэтому от этой идеи я отказался. Попросил друга распечатать мне 8 сеток по 5 ячеек. Если кому-то будет нужно, выложу 3D модели. Ширина стенки сетки 1 мм. Но даже так, сетка печаталась несколько дней. Чтобы толщина стенок была не 2мм, а 1мм, было решено извратиться. И сделать 7 сеток с тремя стенками, и 1 сетку с двумя. Выкладываются мозаикой. Прикручивать сетки к подложке я не стал. Это оказалось непростым занятием. Соответствующие крепления с модели я удалю. Сетку притянет с двух сторон стекло и подложка. Все зажмется уголками.

Попытки резать пеноплекс
Попытки резать пеноплекс

Измерив сетку и прикинув запас пространства для размещения остальных элементов конструкции, отпилил борта. Я пилил под 45 градусов в стусле. Хоть и вышло кривовато, но лучше, чем прямые запилы. Еще нужно пропилить место для порта зарядки, в моем случае Type-C.

Первые распилы и примерки
Первые распилы и примерки

Далее покраска. Купил баллончик черной краски, спросив продавца, что больше подходит для покраски дерева. Ушел в лес, где меня чуть не съели муравьи. Наверное, за вандализм над деревьями. Совесть меня не мучает. Красил и деревянные детали, и уголки. Саморезы красить не стал.

Сложил все получившееся вместе. По размерам все совпало. Стянул уголками бортики на маленькие саморезы. Подложка к бортику не прикручивается. Она будет лежать на профильных уголках, внутри. Если вдруг я повешу эту картину на стену, то смотреть на подложку из опилок не хотелось бы.

Дотошно расчертил карандашом на подложке места, куда буду клеить ленту. Режу и клею. Прикладываю сетку и бортики, чтобы посмотреть, что получилось. Вижу, что распилил подложку криво. Видны насквозь щели, но ничего страшного. Это будет вентиляция. 3D принтер и стусло помогли остальное сделать ровным. Стекло на стелорезке тоже отрезали ровно. Поэтому раньше времени не переживаем. Все будет хорошо.

Клею ленту
Клею ленту

Начинаю монтаж проводов. Тут есть нюансы. Сверху нужно соединить соответствующие пятаки разрезанной ленты друг с другом. Для этого в напечатанной сетке я кусачками откусил отверстия для проводов. Толщина стенки 1мм, это было не сложно. Снизу же вообще полный ахтунг. Места я себе оставил немного, а проводов в избытке. Поскольку лента длинная, чтобы напряжение не просаживалось на всей ее длине, я снизу, равномерно, подключил ее с 4х позиций.

Снова примерки
Снова примерки

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

Еще примерки
Еще примерки

Сборка аккумуляторной батареи. Припаять 18650 друг к другу можно. Хоть и сложно. Обычно в технике их сваривают друг с другом точечной сваркой. От высоких температур паяльника они могут испортиться или загореться, замкнуть. Я пробовал спаять. Но провода постоянно отваливались. Даже при том, что я зачищал площадки. Возможно у меня не тот флюс. Может я еще не настолько искусен в пайке. Решил, что, если провод отвалится в собранном устройстве я просто не захочу его чинить. Купил две коробочки для аккумуляторов. Перепаял коробочкам соединения, чтобы была одна параллельная сборка. Сами коробочки пришлось по углам точить ножом, чтобы влезли. Места я себе оставил мало. Сначала вообще не подумал, что они мне понадобятся.

Коробочки для аккумуляторов
Коробочки для аккумуляторов

После мучительного монтажа, я залил простую программу, чтобы проверить что все работает. На фото у меня все еще используются два преобразователя. Я был очень рад, что лента заработала как хотелось.

Первое включение
Первое включение

Далее подготовка стекла. С одной стороны, я наклеил 30% тонировку, которую в народе называют американкой. Как написано в примечании к ней, на неделю оставил ее сохнуть. С другой стороны, я наклеил матовую пленку для окон. Она сохнет довольно быстро. Я надеялся, что матовая пленка будет хорошо рассеивать свет и он будет заполнять всю ячейку. На практике матовой пленки оказалось недостаточно, так как светодиоды находятся очень близко к ней. Решение нашлось. Натянуть под стеклом мусорный пакет. Розовый пропускает свет лучше черного. Если правильно распустить ножницами мусорный пакет, то он имеет внушительную прямоугольную форму, которой мне хватит, чтобы закрыть весь экран.

Еще раз проверил всю электронику. Все что было не припаяно, то припаял. Что не изолировано, то изолировал. Проверил доступность платы по WiFi и возможность ее обновления. По всей площади устройства раскатал розовый пакет. Придавил сверху стеклом, тонировкой вверх. Засверлил уголки с малым нахлестом, чтобы держали стекло внутри.

Волею небес я собрал все это вместе. Оно живое, живое!

Я счастлив

Теперь немного о подкапотном коде. Сказав, что это Тетрис я вас обманул. Это светодиодный экран со следующим набором команд:

1) Обновить все 200 светодиодов разными цветами из буфера.

2) Обновить все 200 светодиодов одним цветом из буфера.

3) Обновить несколько светодиодов разными цветами из буфера.

4) Выключить светодиоды.

5) Установить яркость светодиодов.

6) Установить автоотключение светодиодов при отсутствии команд.

7) Установить таймаут автоотключения светодиодов.

Я очень не хотел повторно прошивать это устройства из-за возможности его "окирпичить" из-за случайно допущенного бага. Тогда пришлось бы его разбирать, прошивать контроллер, собирать обратно. Вместо этого я написал API светодиодного экрана, проверил и зашил туда навсегда.

Код прошивки тоже могу опубликовать, если кто-то захочет повторить.

Сама игра, которая на видео, запущена и управляется с компьютера, а пакеты с командами цветов посылаются по UDP.

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

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

Я рад, мне удалось собрать этого монстра и теперь я снова могу спать спокойно. А на моем столе уже зреет следующий проект из велосипедов и костылей. Спасибо за внимание)

1414
33
11
7 комментариев

Такой нужно было делать

2
Ответить

Пикселей маловато)
Его круглая форма напоминает Тетрис наггетс.

1
Ответить

Офигенно вышло. И как предмет интерьера, и как игровая панель для тетриса. Жаль, что тетрис не получилось вшить, но с другой стороны, у меня был тетрис типа 20 в 1, там помимо разных режимов были ещё гонки и арканоиды. Можно в это всё залипать.
Я бы ещё зеркальную пленку бахнул сверху и зеркальную подложку для эффекта бесконечности. Хотя и так выглядит стильно.

2
Ответить

Вшить в 4 мегабайта можно много логики. Хватит и на Тетрис и на Змейку. Просто написать качественный код игры с наскока не выйдет. Можно допустить ошибку и контроллер устройства будет бесконечно перезагружаться. Поправить это без вскрытия будет нельзя. Чтобы этого избежать, я сделал его просто экраном. Этакое разделение ответственности)

1
Ответить

Круто вообще!

2
Ответить

Молоток!

2
Ответить

Эпично. Титанический труд!

1
Ответить