4x4x4 LED cube – deel 2 Dit deel beschrijft een mogelijke opbouw van de led cube. De constructie moet voor mij makkelijk in en uit elkaar te halen zijn. De Arduino is te interessant om zijn leven alleen in een doosje te slijten om ledjes aan te sturen. Als die makkelijk van de ledcube kan verwijderd worden voor andere experimenten dan is dat mooi meegenomen. We eindigen dit deel met een woordje over het programmeren van animaties . Na al dat bouwen willen we graag resultaat zien,niet?
De opbouw In deel 1 zagen we een opstelling met de weerstanden op het breadboard geprikt en een flatcable om de led cube aan te sluiten. Een volgende stap is dat de weerstanden op het printplaatje van de led cube worden gesoldeerd. Tevens voorzien we het plaatje van stacking headers waardoor we de ledcube boven op de Arduino kunnen prikken als een shield en toch nog aan alle in/outputpinnen van de Arduino kunnen. Het is nu zaak om goed te noteren welke led en bijhorende weerstand aan welke headerpin moet verbonden worden. Even het hoofd erbij houden dus.
Het ledcube shield heeft nu onderaan wel slordige verbindingen. Gelukkig zijn deze quasi niet te zien als alles is gemonteerd. Nota aan mezelf: later bij een volgend project (ja, we dromen al van een 8x8x8 led cube, eventueel met RGB-leds) zeker een ge-etst printplaatje gebruiken. Oogt veel netter.
Het ledcube shield op de Arduino Uno geprikt.
Nog voor aanvang van de bouw had ik al een behuizing voor de led cube in gedachten: een doorzichtige fotokubus van Casa voor net geen drie euro.
Deze schuift in 2 helften uit elkaar.
Iedere zijde is 9,5 cm lang.
In één helft worden twee sleuven gemaakt. Dit wordt de bodem van de kubus. Bedoeling is dat de pinnen van het shield er door kunnen zodat deze op de Arduino onder de kubus kunnen worden ingeprikt.
Zorg dat de lengte van de sleuven overeenkomt met de lengte van de Arduino aansluitpinnen dan kan Arduino + ledcube ten opzichte de doorzichtige kubus weinig verschuiven.
De pinnen van de stacking headers op het ledcube shield worden door de sleuven heen op de Arduino geprikt.
De Arduino zelf krijgt een plastiek doosje als bescherming. Hij past hierin als gegoten, er komt geen vijsje, draadje of lijm aan te pas.
Er dienen twee uitsparingen te worden gemaakt voor de USB connector en de aansluiting van de voeding. Onderaan is er plaats voor een 9V batterij indien we de led cube onafhankelijk willen opstellen (een aan/uit schakelaar is dan wenselijk maar makkelijk op het doosje te voorzien).
En dan is dit het uiteindelijk resultaat. Negeer de lensvervorming, de kubus is wel degelijk een kubus.
Maken van animaties Aangezien mijn programmeerkunsten zich op het basisniveau bevinden is het schrijven van C++ code voor complexe animaties op dit ogenblik te hoog gegrepen. Maar daarom nog niet getreurd, want Google is your best friend. Zo ook de mijne. Maar eerst een simpele sketch om op te warmen. Enkele For loops zorgen er voor dat de juiste leds oplichten of niet. /* 4*4*4 led cube test code oplichtende kolommen schuiven van achter naar voor en terug indeling van de kolommen: 13 14 15 16 9 10 11 12 5 6 7 8 1 2 3 4 */ // definieer de pinnen die anode en kathode aansturen int ledPin[]={ 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; // pin 0 = kolom 1 int lagenPin[]={ // 16 = onderste laag 16,17,18,19}; // variabelen int tijd = 50 ; int wacht = 200; int kolom = 0; //setup void setup() { for (int pin = 0; pin <4; pin++){ pinMode (lagenPin[pin], OUTPUT); digitalWrite(lagenPin[pin], LOW); } { for (int pin = 0; pin <16; pin++){ pinMode(ledPin[pin], OUTPUT); digitalWrite(ledPin[pin], LOW); } } } void loop(){ for (int wa = 0; wa < 16; wa=wa+4 ){ for (int kolom=0; kolom <4; kolom++){ digitalWrite(ledPin[kolom+wa], HIGH); for(int i=0; i<4; i++){ digitalWrite(lagenPin[i], LOW); } } delay(tijd); }
// iedere kathode negatief
// iedere anode negatief
// eerste 4 kolommen // anode positief = led aan // kathodes negatief voor laag i
// wacht even
{ for (int wa = 0; wa < 16; wa=wa+4 ){ for (int kolom=0; kolom <4; kolom++){ digitalWrite(ledPin[kolom+wa], LOW); for(int i=0; i<4; i++){ digitalWrite(lagenPin[i], LOW); } } delay(tijd); } delay(wacht);
// leds uit! // eerste 4 kolommen // anode negatief =led uit // kathodes negatief voor laag i
// wacht even // wacht voordat we de animatie andersom uitvoeren
} // en dan nu andersom for (int wa = 16; wa >-1; wa=wa-4 ){ for (int kolom=0; kolom <4; kolom++){ digitalWrite(ledPin[kolom+wa], HIGH); for(int i=0; i<4; i++) { digitalWrite(lagenPin[i], LOW); } } delay(tijd); } { for (int wa = 16; wa > -1; wa=wa-4 ){ for (int kolom=0; kolom <4; kolom++){ digitalWrite(ledPin[kolom+wa], LOW); for(int i=0; i<4; i++){ digitalWrite(lagenPin[i], LOW); } } delay(tijd); } delay(wacht); } }
Maar het kan ook anders. Ik vond een bruikbare sketch op de Instructables website http://www.instructables.com/id/The-4x4x4-LED-cube-Arduino/step5/PROGRAM/ want hier vind je een link naar een gezipte file genaamd LED_cube_4x4x4.zip (of direct op: http://www.instructables.com/files/orig/FV8/XM2M/GGPEXFII/FV8XM2MGGPEXFII.zip ) Eenvoudig gesteld maak je manueel patronen aan en die copieer je in de sketch. Dat lijkt simpel, en eigenlijk is het dat ook, maar anderzijds is het niet erg overzichtelijk. Een handig hulpmiddel daartoe is de website http://home.kpn.nl/ajvdmeij/makecode.html waar je aanklikt welke led aan of uit moet gezet werden. Niet iedere browser is geschikt, met Internet Explorer lukt het niet. Ik gebruik hiervoor Safari van Apple.
Eens het programma gestart blijven de patronen continu doorlopen. Je kan verschillende animatiepatronen uitproberen en die in een nieuwe sketch samenvoegen tot 1 langere animatie.
Met deze regels laten we alle leds aan en uitknipperen: // alles aan B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,B1111,5, // alles uit B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,B0000,5, //
Een gelijkaardig effect als met de For loop sketch verkrijgen we met de volgende regels: // heen en terug B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,3, B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,3, B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,3, B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,B1000,30, B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,B0100,3, B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,B0010,3, B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,B0001,27, //
Een vertikaal roterende beweging is in enkele eenvoudige regels toegevoegd: // roteer vertikaal B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,B1000,B0100,B0010,B0001,3, B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,B0000,B1100,B0011,B0000,3, B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,B0000,B0011,B1100,B0000,3, B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,B0001,B0010,B0100,B1000,3, B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,3, B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,B0100,B0100,B0010,B0010,3, //
Een boel animatiepatronen aan mekaar gebreid levert volgend filmpje op: http://www.youtube.com/watch?v=d3ySxcyfQ0s
Al bij al een leuk zelfbouwproject. Ik hoop dat dit document je kan inspireren of helpen om je eigen ledcube te maken. Veel bouwplezier! Email: rudi at kartix punt be