cubo led 4x4x4 ajuda

eu fiz um 4x4x4 cubo atravez de este tutorial

Tudo está funcionando bem, as luzes de leds não são muito brilhante, estou usando leds violeta 3.2-3.4V

cada pino do arduino esta ligado a uma resistência de 220 ohm que ligam ás colunas
os patamares do cubo ligam a uma resistência de 100 ohm que ligam aos pinos ao A0,A1,A2,A3

a minha pergunta é que eu acho muito estranho que este circuito não tenha transístores o que eu me pergunto é se estará a funcionar com segurança ..

eu queria saber se eu colocar 16 transístores 2N2222A em cada pino da repetiva coluna a com 500 ohm na base, 12V fonte externa ao colector que liga os leds da coluna indo para o emissor e terra. e os 4 patamares dos pinos analógicos A0, A1, A2, A3 conectar a 4 transístores 2N2222A, a 10k ohm na base, os patamares ligados ao colector indo directamente para emissor ao gnd, se seria a maneira correta de fazer e se os leds seriam mais brilhante ...

Viva, encarnacao! Bem-vindo ao fórum. Talvez seja boa ideia "dar uma vista de olhos" às regas do fórum, principalmente ao ponto 13.

Como estás a alimentar o circuito?

12V e o Arduino não é muito seguro... pode funcionar, mas eu preferiria ver um isolador óptico em vez de transistores, ou um opto transistor para fazer o que pretendes. Dessa forma, sim terias mais brilho no cubo.

Outra coisa, a maneira como tens ligado poderá estar a sobrecarregar o Arduino... ele pode não se queixar agora, mas poderás estar a reduzir o tempo útil de vida do mesmo.

obrigado Luis vou ler :slight_smile:

Bubuino o meu cubo 4x4x4 está ligado da seguinte forma

16 colunas ligadas aos anodos(+) nos pins(13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, A4, A5) com resistencia de 220 ohm por cada pin

4 layers cathodos(-) ligadas a (A0, A1, A2, A3) com resistencia de 100ohms por pin

a alimentaçao vem dos pins do arduino

possivelmente estara tudo mal ligado :frowning:

esta tudo a funcionar mas se mal ligado podera estar a encurtar a vida do arduino

o codigo que estava a usar é (exemplo)

#define CUBESIZE 4
#define PLANESIZE CUBESIZE*CUBESIZE
#define PLANETIME 100 // time each plane is displayed in us -> 100 Hz refresh
#define TIMECONST 20 // multiplies DisplayTime to get ms - why not =100?

// LED Pattern Table in PROGMEM - last column is display time in 100ms units
// TODO this could be a lot more compact but not with binary pattern representation
prog_uchar PROGMEM PatternTable[] = {

//1   //2   //3   //4   //5   //6   //7   //8   //9   //10  //11  //12  //13  //14  //15  //16     //row numbers, very useful
B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,10,//empty set 
  
  
//Code goes here, i started you off above





// this is a dummy element for end of table (duration=0) aka !!!DO NOT TOUCH!!!
B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, B0000, 0
};

/*
** Defining pins in array makes it easier to rearrange how cube is wired
** Adjust numbers here until LEDs flash in order - L to R, T to B
** Note that analog inputs 0-5 are also digital outputs 14-19!
** Pin DigitalOut0 (serial RX) and AnalogIn5 are left open for future apps
*/

int LEDPin[] = {13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, A5, A4};
int PlanePin[] = {A0, A1, A2, A3};

// initialization
void setup()
{
int pin; // loop counter
// set up LED pins as output (active HIGH)
for (pin=0; pin<PLANESIZE; pin++) {
pinMode( LEDPin[pin], OUTPUT );
}
// set up plane pins as outputs (active LOW)
for (pin=0; pin<CUBESIZE; pin++) {
pinMode( PlanePin[pin], OUTPUT );
}
}

// display pattern in table until DisplayTime is zero (then repeat)
void loop()
{
// declare variables
byte PatternBuf[PLANESIZE]; // saves current pattern from PatternTable
int PatternIdx;
byte DisplayTime; // time*100ms to display pattern
unsigned long EndTime;
int plane; // loop counter for cube refresh
int patbufidx; // indexes which byte from pattern buffer
int ledrow; // counts LEDs in refresh loop
int ledcol; // counts LEDs in refresh loop
int ledpin; // counts LEDs in refresh loop

// Initialize PatternIdx to beginning of pattern table
PatternIdx = 0;
// loop over entries in pattern table - while DisplayTime>0
do {
// read pattern from PROGMEM and save in array
memcpy_P( PatternBuf, PatternTable+PatternIdx, PLANESIZE );
PatternIdx += PLANESIZE;
// read DisplayTime from PROGMEM and increment index
DisplayTime = pgm_read_byte_near( PatternTable + PatternIdx++ );
// compute EndTime from current time (ms) and DisplayTime
EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST;

// loop while DisplayTime>0 and current time < EndTime
while ( millis() < EndTime ) {
patbufidx = 0; // reset index counter to beginning of buffer
// loop over planes
for (plane=0; plane<CUBESIZE; plane++) {
// turn previous plane off
if (plane==0) {
digitalWrite( PlanePin[CUBESIZE-1], HIGH );
} else {
digitalWrite( PlanePin[plane-1], HIGH );
}

// load current plane pattern data into ports
ledpin = 0;
for (ledrow=0; ledrow<CUBESIZE; ledrow++) {
for (ledcol=0; ledcol<CUBESIZE; ledcol++) {
digitalWrite( LEDPin[ledpin++], PatternBuf[patbufidx] & (1 << ledcol) );
}
patbufidx++;
}

// turn current plane on
digitalWrite( PlanePin[plane], LOW );
// delay PLANETIME us
delayMicroseconds( PLANETIME );
} // for plane
} // while <EndTime
} while (DisplayTime > 0); // read patterns until time=0 which signals end
}

se me pude-se encaminhar na correta maneira de ter tudo a funcionar seria impecavel
sou novinho nestas coisas e tudo parece tao complicado ainda tenho muito que aprender, tem que se começar por algum lado hehe

desde já agradeço a sua ajuda

Devia também dizer ao bubulindo, que este assunto já esta a ser discutido aqui.

Ahh... já tens mais do que ajuda suficiente então. :slight_smile:

sim Luis quando fiz o primeiro post foi na parte em ingles só depois notei que tinha uma secção para portugueses hehe peço desculpas desde já

de qualquer forma tou um pouco perdido no que seria a melhor solução para tar tudo a funcionar bem
:frowning:

Mesmo postando na "parte em Inglês", a primeira coisa que deveria ter feito devia ter sido ler as regas. Repare, por exemplo no ponto 3.
Recomeçando a discussão do zero, vão-se fazer as mesmas perguntas, às quais vai ser dada a mesma resposta e vamos todos estar aqui a perder tempo. A mim isso parece-me uma grande falta de respeito para com quem vem aqui tentar ajudar de forma desinteressada. Para não falar do facto de vir e nem sequer ter curiosidade em ler as regras, que estão fixas na maioria das secções do fórum.

As minhas desculpas por a falta de atenção