Hacia tiempo que había visto los cubos de leds en Youtube y algunos son realmente impresionantes, asi que me decidí a hacer uno, pero de los sencillos, de 3x3x3 leds.
(En Youtube los hay de hasta 16x16x16 leds)
Este ha sido el resultado de mi cubo 3x3x3 de leds:
Sigue leyendo para verlo
Primero que nada, hay que construir una especie de plantilla, para poder posicionar bien los leds y efectuar el doblado de las patillas, sin que se deforme, o que por lo menos parezca un cubo al estar terminado.
Para esto, una madera fina, y un taladro con broca del 5 (justo el tamaño de los leds 5mm), y realizamos la plantilla con los 9 agujeros en forma de cubo y uno en el centro, tal que asi:
Una vez tengamos la plantilla terminada, colocamos los leds dentro de forma que queden los cátodos (patilla más corta) hacia adentro del cubo. Deben quedar los cátodos hacia adentro ya que son éstos los que conectaremos para formar el primer “nivel” del cubo, así que doblamos y conectamos los cátodos de los leds para que quede un “cátodo común” para todos los leds. Yo heché mano de unas pinzas de cocodrilo y procedemos a soldarlos.
Una vez soldados los cátodos retiramos la estructura que queda, y realizamos el mismo paso 3 veces, para obtener 3 estructuras de 9 leds conectados por sus cátodos, que serán los 3 niveles o filas del cubo.
Una vez que tengamos las estructuras de los leds, procedemos a conectarlas entre sí, y para ello utilizando la misma plantilla colocamos una de las estructuras dentro, con ayuda de unas pinzas de cocodrilo colocamos otra estructura encima y soldamos los ánodos de los leds esta vez, repitiendo el paso para la última estructura y finalizando el cubo.
Y así, finalizamos el cubo, de modo que tenemos un cubo con 9 patillas donde cada una de ellas corresponde al ánodo de los 3 leds de esa misma columna, y 3 niveles o filas de leds conectados por sus cátodos.
Si lo vieramos de un modo informático, es un array bidimensional de leds, tenemos “columnas” y “filas”, y así es como accederemos a cada uno de los leds con Arduino.
Terminado el cubo procedemos a la conexión con Arduino. Dado que son leds, necesitan de una pequeña resistencia así que conectamos cada uno de los pines del cubo con una resistencia de 220 Ω, a 9 pines digitales del Arduino.
Para conectar los cátodos ó los 3 niveles del cubo, debemos utilizar 3 transistores NPN, en mi caso usé 2N3904.
Así que conectamos cada uno de los 3 niveles al colector de 3 transistores NPN, la base de los transistores se conectaría a los pines digitales del Arduino, y el emisor a masa o GND.
Así utilizamos el transistor en conmutación, de modo que al enviar con Arduino un valor lógico HIGH a uno de los transistores, éste entrará en saturación, “conectando” el colector con el emisor, de forma que el cátodo del diodo led se “conectaría” a masa y encendería.
La forma de conectarlo todo es la siguiente:

Y una vez conectado, declaramos los pines como un array de filas y columnas, y que decir, es simplemente encender unos leds
Debido a las altas peticiones de código para encender el cubo, dejo aquí el código correspondiente al momento en que se encienden los leds aleatoriamente:
int Columnas[] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int Filas[] = {12, 11, 10};
int RandFila; //Variable para fila aleatoria
int RandColumna; //Variable para columna aleatoria
void setup()
{
int contador;
for (int contador = 0; contador < 10; contador++){
pinMode(Columnas[contador], OUTPUT); }
for (int contador = 0; contador < 4; contador++){
pinMode(Filas[contador], OUTPUT); }
}
void loop()
{
RandLed();
}
void RandLed()
{
RandFila = random(0,3);
RandColumna = random(0,9);
digitalWrite(Filas[RandFila], HIGH);
digitalWrite(Columnas[RandColumna], HIGH);
delay(75);
digitalWrite(Filas[RandFila], LOW);
digitalWrite(Columnas[RandColumna], LOW);
delay(50);
}
En funcionamiento:





me fue super util el post y me arme mi propio cubo muchas gracias
ahora quiero hacer esto http://www.instructables.com/id/Polargraph-Drawing-Machine/#intro
Alejandro de Montecristo, genial!! Te ha quedado muy bien, buenas combinaciones de luces!!
Gracias por compartirlo!! Un saludo!
hola alejandro muy bien el cubo pero como ya digo seria muy util para todos si colgaris los codigos a si los mas novatos podemos practicar
salu2
hola pense que me llegarian notificaciones a las respuestas muchas gracias por los comentarios puedo pegar el texto completo del código, de todas formas en el video de youtube sale la fuente del código, lo que mas me gusta de esto del codigo libre y el hardware arduino es justamente el espíritu de compartir conocimiento como la ayuda entre si:
codigo:
void setup() {
// initialize the digital pin as an output.
pinMode(0, OUTPUT);
pinMode(1, OUTPUT);
pinMode(2, OUTPUT);
pinMode(3, OUTPUT);
pinMode(4, OUTPUT);
pinMode(5, OUTPUT);
pinMode(6, OUTPUT);
pinMode(7, OUTPUT);
pinMode(8, OUTPUT);
pinMode(9, OUTPUT); // Level 1
pinMode(10, OUTPUT); // Level 2
pinMode(11, OUTPUT); // Level 3
}
void loop() {
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
for (int i=0; i <= 3; i++) // run loop 4 times
{
// all on
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(500);
// all off
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(500);
}
// wipe
for (int i=0; i <= 5; i++) // run loop 6 times
{
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(200);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(200);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
delay(200);
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(200);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
}
// rotate
for (int i=0; i <= 5; i++) // run loop 6 times
{
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
delay(100);
digitalWrite(3, LOW);
digitalWrite(5, LOW);
digitalWrite(2, HIGH);
digitalWrite(6, HIGH);
delay(100);
digitalWrite(2, LOW);
digitalWrite(6, LOW);
digitalWrite(1, HIGH);
digitalWrite(7, HIGH);
delay(100);
digitalWrite(1, LOW);
digitalWrite(7, LOW);
digitalWrite(0, HIGH);
digitalWrite(8, HIGH);
delay(100);
digitalWrite(0, LOW);
digitalWrite(8, LOW);
}
digitalWrite(4, LOW);
delay(1000);
// sequential
byte pin[] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
// above array of 9
{
for (int i=0; i <= 3; i++) // run loop 4 times
{
for(int i=0; i<=8; i++) // loop equals number
{ // of values in array – 1
digitalWrite(pin[i], HIGH); // write index value
delay(100); // pause 200ms
digitalWrite(pin[i], LOW); // write index value
}
}
}
// all on
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(500);
// all off
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(500);
// random
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
for (int i=0; i <= 50; i++) // run loop 50 times
{
int randNumber;
int randLevel;
{
randNumber = random(0,8);
randLevel = random(9,11);
digitalWrite(randNumber, HIGH); // write index value
digitalWrite(randLevel, HIGH); // write index value
delay(100); // pause 100ms
digitalWrite(randNumber, LOW); // write index value
digitalWrite(randLevel, LOW); // write index value
delay(10);
}
}
// squares
digitalWrite(9, HIGH); // bottom layer on
digitalWrite(10, HIGH); // middle layer on
digitalWrite(11, HIGH); // top layer on
for (int i=0; i <= 2; i++) // run loop 2 times
{
digitalWrite(11, LOW); // top layer off
digitalWrite(9, HIGH); // bottom layer on
digitalWrite(2, LOW);
digitalWrite(5, LOW);
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
delay(200);
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
delay(200);
digitalWrite(3, LOW);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
delay(200);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
delay(200);
digitalWrite(11, HIGH); // top layer on
digitalWrite(9, LOW); // bottom layer off
digitalWrite(2, LOW);
digitalWrite(5, LOW);
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
delay(200);
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
delay(200);
digitalWrite(3, LOW);
digitalWrite(6, LOW);
digitalWrite(5, HIGH);
digitalWrite(8, HIGH);
delay(200);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
delay(200);
}
digitalWrite(9, HIGH); // turn bottom layer on
// all off
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(100);
// walls
for (int i=0; i <= 4; i++) // run loop 4 times
{
digitalWrite(5, LOW);
digitalWrite(8, LOW);
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
delay(300);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, HIGH);
digitalWrite(6, HIGH);
delay(300);
digitalWrite(3, LOW);
digitalWrite(0, LOW);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(300);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(2, HIGH);
digitalWrite(5, HIGH);
delay(300);
}
// all on
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
delay(500);
// all off
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(500);
// trampoline
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(2, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
digitalWrite(5, HIGH);
digitalWrite(6, HIGH);
digitalWrite(7, HIGH);
digitalWrite(8, HIGH);
for (int i=0; i <= 5; i++) // run loop 5 times
{
digitalWrite(11, HIGH);
delay(100);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
delay(100);
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
delay(100);
digitalWrite(10, LOW);
}
// all off
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
delay(500);
// spiral down
byte pins[] = {0, 1, 2, 5, 8, 7, 6, 3};
// above array of 8
{
for (int i=0; i <= 3; i++) // run loop 3 times
{
byte level[] = {11, 10, 9};
for(int i=0; i<=2; i++) // loop equals number
{ // of values in array
digitalWrite(level[i], HIGH); // write index value
for(int i=0; i<=7; i++) // loop equals number
{ // of values in array
digitalWrite(pins[i], HIGH); // write index value
delay(50); // pause 200ms
digitalWrite(pins[i], LOW); // write index value
}
digitalWrite(level[i], LOW); // write index value
}
}
}
// explode
for (int i=0; i <= 3; i++) // run loop 5 times
{
digitalWrite(9, LOW);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(4, HIGH);
delay(500);
digitalWrite(1, HIGH);
digitalWrite(3, HIGH);
digitalWrite(5, HIGH);
digitalWrite(7, HIGH);
delay(200);
digitalWrite(9, HIGH);
digitalWrite(11, HIGH);
delay(200);
digitalWrite(0, HIGH);
digitalWrite(2, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
delay(500);
// all off
digitalWrite(0, LOW);
digitalWrite(1, LOW);
digitalWrite(2, LOW);
digitalWrite(3, LOW);
digitalWrite(4, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
}
// growing boxes
for (int i=0; i <= 3; i++) // run loop 5 times
{
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, LOW);
digitalWrite(0, HIGH);
digitalWrite(1, HIGH);
digitalWrite(3, HIGH);
digitalWrite(4, HIGH);
delay(500);
digitalWrite(10, LOW);
digitalWrite(9, HIGH);
digitalWrite(4, LOW);
digitalWrite(1, LOW);
digitalWrite(3, LOW);
digitalWrite(11, HIGH);
digitalWrite(2, HIGH);
digitalWrite(6, HIGH);
digitalWrite(8, HIGH);
delay(500);
digitalWrite(11, LOW);
digitalWrite(10, HIGH);
digitalWrite(2, LOW);
digitalWrite(5, LOW);
digitalWrite(6, LOW);
digitalWrite(7, LOW);
digitalWrite(8, LOW);
}
}
se me olvidava fijese en los pines!!
Alejandro De Montecristo, gracias por compartir
Saludos!
como ago para ce¿rear ese cubo??? soy orincipiante… y que son esos cogigos??’
Xavier martinez, antes de empezar a crear un cubo de leds debes dar algunas lecciones básicas de electrónica y programación de placas Arduino para poder entender lo que estás realizando.
Las explicaciones al detalle de como crear el cubo están en el post, solo hay que leer, pero sin conocimientos básicos de electrónica hasta un proyecto simple como este puede resultar muy complicado.
Te recomiendo buscar en google algunos documentos de electrónica básica para poder entender conceptos que se utilizan para crear el cubo.
Saludos!!
Xavir, vas a tener que mirar más videos en YouTube, o empezar con alguno sencillo, de los que no se programan, con leds RGB de cambio automatico son lindos.
Esos códigos son para programar en Arduino, es la placa que será el cerebro del cubo, pero eso es un mundo complejo. Hay otras formas también para programarlo, pero todas requieren un poco de conocimiento previo, y no tener miedo de programar.
Gracias Carlos por la manita echada!
Buenas explicaciones!!
Saludos!
oye amigo pero como esta estructurado el codigo pero ya todo junto ya compilado
Alberto Enrique, el código es el que se encuentra en el blog.
No guardé todas las combinaciones de código que se ven en el vídeo.
Si quieres realizar más combinaciones, juega con el código o revisa los comentarios que hay mucha
gente que a aportado sus códigos para crear diferentes combinaciones.
Saludos
muchas gracias de verdad
ahora pregunto que por eso soy muy novato jeje
en los codigos que quiere decir cuando se ponen 2 o 3
}
}
}
esto que significa
salu2
Se están cerrando grupos que fueron abiertos con {
Si trabajas con “Notepad++” te va a pintar el código de colores y lo interpretarás más facil.
for (int i=0; i <= 3; i++) // run loop 3 times
{
**Aca el código a repetir**
}
"for" lo hará las veces que sea igual a 3, empieza como 0 y se le dice que le sume 1, cuando llega a 3, el "for" deja de ejecutarse y sigue adelante.
Es muy parecido a otros lenguajes, yo se PHP y algo de este código interpreto, aún no conociéndolo a fondo.
les dejo mis dos cubitos un día de estos hago uno con RGB jejeje
buen dia
Carlos Baños, geniaaal!! El de 6x6x6 es impresionante! ¿Con qué lo controlas? Ya que un Arduino Uno no tiene suficientes pines.
Gracias por compartirlos!! Un saludo!!
Yo me estoy armando uno de 3x3x3 de momento creo que lo controlaré con los pines del Arduino. Pero como dices, si vas más lejos, la forma de controlarlo, al menos por lo que he visto en un video de alguien que hizo un 8x8x8 usó unos integrados llamados “Shift Register” con sólo 3 pines del Arduino, podés controlar infinitas salidas (he hecho en este video se muestra que controla 200)
http://www.youtube.com/feed/UC42d7zFnWU0dYVk_M0JED6w/u
De seguro ya lo viste, sino te lo recomiendo, aunque esté en inglés
Ni bien termine el 3x3x3 hago un video y lo comparto. Y con suerte en un futuro paso al 5x5x5 RGB
Pero primero me tengo que aprender mejor como animarlo.
Ya tengo un blog, así es, los “Shift registers” o registros de desplazamiento, son muy útiles para controlar muchas salidas con apenas unos pines del Arduino.
El 74HC595 es uno de ellos muy común. Aunque no son precisamente sencillos de utilizar.
Esperamos ver esos cubos!
Saludos!
Que distancia pusiste de led a led en la plantilla?
Jajajaj yo lo hice, me quedo muy bien, gracias por compartir!
Lautaro, estupendo! La distancia entre led y led es más o menos la distancia de la patilla del cátodo del led, lo suficiente para al doblarla poder soldarla con el que está a su lado sin problemas.
Saludos!
Comparto mi proyecto!, no pongo los codigos para dejar que cada uno sea creativo
Lautaro, fantástico, te ha quedado estupendo! Gracias por compartirlo!
Saludos!!
lauturo????????? ese codigo que as usadome parece que ya lo vi yo en otro cubo puede ser que me confunda pero juraria que lo vi antes
salu2
La verdad no se, copie algunas ideas y otras las invente yo, pero el codigo esta 100% hecho por mi
y que material se necesita para hacer todo eso la verdad me interesa hacerlo
En la descripción está. A eso le tenés que sumar un Arduino. Sino busca guía de como hacer uno fijo, o con leds de cambio rápido o lento RGB
AnarkoPuagh Pienza Lucha, los materiales están en el post, solo hay que leer.
- 27 Leds (3x3x3 leds)
- Una tabla de madera para poder hacer el molde
- Cables
- 9 x Resistencias 270 Ohms
- 3 x Transistor 2N2222 o 2N3904
- Placa de prototipos (Opcional)
- Placa Arduino UNO
Saludos!
UUUUU IA ME GUSTO QUIERO HACER UNO PERO NO TENGO NI IDEA DE ELECTRONICA CREO Q ES VERDAD CHEVERE
Edgarin, para hacer esto hace falta saber electrónica. Te recomiendo buscar “Electrónica basica” en Google y empezar a leer
Saludos!
hola men! gran proyecto
muy bueno en verdad… ¿cuanto tiempo te tardaste aproximadamente en hacer esto?
Nad Ruiz, una vez que tienes la base hecha, en unas horas lo tienes todo montado. Todo es dedicación
Saludos!
muy buen aporte pero quiero hacer uno de 4x4x4 pero como hago con el codigo que debo hacer para q me funcione porq el de 3x3x3 son menos led y si me funciono espero q me ayudes ALEJANDRO
Oscar para un cubo de 4x4x4 necesitas multiplexor o un registro de desplazamiento como el 74HC595 para poder controlar todas las salidas necesarias desde un Arduino UNO, ya que no te alcanzan los pines para poder conectar uno de 4x4x4.
Saludos!
BRO ME PODRIAS PASAR EL PROGRAMA COMPLETO EN UNO SOLO PORFA????
bro me podrias pasar el programa completo es que en el principio aparece otro y veo que le das a otro chavo otra parte y no se como ponerla porfa!!
Albert, los códigos de los comentarios son independientes, compilalos por separado.
Saludos
que tal me gustaria saber como puedo hacer que suene una cancion y que empiece el código a correr agradecere mucho su respuesta