DIY Pac-Man LED-Pixel-Panel-Kostüm: Leuchtender Halloween-Klassiker selbst bauen
Komponenten & Materialien
| Komponente | Menge | Hinweis |
|---|---|---|
| Arduino UNO | 1 | |
| WS2811 individuell ansteuerbare 12mm LEDs (DC 5V, Stränge à 50 Stück) | 4 Stränge (ca. 170-200 LEDs gesamt) | Für Ghosts 170, Ms. Pac-Man 151, Pac-Man 137 LEDs |
| 5V DC Powerbank (Handy-Ladegerät) + USB-auf-DC-Adapter | 1 | Stromversorgung (keine 12V-Batteriepacks!) |
| 1,5 mm Pappe/Karton (lasergeschnitten) | ca. 4 Bögen 32x18" | Basis & Pixel-Gitter |
| Transluzentes Papier (Vellum/Mylar/Drafting Paper) | 1 Rolle | Lichtdiffusor |
| DC-Power-Jack-Adapter (Buchse & Stecker) | 2 | Für LED-Stränge & Powerbank |
| Breadboard-Jumper-Wires | 1 Set | |
| 5V Netzteil (zum Testen) | 1 | |
| Velcro-Klettband, Gewebeband, Duct Tape | nach Bedarf | Befestigung & Isolierung |
Benötigte Werkzeuge & Maschinen
- Lasercutter (32"x18" Bett) – nicht zwingend, aber extrem hilfreich. Alternative: Dateien zum Lasercutten senden oder PDF ausdrucken & manuell ausschneiden.
- Heißklebepistole
- Stichsäge (falls manuell geschnitten)
- Lötkolben (für Kabelverlängerungen an LED-Strängen)
Über dieses Projekt
Intro
Wir machen gerne Familienkostüme. Letztes Jahr „Aliens“ (Silber + LED-Strips) – die LEDs machten die Kids nachts gut sichtbar. Diesmal: Pac-Man! Meine Tochter schlug es vor, nachdem sie das Original im Bowlingcenter gespielt hatte. Perfekte Idee.
Planung
Ziel: Authentische 8-Bit-Sprites aus dem Originalspiel. Sprites für Pac-Man, Ms. Pac-Man, Geister (Blinky, Pinky) recherchiert – zeigen jeden Animationsframe (Mundöffnung, Geisterbeine).

Jeden Frame in Excel gelegt → exakte LED-Positionen & Gesamtlayout pro Kostüm. Geister: 14×14 Pixel, Pac-Man: 13×13, Ms. Pac-Man: 14×14.

Größe: Alle Panels gleich große Pixel. Skalierung am kleinsten Familienmitglied (Sohn) ausgerichtet: 22" (56 cm) Panel-Höhe/Breite → 22"/14 Pixel = 1,57"/Pixel (ca. 40 mm).
Materialwahl
Leichtgewicht für Tragekomfort: 1/8" (3 mm) Pappe, lasergeschnitten, heißgeklebt. Transluzentes Papier als Diffusor. WS2811 LEDs (einzeln ansteuerbar). Arduino Uno R3. Powerbank (5V) + USB-DC-Adapter.

Der Rahmen (Base)
Lasercutter (32"x18") → Pappe auf Maß zuschneiden. Panel besteht aus: Basis (hält LEDs), Stege (horizontal/vertikal = Pixelwände & Stabilität), Diffusor-Papier, Tragegurt.



Modellierung (Rhino)
Alle Teile präzise in Rhino modelliert: Stege schieben sich ineinander & rasten in Basis ein → perfekte Quadrate, wenig Kleber nötig.



Lasercutten
DWG-Dateien für Geister, Pac-Man, Ms. Pac-Man im Original (für 32"x18" Bett). Zum Lasercutten senden oder als Vorlage zum manuellen Schneiden nutzen (Pixel: ~40 mm quadratisch, 50 mm tief, 12 mm LED-Loch).
Montage
- Basis in zwei Teilen (Bettbreite 18" < 22") → Duct Tape zusammenkleben (vorläufig).
- Stege beschriftet (H1, H2… V1, V2…), ineinander schieben (1/32" Spiel), in Basis einrasten (Kreuzförmige Löcher).
- Stege an Basisenden mit Duct Tape fixieren, oben links Heißkleber für zusätzlichen Halt.
- Stege haben Nasen durch Basis → Rückseitig Heißkleber auf Nasen für festen Sitz.
- Nachträgliche Erkenntnis: Rückwand fehlte! LEDs drückten beim Laufen nach innen → Pixel verschwammen. Notlösung: 2,5" Pappstreifen hinten anbringen. Besser: Vollständige Rückwand einplanen!
LED-Layout & Bestückung
In Excel 170 LEDs (Geister) nummeriert (0-169). Wichtig: Abstand zwischen LEDs auf Strang (~75 mm) → benachbarte Pixel im Layout. Startpunkt nah an Arduino/Powerbank-Position.


LEDs von hinten in Löcher drücken (Flansch hält). Pappe etwas labberig → Heißkleber-Tupfer auf LED-Rückseite sichert Position.
Verkabelung


Stromversorgung
Richtig: 5V Powerbank (Powerbank) + USB-DC-Adapter → LED-Strang (weibliche DC-Buchse).
Mein Fehler: 8×AA-Batteriepack (12V) aus Vorjahr genutzt – LEDs sind 5V! Funktionierte zwar, aber nur 2h Laufzeit. Mit 5V Powerbank: 2200 mAh → 3h 40min, 7800 mAh → 12h 43min. Günstige „Lipstick“-Powerbank reicht für ~4h.
LED-Datenleitung
Erster LED-Strang: Power-In (Rot=5V, Weiß=GND) an DC-Buchse. Powerbank dort anschließen. Dann 5V, GND, Data (Grün bei mir – Farben prüfen!) von erster LED an Arduino: 5V, GND, Pin 3 (DATA).
Code (FastLED Library)
Programmierung: FastLED Library nutzen (einfach, Web-Farbnamen). Logik: Alle LEDs mit Hauptfarbe füllen, dann einzelne Pixel für jeden Animationsframe umfärben/ausschalten. Frames in Arrays, durchlaufen mit Timing.

Geister-Animation (Blinky/Pinky)
// ANIMATED PACMAN GHOST LED
#include "FastLED.h"
#define NUM_LEDS 170
#define DATA_PIN 3
CRGB leds[NUM_LEDS];
void setup() {
delay(2000);
FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
FastLED.setBrightness(40); // 0-255
FastLED.clear();
}
// Pixel-Indizes für Augen, Pupillen, Füße, trauriger Geist etc.
// (Arrays aus Originalcode: eyes_pixels_l, pupils_pixels_l, eyes_pixels_r, pupils_pixels_r,
// void_pixels_1, void_pixels_2, sad_ghost)
int eyes_seconds = 2;
int reg_ghost_seconds = 10;
int feet_delay = 120; // ms zwischen Fuß-Phasen
int 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() {
// Normaler Geist: Augen schauen links/rechts, Füße wippen
for (int i = 0; i < reg_ghost_loop; i++) {
for (int i = 0; i < eye_loop; i++) {
// Links schauen + Füße Phase 1
fill_solid(leds, NUM_LEDS, CRGB::Red);
setPixels(eyes_pixels_l, 24, CRGB::White);
setPixels(pupils_pixels_l, 8, CRGB::DarkBlue);
setPixels(void_pixels_1, 12, CRGB::Black);
FastLED.show(); delay(feet_delay);
// Links schauen + Füße Phase 2
fill_solid(leds, NUM_LEDS, CRGB::Red);
setPixels(eyes_pixels_l, 24, CRGB::White);
setPixels(pupils_pixels_l, 8, CRGB::DarkBlue);
setPixels(void_pixels_2, 10, CRGB::Black);
FastLED.show(); delay(feet_delay);
}
for (int i = 0; i < eye_loop; i++) {
// Rechts schauen + Füße Phase 1 & 2 (analog)
// ...
}
}
// Trauriger Geist (blau, gelbe Augen)
for (int i = 0; i < sad_ghost_loop; i++) { /* ... */ }
// Trauriger Geist blinkend
for (int i = 0; i < sad_ghost_blink_loop; i++) { /* ... */ }
}
// Hilfsfunktion: Array von Pixeln auf Farbe setzen
void setPixels(int* pixels, int count, CRGB color) {
for (int i = 0; i < count; i++) leds[pixels[i]] = color;
}
Ms. Pac-Man Animation
// ANIMATED MS PACMAN LED
#include "FastLED.h"
#define NUM_LEDS 151
#define DATA_PIN 3
CRGB leds[NUM_LEDS];
void setup() {
delay(2000);
FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
FastLED.setBrightness(40);
FastLED.clear();
}
// Pixel-Arrays für Mund offen/halb/zu, rote Schleife, blaue Augen, schwarze Details
// (void_pixels_opened/mid/closed, red_opened/mid/closed, blue_opened/mid/closed, black_opened/mid/closed)
int frame_rate_ms = 100;
void loop() {
// Mund OFFEN
fill_solid(leds, NUM_LEDS, CRGB::Yellow);
setPixels(void_pixels_opened, 64, CRGB::Black);
setPixels(red_opened, 20, CRGB::Red);
setPixels(blue_opened, 3, CRGB::Blue);
setPixels(black_opened, 5, CRGB::Purple);
FastLED.show(); delay(frame_rate_ms);
// Mund HALB
fill_solid(leds, NUM_LEDS, CRGB::Yellow);
setPixels(void_pixels_mid, 39, CRGB::Black);
setPixels(red_mid, 20, CRGB::Red);
setPixels(blue_mid, 3, CRGB::Blue);
setPixels(black_mid, 4, CRGB::Purple);
FastLED.show(); delay(frame_rate_ms);
// Mund ZU
fill_solid(leds, NUM_LEDS, CRGB::Yellow);
setPixels(void_pixels_closed, 2, CRGB::Black);
setPixels(red_closed, 20, CRGB::Red);
setPixels(blue_closed, 2, CRGB::Blue);
setPixels(black_closed, 5, CRGB::Purple);
FastLED.show(); delay(frame_rate_ms);
// Mund HALB (Rückwärts)
fill_solid(leds, NUM_LEDS, CRGB::Yellow);
setPixels(void_pixels_mid, 39, CRGB::Black);
setPixels(red_mid, 20, CRGB::Red);
setPixels(blue_mid, 3, CRGB::Blue);
setPixels(black_mid, 4, CRGB::Purple);
FastLED.show(); delay(frame_rate_ms);
}
Pac-Man Animation
// ANIMATED PACMAN LED
#include "FastLED.h"
#define NUM_LEDS 137
#define DATA_PIN 3
CRGB leds[NUM_LEDS];
void setup() {
delay(2000);
FastLED.addLeds<WS2811, DATA_PIN, RGB>(leds, NUM_LEDS);
FastLED.setBrightness(40);
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() {
// Mund OFFEN
fill_solid(leds, NUM_LEDS, CRGB::Yellow);
setPixels(void_pixels_opened, 61, CRGB::Black);
FastLED.show(); delay(frame_rate_ms);
// Mund HALB
fill_solid(leds, NUM_LEDS, CRGB::Yellow);
setPixels(void_pixels_mid, 27, CRGB::Black);
FastLED.show(); delay(frame_rate_ms);
// Mund ZU
fill_solid(leds, NUM_LEDS, CRGB::Yellow);
FastLED.show(); delay(frame_rate_ms);
// Mund HALB (Rückwärts)
fill_solid(leds, NUM_LEDS, CRGB::Yellow);
setPixels(void_pixels_mid, 27, CRGB::Black);
FastLED.show(); delay(frame_rate_ms);
}
Diffusor-Papier aufbringen
Am Ende (Papier reißt leicht). Rolle Drafting Paper (Vellum/Mylar) – breit genug für nahtlose Abdeckung. Elmers-Kleber (weißer Leim) auf Oberkante der vertikalen Stege streichen, Papier auflegen, mit Büchern beschweren bis trocken. Überstehenden Rand umfalten & festkleben.


Einsatzbereit machen
- Arduino & Powerbank mit Velcro auf Rückseite kleben
- Alle Steckverbindungen mit Tape sichern
- Tragegurt (Gewebeband) anbringen
- Pac-Man Musik/Sounds auf Handy + Bluetooth-Lautsprecher mitnehmen


Ergebnis & Spaß
Fertig! 8-Bit-Familie in die Nachbarschaft schicken – Nachbarn staunen, Süßigkeiten sammeln.


Fragen? Gerne stellen!
Custom Parts (Lasercutter-Dateien)
- ghostlaser-1_8th_v5_feTmMAM4r0.dwg – Geister-Kostüm (1/8" Pappe, 32"x18" Bett)
- pacman-mspacman-laser_KVFskMrPk4.dwg – Pac-Man & Ms. Pac-Man
Schaltplan

Herstellungsprozess
- Leuchtdioden (LED): Von der Entdeckung zur 100-Jahre-Lebensdauer
- Arduino Nano Flight Simulator 2020 Kontrollpanel – LCD & CDI Display
- Arduino-basiertes Schalter- & LED-Panel für Microsoft Flight Simulator 2020
- Arduino Coffin Dance Melodie-Projekt – Viralen Hit nachbauen & abspielen
- DIY Wolken-Kostüm: LED-Streifen, Arduino Nano & SparkFun Teile
- Einen beeindruckenden 5x5x5 LED-Würfel mit Arduino Mega bauen
- LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
- Soundgesteuerte 8-LED-Lichtanzeige mit Arduino
- Intelligenten Arduino-Vierbeiner-Roboter bauen: Schritt-für-Schritt-Anleitung
- Pixel Chaser: Interaktives One-Tap-LED-Spiel mit Arduino Nano