Go Down

Topic: 8x8x8 led cube question (Read 2 times) previous topic - next topic

solidshark91493

Ive looked at EVERY guide I can find on how to make them and none that use the arduino give hardly ANY description on how to build one using a arduino. I want to start by making a 5x5x5 then moving up. But am at a total loss on what I need and how to do it.. I want to do the 5x5x5 as my first project. Any help is REALLY appreciated.

johnwasser

Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

solidshark91493

It doesnt show how to make it at all though. Like the controller board and it looked as thought those parts were outdated..from what I read..

johnwasser

The chips are still available: http://netsemi.com/p-93126-led-driver-ic-a6276ea-t.aspx

The instructions provide a schematic for the driver board showing connections to each of the Arduino pins.
Send Bitcoin tips to: 1L3CTDoTgrXNA5WyF77uWqt4gUdye9mezN
Send Litecoin tips to : LVtpaq6JgJAZwvnVq3ftVeHafWkcpmuR1e

CrossRoads

The easy way to think about it is that you have 8 shift registers, with each output connected to the anode of an LED. So you have 64 LEDs. Connect all the cathodes to a current sink. Output a 1/0 pattern into the shift register, turn on the cathode sink. There's layer 1.

Now, add 7 more LEDs to each output, with the cathodes connected together like layer. Now you have layers 2-8.

So write out a 1/0 pattern, turn cathode drive 1 on/off.
Write out a 1/0 pattern, turn cathode drive 2 on/off.
Repeat for layers 3,4,5,6,7,8.


Physically, have the Anodes go vertically so layers 1-8 are stacked up.
Have the cathodes connected horizontally with 1 wire going down to the cathode driver.

If you have enough pins (Mega) then you don't even need shift registers - 64 outputs to drive the anodes high/low with current limit resistor. 8 outputs to drive an NPN transistor or N-channel MOSFET rated for (64 x 20mA max) 1.28A minimum (I would go at least 2A) each for each layer.

Make sense?
Designing & building electrical circuits for over 25 years. Check out the ATMega1284P based Bobuino and other '328P & '1284P creations & offerings at  www.crossroadsfencing.com/BobuinoRev17.
Arduino for Teens available at Amazon.com.

kriogenic

I'm building an 8x8x8 cube at the moment on the arduino and there is MANY ways to go about it.
LED drivers are the best for an 8x8x8 you can use 4 16bit LED drivers. Where all the drives light the 64 LEDS and then you can either use 8 output pins on the arduino as your grounds or hook up a shiftregister with some npn transistors and use that register to switch between your grounds.

Esentially with ANY cube you NEVER have more then one layer on at a time. The trick is switching all the layers fast enough it seems like every layer is lit up to the human eye. The concept is simple in a way but the programming of animations can be a pain with arduino not doing to well with 3D arrays and things like that

solidshark91493

Well one. I dont know how to read schematics hardly at all.


Two. Honestly. No It made no sense to me. Im new to this stuff.

Three. Ive only heard of the led drivers. I actually have no idea what they are.

Four. I have an Arduino UNO. Think that might be useful info.

Grumpy_Mike

So if you are so new that none of it makes sense then the project is too difficult for you at this time.
Do a few of the tutorials first, learn about code, do some modifications and tweeks and feel more comfortable with the whole environment. Then come back in a month or two and see if the instructions make more sense. An 8X8X8 cube is a very large project and it too big for you now.
However there is no reason why you should not have it as an ambition.

lRaHl

#8
Nov 10, 2011, 08:33 am Last Edit: Nov 10, 2011, 08:45 am by lRaHl Reason: 1
I bet you haven't been here...
http://www.mushroo.me/home/voxel-shield/voxel-shield-overview

Some code I wrote for individual xyz LED control.
Code: [Select]
// Shift Register pin assignments
int dataPin     = 2;
int clockPin    = 3;
int latchPin    = 5;
int masterClear = 4;

void led(int x,int y,int z,int hold){
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << z);
  if(y == 7){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 6){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 5){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 4){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 3){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 2){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 1){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 0){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  digitalWrite(latchPin, HIGH);
  delay(hold);
}

void clean(int hold){
  digitalWrite(latchPin, LOW);
  for(int x = 0;x < 10;x++){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  digitalWrite(latchPin, HIGH);
  delay(hold);
}

void setup() {
  // Setup the pin modes
  pinMode(dataPin,     OUTPUT);
  pinMode(clockPin,    OUTPUT);
  pinMode(latchPin,    OUTPUT);
  pinMode(masterClear, OUTPUT);
 
  // Clear the shift registers
  digitalWrite(masterClear, LOW);
  delay(10);
  digitalWrite(masterClear, HIGH);
}

void loop() {
  //  x,y,z,delay
  led(0,0,0,100); //top left, bottom layer
  led(1,0,0,100); //top +1 left
  led(2,0,0,100); //top +2 left
  led(3,0,0,100); //top +3 left
  led(4,0,0,100); //top +4 left
  led(5,0,0,100); //top +5 left
  led(6,0,0,100); //top +6 left
  led(7,0,0,100); //top +7 left
  //   delay
  clean(100);
}



I'm currently building my cube, here is some thumbnails:



virtuoosi

Quote
I'm currently building my cube, here is some thumbnails:


Looks awesome! Keep up the good work, I want to see that project when it's ready & documented.  :)

solidshark91493


I bet you haven't been here...
http://www.mushroo.me/home/voxel-shield/voxel-shield-overview

Some code I wrote for individual xyz LED control.
Code: [Select]
// Shift Register pin assignments
int dataPin     = 2;
int clockPin    = 3;
int latchPin    = 5;
int masterClear = 4;

void led(int x,int y,int z,int hold){
  digitalWrite(latchPin, LOW);
  shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << z);
  if(y == 7){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 6){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 5){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 4){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 3){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 2){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 1){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  if(y == 0){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000001 << x);
  } else {
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  digitalWrite(latchPin, HIGH);
  delay(hold);
}

void clean(int hold){
  digitalWrite(latchPin, LOW);
  for(int x = 0;x < 10;x++){
    shiftOut(dataPin, clockPin, MSBFIRST, 0b00000000);
  }
  digitalWrite(latchPin, HIGH);
  delay(hold);
}

void setup() {
  // Setup the pin modes
  pinMode(dataPin,     OUTPUT);
  pinMode(clockPin,    OUTPUT);
  pinMode(latchPin,    OUTPUT);
  pinMode(masterClear, OUTPUT);
 
  // Clear the shift registers
  digitalWrite(masterClear, LOW);
  delay(10);
  digitalWrite(masterClear, HIGH);
}

void loop() {
  //  x,y,z,delay
  led(0,0,0,100); //top left, bottom layer
  led(1,0,0,100); //top +1 left
  led(2,0,0,100); //top +2 left
  led(3,0,0,100); //top +3 left
  led(4,0,0,100); //top +4 left
  led(5,0,0,100); //top +5 left
  led(6,0,0,100); //top +6 left
  led(7,0,0,100); //top +7 left
  //   delay
  clean(100);
}



I'm currently building my cube, here is some thumbnails:






Ok see this is what I was looking for. I dont know how to make the boards. I can make the cube. But I cant code, and I dont know what I need for ONLY arduino running the cube. what parts. and it seems that you do. I also dont know what to hook to the arduino, but that board looks intresting although again quite vague on what it needs for this specific project. it says youy MAY need this.. or you MAY need that.. etc.. I would love some input on how  your going about it.

solidshark91493

First im building a 3x3x3 and a 4x4x4 so I have some time to figure this out

Go Up