Op YouTube zijn voldoende voorbeelden van LED-cubes te vinden, heel soms RGB maar meestal monochroom en vaak ook met ‘normale’ 5mm LEDs. Zelf had ik al eens een 3x3x3 LED kubus gebouwd en beschreven in een eerdere blog.
Deze keer wilde ik een LED-cube maken die ook tijdens buitenevenementen als blikvanger kan dienen (en inmiddels ook gedaan heeft). Dus iets met redelijk forse afmetingen zodat ie ook van ver af al opvalt. Om arbitraire redenen koos ik voor een 5x5x5 kubus, dus 125 RGB LEDs, met buitenmaten 50x50x50 [cm], zie foto.
Als ‘basismateriaal’ koos ik de LED-pixelsnoeren waarmee ik in eerdere projecten (o.a. LED-pixel-pong) al de nodige ervaring had opgedaan. Deze hebben een SPI-achtige interface en zijn daarom redelijk eenvoudig met een Arduino aan te sturen. Bovendien kun je meerdere snoeren met elkaar doorverbinden. Elk LED-pixelsnoer heeft 25 RGB LEDs dus met 5 van deze snoeren is de kubus te realiseren. Een kleine bijkomstigheid is het stroomverbruik van de kubus bij volle belasting, dus alle pixels 100% wit. De LEDjes zijn samen goed voor zo’n 3*125*20 [mA] = 7,5 [A]. Een aparte 5[V] voeding is dus geen overbodige luxe.
Het is overigens niet verstandig om alle LED-pixels vanuit 1 centraal aansluitpunt te voeden. De nullijn van het LED-pixelsnoer wordt namelijk zowel gebruikt voor de stroomtoevoer en als SPI-signaal-retourgeleider. En de common-mode stroompieken die ontstaan door het aan/uit schakelen van de LEDs verstoren de SPI commando’s waardoor regelmatig foute LED patronen zichtbaar worden. Dit probleem is eenvoudig op te lossen middels een zgn ‘ster’-voeding, dwz elk LED-pixelsnoer apart aansluiten op de 5[V] voeding.
De SPI interface kan wel gewoon doorgelust worden. Hierdoor behelst het individueel aansturen van de LEDs niet meer dan het in de juiste volgorde versturen van 3*125 bytes via de SPI interface, telkens in de volgorde Rood–Groen–Blauw–Rood–Groen–Blauw–Rood–Groen–Blauw-etc… Voor het ontwerpen van leuke LED-patronen is het erg handig indien je de LED-pixels aan kunt spreken op basis van hun XYZ-coordinaten. En wanneer je het LED-pixel snoer bovendien op een regelmatige manier door de LED-kubus laat lopen is het ook vrij eenvoudig om een functie te schrijven die deze XYZ coordinaten omrekent het volgnummer [0…124] van die pixel in het LED-pixelsnoer.
Wat rest is de nodige fantasie om allerlei leuke LED-patronen te bedenken en te programmeren, deze voorbeeldcode is hiervoor een goede start. Ervaring leert dat de snelheid van de SPI-interface en de rekenkracht van de Arduino voldoende groot zijn voor een refresh-rate van >25 frames/sec.