Den nyeste generasjonen av adresserbare RGB-lysdioder åpner en hel verden av muligheter for prosjekter. Dette prosjektet vil lede deg gjennom å skape et Arduino-kontrollert stemningslys som lar deg bytte farger, lysstyrke, og til og med bytte til en fargekryp effekt som minner om den elskede lava-lampen i tidene tidligere.
I denne veiledningen vil jeg vise deg hvordan du skal bygge en tre-ledig LED-lampe, bruke pinbytteavbrudd på Arduino-plattformen, og lagre strømmen av vedvarende verdier i Arduino-minnet.
Last ned følgende Aduino-biblioteker, start Arduino IDE og installer hver med Skisse> Importer bibliotek> Legg til bibliotek Meny.
Med denne metoden trenger du ikke lenger å manuelt finne Bibliotek katalog og pakke ut. IDE vil ta vare på dette trinnet for deg. Etter å ha importert bibliotekene, gå ut av Arduino IDE.
Instruksjonene nedenfor viser hvordan du monterer lampen og kretsen på kretskortet og programmeringen av Arduino. Lampens funksjon er ganske enkel: hver knapp vil utløse en forstyrrelse i Arduino som igjen vil utløse en atferdsendring.
Knappene fra høyre til venstre (fordi jeg er vanskelig på den måten) er: på / av-bryter, fargetilpasset modus, lysstyrke forhåndsinnstilt nivå, effektmodus. Når lampen slås av, slås LED-lampene av og gjeldende innstillinger skrives inn i permanent minne. Når lampen lyser, leser den innstillingene og er klar til å starte sikkerhetskopiering der du sluttet.
Du vil bruke de tre LED-ringene til å bygge et LED-tårn som er lampens del av lampen.
På slutten av denne prosessen må du kontrollere at jordledningen går fra veldig bunn til toppen av LED-ringtårnet gjennom alle de grunnhulls kalt hullene, og at strømmen gjør det samme for de kildene som heter power-heth.
Det er en liten variasjon i silkeskjermens navnekonvensjon på ringene, men du får ideen. Kontroller at data ut ledningen fra hver ring går inn i data i hull fra neste ring. Dette vil skape en enestående stripe adresserbare lys så langt som Neopixel-biblioteket angår.
Så hardt som jeg prøvde å holde ledningene til og med, oppdaget jeg at jeg måtte bøye dem litt etter lodding for å tømme ringene på tårnet. Det kan hende du må gjøre det samme. Det skal se ut som det følgende bildet.
Bruk diagrambildet nedenfor for å koble til kretsen. Hver av komponentene skal passe lett inn i brettet, og du kan ønske å skreddersy 22-gauge hookup-ledningen for å dirigere på brettet for en mer ferdig passform. Et par ting å legge merke til om kretsen.
Når platen er montert, plasser LED-tårnet på brettet slik at jordledningen forbinder til en jordbuss, strømledningen til den uregulerte strømbussen (den øverste røde strømbussen i diagrammet) og signalledningen til D10 pin på Arduino. Påfør fire små gummifødder til bunnen av brødbrettet for å hindre at det glir rundt.
Montert lampeMaskinvaren er nå konstruert og neste trinn er å programmere det. Last ned pakken pakket med denne opplæringen eller se github-depotet for lyset.
RGB Mood light V1.0: Klar lesing fra EEPROM: State: 1 Bright preset: 1 Farge forhåndsinnstilt: 1 Effekt Nivå: 9 State: 1 Oppsett fullført. I av-modus. slewdelay = 20 climbdelay = 200 I funksjonen Initialiserer effekt med forhåndsinnstilt: 1
Arduino har en viss mengde EEPROM som kan skrives til og leses fra hvilket vil beholde verdier på tvers av strømmen fra Arduino. Lampeprogrammet inneholder filen EEPROM.h som viser funksjonene EEPROM.read () og EEPROM.write () som leser og skriver byte inn i EEPROM minneplassen.
Som programmerer er du ansvarlig for å vite hvilken adresse du vil lese og skrive og den medfølgende koden gjør dette ved å bruke #definere For å spesifisere adressen vil en bestemt innstilling holde skrive og lese.
#define STATEADDR 1 #define BRIGHTADDR 2 #define COLORADDR 3 #define EFFECTADDR 4
// les variablene fra EPROM og oppsett system state = EEPROM.read (STATEADDR); currentBrightLevel = EEPROM.read (BRIGHTADDR); currentColorPreset = EEPROM.read (COLORADDR); currentEffectLevel = EEPROM.read (EFFECTADDR);
EEPROM-minnet har en grense for hvor mange ganger det kan skrives før det nedbrytes, men det nummeret er 10.000 rekkevidde, så det er lite bekymring for å ha på deg EEPROM med dette programmet i løpet av de neste tiårene. Bare vær oppmerksom på at det ikke er en god ide å skrive til EEPROM hvert sekund eller så i et program.
Programmet bruker avbrudd for å oppdage når knappene trykkes i stedet for polling for når tappen er høy. I følgende kode fra setup () ruting, funksjonen fobHandler () Tilordnes å bli kalt når noen av de fire knappene trykkes.
// oppsett avbryt på hver av pinnene PCintPort :: attachInterrupt (FOBPINA, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINB, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINC, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPIND, & fobHandler, RISING);
Avbrytingsmetoden gir en mye mer nøyaktig gjenkjenning av knappetrykket. Arduino har bare to innebygde generiske maskinvareavbrudd, men det støtter også en PinChangeInterrupt på hver pin.
Atmel-brikken kan oppdage endring, stigende eller fallende moduser på hver pinne. Når avbruddet utløses, er funksjonen spesifisert tidligere i programmet fobHandler () avbryter kjørekoden og tar over. Når avbruddshandleren fullfører, kjøres kjøringen tilbake til programmet der den sluttet. For å lese mer om Pin Change Interrupts, se prosjektsiden om emnet.
Programmet bruker en avbrudd for å oppdage hvilken pin som er endret og funksjonen fobHandler () setter global variabel latest_interrupted_pin til nummeret på pinnen som endret seg. Brikken er satt til å oppdage a RISING spenningsendring, noe som betyr at det vil utløse som knappen trykkes, snarere enn når den slippes ut.
Hovedløkken i programmet sjekker for en endring av latest_interrupted_pin variabel og bestemmer seg for hva de skal gjøre. Den tunge løftingen av hva du skal gjøre når du trykker på knappen, er igjen til hovedmenyen løkke () fordi kjøring av visse funksjoner inne i avbrytingsfunksjonen kan føre til at ting blir dårlige, for eksempel Serial.print (), millis (), utsette(), og alt som krever ekstra bruk av avbrudd.
I dette programmet endres avbruddshåndtering rutingen ganske enkelt en variabel og lar hovedløkken gjøre det kompliserte arbeidet for å unngå wonkiness.
Du har nå bygget en ny stemningslampe drevet av en Arduino. I grunnkonfigurasjonen kan du endre farge, lysstyrke og effekt av lampen med et tastetrykk.
Jeg har vist deg hvordan du kjeder Neopixel-enheter sammen, mens du lager en enkelt adresserbar stripe. I løpet av denne konstruksjonen lærte du også om bruk av PIN-endringsavbrudd for å lese maskinvareendringer og hvordan du lagrer data i det permanente minnet til din Arduino for å skape innstillinger som vedvarer over strømbrudd.
Det er mange steder å ta dette prosjektet hvis du vil hacke det til å være noe utover nyheten, bare wire elektro-themed lysskulptur det er i dag. Forbedringer du kan prøve, inkluderer å legge til flere fargeprøveinnstillinger, en annen effekt når lampen er i effektmodus, eller til og med en nyanse av gjennomsiktig velum.