Inhoudsopgave:

Programmeerbare RGB LED-sequencer (met Arduino en Adafruit Trellis): 7 stappen (met afbeeldingen)
Programmeerbare RGB LED-sequencer (met Arduino en Adafruit Trellis): 7 stappen (met afbeeldingen)

Video: Programmeerbare RGB LED-sequencer (met Arduino en Adafruit Trellis): 7 stappen (met afbeeldingen)

Video: Programmeerbare RGB LED-sequencer (met Arduino en Adafruit Trellis): 7 stappen (met afbeeldingen)
Video: How To Setup an LED Sequencer 2024, Juli-
Anonim
Image
Image
Bedraad het bestuurdersbord
Bedraad het bestuurdersbord

Mijn zonen wilden gekleurde LED-strips om hun bureau te verlichten, en ik wilde geen ingeblikte RGB-stripcontroller gebruiken, omdat ik wist dat ze zich zouden vervelen met de vaste patronen die deze controllers hebben. Ik dacht ook dat het een geweldige kans zou zijn om een leermiddel voor hen te maken dat ze zouden kunnen gebruiken om de programmeer- en elektronicavaardigheden die ik hen heb geleerd aan te scherpen. Dit is het resultaat.

Ik ga je laten zien hoe je deze eenvoudige, programmeerbare RGB LED-stripcontroller kunt bouwen met behulp van een Arduino Uno (of Nano), een Adafruit Trellis en een handvol andere onderdelen.

De Adafruit Trellis is een van mijn favoriete nieuwe speeltjes van Lady Ada en crew. Allereerst is het slechts $ 9,95 voor het bord, en nog eens $ 4,95 voor het siliconen elastomeer knopkussen (prijzen vanaf dit moment). Dat is veel voor een 4x4-matrix met 16 knoppen en LED-mogelijkheden. Er zijn geen LED's gemonteerd, je moet ze leveren, maar dat geeft je de flexibiliteit om de gewenste kleuren te kiezen (en houdt de kosten en complexiteit laag in vergelijking met het inbouwen van adresseerbare LED's). Om dit project zoals het mijne te bouwen, heb je een handvol LED's van 3 mm nodig. Ik gebruikte 2 rode, 2 groene, 2 blauwe, 4 gele en 6 witte.

De Trellis gebruikt I2C om te communiceren, dus er zijn slechts twee I/O-pinnen (data en klok) nodig om 16 knoppen en 16 LED's te bedienen.

Je kunt het hardwaregedeelte van dit project op een klein protobord doen, en zo heb ik mijn prototype gemaakt. Ik realiseerde me al snel dat ik iets netter en meer op hun bureau nodig had (een kale Arduino en een protobord dat rondslingerde, zou te kwetsbaar zijn), dus maakte ik mijn eigen schild om de LED-strips aan te sturen. Instructies en bestanden voor het bouwen van het schild zijn opgenomen in de laatste stap.

De driver gebruikt drie IRLB8721 MOSFET's en drie weerstanden. En natuurlijk heb je een ledstrip nodig om te rijden; vrijwel elke gewone 12V RGB-ledstrip is voldoende. Dit zijn eenvoudige LED's, zoals SMD 5050's, geen fancy individueel adresseerbare exemplaren (geen NeoPixels, enz.) - dat is een ander project! U hebt ook een 12V-voeding nodig die groot genoeg is om het aantal LED's aan te sturen dat u wilt gebruiken.

Dus, om samen te vatten, hier zijn de basishardwarebehoeften voor dit project:

  • Eén Arduino Uno of Nano (deze instructies zijn voor Uno met vrouwelijke headers geïnstalleerd, maar Nano op een breadboard werkt prima) (Adafruit, Amazon, Mouser);
  • Eén Adafruit Trellis-bord en siliconen buttonpad (Adafruit);
  • Drie IRLB8721 N-kanaal MOSFET's (Adafruit, Amazon, Mouser);
  • Drie 1K-weerstanden (Amazon, Mouser);
  • Drie 220 ohm weerstanden (Amazon, Mouser)
  • Een klein protobord (mijn eerste was 1/4 formaat - kies elke maat waarmee je comfortabel kunt werken) (Adafruit, Amazon);
  • Een 12V RGB LED-strip (SMD 5050) (Adafruit, Amazon);
  • 12V-voeding -- kies een wattage dat geschikt is voor het aantal LED's dat u wilt gaan gebruiken.

Vereiste disclaimer: de bovenstaande links zijn bedoeld voor uw gemak en zijn geen goedkeuring van een product of leverancier; noch profiteer ik van enige aankopen die via deze links worden gedaan. Als je verkopers hebt die je beter vindt, steun ze dan!

Laten we beginnen…

Stap 1: Sluit de driverkaart aan

Bedraad het bestuurdersbord
Bedraad het bestuurdersbord

Hier is het LED-drivercircuit. Het is heel simpel. Het gebruikt een IRBLxxx N-kanaals MOSFET voor elk kanaal op de LED-strip. De LED-strip is een gemeenschappelijke anode, wat betekent dat +12V naar de LED-strip wordt gestuurd en de rode, groene en blauwe LED-kanalen worden bestuurd door aarde te leveren op de respectieve verbinding met de strip. Dus we zullen de afvoer van de MOSFET's verbinden met de LED-kleurkanalen en de bron met aarde. De poorten worden aangesloten op de digitale uitgangen van Arduino en de weerstanden zorgen voor een pull-down die ervoor zorgt dat elke MOSFET naar behoefte volledig wordt in- of uitgeschakeld.

De Arduino biedt pulsbreedtemodulatie op sommige van zijn digitale uitgangen, dus we zullen die uitgangen gebruiken (met name D9, D10, D11) zodat de intensiteit van elk kleurkanaal kan worden geregeld.

Als je niet weet wat je waar moet aansluiten op de IRLB8721 MOSFET's, houd er dan een in je hand met de voorkant naar je toe gericht, zoals weergegeven in de bovenstaande foto. De pin aan de linkerkant (pin 1) is de poort en zal worden aangesloten op een Arduino digitale uitgangspin en de weerstand (het andere uiteinde van de weerstand moet op aarde worden aangesloten). De pin in het midden (pin 2) is de afvoer, en sluit aan op de LED strip kleurkanaal. De pin aan de rechterkant (pin 3) is de bron en is verbonden met aarde. Zorg ervoor dat je bijhoudt welke transistor op welk LED-kleurkanaal aansluit.

Ik zal niet ingaan op de details van het solderen van protoborden. Eerlijk gezegd, ik haat het, en ik ben er niet goed in. Maar voor beter of slechter, het werkt, en het is een snelle en vuile manier om een solide prototype of eenmalig gedaan te krijgen. Mijn eerste bord wordt hier getoond.

Je zou dit ook kunnen breadboarden. Het zou zeker sneller zijn dan alles op een protobord te solderen, maar minder permanent.

Zodra je je driver hebt aangesloten, sluit je de MOSFET-poortingangen aan op de Arduino digitale uitgangspinnen: D9 voor het groene kanaal, D10 voor het rode kanaal en D11 voor het blauwe kanaal. Sluit de ledstrip ook aan op je protobord.

Zorg er ook voor dat uw driverbord een aparte verbinding heeft van de grond naar een van de aardingspinnen van de Arduino.

Tot slot, voor LED-voeding, sluit u de negatieve (aarde) kabel van de 12V-voeding aan op een aarde op uw driverbord. Sluit vervolgens de pluskabel van de 12V-voeding aan op de anodekabel van je ledstrip (dit is een zwarte draad op mijn kabels die op de afbeelding te zien zijn).

Uiteindelijk heb ik uiteindelijk een pc-bordschild ontworpen dat op de Uno kan worden gemonteerd en ook een montagesteun voor de Trellis heeft. Dit leverde een veel meer afgewerkt eindproduct op. Als je dat wilt doen, kun je het gebruik van het proto-bord zoals hier beschreven overslaan en gewoon het schildbord laten maken. Dat wordt allemaal beschreven in de laatste stap.

Stap 2: plaats LED's op het trellis

Zet LED's op de Trellis
Zet LED's op de Trellis

Het Trellis-bord heeft lege pads voor LED's van 3 mm die we moeten vullen. Let goed op de symbolen op de pads - er is een heel subtiele "+" naast de pad om de anodezijde aan te duiden. Als je het bord zo vasthoudt dat de tekst met de goede kant naar boven staat, is er ook een notatie aan de boven- en onderkant van het bord die aangeeft dat de LED-anoden zich aan de linkerkant bevinden.

Soldeer uw 3 mm LED's op het bord. Kijkend naar de voorkant van het bord, tekst met de goede kant naar boven, de schakelaar/LED-positie linksboven is #1, rechtsboven is #4, linksonder is #13 en rechtsonder is #16. Dit zijn de kleuren die ik in elke positie heb gebruikt (en daar is een reden voor, dus ik raad je aan om mijn patroon in ieder geval voor de bovenste twee rijen te volgen):

1 - rood2 - groen3 - blauw4 - wit5 - rood6 - groen7 - blauw8 - wit9 - wit10 - wit11 - geel12 - geel13 - wit14 - wit15 - geel16 - geel

CC Attribution: De bovenstaande Trellis-afbeelding is van Adafruit en wordt gebruikt onder de Creative Commons -- Attribution/ShareAlike-licentie.

Stap 3: Verbind de Trellis met de Arduino

Verbind de Trellis met de Arduino
Verbind de Trellis met de Arduino

De Trellis heeft vijf bedradingspads, maar in dit project worden er slechts vier gebruikt. De Trellis heeft SDA en SCL nodig om te communiceren met de Arduino (met I2C), en 5V en GND voor stroom. De laatste pad, INT, wordt niet gebruikt. De Trellis-pads verschijnen op alle vier de randen van het bord. U kunt elke gewenste set pads gebruiken.

Soldeer een solide verbindingsdraad aan de 5V-, GND-, SDA- en SCL-pads. Sluit vervolgens de 5V-draad aan op de 5V-pin op de Arduino, de GND op de aardingspin, de SDA-draad op A4 en de SCL-draad op A5.

Vervolgens gaan we de Arduino opstarten en de schets ernaar uploaden. Dit is een goed moment om de siliconen buttonpad op het Trellis-bord te plaatsen. Het zit gewoon op het bord (let op de "noppen" aan de onderkant van de pad die in de gaten op het bord passen), dus misschien wil je een paar stukjes tape gebruiken om de randen van de pad op het bord te houden voor nu.

CC Attribution: de afbeelding van de Trellis-bedrading hierboven is een bijgesneden versie van deze afbeelding door Adafruit en wordt gebruikt onder de Creative Commons -- Attribution/ShareAlike-licentie.

Stap 4: Download de projectschets en upload deze naar de Arduino

Je kunt de schets downloaden van mijn Github-repo voor dit project.

Zodra je het hebt, open je het in de Arduino IDE, sluit je de Arduino aan met een USB-kabel en upload je de schets naar de Arduino.

Als de schets is geüpload en het trellis correct is aangesloten, moet een van de knoppen op het trellis drie keer snel knipperen wanneer erop wordt gedrukt. Dit is een indicatie dat u op een ongeldige knop hebt gedrukt, omdat het systeem in de "uit"-status komt, dus de enige geldige toetsdruk is diegene die nodig is om het aan te zetten.

Om het systeem in te schakelen, houdt u de knop linksonder (#13) ten minste één seconde ingedrukt. Als u de knop loslaat, moeten alle LED's kort oplichten en gaan de onderste twee rijen uit, behalve #13 (linksonder). Het systeem bevindt zich nu in de ingeschakelde en inactieve toestand.

U kunt als eerste test proberen de bovenste twee rijen te gebruiken om de LED-kanalen op te lichten en te dimmen. Als dat werkt, kunt u doorgaan naar de volgende stap. Zo niet, controleer dan:

  1. LED-voeding is aangesloten en aan;
  2. MOSFET's van de driverkaart zijn correct bedraad. Als u dezelfde IRLB8721's gebruikt die ik heb gebruikt, controleert u:

    • Signaalingangen van de driverkaart (MOSFET-poorten, IRLB8721 pin 1) zijn verbonden met Arduino D9=groen, D10=rood, D11=blauw (zie opmerking hieronder);
    • LED-strip is aangesloten op driverkaart en LED-kleurkanalen zijn aangesloten op MOSFET-afvoeren (IRLB8721 pin 2);
    • MOSFET-bronpinnen (IRLB8721 pin 3) zijn verbonden met aarde op de driverkaart;
  3. Massaverbinding tussen driverbord en Arduino-aardpin.

In de volgende stap zullen we spelen met enkele functies van de gebruikersinterface van het toetsenblok.

OPMERKING: Als uw controller werkt, maar de intensiteitsknoppen niet de juiste kleuren regelen, hoeft u zich geen zorgen te maken en niet opnieuw te bedraden! Ga gewoon naar de Sketch in de Arduino IDE en wijzig de RODE, GROENE en BLAUWE pindefinities bovenaan het bestand.

Stap 5: Basisbedieningsfuncties

Basisbedieningsfuncties
Basisbedieningsfuncties

Nu het systeem is opgestart, kunnen we met enkele knoppen spelen en dingen laten doen.

Zoals ik in de vorige stap al zei, komt het systeem in de "inactieve" staat wanneer het wordt ingeschakeld. In deze staat kunt u de knoppen op de bovenste twee rijen gebruiken om de kleurintensiteit van elk van de rode, groene en blauwe LED-kanalen te verhogen of te verlagen. Als u de witte toetsen voor verhogen/verlagen gebruikt, verhoogt of verlaagt het systeem de intensiteit van alle drie de kanalen op gelijke en gelijke niveaus.

De onderste twee rijen worden gebruikt om vooraf ingestelde patronen af te spelen. Deze patronen worden opgeslagen in de EEPROM van de Arduino. Wanneer de schets voor de eerste keer wordt uitgevoerd, ziet hij dat de EEPROM geen patronen heeft opgeslagen en wordt een set standaardpatronen opgeslagen. Daarna kunt u deze patronen wijzigen en uw wijzigingen worden opgeslagen in de EEPROM van de Arduino, ter vervanging van het vooraf ingestelde patroon. Dit zorgt ervoor dat uw patronen stroomonderbrekingen overleven. De bewerkingsfunctie wordt beschreven in de volgende stap.

Druk nu kort op een van de vooraf ingestelde knoppen (de acht knoppen in de onderste twee rijen) om het patroon uit te voeren dat voor die knop is opgeslagen. De knop knippert terwijl het patroon wordt uitgevoerd. Om het patroon te stoppen, drukt u nogmaals kort op de patroonknop. Terwijl een patroon wordt uitgevoerd, kunnen de witte omhoog/omlaag-knoppen in de bovenste rijen worden gebruikt om de patroonsnelheid te wijzigen.

Als je het project een paar seconden alleen laat zonder knoppen aan te raken, zul je merken dat de LED's dimmen. Dit is zowel voor energiebesparing als om te voorkomen dat de Trellis de "stemming" die de LED's proberen te creëren, overbelicht. Als u een knop op de Trellis aanraakt, wordt deze weer wakker.

Om het systeem uit te schakelen, houdt u de knop linksonder (#13) een of meer seconden ingedrukt en laat u deze los. De Trellis en LED-strip worden donker.

Stap 6: Patronen bewerken op het toetsenbord

Patronen bewerken op het toetsenbord
Patronen bewerken op het toetsenbord

Zoals ik in de vorige stap al zei, slaat de schets de eerste keer dat deze wordt uitgevoerd acht standaardpatronen op in EEPROM. U kunt 7 van deze patronen in iets anders veranderen als u dat wilt met behulp van de patroonbewerkingsmodus op het toetsenblok.

Om naar de patroonbewerkingsmodus te gaan, moet u eerst beslissen voor welke knop u het patroon wilt bewerken. U kunt elke andere knop kiezen dan de knop linksonder. Ga naar de patroonbewerkingsmodus door lang (langer dan een seconde ingedrukt te houden) op de door u gekozen patroonknop. Als de knop wordt losgelaten, blijft deze ononderbroken branden en beginnen de bovenste twee rijen te knipperen. Dit geeft aan dat u zich in de bewerkingsmodus bevindt.

De bewerkingsmodus begint bij de eerste stap van het patroon en gaat door totdat u het bewerken verlaat of de 16e stap voltooit (maximaal 16 stappen per patroon). Gebruik bij elke stap de kanaalintensiteitsknoppen in de bovenste twee rijen om de gewenste kleur voor die stap te selecteren. Druk vervolgens kort op de patroonvoorkeuzeknop om die kleur op te slaan en door te gaan naar de volgende stap. Bij uw laatste stap, in plaats van kort te drukken, drukt u gewoon lang op om het bewerken af te sluiten.

Nadat u het bewerken van patronen verlaat, wordt het patroon automatisch afgespeeld.

Dat is het! U hebt nu een RGB LED-controller die patronen in volgorde zet die u via het toetsenbord kunt programmeren. Je kunt hier stoppen, of als je een meer formele versie van dit project wilt bouwen, blijf dan de rest van de stappen doorlopen.

Stap 7: Betere hardware: RGB LED Driver Shield en behuizing

Image
Image
Betere hardware: RGB LED-driverschild en behuizing
Betere hardware: RGB LED-driverschild en behuizing
Betere hardware: RGB LED-driverschild en behuizing
Betere hardware: RGB LED-driverschild en behuizing

Toen ik eenmaal een werkend prototype had, wist ik dat ik een kale Arduino en proto-board niet als permanente oplossing op het bureau van mijn kinderen kon achterlaten. Ik had een behuizing nodig voor het project. Ik besloot ook dat ik een beter driverboard zou maken, en ik dacht dat dit de perfecte gelegenheid was om mijn eigen schild te maken.

Ik heb mijn papieren schema opgeschoond door het in te voeren in ExpressSCH, een gratis tool aangeboden door ExpressPCB, een bordfabrikant die goedkope kleine oplagen van kleine pc-borden aanbiedt. Ik gebruik ExpressPCB al meer dan tien jaar voor projecten, maar gebruik in elk geval de tools en fabrikant die u verkiest.

Ik heb een paar kleine functies aan het basisschema toegevoegd, zodat het goed zou functioneren als een schild voor dit project. Ik heb bedradingspads toegevoegd om de Trellis, een stroomaansluiting, een controlelamp en een connector voor de LED-strip aan te sluiten. Ik heb ook een plek toegevoegd voor een condensator over de voeding. Het laatste circuit wordt hier getoond.

Ik besloot dat de stroom voor het project van het schild moest komen. De 12V die aan het schild wordt geleverd, voedt zowel de LED-strip als de Arduino. De Arduino wordt van stroom voorzien door de voedingsingang aan te sluiten op de Arduino's VIN-pin, die bidirectioneel is (je kunt de Arduino van stroom voorzien op deze pin, of als je de Arduino ergens anders van stroom voorziet, krijg je de meegeleverde stroom op deze pin). Beschermingsdiode D1 voorkomt dat stroom die rechtstreeks op de Arduino is aangesloten (bijv. USB) probeert de LED's van stroom te voorzien.

Waarom niet de stroomaansluiting van de Arduino gebruiken en daar gewoon 12V aansluiten? Hoewel ik 12V aan de stroomaansluiting van de Arduino had kunnen leveren en de VIN-pin had kunnen gebruiken om die stroom voor het schild te pakken, was ik bang dat de D1-diode en sporen van de Arduino niet bestand zouden zijn tegen de hoge stromen die mogelijk zijn bij het aansturen van de LED stroken. Dus besloot ik dat mijn schild de stroomtoevoer zou overnemen en de Arduino van stroom zou voorzien. Ik had ook 5V nodig voor de Trellis, maar de ingebouwde stroomregeling van de Arduino levert 5V op verschillende pinnen, dus ik gebruikte er een voor Latwerk. Dat bespaarde me het plaatsen van een regelaarcircuit op het schild.

Ik legde toen de PCB neer. Ik heb een aantal bronnen gebruikt die ik heb gevonden om de exacte afmetingen te krijgen voor het plaatsen van de pinnen om te voldoen aan de headers op de Arduino Uno. Een beetje ijver en het kwam overeen bij de eerste poging. Er is niet veel aan het schildcircuit zelf, dus ik had genoeg ruimte. Ik heb brede sporen voor de LED-belastingen aangelegd, dus er zou voldoende stroomcapaciteit zijn voor mijn behoeften. Ik heb de MOSFET's neergezet waar ze plat konden worden gemonteerd, met of zonder koellichamen. Tot nu toe heb ik geen koellichamen nodig voor het aantal LED's dat ik heb gebruikt, maar de ruimte is er indien nodig.

Ik heb ook gaten toegevoegd die overeenkwamen met montagegaten op het Trellis, zodat ik afstandhouders kon gebruiken om het Trellis op mijn schild te monteren. Met het schild aangesloten op de Arduino en het trellis op afstandhouders boven het schild, zou alles mooi en solide moeten zijn.

Ik heb toen de lay-out van het bord afgedrukt en op een stuk schuimkern geplakt en mijn onderdelen erin gestopt om te zorgen dat alles paste. Alles goed, dus ik heb de bestelling verzonden.

Ik ben toen aan de slag gegaan met een behuizing. Met Fusion 360 ontwierp ik een eenvoudige behuizing om de drie borden (Arduino Uno, schild en Trellis) te bevatten. Gaten in de behuizing maken verbinding met de USB-poort van de Arduino mogelijk, en natuurlijk toegang tot de LED-stripverbinding en de afschermingsaansluiting. De Arduino-voedingsaansluiting wordt afgedekt door de behuizing, om ervoor te zorgen dat deze niet wordt gebruikt. Na een paar prototypes voor proefmontage had ik eindelijk een ontwerp waar ik tevreden over was. Ik heb de STL-bestanden voor de behuizing naar Thingiverse gepost.

In de toekomst zal ik een versie van het bord maken waarop een Nano rechtstreeks kan worden aangesloten. Dit zou het project nog compacter maken. Tot die tijd zou je ook zo'n Nano naar Uno shield adapter kunnen gebruiken.

Als je het schild gaat doen, heb je dit nodig naast de onderdelen die in stap 1 zijn genoemd:

  • RGB LED Driver Shield pc-kaart (van ExpressPCB of anderen; u kunt de bestanden downloaden van mijn Github-repo voor het project);
  • 1N4002-diode;
  • 100uF 25V radiale elektrolytische condensator (gebruik 220uF of 470uF als grote LED-belasting);
  • Stroomaansluiting, PJ202-AH (5A nominaal model).

De volgende onderdelen zijn optioneel:

  • 3 mm LED -- elke kleur, voor controlelamp (kan worden weggelaten)
  • 1500 ohm weerstand -- alleen nodig bij gebruik van LED-controlelamp

Aanbevolen: