Hvordan bygge en Arduino Mood Lampe

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.

Samle komponenter, verktøy og biblioteker

komponenter

  • 12 LED Neopixel
  • 16 LED Neopixel
  • 24 LED Neopixel
  • Offisiell Arduino Nano (eller klon hvis du tenker budsjettet)
  • 7V-2A strømforsyning (Neopixels kan bruke mye juice og Nano ~ 7V)
  • 10K ohm motstander (1/4 watt) Brown-Red-Orange (hold et sett med motstander i settet ditt)
  • Brødbrett-vennlig 2.1mm DC fat-jack
  • Brødbrett 1/4 størrelse
  • 22 Gauge Hookup Wire (flere farger) (En hel boks som dette er praktisk for mange prosjekter)
  • 20 Gauge Hookup Wire (svart) for stigeposter
  • Brødbrett vennlig på / av bryter
  • Brødbrettvennlige øyeblikkelige brytere (4 fra 20-pakken)
  • LRF Support (Little Rubber Feet)

Verktøy

  • Loddejern
  • Lodd
  • Wire stripper som kan strippe 22 gauge wire
  • Datamaskin med Arduino IDE for programmering av Nano
  • Arduino IDE (1.0.5 eller nyere)
  • USB A-Male til Mini-B Cable (for programmering av Nano)

biblioteker

Last ned følgende Aduino-biblioteker, start Arduino IDE og installer hver med Skisse> Importer bibliotek> Legg til bibliotek Meny. 

  • PinChangeInterrupt Library for å oppdage pin change-hendelser
  • Adafruit Neopixel Library for å kontrollere Neopixel-ringene

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.

Oversikt

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.

Montering av LED-tårnet

Du vil bruke de tre LED-ringene til å bygge et LED-tårn som er lampens del av lampen. 

  • Klipp ni 3-tommers lengder av den svarte 20 gauge hookup-ledningen
  • Strip hver ledning 1/4 "på hver ende
  • Løs en svart wire inn i GND, Datainput, og PWR +5 hull på 24-pixel ringen fra bunnen slik at ledningene strekker seg under ringen og pikslene sitter opp fra ringen. Prøv å jevne ut ledningene jevnt, da disse vil danne grunnstigerøret for lampen
  • Løs en svart wire inn i det åpne GND, Data ut, og PWR +5 hull på toppen av ringen, vendt oppover i samme retning som pikslene. Du bør nå ha 24-pikslingsringen med tre ledninger som peker ned fra bunnen, og tre peker opp i samme retning som pikslene
  • Løs de tre svarte ledningene fra 24-pixelringen til bunnen av 16-pixelringen. Ledningene skal koble til Data ut (fra 24-pixelringen) til Datainput (på 16-pixelringen), den GND (fra 24 ringen) til Bakke (på 16), og PWR +5 (fra 24) til Strøm 5V DC (på 16). Du vil nå ha et to-tiered pixel tårn
  • Løs tre tre svarte ledninger på bunnen av 12-pixelringen i Data ut, 5V likestrøm, og GND hull slik at ledningene stikker ut av siden vekk fra LED-pikslene
  • Løs den Datainput ledning fra bunnen av 12-pixelringen inn i til Data OUT hull på toppen av 16-pixelringen
  • Tapp de to gjenværende ledningene fra 12-pikslingen ved å legge til et lommeslag til hver enkelt
  • Løs den 5V DC Makt ledning fra 12-pikslingen til toppen av ledningen putt gjennom Strøm 5V DC hull på 16-pixel ringen. Hvis du fjernet en full 1/4 "isolasjon av endene av ledningene, bør det være nok avskåret ledning som stikker gjennom toppen av 16-pixelringen til loddetid, koble de to ledningene
  • Løs den gjenværende løs ledningen fra 12-pixelringen GND hull til toppen av ledningen putt gjennom GND hull på 16-pixel ringen

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.


LED Tower Assembly

Monter brettbrettskretsen

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.

  • På / av-bryteren avbryter den uregulerte 7V-effekten fra strømforsyningen som strømmer til LED-ringene og Arduino. Det anbefales sterkt at denne bryteren er satt til av før du kobler til eller fjerner strømforsyningen. Dette vil beskytte ringene fra strømspydene fra strømforsyninger av høy kvalitet.
  • De øyeblikkelige trykknappene kobler en regulert 5V-buss fra spenningsregulatoren på Arduino til pinnene som vil registrere knappetrykk. 10K ohm motstandene holder tappene LOW til det er trykket på knappen.
Kretskort

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 lampe

Programmér Arduino

Maskinvaren er nå konstruert og neste trinn er å programmere det. Last ned pakken pakket med denne opplæringen eller se github-depotet for lyset.

  • Åpen nightlight.ino i Arduino IDE
  • Koble Arduino Nano til datamaskinen med USB-til-USB-minikabelen
  • Kontroller at seriell port er satt til porten datamaskinen oppdages når du koblet Arduino til Verktøy> Seriell port Meny
  • Kontroller at kortet er satt til Arduino Nano w / ATmega328 ved hjelp av Verktøy> Styret Meny
  • Kontroller at bibliotekene er installert riktig ved å klikke på Bekrefte knappen og sørg for at det ikke er noen feil
  • Bruke Laste opp knappen for å trykke koden til Arduino
  • Åpne Serial Monitor-vinduet ved å trykke på Kontroll-Shift-M og sørg for at den er satt til 19200 baud. Du bør se Arduino initialisere med utdata som eksempelet nedenfor
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 
  • Kontroller at på / av bryteren er i avstand
  • Fest 7V strømforsyningen til tønnkontakten
  • Vri bryteren
  • Prøv ut knappene og for å se at de svarer som beskrevet ovenfor, fra venstre til høyre: På / Av-veksle, Fargemodus, Lysstyrke forhåndsinnstilt nivå, Effektmodus. Effektmodus starter en langsom stigning av piksler fra bunnen, som langsomt skifter farge til neste forhåndsinnstilling. Når alle 52 pikslene er endret til neste farge, starter fargeskiftingsprosessen igjen. Trykk på Effekt knappen gjentatte ganger vil endre hastigheten på effekten.

Notater om programmet

EEPROM

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.

avbryter

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.

Sammendrag

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.