4x4x4 LED KÜP

                                  
                                                     
                                                                 4X4X4 LED KÜP 
4x4x4 led küp

     Hoş geldiniz arkadaşlar size bugün 4x4x4  led küp uygulamamı nasıl yaptığımı anlatacağım.İlk olarak kullandığım malzemlerı anlatayım.


1-Ardunio uno
2 -64 adet led diyot
3- Lehim telii
4 -Havya
5-Yeteri kadar zil teli
6-kontra plak(ledleri kolay dizmek için)


Uygulamama ilk olarak şablon kağıdımı çizerek başladım.
    Çizdiğimiz şablonu kontrplak üzerine yerleştiriyoruz. okların çıktığı noktalara matkap ile ledinize uygun delikler açıyoruz.
4x4x4 led küp şablon

başta hesaplamayarak ardunio uno uclarını 5x5x5 şeklinde  yapacaktım fakat  elimde ardunio mega bulunmuyordu sonradan 4x4x4 yapmaya kara verdim.Şekildeki gibi  delikleri açtıktan sonra 64 
ledlerin katot uçlarını aşağıdaki  şekildeki gibi  büküyoruz.

led

Sonra ledlerin katot uçlarını  aşağıdaki şekildeki gibi lehimliyoruz.

led bağlantı


bu lehimleme kontrplak üzerinde yapılacak küp şeklinin  alınması için.bu sıradan 4 adet yapıyoruz.





sonra katot uçlarına iki adet zil teli  lehimliyoruz..



bu yaptığımız 16 led ten 4 adet daha yapıyoruz. işlem bittikten sonra her ledin anot uçlarını bi altındaki ledin anot uçlarına bağlıyoruz. yani lehimliyoruz. 



4 katmanı da birbirine anot uçlarından lehim yaparak birleştirdik. sıra geldi ardunio bağlantılarına.
en alttan çıkan anot uçlarını şekildeki sıra ile ardunio ya bağlıyoruz. yan taraftan çıkan katot uçlarını da 
1.Katmanın A2 'ye 
2.Katmanı A3' e
3. Katmanı A4' e
4. Katmanı  A' e



Bu işlem bittikten sonra sıra kodlamaya geldi. kodumuz aşağıdaki gibidir..
yeşil olan yere kedi kodunuzu  yazabilirsiniz. bir sonraki yazımda yabancı sitelerde bulunan  bi programla 4x4x4 led küp konrol etmeyi anlatacağım......



KOD

#include <avr/pgmspace.h> // Datayi SRAM yerine Flash�ta depolamaya yarar.

#define CUBESIZE 4 // Kup boyutu
#define PLANESIZE CUBESIZE*CUBESIZE // Duzlem boyutu
#define PLANETIME 3333 // Her duzlemde bize gosterilen zaman -> 100 Hz yenileme
#define TIMECONST 20 

// PROGMEM bir degisken degistirici (variable modifier) oldugundan degisken tanimlanirken hangi sirada kullanildi�inin onemi yoktur. Su sekillerde de kullanilabilir:
// degisken_tipi degisken_adi[] PROGMEM = {}
// degisken_tipi PROGMEM degisken_adi[] = {}
// PROGMEM degisken_tipi degisken_adi[] = {}

const unsigned char PROGMEM DesenTablo[] = {


  // capraz yanip butun ledlerin yanip sonmesi
  B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, B0000,B0011,B1100,B0000, 5,
  B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 5,
  B0000,B0010,B0100,B0000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 5,
  B0000,B0000,B0000,B0000, B0000,B0010,B0100,B0000, B0001,B0010,B0100,B1000, B0001,B0010,B0100,B1000, 5,
  B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0010,B0100,B0000, B0001,B0010,B0100,B1000, 5,
  B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0010,B0100,B0000, 5,
  B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 5,
  B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1000, 5,
  B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1000, B0000,B0010,B0000,B1000, 5,
  B0000,B0000,B0000,B0000, B0000,B0000,B0000,B1000, B0000,B0010,B0000,B1000, B0000,B0010,B1000,B0000, 5,
  B0000,B0000,B0000,B1000, B0000,B0010,B0000,B1000, B0000,B0010,B1000,B0000, B0000,B0000,B1000,B0000, 5,
  B0000,B0010,B0000,B1000, B0000,B0010,B1000,B0000, B0000,B0000,B1000,B0000, B0000,B0000,B0000,B0000, 5,
  B0000,B0010,B1000,B0000, B0000,B0000,B1000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 5,
  B0000,B0000,B1000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 5,
  B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
  B0000,B0100,B0010,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
  B0000,B0110,B0110,B0000, B0000,B0100,B0010,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
  B1001,B0110,B0110,B1001, B0000,B0110,B0110,B0000, B0000,B0100,B0010,B0000, B0000,B0000,B0000,B0000, 10,
  B1101,B0111,B1110,B1011, B1001,B0110,B0110,B1001, B0000,B0110,B0110,B0000, B0000,B0100,B0010,B0000, 10,
  B1111,B1111,B1111,B1111, B1101,B0111,B1110,B1011, B1001,B0110,B0110,B1001, B0000,B0110,B0110,B0000, 10,
  B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1101,B0111,B1110,B1011, B1001,B0110,B0110,B1001, 10,
  B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1101,B0111,B1110,B1011, 10,
  B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, 10,
  B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
  B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, 10,
  B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, 10,
  B1111,B1111,B1111,B1111, B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
  B1111,B1111,B1111,B1111, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,
  B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 10,


// (time=0)surenin sifir olmasi bu tablonun sonu icin bir unsurdur. 
  B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, B0000,B0000,B0000,B0000, 0
};


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


void setup()
{
int pin; // dongu sayaci
// Cikis olarak LED pinlerine kuruyoruz. (active HIGH)
for (pin=0; pin<PLANESIZE; pin++) {
pinMode( LEDPin[pin], OUTPUT );
}
// Cikis olarak duzlem pinlerine kuruyoruz. (active LOW)
for (pin=0; pin<CUBESIZE; pin++) {
pinMode( PlanePin[pin], OUTPUT );
}
}

// Tablodaki goruntuleme desen DisplayTime sifir olana kadar (daha sonra tekrarla)
void loop()
{
// degiskenleri bildirmek
byte DesenGnc[PLANESIZE]; // DesenTablo gecerli desen kaydeder.
int DesenIdx;
byte DisplayTime; // time*100ms deseni goruntulemek icin
unsigned long EndTime;
int plane; // kup yenilemek icin dongu sayaci
int desgncidx; // desen tampon bayt indeksler.
int ledyatay; // yenileme dongu icinde LED sayar.
int leddikey; // yenileme dongu icinde LED sayar.
int ledpin; // yenileme dongu icinde LED sayar.

// Desen tablonun baslangicina DesenIdx baslat.
DesenIdx = 0;
// desen tablosundaki girdiler uzerinde dongu - while DisplayTime>0
do {
// PROGMEM ile desen okumak ve dizide kaydetmek.
memcpy_P( DesenGnc, DesenTablo+DesenIdx, PLANESIZE );
DesenIdx += PLANESIZE;
// PROGMEM ve artim dizinden DisplayTime okumak.
DisplayTime = pgm_read_byte_near( DesenTablo + DesenIdx++ );
// simdiki zaman ve DisplayTime ile EndTime hesaplamak.
EndTime = millis() + ((unsigned long) DisplayTime) * TIMECONST;

// dongu sirasinda DisplayTime>0 ve simdiki zaman<EndTime
while ( millis() < EndTime ) {
desgncidx = 0; // tampon baslangicina indeks sayacini sifirlamak.
// duzlemler uzerinde dongu
for (plane=0; plane<CUBESIZE; plane++) {
// onceki duzlem kapatmak.
if (plane==0) {
digitalWrite( PlanePin[CUBESIZE-1], HIGH );
} else {
digitalWrite( PlanePin[plane-1], HIGH );
}

// baglanti noktalarina gecerli duzlem desen verileri yüklemek.
ledpin = 0;
for (ledyatay=0; ledyatay<CUBESIZE; ledyatay++) {
for (leddikey=0; leddikey<CUBESIZE; leddikey++) {
digitalWrite( LEDPin[ledpin++], DesenGnc[desgncidx] & (1 << leddikey) );
}
desgncidx++;
}

// gecerli duzlem acmak.
digitalWrite( PlanePin[plane], LOW );

delayMicroseconds( PLANETIME );
} // duzlem icin
} // while <EndTime
} while (DisplayTime > 0);
}



Hiç yorum yok:

Blogger tarafından desteklenmektedir.