Bouw een Indrukwekkende 5x5x5 LED-kubus met Arduino Mega
Onderdelen en benodigdheden
| Arduino Mega 2560 | × | 1 |
| Blauwe LED | × | 125 |
| NTE85 NPN-transistor | × | 5 |
| 22 gauge vergulde koperdraad | × | 1 |
| 180 ohm weerstand, 1/4 watt | × | 25 |
| 9 cm x 15 cm experimenteerprintplaat | × | 1 |
| 330 ohm weerstand, 1/4 watt | × | 5 |
| Optioneel - 9 volt voeding voor Mega | × | 1 |
Nodige gereedschappen en machines
- Solderbout (algemeen)
- Lijmpistool (algemeen)
- Blue Tack (herbruikbaar lijmmiddel, om LED's tijdens het solderen vast te zetten)
Apps en online diensten
- Arduino IDE
Over dit project
Inleiding
De meeste mensen houden van LED-kubussen, maar grote exemplaren zoals 8x8x8 vereisen veel werk, zowel voor de bouw als voor de programmering. Kleinere versies (3x3x3 of 4x4x4) zijn eenvoudiger te bouwen omdat ze minder LED's nodig hebben en geen externe hardware zoals schuifregisters en high-side drivers vereisen. Toch bieden ze niet dezelfde indruk als een grote kubus.
Mijn doel was om een makkelijk te bouwen kubus te creëren en voldoende leuke software te schrijven om de ervaring van een grote kubus te geven zonder alle gedoe. Dit is een 5x5x5 kubus die direct door een Arduino Mega aangedreven kan worden, zonder schuifregisters of extra hardware behalve 5 transistoren (die de kathodes van een hele laag - 25 LED's - naar massa trekken). Waarom schuifregisters vermijden? Omdat ze verschrikkelijk zijn om met de hand te bedraden (ik heb het geprobeerd). Je hebt echt een printplaat nodig als je ze wilt gebruiken.
Ik heb in het verleden veel code voor grote kubussen geschreven, dus ik heb bestaande animaties aangepast voor deze 5x5x5 kubus.
Let op: Ik ben niet de eerste die een 5x5x5 kubus met een Mega voorstelt. MEGA DAS publiceerde een vergelijkbaar project in 2017. De hardware is bijna identiek. Ik had het earlier project pas gezien toen ik deze handleiding schreef, dus mijn pinlayout en weerstandswaarden verschillen, maar de hardware is verder hetzelfde. Ik publiceer dit vooral omdat ik veel ervaring heb met kubus-software. Ik hoop dat mijn software een paar mensen motiveert om een kubus te bouwen die het anders niet zouden doen!
De video bovenaar toont een sinusgolf-functie waar de amplitude op de z-as ligt en de tijd wordt voorgesteld als horizontale afstand van het midden van de kubus. Een klassieker op een grote kubus, maar ook indrukwekkend op deze 5x5x5!
Ik voeg twee extra video's toe, beide tonen 14 animaties voor de 5x5x5 kubus. Ik weet niet welke beter is, dus ik voeg beide toe. En voor het geval het niet duidelijk is: kubussen zien in het echte leven veel cooler uit dan op video!
Hardware
De Mega heeft veel digitale I/O-pinnen. We gebruiken 5 voor het laag trekken van de kathodes van elke laag, en 25 extra om de anoden hoog te maken voor elke van de 25 LED's binnen een laag. Met deze aanpak heeft de Mega genoeg I/O-pinnen voor zelfs een 6x6x6 kubus. Maar als we het simpel willen houden, is stroomverbruik een overweging. De stroomlimieten van de Mega zijn 40 mA per pin en 200 mA totaal over alle pinnen. Blauwe LED's hebben een forward-spanning van ongeveer 3 volt, onze common-cathode transistoren voegen nog 0,7 volt toe. Met een 5V voeding en een 180 ohm weerstand trekt elke LED 7,2 mA. 25 LED's per laag trekken 180 mA als ze allemaal aanstaan. We schakelen maar één laag tegelijk aan, dus we voldoen aan alle stroomlimieten van de Mega, mits we NPN-transistoren gebruiken om alle kathodes in een laag naar massa te trekken. De basisstroom van één van die transistoren voegt nog 5 mA toe aan de totale belasting, maar we houden het totaal onder de 200 mA, op ongeveer 185 mA. Daarom koos ik voor 180 ohm weerstanden bij onze LED's.
Het diagram hierboven toont hoe de digitale pinnen van de Mega met de kubus verbonden zijn. Pinnen 22-26 sturen de transistoren aan die de kathodes van de LED's met massa verbinden. Pinnen 27-51 gaan via de 180 ohm weerstanden naar de anoden van de 25 LED's in een laag.
Je vraagt je misschien af waarom deze pinlayout wat verwarrend lijkt. Mijn software gebruikt directe poorttoegang in plaats van digitalWrite om de anoden te configureren (om elke van de 25 LED's in een laag aan of uit te zetten). Dit bespaart veel tijd en zorgt ervoor dat de LED's langer aanstaan dan bij digitalWrite-opdrachten. De pinlayout is zo gerangschikt om referenties naar deze digitale poorten te organiseren in plaats van de echte pinnummers. Meer hierover bij de software.
Kubusconstructie
Er zijn veel meningen over hoe een kubus gebouwd moet worden, ongeacht de grootte. De taak is saai, ongeacht de aanpak. Je moet zowel zorgvuldig als geduldig zijn om een goed resultaat te krijgen. Ik laat zien hoe ik deze bouwde, maar er zijn andere instructies online als je die liever volgt.
De constructie begint met het vormgeven van de pootjes en het solderen van LED's in kolommen van 5. Vervolgens worden panelen gevormd door 5 kolommen samen te solderen, en tenslotte wordt de kubus gevormd door 5 panelen samen te solderen. Wie nog nooit een kubus heeft gebouwd, beseft niet hoe moeilijk het is om een perfecte kubus te maken. Kleine fouten in hoeken van pootjes accumuleren snel en zelfs kleine verschillen in afstand zijn gemakkelijk zichtbaar. Het vormgeven van de pootjes is dus cruciaal. Als je je tijd neemt en het goed doet, krijg je geen perfecte kubus, maar wel een redelijk ergens.
De anoden zijn de langere poot van de LED en gaan naar beneden, maar moeten naar de zijkant van de LED gebogen worden zodat verticale rijen van anoden aan elkaar gesoldeerd kunnen worden. De anode-offset en de kathode-poot moeten 90 graden ten opzichte van elkaar staan, zoals op de foto's te zien is.
Ik vind het vormgeven van pootjes zowel saai als zwaar voor de handen, dus ik vorm 25 LED's en bouw dan een paneel. Je hebt een hulpmiddel (jig) nodig om zowel de kolommen als de panelen te maken. Ik doe dit met BlueTack, een herbruikbaar lijmmiddel. LED's kunnen in de BlueTack gedrukt worden en blijven op hun plaats tijdens het solderen. De indentaties maken het mogelijk om deze processen met exact dezelfde afstanden te herhalen. Het is belangrijk de eerste keer alles heel nauwkeurig te meten. Ik gebruikte 0,6 inch afstand tussen LED's in alle drie richtingen, zodat de afgeronde kubus in een printplaat met standaard 0,1 inch gatafstand past.
Let op bij het solderen van LED's: De ergste nachtmerrie van elke kubusbouwer is een kubus die klaar is en dan ontdekken dat er een koude soldeerjoint op de binnenkant zit waar je niet meer kunt bijkomen! Wees zorgvuldig om te zorgen dat soldeerjoints goed zijn op elke kolom die je bouwt.
Wanneer je elk paneel af hebt, is het tijd om het te testen. We doen dit omdat het ontdekken van een koude soldeerjoint of een defecte LED wanneer de kubus af is, rampzalig zou zijn!
In de software zit een kleine sketch die een paneel test. Hiervoor moet je de 5 verticale anode-lijnen verbinden met 5 weerstanden (330 ohm of vergelijkbaar) en die weerstanden aan pinnen 40-44 (de kolom 0 anode-pinnen). Vervolgens verbind je de 5 kathode-pinnen met de pinnen die normaal de kathodes sturen, pinnen 22-26. Een goed paneel ziet eruit als de video hierboven. (Als bijzonderheid: we gebruiken nog geen transistoren voor de kathodes, dus deze testroutine trekt kathodes laag om een LED aan te zetten. Zodra de transistoren geplaatst zijn, doen we het omgekeerde: we sturen de kathodes hoog om de transistoren aan te sturen, die de kathodes dan laag trekken.)
Wanneer we 5 panelen hebben gebouwd en getest, zijn we klaar om de kubus te monteren, maar eerst moeten we de printplaat voorbereiden door alle benodigde weerstanden en transistoren te plaatsen en te verbinden.
Ik plaatste de 180 ohm weerstanden recht naast elke anode-kolom en de kathode-transistoren met hun basisweerstanden in de ruimte tussen de kubus en de Mega. De afstand tussen anode-kolommen is 0,6 inch in beide richtingen, dus 5 lege gaten in de printplaat tussen elke gat met een anode-kolom.
Nu is een goed moment om de Arduino op de printplaat te zetten. Hij kan op afstandhouders gemonteerd worden als je die hebt. Ik gebruikte gewoon een klein stukje plastic en wat lijm om mijn Mega ongeveer 1/4 inch boven de printplaat te bevestigen.
Panelen worden nu aan de hoofdprintplaat gesoldeerd. Zorg dat elke anode-kolom echt in het juiste gat zit voordat je soldeert, want zelfs een fout van één gat is zichtbaar in de afgeronde kubus. En houd alle panelen dezelfde kant op, dus alle kathode-pootjes komen aan dezelfde kant uit.
Vervolgens moeten we de panelen aan elkaar verbinden op elke laag, zodat alle kathodes in een gegeven laag verbonden zijn. Dit doen we met een uitgerekte stukje vergulde koperdraad dat de vijf kathode-lijnen in een laag met elkaar verbindt.
Daarna zijn we klaar om de kathodes van elke laag aan de hoofdprintplaat te koppelen. De cirkels in de afbeelding hierboven tonen waar de kathodes van elke laag verbonden worden en naar de collector van een transistor worden geleid. Ook hier gebruiken we een uitgerekt stukje vergulde koperdraad.
Zodra alle verbindingen van de weerstanden naar de Mega gemaakt zijn, is de kubus klaar voor de eindtest. In de software zit een sketch om de kubus te testen. Die laat kort elke LED in de kubus oplichten in volgorde. Omdat je elk paneel al getest hebt, zullen eventuele problemen nu waarschijnlijk liggen in de recent gemaakte kathode-verbindingen. Je kunt dus één laag zien die niet werkt of een deel van een laag. Waarschijnlijk is er weer een koude soldeerjoint als er een probleem is.
Software
De status van elke LED in de kubus wordt gedefinieerd door een globaal 5x5x5 byte-array genaamd cube[ ][ ][ ]. Een 1 betekent dat de LED aanstaat, een 0 dat hij uitstaat. Alle animaties van de kubus worden gecreëerd door 1'en en 0'en in cube[ ][ ][ ] te zetten.
Het hart van elke kubus-software is de getimede interrupt die de kubus ververst. Mijn interrupt-routine wordt in setup() gestart en staat aan het einde van het programma. Hij wordt elke 10 msec aangeroepen en duurt ongeveer 6 msec om de kubus te verversen. Dat laat 4 msec tussen elke verversing voor uitvoering van code in de main loop.
Tijdens verversing wordt elke laag 1,2 msec aangezet. Verversing gebeurt 100 keer per seconde. Elke individuele LED die aanstaat is dus 120 ms per seconde aan, een duty cycle van 12%. De 100 keer per seconde is snel genoeg om het menselijk oog het continu aan te laten zien, en de 12% duty cycle zorgt voor redelijk heldere LED's, niet zo helder als continu aan, maar verrassend dichtbij.
Om de ververscyclus zo kort mogelijk te houden en de tijd dat de LED's aanstaan te maximaliseren, vermijden we tijdrovende digitalWrite-opdrachten en gebruiken we directe poorttoegang om de pinnen te configureren. In de interrupt-routine zie je 25 losse regels waar deze directe poorttoegang wordt gebruikt, wat er niet mooi uitziet, maar in feite veel, veel sneller is dan de paar regels code die nodig zouden zijn om de pinnen met digitalWrite in te stellen.
De loop() roept simpelweg elke animatie aan, gaat door de lijst en begint dan weer opnieuw. De animaties zitten elk in hun eigen subroutine. Sommige animatieroutines roepen andere routines aan. Zie de code zelf voor uitleg van de diverse animaties. Er zijn ook een paar hulproutines die door alle animaties gebruikt worden, zoals clearCube() die alle LED's uitschakelt, of copyDown() die de inhoud van elke laag naar de laag eronder schuift en de bovenste laag wissen.
Er zijn drie verschillende sketches te downloaden. De hoofdsketch bevat de 15 animaties die je in de video ziet. De paneel-test en kubus-test sketches zijn alleen voor het testen van je kubus tijdens de bouw.
Code
- 5x5x5 Kubus Software
5x5x5 Kubus Software Arduino
Bevat 3 sketches: Paneel Test, Kubus Test, en De Show met alle 15 animaties
Geen preview (alleen downloaden).
Custom parts en behuizingen
Helemaal optioneel, maar als je toegang hebt tot een 3D-printer en de doos uit mijn video's wilt, hier is hij:
Schema's
Een schema van de basisverbindingen
Toont de exacte verbindingen tussen kubus en Mega
Productieproces
- Strijkplank Productie: Ontwerp, Materialen en Productieproces
- Rubik's Kubus: Van Uitvinding tot Moderne Puzzel
- Geprinte Schakelprintplaten: Ontwerp, Fabricage en Toekomstige Trends
- Surfplank Constructie en Ontwerp: Van Polynesische Wortels tot Moderne Innovatie
- Light-Emitting Diodes: Van Ontstaan tot 100-Jarige Levensduur
- RasPiRobot Board V2: Je Raspberry Pi Uitbreiden tot een Krachtige Robot-controller
- DIY Arduino Woordklok – Bouw een Elegant Real-Time Display
- Arduino Coffin Dance Melodie Project – Bouw & Speel de Virale Tune
- Upgrade je huis: Slimme touch-schakelaar met temperatuurbewaking
- Een LED bedienen via Bluetooth met Arduino – Eenvoudige DIY Handleiding
- Bouw een eenvoudige rekenmachine met Arduino UNO – Makkelijk project