4x4x4 LED KÜP
4X4X4 LED KÜP
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.
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.
Sonra ledlerin katot uçlarını aşağıdaki şekildeki gibi lehimliyoruz.
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: