Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Костюм светодиодной пиксельной панели Pac-Man

Компоненты и расходные материалы

Arduino UNO
× 1

Необходимые инструменты и машины

Лазерный резак (универсальный)
Не * требуется *, но очень полезно

Об этом проекте

Введение

Прежде всего, скажем очевидное:мы любим делать семейные костюмы.

В прошлом году мы сделали космических «инопланетян», которые действительно больше походили на людей, одетых в серебро с акцентами из светодиодных лент. Нам очень понравились светодиоды, потому что они уникальны и позволяют легко увидеть детей, когда они бегают по ночам. Мы решили сделать что-то, что снова загорится, но не знали, что именно. Это моя дочь предложила Pac-Man, так как она недавно играла в жемчужину Namco в боулинге за несколько недель до этого. Это предложение было всем, что нам нужно. Это была отличная идея, и мы должны были ее реализовать.

Планирование

Первым шагом всегда является планирование, но его стоит отметить, особенно если вы хотите создать другой 8-битный символ.

Мы выбрали персонажей Pac-Man для семьи. Пак-Ман, мисс Пак-Ман и призраки Блинки и Пинки. Я хотел, чтобы он был точным и аутентичным для оригинальных 8-битных персонажей, поэтому я начал с поиска исходных игровых спрайтов.

Это помогает гарантировать, что мы получаем правильный макет пикселей и показываем каждый кадр анимации. Например, на приведенных выше спрайтах вы можете увидеть разные кадры ног призрака и рта Пак-мэна.

Затем я выложил каждый кадр анимации в Excel, чтобы мы знали, где количество светодиодов и общий макет каждой платы. Индивидуальные номера светодиодов понадобятся позже для программирования платы Arduino.

По макету видно, что Призраки имеют высоту 14 пикселей и ширину 14 пикселей. Размер Пакмана - 13x13, а у г-жи Пакман - 14x14 пикселей.

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

Это установило наш масштаб 22 "/ 14 пикселей =1,57" / пиксель.

Материалы

Мы хотели, чтобы костюмы можно было легко носить с собой, поэтому выбрали легкие материалы, а не прочные.

  • База: Картон 1/8 ", вырезанный лазером и горячее склеивание.
  • Полупрозрачная крышка: Чертежная бумага (веллум или майлар)
  • Светодиоды: 12-миллиметровые светодиоды DC5V WS2811 с ​​индивидуальной адресацией (цепочки по 50 штук)
  • Доска: Ардунио Уно R3
  • Мощность: Портативный блок питания 5 В постоянного тока (например, зарядное устройство для портативного телефона) + адаптер USB-DC
  • Разное: Адаптеры для разъемов питания постоянного тока Перемычки на макетной плате Источник питания постоянного тока 5 В, для тестирования канальной ленты на липучке

База

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

Основа сделана из картонных листов толщиной 1/8 дюйма, приобретенных в местном магазине художественных товаров и товаров для хобби. У нашего лазерного резака есть кровать размером 32 x 18 дюймов, поэтому я попросил их обрезать листы до этого размера.

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

Моделирование

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

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

Лазерная резка

Как упоминалось ранее, размер нашего лазерного резака составляет 32 x 18 дюймов, поэтому файлы САПР, которые я сделал для лазерной резки, настроены на этот размер. Я добавил файл .dwg для костюма Призрака. Вы можете использовать его для лазерной резки или распечатать его и использовать в качестве шаблона для ручного вырезания картона.

Если вы собираетесь делать это вручную, то можете легко разложить его и нарезать картонными полосками. Вы можете измерить это самостоятельно, пиксели имеют квадратную форму 1,5 дюйма и глубину 2 дюйма с 12-миллиметровым отверстием посередине для светодиодов. Вы также можете использовать предоставленный PDF-файл в качестве шаблона для вырезания.

Сборка

Основание пришлось разрезать на две части, так как небольшой размер нашей станины для лазерной резки составляет 18 дюймов, что меньше, чем размер основания 22 x 22 дюйма. Я использовал хороший клейкий скотч на стыке, чтобы сначала скрепить его. Это действительно сделано для того, чтобы он оставался на месте при добавлении светодиодов и планок. После того, как планки были добавлены к основанию, они обеспечили реальную поддержку и стабильность.

Каждая планка маркируется оценкой «H #» или «V #» для горизонтального (H) и вертикального (V) и того числа (#) по порядку. Планки хорошо скользят вместе, так как мы добавили дополнительный зазор 1/32 дюйма. Мои первые тесты оставили намного меньше места, где они соскользнули, и сделали невозможным их собрать вместе. Как только все были сдвинуты вместе, мы поместили планки на основание. . Они сделали выемку там, где расположены отверстия в форме знака «плюс» в основании. Как только он оказался на основании, я приклеил планки к основанию на концах воздуховодом. Затем я добавил небольшую полоску горячего клея в верхний левый угол, где планки встречаются. чтобы они оставались на месте и не соскользнули.

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

Подумав

Как видно на схеме 3д модели, я не планировал устанавливать корпус на тыльной стороне панели. Это была ошибка! Я заметил это за пару часов до лечения клеща и поспешно отрезал 2,5-дюймовые картонные полосы и добавил их к задней части панели, чтобы дать чему-то другому, кроме светодиодных проводов, прилегать к корпусу.

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

Схема расположения светодиодов

Планирование цепочек светодиодов было выполнено в Excel, где я расположил 170 отдельных светодиодов в порядке от 0 до 169 для призраков.

Макет Excel

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

Если вы не хотите разрезать и перемонтировать предварительно натянутые огни, вам нужно убедиться, что вы можете дотянуться от одного отверстия до другого в вашей последовательности. В моем случае расстояние между отдельными светодиодами на предварительно натянутом пучке составляет около 3 дюймов (75 мм). Это означало, что пиксели должны были примыкать друг к другу при их размещении.

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

Размещение светодиодов

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

У светодиодов есть небольшой фланец, который удерживает их на месте. Я обнаружил, что картон немного хлипкий, поэтому светодиоды немного двигались при ходьбе. Если вы хотите, чтобы они оставались на месте более надежно, вы можете нанести на них немного горячего клея.

Электропроводка

Источник питания

Лучше всего использовать аккумуляторную батарею 5 В постоянного тока (также известную как портативное зарядное устройство для телефона). Затем используйте адаптер USB-DC для подключения к вашим лампам, которые теперь должны быть подключены к адаптеру постоянного тока с гнездом.

Я совершил ошибку и использовал аккумуляторную батарею 8xAA с переключателем включения / выключения, который у меня был от костюмов прошлого года. Только когда я писал это, я понял, что у него выход на 12 В, а я использовал светодиоды на 5 В. (Я не ракетный хирург, но считаю, что это плохо). Поскольку у меня был аккумулятор, я просто взял его и подключил, и все заработало, и я не догадывался, что это ¯ \ _ (ツ) _ / ¯

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

Я протестировал портативное зарядное устройство на 2200 мАч и 7800 мАч, и панели проработали 3 часа 40 минут и 12 часов 43 минуты соответственно. Это означает, что с дешевым «зарядным устройством для губной помады» вы сможете вовремя проработать почти 4 часа.

Светодиоды

Я использовал гирлянды из 12-миллиметровых светодиодов WS2811 с ​​индивидуальной адресацией для наружных вывесок. Я купил их на Amazon, и они вышли партиями по 50 штук.

Электропроводка

Подключение питания к источникам света, а затем к плате выполняется, как показано на схеме и фотографии.

Светодиод на первой цепочке имеет соединение с питанием, есть два провода (горячий / красный и заземляющий / белый). Они подключены к адаптеру гнездового разъема питания. Блок питания подключен к этому адаптеру. Затем мы подключаем питание, землю и данные от первых светодиодов к клеммам 5V и GND на Arduino, а провод DATA (средний) подключается к 3-м контактам на плате.

Убедитесь, что вы проверили свою цепочку светодиодов, прежде чем подключать ее. Мои светодиодные провода были красным (5 В), зеленым (DATA), белым (GND), но ваш может быть другим.

Код

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

Я не рассказываю, как программировать плату Arduino. Если вы не знаете, как это сделать, есть отличная статья на веб-сайте Arduino:Начало работы с Arduino

FastLED

Для этого я использовал библиотеку FastLED. Его легко использовать и легко найти примеры, которые помогут во всем разобраться. Было полезно, что они используют веб-цвета, так что вы можете установить любой светодиод на любой цвет, используя имя.

Мой код

Ниже приведен код для Ghost, я также загрузил файл кода Arduino.

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

Добавить обложку

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

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

Чтобы бумага оставалась на месте, я нанесла полоску обычного старого клея Elmers вдоль верхнего края вертикальных ребер. Я не делал горизонтальные, потому что все, что вам действительно нужно, это чтобы бумага оставалась в основном на месте. Если бумага будет приклеена, сетка будет читаться насквозь, а панель будет выглядеть как отдельные пиксели.

После того, как вы нанесете клей, положите сверху бумагу и положите сверху книги или что-нибудь тяжелое, чтобы клей оставался на месте.

Как только клей схватится, можно отрезать лишнюю бумагу. Оставьте немного лишней бумаги по краям, чтобы ее сложить и закрепить скотчем, чтобы края не отслаивались и не отслаивались.

Готово к дороге

На завершающих этапах мы готовим его к работе.

  • Закрепите Arduino и блок питания на задней панели с помощью липучки.
  • Скрепите соединения вместе, чтобы они не расшатывались.
  • Добавьте ремень, чтобы носить его с собой. Для этого я использовал плетеный ремешок из воздуховода (как и в чертежной бумаге, которая у меня была).
  • Загрузите музыку и звуковые эффекты Pac-Man на свой телефон и возьмите с собой динамик Bluetooth.

Прибыль

Как только вы закончите, вы можете отправить свою 8-битную семью по соседству, чтобы произвести впечатление на соседей и получить прибыль от сладких сладких конфет.

Спасибо за чтение! Если у вас есть вопросы, не стесняйтесь их задавать!

Код

  • Код анимации призрачных светодиодов
  • MsPacman
  • Пакман
Код светодиодной анимации призраков Arduino
Этот код запускает анимацию для Ghosts
 // ANIMATED PACMAN GHOST LED # include "FastLED.h" #define NUM_LEDS 170 # define DATA_PIN 3CRGB leds [NUM_LEDS]; void setup () {delay (2000); FastLED.addLeds  (светодиоды, NUM_LEDS); FastLED.setBrightness (40); // Число 0-255 FastLED.clear ();} // глядя влевоint eyes_pixels_l [] ={17, 20, 21, 24, 37, 38, 39, 40, 41, 47, 48, 49, 94, 102, 103, 106, 119, 120, 121, 122, 123, 129, 130, 131}; int pupils_pixels_l [] ={15, 16, 22, 23, 92, 93, 104, 105}; // смотрит вправоint eyes_pixels_r [ ] ={38, 39, 40, 46, 47, 48, 49, 50, 63, 66, 67, 75, 120, 121, 122, 128, 129, 130, 131, 132, 145, 148, 149, 152 }; int pupils_pixels_r [] ={64, 65, 76, 77, 146, 147, 153, 154}; // удалить пиксели вокруг футовint void_pixels_1 [] ={8, 29, 30, 31, 83, 84, 85, 86, 138, 139, 140, 161}; int void_pixels_2 [] ={7, 31, 55, 56, 57, 112, 113, 114, 138, 162}; int sad_ghost [] ={11, 26, 35, 48, 49, 53, 60, 64, 65, 80, 89, 104, 105, 109, 116, 120, 121, 134, 143, 158}; int eyes_seconds =2; int reg_ghost_seconds =10; int feet_delay =120; // задержка в мс ч / б футов v1 v2int eye_loop =(eyes_seconds * 1000) / feet_delay; // сколько раз смотреть налево и направо перед переключением int reg_ghost_loop =reg_ghost_seconds / eyes_seconds; int sad_ghost_loop =50; int sad_ghost_blink_loop =10; void loop () {for (int i =0; i  
MsPacman Arduino
 // ANIMATED MS PACMAN LED # include "FastLED.h" #define NUM_LEDS 151 # define DATA_PIN 3CRGB leds [NUM_LEDS]; void setup () {delay (2000); FastLED.addLeds  (светодиоды, NUM_LEDS); FastLED.setBrightness (40); // Число 0-255 FastLED.clear ();} int void_pixels_opened [] ={6,7,22,23,24,25,26,27,28,29,30,43,44,45,46,47 , 48,49,50, 51,52,53,54,55,56,57,58,68,69,70,71,72,73,74,75,76,77, 78,79,80,81 , 82,83,84,85,86,98,99,100,101,102,103,104, 105,106,107,108,109,127,128,129,130,131,132}; int void_pixels_mid [] ={5,150,45,46,47,48,49,50,51,52,53,54,55,56, 57,58,68,69,70,71,72, 73,74,75,76,77,78,79,80,81,82,83,84,85,100,101,102,103,104}; int void_pixels_closed [] ={5,150}; INT red_opened [] ={92,93,115,116,117,118,119,121,137,138,140,141,142,143,144,145,5,8,133,150}; INT red_mid [] ={92,93,115,116,117,118,119,121,137,138,140,141,142,143,144,145,27,26,105,106}; INT red_closed [] ={92,93,115,116,117,118,119,121,137,138,140,141,142,143,144,145,50,76,77,78}; INT blue_opened [] ={120,139,96}; int blue_mid [] ={120,139,97}; int blue_closed [] ={120,139}; int black_opened [] ={40,95,111,112,124}; int black_mid [] ={40,96,110,111 }; int black_closed [] ={40,95,96,97,98}; int frame_rate_ms =100; void loop () {// ---- ОТКРЫТЫЙ РТ - --- //// fill bodyfill_solid (светодиоды, NUM_LEDS, CRGB ::Yellow); // удалить ротfor (int i =0; я <64; i ++) {leds [void_pixels_opened [i]] =CRGB ::Black;} // установить redfor (int i =0; i <20; i ++) {leds [red_opened [i]] =CRGB ::Red;} // set bluefor (int i =0; i <3; i ++) {leds [blue_opened [i]] =CRGB ::Blue;} // установить черный for (int i =0; i <5; i ++) {leds [black_opened [ i]] =CRGB ::Purple;} FastLED.show (); delay (frame_rate_ms); // ---- MOUTH MID ---- //// fill bodyfill_solid (светодиоды, NUM_LEDS, CRGB ::Yellow); // удаляем ротfor (int i =0; i <39; i ++) {leds [void_pixels_mid [i]] =CRGB ::Black;} // устанавливаем красный цвет (int i =0; i <20; i ++) {leds [ red_mid [i]] =CRGB ::Red;} // устанавливаем bluefor (int i =0; i <3; i ++) {leds [blue_mid [i]] =CRGB ::Blue;} // устанавливаем blackfor (int i =0; i <4; i ++) {leds [black_mid [i]] =CRGB ::Purple;} FastLED.show (); delay (frame_rate_ms); // ---- РТ ЗАКРЫТ ---- /// / fill bodyfill_solid (светодиоды, NUM_LEDS, CRGB ::Yellow); // mouthfor (int i =0; i <2; i ++) {leds [void_pixels_closed [i]] =CRGB ::Black;} // устанавливаем redfor (int i =0; i <20; i ++) {leds [red_closed [i]] =CRGB ::Red;} // устанавливаем bluefor (int i =0; i <2; i ++) {leds [blue_closed [i]] =CRGB ::Blue;} // устанавливаем blackfor (int i =0; i <5; i ++) {leds [black_closed [i]] =CRGB ::Purple;} FastLED.show (); delay (frame_rate_ms); // ---- MOUTH MID ---- //// fill bodyfill_solid (leds, NUM_LEDS, CRGB ::Yellow); // удаляем ротfor (int i =0; i <39; i ++) {leds [void_pixels_mid [i]] =CRGB ::Black;} // устанавливаем redfor (int i =0; i <20; i ++) {leds [red_mid [i]] =CRGB ::Red;} // установить bluefor (int i =0; i <3; i ++) {leds [blue_mid [i]] =CRGB ::Blue;} // устанавливаем черный для (int i =0; i <4; i ++) {leds [black_mid [i]] =CRGB ::Purple;} FastLED.show (); delay (frame_rate_ms);} 
Pacman Arduino
 // ИНДИКАТОР АНИМАЦИОННОГО ПАКМЕНА # include "FastLED.h" #define NUM_LEDS 137 # define DATA_PIN 3CRGB leds [NUM_LEDS]; void setup () {delay (2000); FastLED.addLeds  (светодиоды, NUM_LEDS); FastLED.setBrightness (40); // Число 0-255 FastLED.clear ();} int void_pixels_opened [] ={19,20,21,22,23,24,25,26,27,28,29,42,43,44,45,46 , 47,48,49,50,51,52,53,54,55, 56,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80 , 81,82,94,95,96,97,98,99,100, 101,102,103,104,105,121,122,123,124,125,126}; int void_pixels_mid [] ={46,47,48,49,50,51,52,53,54,66,67,68, 69,70,71,72,73,74,75,76,77,78,79,80,98,99,100}; int frame_rate_ms =100; void loop () {// ---- ОТКРЫТЫЙ РТ --- - //// fill bodyfill_solid (leds, NUM_LEDS, CRGB ::Yellow); // удалить ротfor (int i =0; i <61; i ++) {leds [void_pixels_opened [i]] =CRGB ::Black;} FastLED .show (); delay (frame_rate_ms); // ---- MOUTH MID ---- //// fill bodyfill_solid (светодиоды, NUM_LEDS, CRGB ::Yellow); // удаляем ротfor (int i =0; i <27; i ++) {leds [void_pixels_mid [i]] =CRGB ::Black;} FastLED.show (); delay (frame_rate_ms); // ---- РОТ ЗАКРЫТ ---- //// заливка bodyfill_solid (светодиоды, NUM_LEDS, CRGB ::Yellow); FastLED.show (); delay (frame_rate_ms); // ---- MOUTH MID ---- //// fill bodyfill_solid (светодиоды, NUM_LEDS, CRGB ::Yellow); // удаляем ротfor (int i =0; i <27; i ++) {leds [void_pixels_mid [i]] =CRGB ::Black;} FastLED.show (); delay (frame_rate_ms);} 

Изготовленные на заказ детали и корпуса

Файлы для лазерного вырезания костюма призрака из картона 1/8 дюйма. Он рассчитан на размер станка для лазерной резки 32 x 18 дюймов. ghostlaser-1_8th_v5_feTmMAM4r0.dwg DWG-файл лазерного резака для мисс Пакман и Пакман pacman-mspacman-laser_KVFskMrPk4.dwg

Схема

Как подключить светодиоды, Ardunio и портативный источник питания

Производственный процесс

  1. Светоизлучающий диод (светодиод)
  2. ЖК-панель с Arduino для симулятора полета
  3. Переключатель / светодиодная панель с Arduino для FS2020
  4. Мелодия танца в гробу
  5. Костюм облака
  6. Светодиодный куб 5x5x5
  7. Arduino с Bluetooth для управления светодиодом!
  8. 8-кратное светодиодное освещение со звуком
  9. Четвероногий Arduino
  10. Игра Pixel Chaser