Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Manufacturing Technology >> Processo de manufatura

Traje do painel de pixel LED do Pac-Man

Componentes e suprimentos

Arduino UNO
× 1

Ferramentas e máquinas necessárias

Cortador a laser (genérico)
Não * necessário *, mas muito útil

Sobre este projeto





Introdução


Em primeiro lugar, vamos dizer o óbvio:gostamos de fazer fantasias de família.

No ano passado, fizemos "alienígenas" espaciais que realmente se pareciam mais com pessoas vestidas de prata com detalhes em faixas de LED. Gostamos muito dos LEDs, pois eles são únicos e facilitam a visualização das crianças quando estão correndo à noite. Decidimos fazer algo que acenda novamente, mas não tínhamos certeza do quê. Foi minha filha que sugeriu Pac-Man, já que ela havia recentemente jogado a joia da Namco em uma pista de boliche algumas semanas antes. Essa sugestão era tudo de que precisaríamos. Foi uma ótima ideia e tínhamos que fazer acontecer.





Planejamento


O primeiro passo é sempre planejar, mas vale a pena observar, especialmente se você quiser fazer um personagem de 8 bits diferente.

Escolhemos personagens do Pac-Man para a família. Pac-Man, Sra. Pac-Man e os fantasmas Blinky e Pinky. Eu queria que fosse preciso e autêntico para os personagens de 8 bits originais, então comecei procurando os sprites originais do jogo.

Isso ajuda a garantir que estamos obtendo o layout de pixel de pixel correto e mostra cada quadro das animações. Por exemplo, você pode ver os diferentes quadros das pernas do fantasma e da boca do Pac-Man nos sprites acima.

Em seguida, coloquei cada quadro das animações no Excel para que saibamos onde está o número de LEDs e o layout geral de cada placa. Os números individuais dos LEDs são necessários posteriormente para a programação da placa Arduino.

Você pode ver pelo layout que os Ghosts têm 14 pixels de altura por 14 pixels de largura. Pac-Man tem 13x13 e Ms.Pac-Man tem 14x14.

Uma vez que conhecemos a largura e a altura por pixels, temos que decidir o quão grande queremos fazer os painéis. Queria que todos tivessem o mesmo tamanho em relação uns aos outros. O que significa que cada pixel teria o mesmo tamanho em cada roupa. Para dimensioná-los adequadamente, começamos nos certificando de que seria do tamanho certo para o menor membro da família, meu filho. Eu o medi e segurei alguns recortes de papelão para ver o tamanho que ele ainda poderia colocar os braços confortavelmente e ainda andar. Acabamos com 22 "do tamanho dos fantasmas em altura e largura.

Isso definiu nossa escala de 22 "/ 14 pixels =1,57" / pixel.





Materiais


Queríamos que os trajes fossem relativamente fáceis de usar, então optamos por materiais leves em vez de duráveis.
  • Base: Papelão 1/8 ", corte a laser e cola quente
  • Capa translúcida: Papel de rascunho (velino ou Mylar)
  • LEDs: 12 mm DC5V WS2811 LEDs endereçáveis ​​individualmente (cordas de 50)
  • Tabuleiro: Ardunio Uno R3
  • Potência: Fonte de alimentação portátil 5 V DC (como um carregador de telefone portátil) + Adaptador USB para DC
  • Diversos: Adaptadores de tomada de alimentação DC Jumper de fios de alimentação DC5V para teste de fita adesiva de fita adesiva tecida com velcro





A Base


Felizmente, tenho acesso a um cortador a laser, então sabia que o usaria para fazer isso. Você não precisará do seu próprio cortador a laser. Você pode enviá-lo para ser cortado por uma empresa que faz corte a laser ou pode usar a rota manual e imprimir o PDF e colocá-lo no papelão e cortá-lo à mão.

A base é feita de folhas de papelão de 1/8 "compradas na loja de arte / hobby local. Nosso cortador a laser tem uma base de 32" x 18 ", então pedi para cortar as folhas nesse tamanho.

Painel O painel é composto por algumas partes principais:a base, as ripas, a tampa e a alça. A base contém os LEDs, o slate fornece os pixels e a estabilidade geral do painel, a tampa difunde a luz e a alça o torna portátil.



Modelagem

Para fazer os arquivos para o cortador a laser, modelei a base usando Rhino. Modelei todas as partes do painel com muita precisão em um esforço para deixar o cortador a laser fazer o máximo possível.

Fiz cada painel de forma que cada aleta vertical e horizontal deslizasse uma na outra e elas se encaixassem também na base. Configurá-lo dessa forma permite que as partes do painel deslizem e encaixem sem a necessidade de muita cola, ao mesmo tempo que garante que obteremos quadrados perfeitos para os pixels.



Corte a laser

Como mencionado antes, nosso cortador a laser tem 32 "x 18", portanto, os arquivos CAD que fiz para fazer o corte a laser estão configurados nesse tamanho. Eu adicionei o arquivo .dwg para a fantasia de Ghost. Você pode usá-lo para cortar o seu a laser ou pode imprimi-lo e usá-lo como um modelo para cortar o papelão à mão.

Se for fazer à mão, você pode facilmente dispor e cortar tiras de papelão. Você pode medir você mesmo, os pixels têm cerca de 1,5 "quadrado e 2" de profundidade com um orifício de 12 mm no meio para os LEDs. Você também pode usar o PDF fornecido como modelo para corte.

Montagem

A base teve que ser cortada em duas partes, já que a pequena dimensão da nossa mesa de corte a laser é 18 ", que é menor do que a dimensão 22" x 22 "da base. Usei uma boa fita adesiva ole na junção para mantê-la unida inicialmente. Isso é realmente para mantê-lo no lugar ao adicionar os LEDs e as lâminas. Uma vez que as lâminas foram adicionadas à base, elas forneceram o suporte real e estabilidade.

Cada lâmina é identificada marcando "H #" ou "V #" para Horizontal (H) e Vertical (V) e qual número (#) em ordem. As ripas deslizam bem juntas, pois adicionamos 1/32 "de folga adicional. Meus primeiros testes deixaram muito menos espaço onde elas deslizaram juntas e tornou impossível juntá-las. Depois que todas deslizaram juntas, colocamos as ripas na base . Eles entalharam onde estão os orifícios em forma de sinal de mais na base. Uma vez na base, fixei as ripas com fita adesiva na base nas extremidades. Em seguida, adicionei um pequeno cordão de cola quente no canto superior esquerdo onde as ripas se encontram para mantê-los no lugar e garantir que não escorreguem.

Os entalhes para as venezianas estendem-se pela base para que haja uma pequena aba na parte de trás da base. Também adicionei uma gota de cola quente a essas abas para manter as ripas com segurança na base.

Depois de pensar

Como você pode ver no diagrama do modelo 3D, não planejei um gabinete na parte de trás do painel. Isso foi um erro! Percebi isso algumas horas antes do carrapato ou tratamento e rapidamente cortei tiras de papelão de 2,5 "e as adicionei à parte de trás do painel. Para dar algo diferente dos fios de LED para descansar contra o corpo.

Isso ajudou, mas realmente deveria ter sido totalmente fechado. Ao andar com os painéis com a parte traseira aberta, os LEDs tendem a ficar empurrados para dentro. Você pode ver em algumas das fotos onde os pixels não são mais pixels, mas luzes pontuais. É aqui que os LEDs foram pressionados ou caíram. Parei a família algumas vezes para consertá-los durante a noite ou carrapato ou tratamento.





Layout de LED


O planejamento das strings de LEDs ocorreu no Excel, onde coloquei os 170 LEDs individuais na ordem de 0-169 para os Ghosts.

Layout do Excel

As coisas importantes a serem observadas são as distâncias entre os pixels e o ponto inicial.

Se você não deseja cortar e religar as luzes pré-amarradas, você precisa ter certeza de que pode alcançar de um orifício a outro em sua sequência. No meu caso, a distância entre os LEDs individuais no pacote pré-estendido é de cerca de 75 mm (3 polegadas). Isso significava que os pixels deveriam estar adjacentes um ao outro ao serem dispostos.

Para o ponto de partida, certifique-se de que está perto de onde você pode montar o Arduino e a fonte de alimentação.

Colocando os LEDs

Seguindo o padrão estabelecido no Excel, empurramos os LEDs da parte traseira para o lugar no papelão.

Os LEDs possuem uma pequena flange que os mantém no lugar. Eu descobri que o papelão é um pouco frágil, então os LEDs se moviam um pouco ao andar. Se você quiser mantê-los no lugar com mais segurança, coloque um pouco de cola quente neles.





Fiação


Fonte de alimentação

A melhor maneira de alimentá-lo é com uma bateria recarregável de 5 Vcc (também conhecida como carregador de telefone portátil). Em seguida, use um adaptador USB para DC para conectar as luzes, que agora devem ser conectadas ao adaptador DC fêmea.

Cometi um erro e usei uma bateria 8xAA com um botão liga / desliga que usei nas fantasias do ano anterior. Só enquanto escrevia isso percebi que ele tinha uma saída de 12V e estava usando LEDs de 5V. (Não sou cirurgião de foguetes, mas acho que isso é ruim). Como eu estava com a bateria por perto, simplesmente peguei e conectei e tudo funcionou e não pensei duas vezes ¯ \ _ (ツ) _ / ¯

Curiosamente, as baterias que usei nos deram apenas cerca de 2 horas de funcionamento. Depois de descobrir que eles eram a fonte de alimentação incorreta para os painéis, testei os painéis com o carregador portátil de telefone 5 VCC correto e eles duraram muito mais tempo.

Testei um carregador portátil de 2200 mAh e um carregador portátil de 7800 mAh e os painéis funcionaram por 3h 40m e 12h 43m respectivamente. Isso significa que com um "carregador de batom" barato você pode obter quase 4 horas de tempo.

LEDs

Usei fios de LEDs WS2811 de 12 mm endereçáveis ​​individualmente para sinalização externa. Eu os comprei na Amazon e vieram em sequências de 50.

Fiação

A fiação de energia para as luzes e depois para a placa é feita conforme mostrado no diagrama e na foto.

O LED principal na primeira string tem uma conexão de energia, há dois fios (quente / vermelho e terra / branco). Eles são conectados a um adaptador de tomada de alimentação fêmea. A fonte de alimentação está conectada a este adaptador. Em seguida, conectamos a alimentação, o aterramento e os dados desse primeiro LED às conexões 5v e GND no Arduino e o fio DATA (do meio) se conecta ao 3 PIN na placa.

Certifique-se de verificar sua cadeia de LEDs antes de conectá-la. Meus fios de LED eram vermelho (5V), verde (DATA), branco (GND), mas o seu pode ser diferente.





Código


Uma vez que você está tudo conectado, as luzes não farão nada quando você conectá-las. Talvez elas pisquem brevemente. Eles precisam ser informados sobre o que fazer primeiro e foi assim que eu fiz.

Não estou abordando como programar uma placa Arduino. Se você não sabe como fazer isso, há um ótimo artigo no site do Arduino:Getting Started with Arduino

FastLED

Usei a biblioteca FastLED para isso. É fácil de usar e encontrar exemplos para ajudar a descobrir tudo. Foi útil que eles usassem Web Colors para que você pudesse definir qualquer LED para qualquer cor usando o nome.

Meu código

Abaixo está o código do Ghost, também carreguei o arquivo de código do Arduino.

O esquema básico da lógica é preencher todos os LEDs com a cor principal, alterar a cor e desligar os conjuntos individuais de LEDs para fazer cada "quadro". Uma vez que temos um conjunto para cada "quadro" da animação, fazemos um loop através deles na velocidade X X número de vezes para compor toda a animação. Pode haver uma maneira mais inteligente de fazer isso, mas foi assim que eu fiz e funcionou para mim.





Adicione a capa


Recomendo deixar a capa para o final, pois é de papel e pode rasgar. Também é útil ser capaz de alcançar os LEDs pela frente ao colocá-los no lugar ou fazer ajustes.

Usei um rolo de papel de desenho que tinha por aí. Tenho quase certeza de que é velino, mas pode ser mylar. De qualquer maneira, o que você quer é um papel translúcido que seja largo o suficiente para cobrir tudo, para que você não tenha que lidar com uma emenda. Você pode obter rolos de papel de desenho em uma loja de arte ou online.

Para manter o papel no lugar, coloquei uma linha de cola Elmers normal ao longo da borda superior das aletas verticais. Não fiz os horizontais, pois tudo o que você realmente precisa é que o papel fique quase todo no lugar. Manter o papel colado garante que a grade seja lida e faça o painel parecer pixels individuais.

Depois de colocar a cola, coloque o papel em cima e coloque livros ou algo pesado por cima para mantê-lo no lugar e deixe a cola endurecer.

Assim que a cola endurecer, você pode cortar o excesso de papel. Deixe um pouco mais de papel nas bordas para dobrar e prender com fita adesiva, o que ajuda a garantir que as bordas não descasquem ou se soltem.





Estrada pronta


Para as etapas de acabamento, nós o deixamos pronto para ir para a estrada.
  • Monte o Arduino e a fonte de alimentação na parte traseira com velcro
  • Prenda as conexões para que não se soltem
  • Adicione uma alça para carregá-lo. Usei uma tira de duto de tecido para isso (como o papel de desenho que eu tinha por perto).
  • Carregue músicas e efeitos sonoros do Pac-Man em seu telefone e traga um alto-falante bluetooth





Lucro


Quando terminar, você pode enviar sua família de 8 bits para a vizinhança para impressionar os vizinhos e receber seus lucros de doces doces.

Obrigado por ler! Se você tiver alguma dúvida não hesite em perguntar!

Código

  • Código de animação fantasma de LED
  • MsPacman
  • Pacman
Código de animação fantasma de LED Arduino
Este código executa a animação para os 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); // Número 0-255 FastLED.clear ();} // olhando para a esquerda nos olhos_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}; // olhando para a direita nos olhos_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}; // remover pixels em torno de footint 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_segundos =2; int reg_ghost_seconds =10; int feet_delay =120; // atraso em ms b / w pés v1 v2int eye_loop =(eyes_seconds * 1000) / feet_delay; // quantas vezes olhar para a esquerda e para a direita antes de alternar 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
 // LED ANIMADO MS PACMAN # 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); // Número 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,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; red_mid int [] ={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 () {// ---- BOCA ABERTA- --- //// preencher bodyfill_solid (leds, NUM_LEDS, CRGB ::Amarelo); // remover mouthfor (int i =0; i <64; i ++) {leds [void_pixels_opened [i]] =CRGB ::Preto;} // definir redfor (int i =0; i <20; i ++) {leds [red_opened [i]] =CRGB ::Vermelho;} // 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 ::Roxo;} FastLED.show (); delay (frame_rate_ms); // ---- MOUTH MID ---- //// preencher bodyfill_solid (leds, NUM_LEDS, CRGB ::Amarelo); // remover mouthfor (int i =0; i <39; i ++) {leds [void_pixels_mid [i]] =CRGB ::Black;} // definir redfor (int i =0; i <20; i ++) {leds [ red_mid [i]] =CRGB ::Red;} // definir bluefor (int i =0; i <3; i ++) {leds [blue_mid [i]] =CRGB ::Blue;} // definir blackfor (int i =0; i <4; i ++) {leds [black_mid [i]] =CRGB ::Roxo;} FastLED.show (); delay (frame_rate_ms); // ---- BOCA FECHADA ---- /// / preencher bodyfill_solid (leds, NUM_LEDS, CRGB ::Amarelo); // mouthfor (int i =0; i <2; i ++) {leds [void_pixels_closed [i]] =CRGB ::Black;} // definir redfor (int i =0; i <20; i ++) {leds [red_closed [i]] =CRGB ::Vermelho;} // definir bluefor (int i =0; i <2; i ++) {leds [blue_closed [i]] =CRGB ::Blue;} // definir blackfor (int i =0; i <5; i ++) {leds [black_closed [i]] =CRGB ::Roxo;} FastLED.show (); delay (frame_rate_ms); // ---- MOUTH MID ---- //// fill bodyfill_solid (leds, NUM_LEDS, CRGB ::Yellow); // remover mouthfor (int i =0; i <39; i ++) {leds [void_pixels_mid [i]] =CRGB ::Black;} // definir redfor (int i =0; i <20; i ++) {leds [meio_red [i]] =CRGB ::Vermelho;} // definir bluefor (int i =0; i <3; i ++) {leds [meio_ azul [i]] =CRGB ::Blue;} // definir blackfor (int i =0; i <4; i ++) {leds [black_mid [i]] =CRGB ::Roxo;} FastLED.show (); delay (frame_rate_ms);} 
Pacman Arduino
 // 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); // Número 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 () {// ---- BOCA ABERTA --- - //// preencher bodyfill_solid (leds, NUM_LEDS, CRGB ::Amarelo); // remover boca para (int i =0; i <61; i ++) {leds [void_pixels_opened [i]] =CRGB ::Preto;} FastLED .show (); delay (frame_rate_ms); // ---- MOUTH MID ---- //// preencher bodyfill_solid (leds, NUM_LEDS, CRGB ::Yellow); // remove mouthfor (int i =0; i <27; i ++) {leds [void_pixels_mid [i]] =CRGB ::Black;} FastLED.show (); delay (frame_rate_ms); // ---- BOCA FECHADA ---- //// preencher bodyfill_solid (leds, NUM_LEDS, CRGB ::Amarelo); FastLED.show (); delay (frame_rate_ms); // ---- MOUTH MID ---- //// preencher bodyfill_solid (leds, NUM_LEDS, CRGB ::Amarelo); // remove mouthfor (int i =0; i <27; i ++) {leds [void_pixels_mid [i]] =CRGB ::Black;} FastLED.show (); delay (frame_rate_ms);} 

Peças personalizadas e gabinetes

Arquivos para cortar a laser a fantasia de fantasma de papelão de 1/8 ". Ele é configurado para um cortador a laser de tamanho de 32" x 18 ". ghostlaser-1_8th_v5_feTmMAM4r0.dwgLaser Cutter arquivo DWG para a Sra. Pacman e Pacman pacman-mspacman-laser_KVFskMrPk4.dwg

Esquemas

Como conectar os LEDs, Ardunio e alimentação portátil

Processo de manufatura

  1. Diodo emissor de luz (LED)
  2. Painel LCD com Arduino para o simulador de vôo
  3. Switch / Painel de LED com Arduino para FS2020
  4. Melodia para dança do caixão
  5. Traje da nuvem
  6. Cubo LED 5x5x5
  7. Arduino com Bluetooth para controlar um LED!
  8. Iluminação LED 8x por som
  9. Arduino Quadruped
  10. Jogo Pixel Chaser