Hablando con un amigo sobre algún proyecto para hacer y viendo algunos videos, nos gustó la idea de hacer un tetris (En un tamaño medianamente grande, no con un simple LCD).
La parte electrónica sería únicamente controlar varios LED RGB, pero ahí viene el problema. En el caso de hacer un juego de 8x15, estaríamos necesitando 120 LEDs, mucho más allá de la cantidad de salidas que nos proporciona Arduino.
Estuve viendo diferentes formas de ampliar la cantidad de salidas digitales mediante, por ejemplo, 74hc595 o TLC5940 (Este último bastante más caro, 10 dólares aproximadamente en Argentina).
Que método me recomiendan para ampliar las salidas? El precio no sería un gran problema, pero quiero estar seguro que lo que voy a comprar verdaderamente cumpla con mis necesidades.
Me pregunto: ¿tienen que ser RGB?. Digo, el control sería más simple si fueran de un solo color.
Ahora, lo que puedes hacer es justamente acomodar los LEDs en una matriz: en 15 filas de 8 cada una. Unes los ánodos (polo positivo) de cada columna, y los cátodos (polo negativo) de cada fila.
La técnica utilizada para controlar esta matriz, se le denomina "multiplexado por división de tiempo", la cual consiste en activar una fila a la vez secuencialmente; pero con la rapidez suficiente para que, en nuestra persistencia de la visión, aparezca imagen fija.
Como mínimo absoluto, se deben recorrer todas las filas 30 veces por segundo; de ser posible, hacerlo 100 veces por segundo para eliminar cualquier sensación de parpadeo.
Esta técnica permite controlar matrices de LEDs, con apenas N+M pines, en vez de N*M pines como lo tenías pensado.
¡Con multiplexar, solo necesitarás 23 pines en vez de 120!
Si el control de la matriz va a ser con circuitos integrados o módulos adicionales, tendrás que estudiarte los ejemplos de uso y todo eso. Si el control va a ser con el mismo Arduino, entonces te puedo seguir más rápidamente.
Si, ayer anduve viendo algo de información sobre el multiplexado, pero no me puse a verlo detenidamente.
La idea sería hacerlo con Arduino por el momento, y tenes razón en cuanto a los LEDs RGB, ya que surge un problema que no habíamos considerado (Son necesarias diferentes tensiones para cada uno de los colores), aunque si logramos hacerlo sería óptimo.
Voy a leer sobre lo que me dijiste, cualquier cosa vuelvo a publicar mis dudas. Muchas gracias por la ayuda.
csp:
y tenes razón en cuanto a los LEDs RGB, ya que surge un problema que no habíamos considerado (Son necesarias diferentes tensiones para cada uno de los colores), aunque si logramos hacerlo sería óptimo.
El rojo y verde son muy similares en caída de tensión; solo el azul es "el especial".
No era ese el problema que tenía en mente, pero no es para tanto: las resistencias van en serie con los ánodos (columnas) ya que en el mutiplexado solo una fila a la vez se enciende.
La complicación se debe a que para controlar una matriz de LEDs RGB se necesitan 3*M+N pines; en otras palabras, 39 pines en vez de 23 porque en RGB, físicamente siguien siendo 15 filas de 8 columnas; pero para la lógica de control, el número de columnas se triplica (pasan a ser 24 aunque físicamente sean 8 ).
PD: para la conmutación de filas, recomiendo MOSFETs canal N; son más fáciles de usar que los transistores BJT.
Perfecto, entiendo el problema de la cantidad de salidas PWM que voy a necesitar.
Por la multiplexacion necesitaría, evidentemente, muchos menos pines de control, pero para llegar por ejemplo, a los casi 40 que necesitaría en este caso, debería usar alguno de los integrados que escribí en mi primer mensaje, no?
Lucario448: PD: para la conmutación de filas, recomiendo MOSFETs canal N; son más fáciles de usar que los transistores BJT.
Podrías explicarme un poco esto? Disculpas por tantas preguntas.
csp:
Entiendo el problema de la cantidad de salidas PWM que voy a necesitar.
¿PWM? Ahora sí va a estar difícil que un Arduino lo haga por sí solo. Ni siquiera el Mega tiene tantos.
csp:
Pero para llegar por ejemplo, a los casi 40 que necesitaría en este caso, debería usar alguno de los integrados que escribí en mi primer mensaje, no?
Para manejar muchos LEDs con PWM para efectos de la matriz, recomiendo el TLC5940. A menos que alguien me dé un alternativa; lo malo que tiene este circuito integrado es que solo puede "drenar" corriente; entonces para usarlo hay que poner las columnas en los cátodos, las filas en los ánodos y MOSFETs canal P en vez de N (el cuál se activa poniendo el pin en estado bajo).
Lo sé, como que ahora todo es al revés; pero créeme que tampoco es tan difícil. Por lo menos el TLC5940, para efectos de matriz, puede controlar hasta 16 columnas; así que necesitarás dos si quieres controlar los tres colores.
Las filas todavía las controla el Arduino, mas las columnas se las puede delegar al TLC5940.
Otra extra: ese integrado opera a modo de corriente constante en cada salida, así te ahorras las resistencias por columna.
Respecto a lo otro: funcionalmente, un MOSFET es un conmutador de corriente de alta velocidad. Su simpleza de uso radica en el hecho de que solo necesita voltaje para accionarse; comparado con el BJT que lo hace por intensidad de corriente, y por ende necesita una "resistencia base" para evitar dañarse. El valor de esa resistencia depende del voltaje aplicado a la base, la corriente que va a manejar de colector a emisor, y el ínfimo del hfe (también llamado "corriente de ganancia en DC") del propio transistor.
Como puedes ver, el transistor BJT puede ser un dolor de cabeza, al menos en lo de tener que calcular la resistencia base; en cambio, el MOSFET lo único que necesita es un "pull-down" (canal N) o "pull-up" (canal P), cuyo valor no depende de prácticamente nada (pero sí ronda entre 4.7k y 20k, es solo de escoger cualquiera dentro del rango).