Ultima generație de LED-uri RGB adresabile deschide o lume întreagă de posibilități pentru proiecte. Acest proiect vă va ghida prin crearea unei lumini stăpânite de control al Arduino, care vă va permite să schimbați culorile, luminozitatea și chiar să treceți la un efect de colorare a crawlului care amintește de lampa de lava iubită de vârstă trecătoare.
În acest tutorial vă voi arăta cum să construiți o lampă LED cu trei niveluri, să întrerupeți întreruperile de schimbare a pinului pe platforma Arduino și să păstrați energia din valorile persistente din memoria lui Arduino.
Descărcați următoarele biblioteci Aduino, porniți IDE-ul Arduino și instalați fiecare cu Schiță> Importă bibliotecă> Adăugați bibliotecă meniul.
Cu această metodă nu mai trebuie să găsiți manual Bibliotecă directorul și dezarhiva. IDE va avea grijă de acest pas pentru dvs. După importarea bibliotecilor, ieșiți din ID-ul Arduino.
Instrucțiunile de mai jos vă vor arăta cum să asamblați lampa și circuitul pe placa de circuite și programarea lui Arduino. Funcția lămpii este destul de simplă: fiecare buton va declanșa o întrerupere în Arduino care, la rândul său, va declanșa o schimbare de comportament.
Butoanele de la dreapta la stânga (pentru că sunt dificil în acest fel) sunt: comutator pornire / oprire, mod presetare culoare, nivel prestabilit de luminozitate, mod efect. Atunci când lampa este oprită, LED-ul sună oprit și setările curente sunt înscrise în memorie permanentă. Atunci când lampa se aprinde, se citește setările și este gata să se inițieze o copie de rezervă de unde ați rămas.
Veți folosi cele trei inele LED pentru a construi un turn LED care este partea lampă a lămpii.
La sfârșitul acestui proces verificați dublu că firul de pământ rulează de la partea inferioară spre partea superioară a turnului cu LED-uri prin toate găurile numite la sol și că puterea face același lucru pentru orificiile numite "power-ish".
Există o mică variație în convenția de numire a ecranului de mătase pe inele, dar veți obține ideea. Verificați dacă firul de date din fiecare inel intră în datele din orificiul următor. Aceasta va crea o singură bandă de lumini adresabile în ceea ce privește biblioteca Neopixel.
Atât de greu am încercat să păstrez firele, am descoperit că trebuia să le îndoiesc puțin după lipire pentru a alinia inelele de pe turn. Poate că trebuie să faceți același lucru. Ar trebui să arate ceva asemănător imaginii următoare.
Utilizați imaginea de mai jos pentru a conecta circuitul. Fiecare componentă ar trebui să se potrivească cu ușurință în placă și vă recomandăm să tăiați în mod uzual firul de legătură de 22 de calibru pentru a vă deplasa pe panoul de coasere pentru a vă potrivi mai bine. Câteva lucruri care trebuie plătite în legătură cu circuitul.
Odată ce placa este asamblată, poziționați turnul LED pe placă, astfel încât firul de masă să se conecteze la o magistrală de masă, firul de alimentare la magistrala de alimentare nereglementată (magistrala de alimentare roșie de sus din diagramă) și firul de semnal la D10 pini pe Arduino. În cele din urmă, aplicați patru picioare de cauciuc în partea inferioară a panoului pentru a preveni alunecarea.
Lampa asamblatăHardware-ul este acum construit și următorul pas este să îl programați. Descărcați zipul ambalat cu acest tutorial sau consultați magazia github pentru lumină.
Luminozitatea RGB Mood V1.0: Pregătit Citirea de pe EEPROM: Stare: 1 Presetare luminată: 1 Presetare color: 1 Nivel efecte: 9 Stare: 1 Setarea a fost finalizată. În modul oprit. slewdelay = 20 climbdelay = 200 În funcția de inițiere Efect cu presetare: 1
Arduino are o anumită cantitate de EEPROM care poate fi scrisă și citită din care se vor păstra valori în întreaga putere a Arduino. Programul de lampă include fișierul EEPROM.h care expune funcțiile EEPROM.read () și EEPROM.write () care citesc și scrie octeți în spațiul de memorie EEPROM.
În calitate de programator, sunteți responsabil pentru cunoașterea adresei de citire și scriere, iar codul inclus face acest lucru utilizând #defini pentru a specifica adresa pe care o anumită setare o va ține la scriere și citire.
#define STATEADDR 1 #define BRIGHTADDR 2 #define COLORADDR 3 #define EFFECTADDR 4
// citiți variabilele din EPROM și starea sistemului de configurare = EEPROM.read (STATEADDR); currentBrightLevel = EEPROM.read (BRIGHTADDR); currentColorPreset = EEPROM.read (COLORADDR); currentEffectLevel = EEPROM.read (EFFECTADDR);
Memoria EEPROM are o limită de câte ori poate fi scrisă înainte de a se degrada, dar numărul este de 10.000, astfel încât nu vă faceți griji cu privire la purtarea EEPROM-ului cu această aplicație în următoarele decenii. Rețineți că nu este o idee bună să scrieți în EEPROM fiecare secundă într-o aplicație.
Programul folosește întreruperi pentru a detecta când butoanele sunt apăsate în loc de interogare atunci când pinul este ridicat. În următorul cod de la înființat() rutare, funcția fobHandler () este programată să fie apelată atunci când este apăsat oricare dintre cele patru butoane.
// configurați întreruperea pe fiecare pin PCintPort :: attachInterrupt (FOBPINA, & fobHandler, RISING); PCintPort :: atașațiInterrupt (FOBPINB, & fobHandler, RISING); PCintPort :: atașațiInterrupt (FOBPINC, & fobHandler, RISING); PCintPort :: atașațiInterrupt (FOBPIND, & fobHandler, RISING);
Metoda de întrerupere oferă o detectare mult mai precisă a apăsării butonului. Arduino are doar două construite în întreruperi hardware generice, dar suportă și un PinChangeInterrupt pe fiecare pin.
Cipul Atmel poate detecta modurile de schimbare, ridicare sau cădere pe fiecare pin. Atunci când întreruperea este declanșată funcția specificată anterior în program fobHandler () întrerupe codul de execuție și preia. Când dispozitivul de tratare a întreruperii finalizează execuția, se întoarce la programul unde a rămas. Pentru a afla mai multe despre întreruperile de schimbare a pinului, consultați pagina proiectului pe subiect.
Programul utilizează o întrerupere pentru a detecta ce pin a fost schimbat și funcția fobHandler () stabilește variabila globală latest_interrupted_pin la numărul de știft care sa schimbat. Cipul este setat să detecteze a ÎN CREȘTERE schimbare de tensiune, ceea ce înseamnă că va declanșa ca butonul este împins mai degrabă decât atunci când este eliberat.
Buclele principale ale programului verifică modificarea latest_interrupted_pin variabilă și decide ce să facă. Ridicarea grea a ceea ce trebuie făcut atunci când butonul este apăsat este lăsat în partea principală buclă() deoarece executarea anumitor funcții în interiorul funcției de întrerupere poate cauza lucrurile să se prăbușească cum ar fi Serial.print (), millis (), întârziere(), și orice necesită utilizarea suplimentară a întreruperilor.
În acest program, rutarea de manipulare a întreruperilor schimbă pur și simplu o variabilă și permite bucla principală să facă munca complicată pentru a evita pierderea.
Ați construit acum o lampă nouă de dispoziție, alimentată de un Arduino. În configurația de bază puteți modifica culoarea, luminozitatea și efectul lămpii prin apăsarea unui buton.
V-am arătat cum să conectați împreună unitățile Neopixel în timp ce creați o singură bandă adresabilă. În timpul acestei construcții, ați învățat de asemenea despre utilizarea întreruperilor de schimbare a PIN-urilor pentru a citi schimbările hardware și despre modul de stocare a datelor în memoria permanentă a dispozitivului dvs. Arduino pentru a crea setări care persistă între întreruperile de alimentare.
Există o mulțime de locuri pentru a lua acest proiect, dacă doriți să-l hack pentru a fi ceva dincolo de sculptură lumina electrostatică noutate sârmă de noutate este astăzi. Îmbunătățirile pe care le puteți încerca includ adăugarea mai multor presetări de culoare, un efect diferit atunci când lampa este în modul de funcționare sau chiar o umbră realizată din velum translucid.