Construa um Cubo de LED 5x5x5 Impressionante com Arduino Mega
Componentes e Materiais
| Componente | Quantidade | Observações |
|---|---|---|
| Arduino Mega 2560 | 1 | |
| LED Azul | 125 | |
| Transistor NPN NTE85 | 5 | |
| Fio de cobre estanhado 22 AWG | 1 | Usado para conectar as camadas e levar os cátodos à placa principal |
| Resistor 180 Ω, 1/4 W | 25 | |
| Placa de prototipagem 9 cm x 15 cm | 1 | |
| Resistor 330 Ω, 1/4 W | 5 | |
| Fonte de alimentação 9V para o Mega (opcional) | 1 | O cabo USB alimenta o cubo adequadamente, mas se quiser ligar na tomada, use esta fonte |
Ferramentas e Máquinas Necessárias
- Ferro de solda (genérico)
- Pistola de cola quente (genérica)
- Blue Tack (massa adesiva reutilizável) - Usado para fixar os LEDs durante a soldagem
Aplicativos e Serviços Online
- Arduino IDE
Sobre o Projeto
Introdução
A maioria das pessoas adora cubos de LED, mas os grandes, como 8x8x8, dão muito trabalho tanto para construir quanto para programar. Os pequenos (3x3x3 ou 4x4x4) são fáceis de montar, pois não exigem grande quantidade de LEDs nem hardware externo como registradores de deslocamento e drivers de alto lado para gerenciar o cubo. Porém, eles não proporcionam a mesma experiência de um cubo grande.
Meu objetivo desde o início era criar um cubo fácil de construir e desenvolver software suficiente para aproveitar a sensação de um cubo grande sem toda a dificuldade de construir um. Este é um cubo 5x5x5 que pode ser alimentado diretamente por um Arduino Mega, sem registradores de deslocamento nem hardware auxiliar, exceto 5 transistores (usados para puxar os cátodos de uma camada inteira — 25 LEDs — para o terra). Por que evitar registradores de deslocamento? Porque eles são terríveis para soldar manualmente (já tentei). Você realmente precisa projetar e fabricar uma placa de circuito impresso se quiser usá-los.
Já escrevi muito código para cubos grandes no passado, então adaptei várias animações existentes para rodar neste cubo 5x5x5.
Este é o primeiro de três projetos semelhantes. O segundo é um cubo 5x5x5 RGB, muito parecido no design, mas mais difícil de construir. O terceiro é um cubo 8x8x8 de cor única, também com hardware externo mínimo.
NOTA: Não sou o primeiro a sugerir um cubo 5x5x5 alimentado por um Mega. O MEGA DAS publicou um projeto similar em 2017. O hardware de ambos é quase idêntico. Não tinha visto o projeto anterior até começar esta documentação, então meus pinouts são diferentes e os valores dos resistores também, mas o hardware é praticamente o mesmo. Estou publicando isto principalmente porque tenho muita experiência escrevendo software para cubos. Espero que meu software convença algumas pessoas a construir um cubo que talvez não o fariam!
O vídeo acima mostra uma função de onda senoidal onde a amplitude está no eixo Z e o tempo é representado pela distância horizontal a partir do centro do cubo. É um clássico incrível em cubos grandes, mas fica bem legal neste 5x5x5 também!
Incluo outros dois vídeos. Ambos mostram as 14 animações para o cubo 5x5x5. Não sei qual é melhor, então incluí os dois. E, caso não seja óbvio, cubos ficam muito mais legais pessoalmente do que em vídeo!
Hardware
O Mega tem muitos pinos de I/O digital. Usamos 5 para puxar os cátodos de cada camada para nível baixo, e mais 25 para acionar os ânodos em nível alto para cada um dos 25 LEDs dentro de uma camada. Com esta abordagem, o Mega tem pinos suficientes para construir um cubo 6x6x6. Mas a outra consideração, se quisermos manter a simplicidade, é a potência. Os limites de corrente do Mega são 40 mA por pino e 200 mA no total de todos os pinos. LEDs azuis têm queda direta de cerca de 3 volts, e nossos transistores de cátodo comum adicionam mais 0,7 volts. Com uma alimentação de 5 volts e resistor de 180 Ω, cada LED consome 7,2 mA. 25 LEDs por camada consomem 180 mA se todos estiverem acesos ao mesmo tempo. Acendemos apenas uma camada por vez, então respeitamos todos os limites de corrente do Mega, desde que usemos transistores NPN para puxar todos os cátodos de uma camada para o terra. A corrente de base de um desses transistores adiciona mais 5 mA à carga total no Mega, mas mantemos o total abaixo de 200 mA, em cerca de 185 mA. Por todas essas razões, escolhi resistores de 180 Ω para combinar com nossos LEDs.
O gráfico acima mostra como os pinos digitais do Mega se conectam ao cubo. Pinos 22–26 são os 5 pinos que acionam os transistores que conectam os cátodos dos LEDs ao terra. Pinos 27–51 passam pelos resistores de 180 Ω para os ânodos dos 25 LEDs em uma camada.
Você pode se perguntar por que este arranjo de pinouts parece levemente confuso. Meu software usa acesso direto a portas em vez de digitalWrite para configurar os ânodos, ou seja, para definir cada um dos 25 LEDs em uma camada como ligado ou desligado. Isso economiza muito tempo e faz com que os LEDs fiquem acesos por mais tempo do que se gastássemos tempo fazendo digitalWrite. Portanto, os pinouts são organizados de forma a ajudar a organizar referências a essas portas digitais em vez dos números reais dos pinos. Mais sobre isso quando chegarmos ao software.
Construção do Cubo
Existem muitas opiniões sobre como construir um cubo, independentemente do tamanho. A tarefa é tediosa não importa a abordagem. E você precisa ter cuidado e paciência para obter um bom resultado. Vou mostrar como construí este, mas há outras instruções online se preferir.
A construção deste cubo começa com a formação dos terminais e soldagem dos LEDs em colunas de 5. Depois, formam-se painéis soldando 5 colunas juntas, e finalmente o cubo é formado soldando 5 painéis juntos. Quem nunca construiu um cubo não percebe como é difícil construir um cubo perfeito. Pequenos erros nos ângulos dos terminais se acumulam rapidamente e até pequenas diferenças de espaçamento são facilmente visíveis. Por isso, a etapa de formação dos terminais é crítica. Se você tiver paciência e fizer direito, não terá um cubo perfeito, mas terá um com aparência razoável.
Os ânodos são o terminal mais longo do LED e vão para baixo, mas precisam ser dobrados para o lado do LED para que fileiras verticais de ânodos possam ser soldadas juntas. O deslocamento do ânodo e o terminal do cátodo devem estar a 90 graus um do outro, como mostrado nas fotos.
Pessoalmente, acho a formação dos terminais tediosa e cansativa para as mãos, então formo os terminais de 25 LEDs e depois construo um painel. Você precisará de algum tipo de gabarito tanto para fazer as colunas quanto os painéis. Faço isso usando Blue Tack, um adesivo reutilizável. Os LEDs podem ser pressionados no Blue Tack e ficam no lugar enquanto as colunas e painéis são soldados. As marcações permitem repetir esses processos com os mesmos espaçamentos exatos. É importante medir tudo com muito cuidado na primeira vez. Usei espaçamento de 0,6 polegada entre LEDs nas três direções, permitindo que meu cubo final seja inserido em uma placa com espaçamento padrão de furos de 0,1 polegada.
Nota sobre soldagem de LEDs: O pesadelo de todo construtor de cubos é terminar o cubo e descobrir uma solda fria no interior, onde não se consegue mais acessar! Tenha cuidado ao longo do processo para garantir que as soldas estejam boas em cada coluna de LEDs que construir.
Quando você terminar cada painel, é hora de testá-lo. Fazemos isso porque descobrir uma solda fria ou um LED defeituoso quando o cubo estiver pronto seria desastroso!
No software, incluí um pequeno sketch que testa um painel. Para realizar este teste, você precisa conectar os 5 terminais de ânodo verticais a 5 resistores (330 Ω ou similar) e depois esses resistores aos pinos 40–44 (pinos de ânodo da coluna 0). Depois, conecte os 5 pinos de cátodo aos pinos normalmente usados para acionar cátodos, pinos 22–26. Um painel bom será como o vídeo acima. (Como nota lateral, ainda não estamos usando transistores para acionar os cátodos, então esta rotina de teste aciona os cátodos em nível baixo para acender um LED. Quando os transistores forem instalados, faremos o contrário: acionaremos os cátodos em nível alto para ligar os transistores, que então puxarão os cátodos para nível baixo.)
Quando tivermos 5 painéis construídos e testados, estaremos prontos para montar o cubo, mas primeiro devemos preparar a placa inserindo e conectando todos os resistores e transistores necessários.
Coloquei os resistores de 180 Ω bem ao lado de cada coluna de ânodos e os transistores de cátodo com seus resistores de base no espaço entre o cubo e o Mega. Novamente, o espaçamento entre colunas de ânodos é de 0,6 polegada em ambas as direções, então 5 furos vazios na placa entre cada furo com uma coluna de ânodo.
Agora é um bom momento para colocar o Arduino na placa. Ele pode ser montado em espaçadores se você tiver. Eu usei apenas um pequeno pedaço de plástico e um pouco de cola para fixar meu Mega cerca de 1/4 de polegada acima da placa.
Os painéis são então conectados à placa principal neste momento. Certifique-se de que cada coluna de ânodo esteja realmente no furo correto antes de soldar, pois mesmo um erro de um furo será perceptível no cubo final. E certifique-se de manter todos os painéis voltados para o mesmo lado, ou seja, todos os terminais de cátodo saindo do mesmo lado.
Em seguida, precisamos conectar os painéis entre si em cada camada, para que todos os cátodos de uma determinada camada fiquem conectados. Isso é feito com um pedaço reto de fio de cobre estanhado conectando as cinco linhas de cátodo em uma camada.
Depois, estamos prontos para conectar os cátodos de cada camada à placa principal. Os círculos na imagem acima mostram onde os cátodos de cada camada são conectados e levados até o coletor de um transistor. Novamente, usamos um pedaço reto de fio de cobre estanhado.
Uma vez conectados todos os terminais dos resistores ao Mega, estamos finalmente prontos para testar o cubo final. No software, forneci um sketch para testar o cubo. Ele acenderá brevemente cada LED do cubo em ordem. Como você já testou cada painel, quaisquer problemas que surgirem agora provavelmente envolverão as recentes conexões de cátodo. Então você pode encontrar uma camada não funcionando ou parte de uma camada. Novamente, o mais provável é uma solda fria se houver algum problema.
Software
O estado de cada LED no cubo é definido por um array global de bytes 5x5x5 chamado cube[][][]. Um 1 significa que o LED está ligado, um 0 que está desligado. Assim, todas as animações do cubo são criadas colocando 1s e 0s em cube[][][].
O coração de qualquer software de cubo é a interrupção temporizada que atualiza o cubo. Minha rotina de interrupção é iniciada no setup() e fica no final do programa. Ela é chamada a cada 10 ms e leva cerca de 6 ms para atualizar o cubo. Isso deixa 4 ms entre cada atualização para execução do código no loop principal.
Durante a atualização, cada camada é ligada por 1,2 ms. A atualização ocorre 100 vezes por segundo. Portanto, qualquer LED individual que esteja ligado fica aceso por 120 ms/segundo, ou seja, um ciclo de trabalho de 12%. As 100 vezes por segundo são rápidas o suficiente para fazer o olho humano ver como se estivesse aceso continuamente, e o ciclo de trabalho de 12% é suficiente para fazer os LEDs brilharem razoavelmente, não tanto quanto se estivessem ligados continuamente, mas surpreendentemente próximo disso.
Para manter o ciclo de atualização o mais curto possível e maximizar o tempo que os LEDs ficam acesos, evitamos comandos digitalWrite que desperdiçam tempo e usamos acesso direto a portas para configurar os pinos. Se você olhar o código na rotina de interrupção, verá 25 linhas separadas onde esse acesso direto é empregado, o que não parece muito bonito, mas é, de fato, muito, muito mais rápido do que as poucas linhas de código que poderiam ser usadas para definir os pinos com digitalWrite.
O loop() simplesmente chama cada animação, percorrendo a lista e recomeçando. As animações estão cada uma em sua própria sub-rotina. Algumas rotinas de animação chamam outras rotinas. Veja o próprio código para explicações das várias animações. Existem também algumas rotinas utilitárias usadas por todas as animações, como clearCube() que apaga todos os LEDs, ou copyDown(), que desloca o conteúdo de cada camada para a camada abaixo e limpa a camada superior.
Existem três sketches diferentes para download. O principal contém as 15 animações que você viu no vídeo. Os sketches de teste de painel e teste de cubo são usados apenas para testar seu cubo durante a construção.
Código
- Software do Cubo 5x5x5 (Arduino) — Contém 3 sketches: Teste de Painel, Teste de Cubo e O Show com todas as 15 animações. Disponível apenas para download.
Peças Personalizadas e Caixas (Opcional)
Totalmente opcional, mas se você tem acesso a uma impressora 3D e quer a caixa que aparece nos meus vídeos, aqui está o arquivo.
Esquemáticos
Um esquemático básico mostrando as conexões exatas entre o cubo e o Mega.
Processo de manufatura
- Fabricação de Tábuas de Passar: Design, Materiais e Processo de Produção
- Cubo de Rubik: Da Invenção ao Quebra-Cabeça Moderno
- Placas de Circuito Impresso: Design, Fabricação e Tendências Futuras
- Construção e Design de Pranchas de Surf: Das Raízes Polinésias à Inovação Moderna
- Diodos Emissores de Luz: Da Incepção a Vida Útil de 100 Anos
- RasPiRobot Board V2: Expanda seu Raspberry Pi em um Controlador de Robô Poderoso
- Relógio de Palavras DIY com Arduino – Construa um Display Elegante de Tempo Real
- Projeto Arduino: Melodia Coffin Dance – Construa e Toque a Música Viral
- Atualize sua Casa: Placa de Interruptor Touch Inteligente com Monitoramento de Temperatura
- Controlar um LED via Bluetooth com Arduino – Guia DIY Simples