Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Manufacturing Technology >> Productieproces

Pac-Man LED Pixel Panel-kostuum

Componenten en benodigdheden

Arduino UNO
× 1

Benodigde gereedschappen en machines

Lasersnijder (algemeen)
Niet *nodig* maar super handig

Over dit project

Inleiding

Laten we om te beginnen het voor de hand liggende zeggen:we doen graag gezinskostuums.

Vorig jaar deden we space "aliens" die er echt meer uitzagen als mensen gekleed in zilver met LED-stripaccenten. We hielden echt van de LED's omdat ze uniek zijn en de kinderen gemakkelijk te zien maken wanneer ze 's nachts rondrennen. We besloten iets te doen dat weer oplicht, maar wisten niet precies wat. Het was mijn dochter die Pac-Man voorstelde, aangezien ze een paar weken eerder de Namco-edelsteen op een bowlingbaan had gespeeld. Die suggestie was alles wat we nodig hadden. Het was een geweldig idee en we moesten het waarmaken.

Plannen

De eerste stap is altijd plannen, maar het is het vermelden waard, vooral als je een ander 8-bits karakter wilt doen.

We kozen voor Pac-Man-personages voor het gezin. Pac-Man, mevrouw Pac-Man en de geesten Blinky en Pinky. Ik wilde dat het nauwkeurig en authentiek zou zijn voor de originele 8-bits karakters, dus begon ik met het opzoeken van de originele game-sprites.

Deze helpen ervoor te zorgen dat we de juiste pixel-pixellay-out krijgen en dat elk frame van de animaties wordt weergegeven. Je kunt bijvoorbeeld de verschillende frames van de spookbenen en Pac-Man's mond in de sprites hierboven zien.

Vervolgens heb ik elk frame van de animaties in Excel ingedeeld, zodat we weten waar het aantal LED's en de algehele lay-out van elk bord. De individuele nummers van de LED's zijn later nodig voor het programmeren van het Arduino-bord.

Je kunt aan de lay-out zien dat de Ghosts 14 pixels hoog en 14 pixels breed zijn. Pac-Man is 13x13 en mevrouw Pac-Man is 14x14.

Toen we eenmaal de breedte en hoogte per pixels wisten, moesten we beslissen hoe groot we de panelen wilden maken. Ik wilde dat ze allemaal even groot waren ten opzichte van elkaar. Dit betekent dat elke pixel dezelfde grootte zou hebben op elk kostuum. Om ze goed te schalen, begonnen we door ervoor te zorgen dat het de juiste maat zou zijn voor het kleinste gezinslid, mijn zoon. Ik meet hem op en hield een paar kartonnen uitsnijdingen omhoog om te zien in welke maat hij zijn armen nog comfortabel kon leggen en toch kon lopen. We eindigden op 22" als de grootte van de geesten in hoogte en breedte.

Dat zette onze schaal 22" / 14 pixels =1,57"/pixel.

Materialen

We wilden dat de kostuums relatief gemakkelijk gedragen konden worden, dus kozen we voor lichte materialen in plaats van duurzame.

  • Basis: 1/8" karton, laser gesneden en warm gelijmd
  • Doorschijnende omslag: Tekenpapier (Vellum of Mylar)
  • LED's : 12 mm DC5V WS2811 individueel adresseerbare LED's (strings van 50)
  • Bestuur: Ardunio Uno R3
  • Kracht: 5V DC draagbare voeding (zoals een oplader voor een draagbare telefoon) + USB naar DC-adapter
  • Diversen: DC Power Jack Adapters Breadboard jumperdraden DC5V Voeding, voor het testen van Velcro Geweven Duct Strap Duct Tape

De basis

Gelukkig heb ik toegang tot een lasersnijder, dus ik wist dat ik deze zou gebruiken om deze te maken. Je hebt geen eigen lasersnijder nodig. Je kunt het opsturen om te laten snijden door een bedrijf dat lasersnijden doet, of je kunt de handmatige route volgen en de PDF afdrukken en op het karton leggen en met de hand uitsnijden.

De basis is gemaakt van kartonnen vellen van 1/8 inch die zijn gekocht bij de plaatselijke kunst-/hobbywinkel. Onze lasersnijder heeft een bed van 32 x 18 inch, dus ik heb ze de vellen op dat formaat laten knippen.

Paneel Het paneel bestaat uit een paar hoofdonderdelen:de basis, de lamellen, de hoes en de riem. De basis houdt de LED's vast, de leisteen zorgt voor de pixels en de algehele stabiliteit van het paneel, de hoes verspreidt het licht en de riem maakt het draagbaar.

Modellen

Om de bestanden voor de lasercutter te maken, heb ik de basis gemodelleerd met Rhino. Ik heb alle onderdelen van het paneel zeer nauwkeurig gemodelleerd om de lasersnijder zoveel mogelijk werk te laten doen.

Ik heb elk paneel zo gemaakt dat elke verticale en horizontale vin in elkaar zou schuiven en ze zouden ook in de basis inkepen. Door het op deze manier te plaatsen, kunnen de delen van het paneel in elkaar schuiven en inkepen zonder dat er veel lijm nodig is, terwijl we er ook voor zorgen dat we perfecte vierkanten voor de pixels krijgen.

Lasersnijden

Zoals eerder vermeld, is onze lasersnijder 32 "x 18", dus de CAD-bestanden die ik heb gemaakt om het lasersnijden te doen, zijn op dat formaat ingesteld. Ik heb het .dwg-bestand voor het Ghost-kostuum toegevoegd. Je kunt het gebruiken om zelf te lasersnijden, of je kunt het uitprinten en als sjabloon gebruiken om het karton met de hand te snijden.

Als je het met de hand gaat doen kun je dit gemakkelijk neerleggen en stroken karton uitknippen. Je zou het zelf kunnen meten, de pixels zijn ongeveer 1,5 "vierkant en 2" diep met een gat van 12 mm in het midden voor de LED's. U kunt de meegeleverde PDF ook gebruiken als sjabloon om te knippen.

Assemblage

De basis moest in twee stukken worden gesneden, aangezien de kleine afmeting van ons lasersnijbed 18 "is, wat kleiner is dan de 22" x 22" afmeting van de basis. Ik gebruikte goede oude ducttape bij de verbinding om het aanvankelijk bij elkaar te houden. Dit is echt om het op zijn plaats te houden tijdens het toevoegen van de LED's en lamellen. Toen de lamellen eenmaal aan de basis waren toegevoegd, boden ze de echte ondersteuning en stabiliteit.

Elke lamel wordt gelabeld door ofwel "H#" of "V#" te scoren voor Horizontaal (H) en Verticaal (V) en welk nummer (#) in volgorde. De lamellen schuiven mooi in elkaar sinds we extra 1/32 "speling hebben toegevoegd. Mijn eerste tests lieten veel minder ruimte over waar ze in elkaar geschoven waren en maakten het onmogelijk om alles in elkaar te zetten. Toen ze allemaal in elkaar geschoven waren, plaatsten we de lamellen op de basis Ze kerven in waar de plustekenvormige gaten in de basis zijn. Toen het eenmaal op de basis was, heb ik de lamellen aan de uiteinden op de basis geplakt. Daarna voegde ik een kleine kraal hete lijm toe in de linkerbovenhoek waar de lamellen samenkomen om ze op hun plaats te houden en ervoor te zorgen dat ze niet wegglijden.

De inkepingen voor de latten lopen door de basis, dus er is een klein lipje aan de achterkant van de basis. Ik heb ook een kraal hete lijm aan deze lipjes toegevoegd om de lamellen stevig op de basis te houden.

Na nadenken

Zoals je kunt zien in het 3D-modeldiagram, had ik geen behuizing aan de achterkant van het paneel gepland. Dit was een vergissing! Ik merkte dit een paar uur voor het tick-or-treat op en ik sneed haastig 2,5" kartonnen strips af en voegde ze toe aan de achterkant van het paneel. om iets anders dan de LED-draden te geven om tegen het lichaam te rusten.

Dit hielp, maar eigenlijk had het volledig ingesloten moeten zijn. Als je rondloopt met de panelen met de achterkant open, worden de LED's vaak naar binnen geduwd. Je kunt op sommige foto's zien waar de pixels niet langer echt pixels zijn, maar puntlichten. Hier zijn de LED's geduwd of gevallen. Ik heb de familie een paar keer gestopt om deze 's nachts te repareren of te tikken of te behandelen.

LED-indeling

De planning voor de LED's-strings vond plaats in Excel, waar ik de 170 individuele LED's in volgorde van 0-169 voor de Ghosts legde.

Excel-indeling

De belangrijkste dingen om op te letten zijn de afstanden tussen pixels en het startpunt.

Als u de voorgespannen lampen niet wilt knippen en opnieuw wilt bedraden, moet u ervoor zorgen dat u in uw reeks van het ene gat naar het andere kunt reiken. In mijn geval is de afstand tussen de afzonderlijke LED's op de voorgespannen bundel ongeveer 3 inch (75 mm). Dit betekende dat de pixels naast elkaar moesten liggen bij het leggen.

Zorg er als startpunt voor dat het dicht bij de plaats is waar u de Arduino en de voeding kunt monteren.

De LED's plaatsen

Volgens het in Excel vastgelegde patroon duwen we de LED's van achteren op hun plaats in het karton.

De LED's hebben een kleine flens die ze op hun plaats houdt. Ik vond dat het karton een beetje dun is, dus de LED's bewogen een beetje tijdens het rondlopen. Als je ze beter op hun plaats wilt houden, kun je er een beetje hete lijm op doen.

Bedrading

Voeding

De beste manier om dit van stroom te voorzien is met een 5V DC oplaadbare batterij (ook bekend als:een draagbare telefoonoplader). Gebruik vervolgens een USB-naar-DC-adapter om uw lampen aan te sluiten, die nu moeten worden aangesloten op de vrouwelijke DC-adapter.

Ik maakte een fout en gebruikte een 8xAA-batterijpakket met een aan/uit-schakelaar die ik had van de kostuums van het voorgaande jaar. Pas tijdens het schrijven realiseerde ik me dat het een 12V-uitgang heeft en dat ik 5V-LED's gebruikte. (Ik ben geen raketchirurg maar ik vind dit slecht). Omdat ik de batterij in de buurt had, pakte ik hem gewoon op en stopte hem in en alles werkte en ik twijfelde er niet aan ¯\_(ツ)_/¯

Interessant genoeg gaven de batterijpakketten die ik gebruikte ons slechts ongeveer 2 uur op tijd. Nadat ik erachter was gekomen dat dit de verkeerde voeding voor de panelen was, heb ik de panelen getest met de juiste 5VDC draagbare telefoonoplader en ze gingen veel langer mee.

Ik heb een draagbare oplader van 2200 mAh en een draagbare oplader van 7800 mAh getest en de panelen gingen respectievelijk 3 uur 40 meter en 12 uur 43 meter mee. Dit betekent dat je met een goedkope "lippenstiftoplader" bijna 4 uur op tijd kunt zijn.

LED's

Ik gebruikte strings van 12 mm WS2811 individueel adresseerbare LED's voor buitensignalisatie. Ik kocht ze op Amazon en ze kwamen in reeksen van 50.

Bekabeling

De bedrading van de stroom naar de lichten en vervolgens naar het bord wordt gedaan zoals weergegeven in het diagram en de foto.

De lead-LED op de eerste string heeft een stroomaansluiting, er zijn twee draden (warm/rood en aarde/wit). Deze zijn aangesloten op een vrouwelijke power jack-adapter. De voeding is aangesloten op deze adapter. Vervolgens verbinden we de stroom, aarde en gegevens van die eerste LED's zijn verbonden met de 5v- en GND-aansluitingen op de Arduino en de DATA (middelste) draad wordt aangesloten op de 3-pins op het bord.

Zorg ervoor dat u uw reeks LED's controleert voordat u deze aansluit. Mijn LED-draden waren rood (5V), groen (DATA), wit (GND), maar de jouwe kan anders zijn.

Code

Als je alle kabels hebt aangesloten, doen de lampjes niets meer als je ze aansluit. Misschien knipperen ze even. Ze moeten eerst worden verteld wat ze moeten doen en dit is hoe ik het deed.

Ik ga niet in op het programmeren van een Arduino-bord. Als je niet weet hoe je dit moet doen, staat er een geweldig artikel op de Arduino-website:Aan de slag met Arduino

FastLED

Ik heb hiervoor de FastLED-bibliotheek gebruikt. Het is gemakkelijk te gebruiken en gemakkelijk om voorbeelden te vinden om alles uit te zoeken. Het was handig dat ze Web Colors gebruiken, zodat je elke LED op elke kleur kunt instellen door de naam te gebruiken.

Mijn code

Hieronder staat de code voor de Ghost, ik heb ook het Arduino-codebestand geüpload.

De basisstructuur voor de logica is om alle LED's met de hoofdkleur te vullen, vervolgens de kleur te veranderen en de individuele sets LED's uit te schakelen om elk "frame" te maken. Zodra we een set hebben voor elk "frame" van de animatie, doorlopen we ze een aantal keer met X snelheid X om de hele animatie te maken. Er is misschien een slimmere manier om dit te doen, maar dit is hoe ik het deed en het werkte voor mij.

Voeg de omslag toe

Ik raad aan om de omslag tot het einde te laten, omdat deze van papier is en kan scheuren. Het is ook handig om de LED's vanaf de voorkant te kunnen bereiken wanneer u ze plaatst of afstelt.

Ik gebruikte een rol tekenpapier die ik had liggen. Ik ben er vrij zeker van dat het perkament is, maar het kan mylar zijn. Wat je ook wilt, een doorschijnend papier dat breed genoeg is om het geheel te bedekken, zodat je geen last hebt van een naad. Je kunt rollen tekenpapier kopen in een kunstwinkel of online.

Om het papier op zijn plaats te houden heb ik een lijn van gewone oude Elmers lijm langs de bovenrand van de verticale vinnen. Ik heb de horizontale niet gedaan, want het enige dat je echt nodig hebt, is dat het papier grotendeels op zijn plaats blijft. Door het papier vastgelijmd te houden, wordt het raster doorgelezen en ziet het paneel eruit als afzonderlijke pixels.

Nadat je de lijm hebt aangebracht, leg je het papier erop en leg je boeken of iets zwaars erop om het op zijn plaats te houden en de lijm te laten uitharden.

Zodra de lijm is uitgehard, kunt u het overtollige papier afsnijden. Laat een beetje extra papier rond de randen om om te vouwen en vast te plakken, dit zorgt ervoor dat de randen niet loslaten of loskomen.

Klaar voor de weg

Voor de afwerkingsstappen maken we hem klaar om op pad te gaan.

  • Bevestig de Arduino en voeding aan de achterkant met klittenband
  • Tap de verbindingen aan elkaar zodat ze niet losraken
  • Voeg een riem toe om hem rond te dragen. Ik heb hiervoor geweven ductband gebruikt (zoals het tekenpapier dat ik bij me had).
  • Laad wat Pac-Man-muziek en geluidseffecten op je telefoon en neem een ​​bluetooth-luidspreker mee

Winst

Als je klaar bent, kun je je 8-bit-familie de buurt in sturen om indruk te maken op de buren en je zoete zoete snoepwinsten te innen.

Bedankt voor het lezen! Als je vragen hebt, stel ze gerust!

Code

  • LED Ghost-animatiecode
  • MsPacman
  • Pacman
LED Ghost-animatiecodeArduino
Deze code voert de animatie uit voor de 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(leds, NUM_LEDS); FastLED.setBrightness(40); //Nummer 0-255 FastLED.clear();}//op zoek naar leftint 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 pupillen_pixels_l[] ={15, 16, 22, 23, 92, 93, 104, 105};//naar rechts kijkend 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 pupillen_pixels_r[] ={64, 65, 76, 77, 146, 147, 153, 154};//verwijder pixels rond feetint 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; //vertraging in ms b/w feet v1 v2int eye_loop =(eyes_seconds*1000)/feet_delay; // hoe vaak moet je naar links en rechts kijken voordat je schakelt 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  
MsPacmanArduino
//ANIMATE MS PACMAN LED#include "FastLED.h"#define NUM_LEDS 151#define DATA_PIN 3CRGB leds [NUM_LEDS];void setup() { delay(2000); FastLED.addLeds(leds, NUM_LEDS); FastLED.setBrightness(40); // Nummer 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() {//----MOND GEOPEND- ---////fill bodyfill_solid(leds, NUM_LEDS, CRGB::Yellow);//verwijder mouthfor (int i =0; ik <64; i++){ leds[void_pixels_opened[i]] =CRGB::Black;}//set 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;}//set blackfor (int i =0; i <5; i++){ leds[black_opened[ i]] =CRGB::Purple;}FastLED.show();delay(frame_rate_ms);//----MOUTH MID----////fill bodyfill_solid(leds, NUM_LEDS, CRGB::Yellow); // verwijder mouthfor (int i =0; i <39; i++) { leds [void_pixels_mid [i]] =CRGB::Black;} // set redfor (int i =0; i <20; i++) { leds [ red_mid[i]] =CRGB::Red;}//set bluefor (int i =0; i <3; i++){ leds[blue_mid[i]] =CRGB::Blue;}//set blackfor (int i =0; i <4; i++){ leds[black_mid[i]] =CRGB::Purple;}FastLED.show();delay(frame_rate_ms);//----MOND GESLOTEN----/// /fill bodyfill_solid(leds, NUM_LEDS, CRGB::Geel); //mouthfor (int i =0; i <2; i++) {leds[void_pixels_closed[i]] =CRGB::Black;}//set redfor (int i =0; i <20; i++){ leds[red_closed [i]] =CRGB::Rood;}//set bluefor (int i =0; i <2; i++){ leds[blue_closed[i]] =CRGB::Blue;}//set 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);//remove mouthfor (int i =0; i <39; i++){ leds[void_pixels_mid[i]] =CRGB::Black;}//set redfor (int i =0; i <20; i++){ leds[red_mid[i]] =CRGB::Red;}//set bluefor (int i =0; i <3; i++){ leds[blue_mid[i]] =CRGB::Blauw;}//set blackfor (int i =0; i <4; i++){ leds[black_mid[i]] =CRGB::Purple;}FastLED.show();delay(frame_rate_ms);}
PacmanArduino
//ANIMATED PACMAN LED#include "FastLED.h"#define NUM_LEDS 137#define DATA_PIN 3CRGB leds [NUM_LEDS];void setup() { delay(2000); FastLED.addLeds(leds, NUM_LEDS); FastLED.setBrightness(40); // Nummer 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() {//---- MOND GEOPEND--- -////fill bodyfill_solid(leds, NUM_LEDS, CRGB::Yellow);//remove mouthfor (int i =0; i <61; i++){ leds[void_pixels_opened[i]] =CRGB::Black;}FastLED .show();delay(frame_rate_ms);//----MOUTH MIDDEN----////fill bodyfill_solid(leds, NUM_LEDS, CRGB::Geel); // verwijder mouthfor (int i =0; i <27; i++) {leds[void_pixels_mid[i]] =CRGB::Black;}FastLED.show();delay(frame_rate_ms);//---- MOND GESLOTEN ----////fill bodyfill_solid (leds, NUM_LEDS, CRGB::Geel); FastLED.show();delay(frame_rate_ms);//----MOUTH MIDDEN----////fill bodyfill_solid(leds, NUM_LEDS, CRGB::Geel); // verwijder mouthfor (int i =0; i <27; i++) {leds[void_pixels_mid[i]] =CRGB::Black;}FastLED.show();delay(frame_rate_ms);}

Aangepaste onderdelen en behuizingen

Bestanden om het spookkostuum te lasersnijden van 1/8" karton. Het is ingesteld voor een 32" x 18" lasersnijderbedformaat. ghostlaser-1_8th_v5_feTmMAM4r0.dwgLaser cutter DWG-bestand voor mevrouw Pacman en Pacman pacman-mspacman-laser_KVFskMrPk4.dwg

Schema's

Hoe de LED's, Ardunio en draagbare voeding in te pluggen

Productieproces

  1. Light Emitting Diode (LED)
  2. LCD-paneel met Arduino voor Flight Simulator
  3. Schakel/LED-paneel met Arduino voor FS2020
  4. Coffin Dance Melody
  5. Cloud-kostuum
  6. 5x5x5 LED-kubus
  7. Arduino met Bluetooth om een ​​LED te bedienen!
  8. 8x LED-verlichting door geluid
  9. Arduino Quadruped
  10. Pixel Chaser-game
  11. Arduino RGB-kleurenmixer