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.
Ladda ner följande Aduino-bibliotek, starta Arduino IDE och installera var och en med Sketch> Importera bibliotek> Lägg till bibliotek meny.
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.
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.
Du kommer att använda de tre LED-ringarna för att bygga ett LED-torn som är lampans del av lampan.
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.
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.
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 lampaHå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.
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
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.
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.
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.