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

DIY-костюм Pac-Man на адресных светодиодах: светящийся пиксельный костюм на Halloween

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

Компонент Количество Примечание
Arduino Uno 1 Управление лентой
WS2811 12мм адресные светодиоды (DC 5V) ~170 на костюм Ленты по 50 шт, всего 4 костюма
Портативный Power Bank 5V (2200-7800 мАч) 1 на костюм Вместо 8xAA (12V — не подходит!)
USB → DC-jack переходник 1 на костюм Питание ленты от Power Bank
Картон 3 мм (1/8 дюйма) несколько листов Основа панели
Калька/велюм/майлар (прозрачная бумага) 1 рулон Диффузор для пикселей
Велкро, дюк-лента, канцелярский клей, клеевой пистолет 1 набор Сборка и крепление
Лазерный резак (или ножницы/нож для ручной резки) 1 Опционально, но очень удобно

О проекте

Семейные костюмы Pac-Man, Ms. Pac-Man и призраков Blinky/Pinky на адресных светодиодах WS2811. Каждый костюм — пиксельная панель 13x13 или 14x14, управляемая Arduino Uno и библиотекой FastLED. Анимации: открывание рта у Пакмена, движение ног и взгляд у призраков, «грустный» режим при съедении.

Планирование и спрайты

Использованы оригинальные 8-битные спрайты. Каждый кадр анимации разложен в Excel для определения номеров светодиодов. Призраки: 14x14 = 170 пикселей (LED 0-169). Pac-Man: 13x13 = 137. Ms. Pac-Man: 14x14 = 151 (с бантиком).

Масштабирование

Размер панели подобрали по младшему члену семьи: 22 дюйма (56 см) высота/ширина призрака. Масштаб: 22″ / 14 px = 1.57″/px (≈40 мм/пиксель). Все костюмы в одном масштабе.

Конструкция панели (картон + лазерная резка)

  1. Основа: Две половинки 32x18″, склеены дюк-лентой (лазер режет макс. 32x18″).
  2. Сетка (слайты): Вертикальные и горизонтальные ребра с пазами, собираются в клетки без клея. Надёжно фиксируются на основе. Каждый слайт помечен H#/V#.
  3. Отверстия под LED: 12 мм в центре каждой клетки.
  4. Задняя стенка: Важно! Автор забыл сделать её — светодиоды выпадали во время ходьбы. Обязательно сделайте заднюю стенку из картона (2.5″ полосы по периметру).

Раскладка и монтаж светодиодов

В Excel спланирован порядок LED (змейкой по соседним клеткам, шаг ленты ~75 мм). Начало ленты — рядом с местом монтажа Arduino/Power Bank. Светодиоды вставляются сзади, фланец держит их. Для надежности — капля термоклея.

Электрика и питание

Программирование (FastLED)

Логика анимации: заливаем все LED цветом тела, затем перекрашиваем/гасим конкретные индексы для каждого кадра. Кадры циклятся с задержкой.

Призрак (170 LED): красный корпус, белые глаза, синие зрачки (смотрят влево/вправо), черные «пустоты» у ног (альтернация для анимации ходьбы). Режим «грустный»: синий корпус, желтые глаза, мигание.

Pac-Man (137 LED): желтый корпус, черная пасть (3 фазы: открыта/полуоткрыта/закрыта), красные/синие/фиолетовые акценты.

Ms. Pac-Man (151 LED): аналогично + бантик.

Код для Призрака (фрагмент)


#include "FastLED.h"
#define NUM_LEDS 170
#define DATA_PIN 3
CRGB leds[NUM_LEDS];

// Индексы пикселей для анимаций (определены в Excel)
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 feet_delay = 120; // мс между кадрами ног
int eye_loop = (2*1000)/feet_delay; // 2 сек смотрит в сторону

void setup() {
  delay(2000);
  FastLED.addLeds(leds, NUM_LEDS);
  FastLED.setBrightness(40); // 0-255
  FastLED.clear();
}

void loop() {
  // Обычный призрак: смотрит влево/вправо, ноги двигаются
  for (int i = 0; i < 5; i++) { // 5 циклов по 2 сек = 10 сек
    // Смотрит влево
    for (int j = 0; j < eye_loop; j++) {
      fill_solid(leds, NUM_LEDS, CRGB::Red);
      set_pixels(eyes_pixels_l, 24, CRGB::White);
      set_pixels(pupils_pixels_l, 8, CRGB::DarkBlue);
      set_pixels(void_pixels_1, 12, CRGB::Black);
      FastLED.show(); delay(feet_delay);
      fill_solid(leds, NUM_LEDS, CRGB::Red);
      set_pixels(eyes_pixels_l, 24, CRGB::White);
      set_pixels(pupils_pixels_l, 8, CRGB::DarkBlue);
      set_pixels(void_pixels_2, 10, CRGB::Black);
      FastLED.show(); delay(feet_delay);
    }
    // Смотрит вправо (аналогично с _r массивами)
    ...
  }
  // Грустный призрак (после "смерти")
  for (int i = 0; i < 50; i++) {
    fill_solid(leds, NUM_LEDS, CRGB::Blue);
    set_pixels(sad_ghost, 20, CRGB::Yellow);
    set_pixels(void_pixels_1, 12, CRGB::Black);
    FastLED.show(); delay(feet_delay);
    fill_solid(leds, NUM_LEDS, CRGB::Blue);
    set_pixels(sad_ghost, 20, CRGB::Yellow);
    set_pixels(void_pixels_2, 10, CRGB::Black);
    FastLED.show(); delay(feet_delay);
  }
  // Мигание грустного
  for (int i = 0; i < 10; i++) {
    fill_solid(leds, NUM_LEDS, CRGB::Yellow);
    set_pixels(sad_ghost, 20, CRGB::Red);
    set_pixels(void_pixels_1, 12, CRGB::Black);
    FastLED.show(); delay(feet_delay);
    ...
  }
}

void set_pixels(int* indices, int count, CRGB color) {
  for (int i = 0; i < count; i++) leds[indices[i]] = color;
}

Файлы для лазерной резки

Можно распечатать PDF и резать вручную: пиксель ~40 мм, отверстие 12 мм, глубина ребра 50 мм.

Финальные штрихи

Результат

Семья в светящихся пиксельных костюмах собирает конфеты и восхищенные взгляды. Проект требует времени на резку/сборку картона, но результат того стоит. Файлы и код открыты — повторяйте и адаптируйте под любые 8-битные персонажи!

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

  1. Светодиоды (LED): от зарождения к 100-летнему ресурсу
  2. Панель управления полётным симулятором 2020 на Arduino Nano: LCD и CDI-дисплеи
  3. Панель переключателей и LED для Microsoft Flight Simulator 2020 на Arduino
  4. Проект Arduino: мелодия Coffin Dance — сборка и воспроизведение вирусного трека
  5. DIY-костюм «Облако»: LED-лента, Arduino Nano и детали SparkFun
  6. Сборка потрясающего 5x5x5 LED-куба на Arduino Mega
  7. Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
  8. Звукоактивируемый светодиодный дисплей 8 LED на Arduino
  9. Пошаговое руководство: сборка умного четырёхногого робота на Arduino
  10. Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano