Σάββατο 9 Απριλίου 2011
Led Cube 4x4x4

Σε αυτό το άρθρο μπορούμε να κάνουμε ένα κύβο 4x4x4 με led που να ελέγχουμε με ένα Arduino. Θα χρειαστούμε:
- 1 Arduino
- 64 led
- Καλώδια
- 4 transistor NPN (Εγώ χρησιμοποίησα το2N2222)
- 4 αντιστάσεις
- Κολλητήρι για το στήσιμο του κύβου
Προαιρετικά
Πλακέτα PCB
Για να στήσω τον κύβο, χρησιμοποίησα ένα ξύλο το οποίο τρύπησα ώστε να στηρίξω το κάθε επίπεδο των led για να τα κολλήσω.
Έβαλα τα led Στις θέσεις τους και ένωσα όλες τις καθόδους μεταξύ τους.
Συνέχισα και με τα υπόλοιπα επίπεδα του κύβου...
Στην συνέχεια άρχισα να κολλάω τα επίπεδα μεταξύ τους. Κάθε στήλη είναι ενωμένη μεταξύ της με τις ανόδους των led.
Ο κύβος μας είναι έτοιμος... Τώρα μένει να τον συνδέσουμε με το arduino και να γράψουμε και τον κώδικα. Πρέπει να συνδέσουμε την κάθε στήλη του κύβου μας με ένα pin του arduino. Δηλαδή 16 pin. Το arduino uno που χρησιμοποιώ εγώ έχει μόνο 13 ψηφιακά pin, αλλά μπορούμε να δουλέψουμε και με τα αναλογικά ως 14-19. Συνδέουμε με την σειρά τις στήλες από το pin 0 έως το pin 15. Τα επίπεδα τώρα τα συνδέουμε στους συλλέκτες των transistor (με τις αντιστάσεις ανάμεσά τους) των οποίων η βάση συνδέεται στα pin 16-19 και ο εκπομπός στην γείωση.
Έχουμε τελειώσει με τις συνδέσεις και το μόνο που μένει είναι ο κώδικας. Παρακάτω έχω κάποια δικά μου σχέδια, αλλά υπάρχουν πολλά που μπορούν να γίνουν με λίγη φαντασία...
int time = 50; //delay time
int cols= 16; //stiles
int rows= 4; //epipeda
int ledcol[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
int ledrow[] = {16, 17, 18, 19 };
void setup() {
int thisPin;
for (int thisPin = 0; thisPin < cols; thisPin++) {
pinMode(ledcol[thisPin], OUTPUT);
}
for (int thisPin = 0; thisPin < rows; thisPin++) {
pinMode(ledrow[thisPin], OUTPUT);
}
}
void loop() {
//--------------------------------------------------//
for (int thisRow = 0; thisRow < rows; thisRow++) {
digitalWrite(ledrow[thisRow],HIGH);
for (int thisPin = 0; thisPin < cols; thisPin++) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
digitalWrite(ledcol[thisPin],LOW);
}
digitalWrite(ledrow[thisRow],LOW);
}
//--------------------------------------------------//
for (int thisPin = 0; thisPin < cols; thisPin++) {
digitalWrite(ledcol[thisPin],HIGH);
for (int thisRow = 0; thisRow < rows; thisRow++) {
digitalWrite(ledrow[thisRow],HIGH);
delay(time);
digitalWrite(ledrow[thisRow],LOW);
}
digitalWrite(ledcol[thisPin],LOW);
}
//--------------------------------------------------//
for (int thisRow = 0; thisRow < rows; thisRow++) {
digitalWrite(ledrow[thisRow],HIGH);
for (int thisPin = 0; thisPin < rows; thisPin++) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
digitalWrite(ledcol[thisPin],LOW);
}
for (int thisPin = 7; thisPin < 16; thisPin=thisPin+4) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
digitalWrite(ledcol[thisPin],LOW);
}
for (int thisPin = 14; thisPin > 11; thisPin--) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
digitalWrite(ledcol[thisPin],LOW);
}
for (int thisPin =8 ; thisPin > 3; thisPin=thisPin-4) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
digitalWrite(ledcol[thisPin],LOW);
}
digitalWrite(ledrow[thisRow],LOW);
}//rows
//--------------------------------------------------//
for (int repeat = 0; repeat < 2; repeat++) {
for (int thisRow = 0; thisRow < rows; thisRow++) {
digitalWrite(ledrow[thisRow],HIGH);
}
for (int thisPin = 0; thisPin < rows; thisPin++) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
}
for (int thisPin = 7; thisPin < 16; thisPin=thisPin+4) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
}
for (int thisPin = 14; thisPin > 11; thisPin--) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
}
for (int thisPin =8 ; thisPin > 3; thisPin=thisPin-4) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
}
for (int thisPin = 0; thisPin < rows; thisPin++) {
digitalWrite(ledcol[thisPin],LOW);
delay(time);
}
for (int thisPin = 7; thisPin < 16; thisPin=thisPin+4) {
digitalWrite(ledcol[thisPin],LOW);
delay(time);
}
for (int thisPin = 14; thisPin > 11; thisPin--) {
digitalWrite(ledcol[thisPin],LOW);
delay(time);
}
for (int thisPin =8 ; thisPin > 3; thisPin=thisPin-4) {
digitalWrite(ledcol[thisPin],LOW);
delay(time);
}
for (int thisRow = 0; thisRow < rows; thisRow++) {
digitalWrite(ledrow[thisRow],LOW);
}
}//repeat
//--------------------------------------------------//
for (int repeat = 0; repeat < 2; repeat++) {
for (int thisRow = 0; thisRow < rows; thisRow++) {
digitalWrite(ledrow[thisRow],HIGH);
}
for (int thisPin =0 ; thisPin < 13; thisPin=thisPin+4) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
}
for (int thisPin = 13; thisPin < 16; thisPin++) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
}
for (int thisPin = 11; thisPin > 2; thisPin=thisPin-4) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
}
for (int thisPin = 2; thisPin > 0; thisPin--) {
digitalWrite(ledcol[thisPin],HIGH);
delay(time);
}
for (int thisPin =0 ; thisPin < 13; thisPin=thisPin+4) {
digitalWrite(ledcol[thisPin],LOW);
delay(time);
}
for (int thisPin = 13; thisPin < 16; thisPin++) {
digitalWrite(ledcol[thisPin],LOW);
delay(time);
}
for (int thisPin = 11; thisPin > 2; thisPin=thisPin-4) {
digitalWrite(ledcol[thisPin],LOW);
delay(time);
}
for (int thisPin = 2; thisPin > 0; thisPin--) {
digitalWrite(ledcol[thisPin],LOW);
delay(time);
}
for (int thisRow = 0; thisRow < rows; thisRow++) {
digitalWrite(ledrow[thisRow],LOW);
}
}//repeat
//--------------------------------------------------//
for (int thisPin = 0; thisPin < rows; thisPin++) {
digitalWrite(ledrow[thisPin],HIGH);
}
for (int repeat = 0; repeat < 2; repeat++) {
for (int thisCol = 3; thisCol < cols-3; thisCol=thisCol+3) {
digitalWrite(ledcol[thisCol],HIGH);
}
delay(500);
for (int thisCol = 3; thisCol < cols-3; thisCol=thisCol+3) {
digitalWrite(ledcol[thisCol],LOW);
}
for (int thisCol = 0; thisCol < cols; thisCol=thisCol+5) {
digitalWrite(ledcol[thisCol],HIGH);
}
delay(500);
for (int thisCol = 0; thisCol < cols; thisCol=thisCol+5) {
digitalWrite(ledcol[thisCol],LOW);
}
}
//--------------------------------------------------//
for (int repeat = 0; repeat < 100; repeat++) {
int randCol = random(cols);
int randRow = random(rows);
digitalWrite(ledcol[randCol],HIGH);
digitalWrite(ledrow[randRow],HIGH);
delay(time);
digitalWrite(ledcol[randCol],LOW);
digitalWrite(ledrow[randRow],LOW);
}
}//void loop
Ένα μεγάλο ευχαριστώ στον traxterry :)
Led Cube 4x4x4
2011-04-09T02:18:00+03:00
Unknown
arduino|
Εγγραφή σε:
Σχόλια ανάρτησης (Atom)







