Hur man bygger en Arduino humörlampa

Den senaste generationen adresserbara RGB-lysdioder öppnar en hel värld av möjligheter till projekt. Detta projekt kommer att vägleda dig genom att skapa ett Arduino-kontrollerat humörljus som låter dig byta färger, ljusstyrka och till och med byta till en färgkrypseffekt som påminner om den älskade lava-lampan i åldrarna tidigare.

I den här handledningen visar jag dig hur du bygger en tre-ledig LED-lampa, använd stiftbyteavbrott på Arduino-plattformen och lagra strömmen av vidhäftande värden i Arduino-minnet.

Samla komponenter, verktyg och bibliotek

Komponenter

  • 12 LED Neopixel
  • 16 LED-neopixel
  • 24 LED Neopixel
  • Officiell Arduino Nano (eller klon om du tänker på budgeten)
  • 7V-2A strömförsörjning (Neopixels kan använda mycket juice och Nano ~ 7V)
  • 10K ohm motstånd (1/4 watt) Brun-Röd-Orange (behåll en uppsättning motstånd i ditt kit)
  • Breadboard-vänlig 2,1 mm DC-fat jack
  • Brödbräda 1/4 storlek
  • 22 Gauge Hookup Wire (flera färger) (En hel låda så här är praktisk för många projekt)
  • 20 Gauge Hookup Wire (svart) för stigarstolparna
  • Brödbräda vänlig på / av strömbrytare
  • Brödbräda vänliga momentbrytare (4 från 20-pack)
  • LRF Support (Little Rubber Feet)

Verktyg

  • Lödkolv
  • Löda
  • Wire stripper som kan ta bort 22 gauge tråd
  • Dator med Arduino IDE för programmering av Nano
  • Arduino IDE (1.0.5 eller senare)
  • USB A-Male till Mini-B-kabel (för programmering av nano)

bibliotek

Ladda ner följande Aduino-bibliotek, starta Arduino IDE och installera var och en med Sketch> Importera bibliotek> Lägg till bibliotek meny. 

  • PinChangeInterrupt Library för att upptäcka händelser för pinbyte
  • Adafruit Neopixel-biblioteket för att styra Neopixel-ringarna

Med den här metoden behöver du inte längre manuellt hitta Bibliotek katalog och unzip. IDE kommer att ta hand om detta steg för dig. Efter att ha importerat biblioteken, avsluta Arduino IDE.

Översikt

Anvisningarna nedan visar hur du monterar lampan och kretsen på kretskortet och programmeringen av Arduino. Lampans funktion är ganska enkel: varje knapp kommer att utlösa ett avbrott i Arduino vilket i sin tur kommer att utlösa ett beteendeförändring. 

Knapparna från höger till vänster (eftersom jag är svårt på det sättet) är: på / av-växling, färginställt läge, ljusstyrkan förinställd nivå, effektläge. När lampan stängs av släcks LED-lamporna och de nuvarande inställningarna skrivs i permanent minne. När lampan tänds läser den inställningarna och är redo att starta säkerhetskopiering där du slutade.

Montering av LED-tornet

Du kommer att använda de tre LED-ringarna för att bygga ett LED-torn som är lampans del av lampan. 

  • Klipp nio 3-tums längder av den svarta 20 gauge hookup-ledningen
  • Stryk varje tråd 1/4 "på varje ände
  • Löd en svart tråd in i GND, Dataingång, och PWR +5 hål på 24-pixelringen från botten så att ledningarna sträcker sig under ringen och pixlarna sträcker sig upp från ringen. Försök att jämna ut ledningarna eftersom dessa kommer att bilda basstrålkastaren för lampan
  • Löd en svart tråd i det öppna GND, Data Out, och PWR +5 hål ovanpå ringen, vända uppåt i samma riktning som pixlarna. Du borde nu ha 24-pixelringen med tre ledningar som pekar ner från botten och tre pekar upp i samma riktning som pixlarna
  • Löd de tre svarta trådarna från 24-pixelringen till botten av 16-pixelringen. Ledningarna ska ansluta Data Out (från 24-pixelringen) till Dataingång (på 16-pixlarringen), GND (från 24 ringen) till Jord (på 16), och PWR +5 (från 24) till Power 5V DC (på 16). Du kommer nu ha ett tvåstegs pixeltårn
  • Löd tre svarta ledningar på botten av 12-pixelringen i Data Out, 5V likström, och GND hål så att ledningarna sticker ut ur sidan bort från LED-bildpunkterna
  • Löd den Dataingång ledning från botten av 12-pixelringen till den till Data OUT hål på toppen av 16-pixelringen
  • Tappa de två kvarvarande trådarna från 12-pixelringen genom att lägga till en löddropp till var och en
  • Löd den 5V DC Kraft ledning från 12-pixelringen till toppen av kabeln genom att kasta Power 5V DC hål på 16-pixelringen. Om du avlägsnar en full 1/4 "isolering från trådarnas ändar, borde det vara tillräckligt avskruvat kabel som pekar genom toppen av 16-pixelringen till löddaren anslut de två ledningarna
  • Löd den kvarvarande löstråden från 12-pixelringen GND Hål till toppen av kabeln som sitter genom GND hål på 16-pixelringen

I slutet av denna process dubbelkontrollerar du att jordtråden går från längst ner till toppen av LED-ringtornet genom alla markerade hål och att effekten gör samma för de hål som heter namnet. 

Det finns en liten variation i silkskärmens namnkonvention på ringarna, men du får tanken. Kontrollera att utdatatråden från varje ring går in i data i hålet från nästa ring. Detta kommer att skapa en enstaka remsa adresserbara ljus så långt som Neopixel-biblioteket berörs. 

Så svårt som jag försökte hålla ledningarna jämnt upptäckte jag att jag var tvungen att böja dem lite efter lödningen för att jämföra ringarna på tornet. Du kanske måste göra detsamma. Det ska se ut som följande bild.


LED Tower Assembly

Montera Breadboard Circuit

Använd diagrambilden nedan för att ansluta kretsen. Var och en av komponenterna ska passa lätt in i brädet och du kan önska att skräddarsy 22-gauge hookup-tråden för routing på brödbrädet för en mer färdig passform. Några saker att meddela om kretsen.

  • På / av-brytaren avbryter den oreglerade 7V-effekten från strömförsörjningen som matar in LED-ringarna och Arduino. Det är starkt rekommenderat att denna brytare är inställd på av innan du ansluter eller tar bort strömförsörjningen. Detta kommer att skydda ringarna från power spikes från även högkvalitativa nätaggregat.
  • De momentan tryckknapparna ansluter en reglerad 5V-buss från spänningsregulatorn på Arduino till stiften som kommer att upptäcka knapptrycket. 10K Ohm-motstånden håller tapparna LOW tills den trycks ned.
Kretskort

När brädan är monterad placerar LED-lampan på brädet så att jordkabeln ansluts till en jordbuss, strömkabeln till den oreglerade strömbussen (den röda strömmen i diagrammet) och signaltråden till D10 stift på Arduino. Applicera slutligen fyra små gummifötter på botten av brödbrädet för att förhindra att det glider runt.

Monterad lampa

Programera Arduino

Hårdvaran är nu konstruerad och nästa steg är att programmera det. Ladda ner zip-paketet med denna handledning eller se githubförrådet för ljuset.

  • Öppna nightlight.ino i Arduino IDE
  • Anslut Arduino Nano till datorn med USB-till-USB-minikabeln
  • Kontrollera att seriell port är inställd på porten som datorn upptäckte när du anslöt Arduino med Verktyg> Seriell port meny
  • Kontrollera att kortet är inställt på Arduino Nano w / ATmega328 med hjälp av Verktyg> Styrelse meny
  • Verifiera att biblioteken installeras korrekt genom att klicka på Kontrollera knappen och se till att det inte finns några fel
  • Använd Ladda upp knappen för att trycka koden på Arduino
  • Öppna Serial Monitor-fönstret genom att trycka på Kontroll-skift-M och se till att den är inställd på 19200 baud. Du bör se Arduino initialisera med utgången som exemplet nedan
RGB Mood light V1.0: Klar läsning från EEPROM: Status: 1 Ljusinställd: 1 Förinställd färg: 1 Effektnivå: 9 Status: 1 Inställningen är klar. I avläge. slewdelay = 20 climbdelay = 200 I funktion Initialiserande effekt med förinställd: 1 
  • Kontrollera att strömbrytaren är i avstängd läge
  • Anslut 7V-nätaggregatet till cylinderuttaget
  • Vrid strömbrytaren
  • Prova på knapparna och se till att de svarar som beskrivet ovan, vänster till höger: på / av-växling, färginställt läge, ljusstyrkan förinställd nivå, effektläge. Effektläget startar en långsam stigning av pixlar från den nedre ringen som sakta byter färg till nästa förinställda. När alla 52 pixlar har ändrats till nästa färg, börjar färgförändringen igen. Tryck på Effekt knappen upprepade gånger ändrar effektens hastighet.

Anteckningar om programmet

EEPROM

Arduino har en viss mängd EEPROM som kan skrivas till och läsas från vilken kommer att behålla värden över strömmen från Arduino. Lampprogrammet innehåller filen EEPROM.h som exponerar funktionerna EEPROM.read () och EEPROM.write () som läser och skriver byte i EEPROM-minnesutrymmet. 

Som programmerare är du ansvarig för att veta vilken adress att läsa och skriva och den medföljande koden gör det genom att använda #definiera för att ange adressen en specifik inställning kommer att hålla skriv och läsa.

#define STATEADDR 1 #define BRIGHTADDR 2 #define COLORADDR 3 #define EFFECTADDR 4
 // läs variablerna från EPROM och installationssystem state = EEPROM.read (STATEADDR); currentBrightLevel = EEPROM.read (BRIGHTADDR); currentColorPreset = EEPROM.read (COLORADDR); currentEffectLevel = EEPROM.read (EFFECTADDR); 

EEPROM-minnet har en gräns för hur många gånger det kan skrivas innan det bryts ned, men det numret är 10 000, så det är lite oro om att ha ut på din EEPROM med den här applikationen under de närmaste decennierna. Notera bara att det inte är en bra idé att skriva till EEPROM varje sekund eller så i en applikation.

avbrott

Programmet använder avbrott för att upptäcka när knapparna trycks istället för polling för när stiftet är högt. I följande kod från inrätta() routing, funktionen fobHandler () Tilldelas att ringas när någon av de fyra knapparna trycks in.

  // Ställ in avbrottet på var och en av stiften PCintPort :: attachInterrupt (FOBPINA, & ​​fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINB, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINC, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPIND, & fobHandler, RISING); 

Avbrytningsmetoden ger en mycket mer korrekt detektering av knapptrycket. Arduino har bara två inbyggda generiska hårdvaruproblem, men stöder också en PinChangeInterrupt på varje stift. 

Atmel-chipet kan upptäcka förändringar, stigande eller fallande lägen på varje stift. När avbrottet utlöses, är funktionen som angivits tidigare i programmet fobHandler () avbryter körningskoden och tar över. När avbrottshanteraren slutför körningen återgår till programmet där det slutade. För att läsa mer om Pin Change Interrupts, se projektsidan om ämnet.

Programmet använder ett avbrott för att upptäcka vilken stift som har ändrats och funktionen fobHandler () anger den globala variabeln latest_interrupted_pin till numret på stiftet som ändrats. Chipet är inställt för att detektera a STIGANDE spänningsbyte, vilket betyder att den kommer att utlösas när knappen trycks in snarare än när den släpps. 

Programmets huvudslinga kontrollerar en förändring av latest_interrupted_pin variabel och bestämmer sig för vad man ska göra. Den tunga lyftningen av vad man ska göra när knappen trycks ned lämnas till huvudet slinga() för att göra vissa funktioner inom avbrottsfunktionen kan orsaka att saker blir svaga, till exempel Serial.print (), millis (), fördröjning(), och allt som kräver ytterligare användning av avbrott. 

I det här programmet ändras avbrottshanteringsrutingen helt enkelt en variabel och låter huvudslingan göra det komplicerade arbetet för att undvika wonkiness.

Sammanfattning

Du har nu byggt en ny humörlampa som drivs av en Arduino. I grundkonfigurationen kan du ändra lampans färg, ljusstyrka och effekt med en knapptryckning. 

Jag har visat dig hur du kedjer Neopixel-enheter tillsammans medan du skapar en enda adresserbar remsa. Under denna konstruktion lärde du dig också att använda stiftbyteavbrott för att läsa maskinvaruändringar och hur man lagrar data i det permanenta minnet för din Arduino för att skapa inställningar som kvarstår vid strömavbrott.

Det finns många ställen att ta det här projektet om du vill hacka det för att vara något bortom det nyskapande baret-elektro-temat ljusskulptur som det är idag. Förbättringar du kan försöka inkluderar att lägga till fler färginställningar, en annan effekt när lampan är i effektläge eller till och med en nyans av genomskinlig velum.