Studentenproject: LED Cube

Hallo.

de zomervakanties in Duitsland naderen het einde en sommige jonge bastlers hebben deze vrije tijd gebruikt om hun eigen projecten op de been te zetten.

Vandaag willen we graag niklas heinzel geef de gelegenheid om zijn project in onze blog te presenteren. Niklas heeft de klassieke LED-kubus gemaakt en volledig ontworpen en geprogrammeerd:

Vandaag wil ik u voorstellen aan een nieuw opwindend project, dat ik thuis heb gebouwd, een LED Cube in de dimensies 4x4x4.

Om dit te doen, gebruik ik:

  • 1 x Nano V3
  • 4 x NPN 2n2222 Transistors
  • 4 x 1k weerstanden
  • 16 x 220weerstanden
  • 64 x blauwe diffuse LED's (5 mm)
  • Micro USB-poort
  • Geel LED (SMD)

Om de LED-kubus te bouwen:

Voor alle 64 LED's wordt de anode (altijd op dezelfde locatie) 90 ° gebogen. Deze worden vervolgens naar de pluspaal geloosd.
Zoals te zien is in de bovenstaande afbeelding, bestaat de kubus uit een X-Y-as en 4 lagen die over elkaar zijn gestapeld. De onderste laag heeft nummer 0 en het bovenste getal 3. Evenzo zijn de LED's genummerd als een driedimensionale matrix. De linkeronder LED bevindt zich op laag 0 (1,1). De LED hierboven bevindt zich ook op laag 1 (1,1). De rechter LED op laag 0 (2,1) enzovoort. Alle horizontale lagen zijn de negatieve pinnen van de gesoldeerde LED's.
Alle positieve pinnen van de LED's worden behandeld als kolommen van deze matrixkubus. Dus we hebben 4 lagen en 16 kolommen waardoor het 20 draden verbonden is met de Arduino. De positieve pennen (lagen) hebben 220 Ohm-weerstanden.

 

De assemblage van de kubus:

Eerst hebben we een matig dik karton of hout nodig. Nu boren we gaten in, zodat een 4 × 4 kubuspatroon wordt gecreëerd op dezelfde afstanden tussen alle gaten.
5 mm gaten (elke hole is 2,4 cm van de volgende (midden)) werden geboord als stencils voor de LED's.
Nu moet je je LED's testen en voorbereiden. Hiertoe kunt u een 3V-knoppencel gebruiken. Test alle LED's zodat je later geen problemen zult hebben!
Als u wilt dat het licht uit alle zijden van de LED vertrekt, kunt u het licht verspreiden door de plastic schaal met schuurpapier te wrijven.
Plaats de LED's in de doos, maar let op hun uitlijning. De positieve pinnen van de LED's moeten gebogen zijn en de negatieve zijn verbonden als een laag. Dat komt omdat we vier van dergelijke lagen gaan maken en het is gemakkelijk om ze samen te solderen.

Deze lagen herhalen we 4x en slenter ze gewoon over elkaar, waar we alle + pinnen verbinden en ze over elkaar plaatsen.

 

Het bord, de uitsteeksel en de verbindingen:

in mijn geval koos ik de volgende pinout om de kubus te besturen zoals in een matrix:

U moet deze verbindingen maken en ook aandacht besteden aan de juiste keuze van de pinnen, anders zal de animatie niet goed later.

Het bord dat ik als volgt heb ontworpen en zou je maar één idee moeten geven hoe de lay-out eruit zou kunnen zien:

Download-Link Platine

 

Fehlt nur nor der Code:

 

//LED-Cube 1.0
//Niklas Heinzel
//2019   int Schicht[4]={A3,A2,A1,A0}; //initialisierend und deklarierend geführte Schichten   int Spalte[16]={13,12,11,10,9,8,7,6,5,4,3,2,1,0,A5,A4}; //initialisieren und deklarieren geführte Reihen   int Zeit = 250;



leather Instellen()
{   für(int i = 0; i<16; i++)   {     pinMode(Spalte[i], OUTPUT);  // rijen instellen naar ouput   }   für(int i = 0; i<4; i++)   {     pinMode(Schicht[i], OUTPUT);  //Einstellschichten zur Ausgabe   }   randomSeed(analog lessons(10));  // willekeurig zien voor willekeurig patroon
}

leather Schleife()
{   Abschalt Everything();   flackern();   Einder all();   Verzögerung(Zeit);   turnOnAndOffAllByLayerUpAndDownNotTimed();   layerstompUpAndDown();   spiraalvormige AndOut();   turnOnAndOffAllByColumnSideways();   Verzögerung(Zeit);   rondEdgeDown();   Abschalt Everything();   randomflicker();   randomRain();   diagonale rechthoek();   ga door AllLedsOneAtATime();   propeller();   spiraalvormige AndOut();   flickerOff();   draai alles();   vertraging(2000);
}


// zet alles uit
leegte draai alles()
 {    voor(int i = 0; i<16; i++)    {      digitalWrite(kolom[i], 1);    }    voor(int i = 0; i<4; i++)    {      digitalWrite(laag[i], 0);    }
 }

/ / zet alles aan
leegte alles aanzetten()
{   voor(int i = 0; i<16; i++)   {     digitalWrite(kolom[i], 0);   }   // aanzetten van lagen   voor(int i = 0; i<4; i++)   {     digitalWrite(laag[i], 1);   }
}
// draai kolommen uit
leegte turnColumnsOff()
{   voor(int i = 0; i<16; i++)   {     digitalWrite(kolom[i], 1);   }
}
// flikker aan
leegte flickerOn()
{   int i = 150;   terwijl(i != 0)   {     alles aanzetten();     vertraging(i);     draai alles();     vertraging(i);     i-= 5;   }
}
// zet alles op en uit met laag op en neer NIET TIMED
leegte turnOnAndOffAllByLayerUpAndDownNotTimed()
{   int x = 75;   voor(int i = 5; i != 0; i--)   {     alles aanzetten();     voor(int i = 4; i!=0; i--)     {       digitalWrite(laag[i-1], 0);       vertraging(x);     }     voor(int i = 0; i<4; i++)     {       digitalWrite(laag[i], 1);       vertraging(x);     }       voor(int i = 0; i<4; i++)     {       digitalWrite(laag[i], 0);       vertraging(x);     }     voor(int i = 4; i!=0; i--)     {       digitalWrite(laag[i-1], 1);       vertraging(x);     }   }
}
// zet alles zijwaarts en zijwaarts aan en uit met kolom
leegte turnOnAndOffAllByColumnSideways()
{   int x = 75;   draai alles();   // draai op lagen   voor(int i = 0; i<4; i++)   {     digitalWrite(laag[i], 1);   }   voor(int y = 0; y<3; y++)   {     // draai op 0-3     voor(int i = 0; i<4; i++)     {       digitalWrite(kolom[i], 0);       vertraging(x);     }     // draai op 4-7     voor(int i = 4; i<8; i++)     {       digitalWrite(kolom[i], 0);       vertraging(x);     }     // draai op 8-11     voor(int i = 8; i<12; i++)     {       digitalWrite(kolom[i], 0);       vertraging(x);     }     // draai op 12-15     voor(int i = 12; i<16; i++)     {       digitalWrite(kolom[i], 0);       vertraging(x);     }     // uitschakel 0-3     voor(int i = 0; i<4; i++)     {       digitalWrite(kolom[i], 1);       vertraging(x);     }     // uitschakelen 4-7     voor(int i = 4; i<8; i++)     {       digitalWrite(kolom[i], 1);       vertraging(x);     }     // uitschakelen 8-11     voor(int i = 8; i<12; i++)     {       digitalWrite(kolom[i], 1);       vertraging(x);     }     // zet 12-15 uit     voor(int i = 12; i<16; i++)     {       digitalWrite(kolom[i], 1);       vertraging(x);     }     // draai op 12-15     voor(int i = 12; i<16; i++)     {       digitalWrite(kolom[i], 0);       vertraging(x);     }     // draai op 8-11     voor(int i = 8; i<12; i++)     {       digitalWrite(kolom[i], 0);       vertraging(x);     }     // draai op 4-7     voor(int i = 4; i<8; i++)     {       digitalWrite(kolom[i], 0);       vertraging(x);     }     // draai op 0-3     voor(int i = 0; i<4; i++)     {       digitalWrite(kolom[i], 0);       vertraging(x);     }     // zet 12-15 uit     voor(int i = 12; i<16; i++)     {       digitalWrite(kolom[i], 1);       vertraging(x);     }     // uitschakelen 8-11     voor(int i = 8; i<12; i++)     {       digitalWrite(kolom[i], 1);       vertraging(x);     }     // uitschakelen 4-7     voor(int i = 4; i<8; i++)     {       digitalWrite(kolom[i], 1);       vertraging(x);     }     // uitschakel 0-3     voor(int i = 0; i<4; i++)     {       digitalWrite(kolom[i], 1);       vertraging(x);     }   }
}
// op en neer stomp één laag
leegte layerstompUpAndDown()
{   int x = 75;   voor(int i = 0; i<4; i++)   {     digitalWrite(laag[i], 0);   }   voor(int y = 0; y<5; y++)   {     voor(int tellen = 0; tellen<1; tellen++)     {       voor(int i = 0; i<4; i++)       {         digitalWrite(laag[i], 1);         vertraging(x);         digitalWrite(laag[i], 0);       }       voor(int i = 4; i !=0; i--)       {         digitalWrite(laag[i-1], 1);         vertraging(x);         digitalWrite(laag[i-1], 0);       }     }     voor(int i = 0; i<4; i++)     {       digitalWrite(laag[i], 1);       vertraging(x);     }     voor(int i = 4; i!=0; i--)     {       digitalWrite(laag[i-1], 0);       vertraging(x);     }   }
}
// flikker off
leegte flickerOff()
{   alles aanzetten();   voor(int i = 0; i!= 150; i+=5)   {     draai alles();     vertraging(i+50);     alles aanzetten();     vertraging(i);   }
}
// Ronde rand van de kubus naar beneden
leegte rondEdgeDown()
{   voor(int x = 200; x != 0; x -=50)   {     draai alles();     voor(int i = 4; i != 0; i--)     {       digitalWrite(laag[i-1], 1);       digitalWrite(kolom[5], 0);       digitalWrite(kolom[6], 0);       digitalWrite(kolom[9], 0);       digitalWrite(kolom[10], 0);       digitalWrite(kolom[0], 0);       vertraging(x);       digitalWrite(kolom[0], 1);       digitalWrite(kolom[4], 0);       vertraging(x);       digitalWrite(kolom[4], 1);       digitalWrite(kolom[8], 0);       vertraging(x);       digitalWrite(kolom[8], 1);       digitalWrite(kolom[12], 0);       vertraging(x);       digitalWrite(kolom[12], 1);       digitalWrite(kolom[13], 0);       vertraging(x);       digitalWrite(kolom[13], 1);       digitalWrite(kolom[15], 0);       vertraging(x);       digitalWrite(kolom[15], 1);       digitalWrite(kolom[14], 0);       vertraging(x);       digitalWrite(kolom[14], 1);       digitalWrite(kolom[11], 0);       vertraging(x);       digitalWrite(kolom[11], 1);       digitalWrite(kolom[7], 0);       vertraging(x);       digitalWrite(kolom[7], 1);       digitalWrite(kolom[3], 0);       vertraging(x);       digitalWrite(kolom[3], 1);       digitalWrite(kolom[2], 0);       vertraging(x);       digitalWrite(kolom[2], 1);       digitalWrite(kolom[1], 0);       vertraging(x);       digitalWrite(kolom[1], 1);     }   }
}
// willekeurige flikkering
leegte randomflicker()
{   draai alles();   int x = 10;   voor(int i = 0; i !=750; i+=2)   {   int randomLayer = willekeurig(0,4);   int randomColumn = willekeurig(0,16);   digitalWrite(laag[randomLayer], 1);   digitalWrite(kolom[randomColumn], 0);   vertraging(x);   digitalWrite(laag[randomLayer], 0);   digitalWrite(kolom[randomColumn], 1);   vertraging(x);   }
}
// willekeurige regen
leegte randomRain()
{   draai alles();   int x = 100;   voor(int i = 0; i!=60; i+=2)   {     int randomColumn = willekeurig(0,16);     digitalWrite(kolom[randomColumn], 0);     digitalWrite(laag[0], 1);     vertraging(x+50);     digitalWrite(laag[0], 0);     digitalWrite(laag[1], 1);     vertraging(x);     digitalWrite(laag[1], 0);     digitalWrite(laag[2], 1);     vertraging(x);     digitalWrite(laag[2], 0);     digitalWrite(laag[3], 1);     vertraging(x+50);     digitalWrite(laag[3], 0);     digitalWrite(kolom[randomColumn], 1);   }
}
//diagonale rechthoek
leegte diagonale rechthoek()
{   int x = 350;   draai alles();   voor(int tellen = 0; tellen<5; tellen++)   {     // Linksboven     voor(int i = 0; i<8; i++)     {       digitalWrite(kolom[i], 0);     }     digitalWrite(laag[3], 1);     digitalWrite(laag[2], 1);     vertraging(x);     draai alles();     // midden midden midden     voor(int i = 4; i<12; i++)     {       digitalWrite(kolom[i], 0);     }     digitalWrite(laag[1], 1);     digitalWrite(laag[2], 1);     vertraging(x);     draai alles();     //onder rechts     voor(int i = 8; i<16; i++)     {       digitalWrite(kolom[i], 0);     }     digitalWrite(laag[0], 1);     digitalWrite(laag[1], 1);     vertraging(x);     draai alles();     //bottom middle     voor(int i = 4; i<12; i++)     {       digitalWrite(kolom[i], 0);     }     digitalWrite(laag[0], 1);     digitalWrite(laag[1], 1);     vertraging(x);     draai alles();     //bottom left     voor(int i = 0; i<8; i++)     {       digitalWrite(kolom[i], 0);     }     digitalWrite(laag[0], 1);     digitalWrite(laag[1], 1);     vertraging(x);     draai alles();     // midden midden midden     voor(int i = 4; i<12; i++)     {       digitalWrite(kolom[i], 0);     }     digitalWrite(laag[1], 1);     digitalWrite(laag[2], 1);     vertraging(x);     draai alles();     // Rechtsboven     voor(int i = 8; i<16; i++)     {       digitalWrite(kolom[i], 0);     }     digitalWrite(laag[2], 1);     digitalWrite(laag[3], 1);     vertraging(x);     draai alles();     //top midden     voor(int i = 4; i<12; i++)     {       digitalWrite(kolom[i], 0);     }     digitalWrite(laag[2], 1);     digitalWrite(laag[3], 1);     vertraging(x);     draai alles();   }   // Linksboven   voor(int i = 0; i<8; i++)   {     digitalWrite(kolom[i], 0);   }   digitalWrite(laag[3], 1);   digitalWrite(laag[2], 1);   vertraging(x);   draai alles();
}
//propeller
leegte propeller()
{   draai alles();   int x = 90;   voor(int y = 4; y>0; y--)   {     voor(int i = 0; i<6; i++)     {       // draai op laag       digitalWrite(laag[y-1], 1);       //a1       turnColumnsOff();       digitalWrite(kolom[0], 0);       digitalWrite(kolom[5], 0);       digitalWrite(kolom[10], 0);       digitalWrite(kolom[15], 0);       vertraging(x);       // b1       turnColumnsOff();       digitalWrite(kolom[4], 0);       digitalWrite(kolom[5], 0);       digitalWrite(kolom[10], 0);       digitalWrite(kolom[11], 0);       vertraging(x);       //c1       turnColumnsOff();       digitalWrite(kolom[6], 0);       digitalWrite(kolom[7], 0);       digitalWrite(kolom[8], 0);       digitalWrite(kolom[9], 0);       vertraging(x);       // d1       turnColumnsOff();       digitalWrite(kolom[3], 0);       digitalWrite(kolom[6], 0);       digitalWrite(kolom[9], 0);       digitalWrite(kolom[12], 0);       vertraging(x);       // d2       turnColumnsOff();       digitalWrite(kolom[2], 0);       digitalWrite(kolom[6], 0);       digitalWrite(kolom[9], 0);       digitalWrite(kolom[13], 0);       vertraging(x);       // d3       turnColumnsOff();       digitalWrite(kolom[1], 0);       digitalWrite(kolom[5], 0);       digitalWrite(kolom[10], 0);       digitalWrite(kolom[14], 0);       vertraging(x);     }   }   // d4   turnColumnsOff();   digitalWrite(kolom[0], 0);   digitalWrite(kolom[5], 0);   digitalWrite(kolom[10], 0);   digitalWrite(kolom[15], 0);   vertraging(x);
}
//spiraal in en uit
leegte spiraalvormige AndOut()
{   alles aanzetten();   int x = 60;   voor(int i = 0; i<6; i++)   {     //spiraal in de klok mee     digitalWrite(kolom[0], 1);     vertraging(x);     digitalWrite(kolom[1], 1);     vertraging(x);     digitalWrite(kolom[2], 1);     vertraging(x);     digitalWrite(kolom[3], 1);     vertraging(x);     digitalWrite(kolom[7], 1);     vertraging(x);     digitalWrite(kolom[11], 1);     vertraging(x);     digitalWrite(kolom[15], 1);     vertraging(x);     digitalWrite(kolom[14], 1);     vertraging(x);     digitalWrite(kolom[13], 1);     vertraging(x);     digitalWrite(kolom[12], 1);     vertraging(x);     digitalWrite(kolom[8], 1);     vertraging(x);     digitalWrite(kolom[4], 1);     vertraging(x);     digitalWrite(kolom[5], 1);     vertraging(x);     digitalWrite(kolom[6], 1);     vertraging(x);     digitalWrite(kolom[10], 1);     vertraging(x);     digitalWrite(kolom[9], 1);     vertraging(x);
// spiraal uit tegen de klok in     digitalWrite(kolom[9], 0);     vertraging(x);     digitalWrite(kolom[10], 0);     vertraging(x);     digitalWrite(kolom[6], 0);     vertraging(x);     digitalWrite(kolom[5], 0);     vertraging(x);     digitalWrite(kolom[4], 0);     vertraging(x);     digitalWrite(kolom[8], 0);     vertraging(x);     digitalWrite(kolom[12], 0);     vertraging(x);     digitalWrite(kolom[13], 0);     vertraging(x);     digitalWrite(kolom[14], 0);     vertraging(x);     digitalWrite(kolom[15], 0);     vertraging(x);     digitalWrite(kolom[11], 0);     vertraging(x);     digitalWrite(kolom[7], 0);     vertraging(x);     digitalWrite(kolom[3], 0);     vertraging(x);     digitalWrite(kolom[2], 0);     vertraging(x);     digitalWrite(kolom[1], 0);     vertraging(x);     digitalWrite(kolom[0], 0);     vertraging(x);
//spiraal in tegen kloksgewijze     digitalWrite(kolom[0], 1);     vertraging(x);     digitalWrite(kolom[4], 1);     vertraging(x);     digitalWrite(kolom[8], 1);     vertraging(x);     digitalWrite(kolom[12], 1);     vertraging(x);     digitalWrite(kolom[13], 1);     vertraging(x);     digitalWrite(kolom[14], 1);     vertraging(x);     digitalWrite(kolom[15], 1);     vertraging(x);     digitalWrite(kolom[11], 1);     vertraging(x);     digitalWrite(kolom[7], 1);     vertraging(x);     digitalWrite(kolom[3], 1);     vertraging(x);     digitalWrite(kolom[2], 1);     vertraging(x);     digitalWrite(kolom[1], 1);     vertraging(x);     digitalWrite(kolom[5], 1);     vertraging(x);     digitalWrite(kolom[9], 1);     vertraging(x);     digitalWrite(kolom[10], 1);     vertraging(x);     digitalWrite(kolom[6], 1);     vertraging(x);
// spiraal met de klok mee     digitalWrite(kolom[6], 0);     vertraging(x);     digitalWrite(kolom[10], 0);     vertraging(x);     digitalWrite(kolom[9], 0);     vertraging(x);     digitalWrite(kolom[5], 0);     vertraging(x);     digitalWrite(kolom[1], 0);     vertraging(x);     digitalWrite(kolom[2], 0);     vertraging(x);     digitalWrite(kolom[3], 0);     vertraging(x);     digitalWrite(kolom[7], 0);     vertraging(x);     digitalWrite(kolom[11], 0);     vertraging(x);     digitalWrite(kolom[15], 0);     vertraging(x);     digitalWrite(kolom[14], 0);     vertraging(x);     digitalWrite(kolom[13], 0);     vertraging(x);     digitalWrite(kolom[12], 0);     vertraging(x);     digitalWrite(kolom[8], 0);     vertraging(x);     digitalWrite(kolom[4], 0);     vertraging(x);     digitalWrite(kolom[0], 0);     vertraging(x);   }
}
// ga door alle leds één voor één
leegte ga door AllLedsOneAtATime()
{   int x = 15;   draai alles();   voor(int y = 0; y<5; y++)   {     //0-3     voor(int tellen = 4; tellen != 0; tellen--)     {       digitalWrite(laag[tellen-1], 1);       voor(int i = 0; i<4; i++)       {         digitalWrite(kolom[i], 0);         vertraging(x);         digitalWrite(kolom[i], 1);         vertraging(x);       }     digitalWrite(laag[tellen-1], 0);     }     //4-7     voor(int tellen = 0; tellen < 4; tellen++)     {       digitalWrite(laag[tellen], 1);       voor(int i = 4; i<8; i++)       {         digitalWrite(kolom[i], 0);         vertraging(x);         digitalWrite(kolom[i], 1);         vertraging(x);       }     digitalWrite(laag[tellen], 0);     }     //8-11     voor(int tellen = 4; tellen != 0; tellen--)     {       digitalWrite(laag[tellen-1], 1);       voor(int i = 8; i<12; i++)       {         digitalWrite(kolom[i], 0);         vertraging(x);         digitalWrite(kolom[i], 1);         vertraging(x);       }     digitalWrite(laag[tellen-1], 0);     }     //12-15     voor(int tellen = 0; tellen < 4; tellen++)     {       digitalWrite(laag[tellen], 1);       voor(int i = 12; i<16; i++)       {         digitalWrite(kolom[i], 0);         vertraging(x);         digitalWrite(kolom[i], 1);         vertraging(x);       }     digitalWrite(laag[tellen], 0);     }   }
}

 

Wurde der Code geuploadet kann man die Animationen bewundern und ergänzen.

Für arduinoProjekte für anfänger

4 Kommentare

Niklas Heinzel

Niklas Heinzel

Die Platine kann bei mir erworben werden. Bei Interesse bitte an niklas-heinzel@gmx.de.

Niklas Heinzel

Niklas Heinzel

Die Platine kann erworben werden. Bei Interesse bitte an niklas-heinzel@gmx.de.

AxelF

AxelF

Kann man die Platine, wie abgebildet, käuflich erwerben?
Ich kann sie nämlich nicht herunterladen.

Andreas K.

Andreas K.

Hm… wie ist das mit der maximalen Strombelastung?
Ab 40mA pro Ausgangs-Pin bzw. 200mA in Summe auf allen Ausgangs-Pins (geht durch Masse bzw VCC) wird es beim 328 irgendwann kritisch.
Wenn alle LEDs leuchten, kommen mit den 220 Ohm Widerständens schon mal 300mA oder mehr zusammen, die dann insgesamt durch die Massepins fließen.
Wie lange macht der MC das mit?

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi