Um tempo atrás, eu projetei um circuito que seria poder um 8 × 8 LED RGB Matrix (192 LEDs no total) utilizando apenas 3 pinos de um Arduino e PWM. Neste post vou tentar responder a todas as perguntas que você possa construir o seu próprio.
Eu usei um display RGB de 8 × 8 ânodo comum (apenas US $ 10 no DX). A matriz tem 32 pinos: 8 anodos, catodos de 8 para vermelho, 8 para o verde e 8 para azul. E usei um Arduino UNO, na realidade você pode usar qualquer microcontrolador, mas a estrutura de timer e o PWM pode variar bastante com seu hardware.
Com um pouco de pesquisa uma coisa chamada mudança registo poderia me ajudar a ligar todos os 32 pinos usando apenas 3 pinos do Arduino. Registradores de deslocamento são baratos e fáceis de achar. Eu usei o IC 74HC595, na realidade 4 deles.
Com um pouco de pesquisa uma coisa chamada mudança registo poderia me ajudar a ligar todos os 32 pinos usando apenas 3 pinos do Arduino. Registradores de deslocamento são baratos e fáceis de achar. Eu usei o IC 74HC595, na realidade 4 deles.
Por dentro do circuito:
Depois de algumas noites de teste eu sabia que poderia conduzir 8 pinos usando o 74HC595. Se eu interligasse todos eu poderia ligar todos os pinos 32.
E esse foi o desenho do circuito final:
Como Funciona:
O que é PWM:
Pulse Width Modulation ou PWM é essencialmente uma forma de simular uma saída analógica de uma fonte binária. Hein? Wha?
Se eu ligar um LED vermelho fico vermelho, se eu ligar um LED azul fico azul. Se eu transformá-los em ambos ao mesmo tempo eu fico roxo. E se eu quiser obter alguma cor no meio? com este tipo de sistema que você não pode fazer nada, mas sete cores (R, G, B, RG, RB, SP, RGB). A única maneira é ligar os LEDs parcialmente. Mas um LED só pode ser totalmente ou totalmente em off, como você pode obter um "parcial" de LED? A resposta é PWM.
O pulso varia o tempo para o qual um LED está ativo. Ainda é ou totalmente em off ou totalmente on durante esse tempo, mas se você pensar que o tempo como uma onda, a "largura" do "pulso", durante o qual o LED está ativo varia.
Aqui está um bom visual:
Código Arduino:
Como é muito grande, baixe!