Cum de a construi o lampă de mers Arduino

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.

Colectați componentele, instrumentele și bibliotecile

Componente

  • 12 LED Neopixel
  • 16 Neopixel LED
  • 24 Neopixel cu LED-uri
  • Oficialul Arduino Nano (sau clona dacă vă gândiți la buget)
  • 7V-2A Power Supply (Neopixelul poate folosi o mulțime de suc și Nano ~ 7V)
  • Rezistente 10K Ohm (1/4 watt) Brown-Roșu-Portocaliu (păstrați un set de rezistențe în setul dvs.)
  • Panou de 2,1 mm cilindric cu prindere plăcută la bord
  • Breadboard 1/4 dimensiune
  • 22 Gauge Wook (mai multe culori) (o cutie ca aceasta este utilă pentru multe proiecte)
  • 20 Gauge Wook hookup (negru) pentru posturile de ridicare
  • Comutator pornit / oprit prietenos la bord
  • Comutatoare instantanee prietenoase cu panoul de bord (4 din pachetul de 20)
  • Suport LRF (picioare picioare cauciuc)

Unelte

  • Ciocan de lipit
  • suda
  • Îndepărtarea sârmei care poate desprinde firul de calibru 22
  • Computer cu IDE Arduino pentru programarea Nano
  • Arduino IDE (1.0.5 sau mai târziu)
  • Cablu USB A-Male la Mini-B (pentru programare Nano)

Biblioteci

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. 

  • PinChangeInterrupt Library pentru a detecta evenimentele de schimbare a pinilor
  • Adafruit Neopixel Library pentru a controla inelele Neopixel

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.

Prezentare generală

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.

Asamblarea Turnului cu LED-uri

Veți folosi cele trei inele LED pentru a construi un turn LED care este partea lampă a lămpii. 

  • Tăiați nouă lungimi de 3 inci ale firului de legătură de 20 de grade negru
  • Îndepărtați fiecare fir 1/4 "la fiecare capăt
  • Lipiți o sârmă neagră în GND, Introducere a datelor, și PWR +5 găuri de pe inelul de 24 de pixeli din partea inferioară, astfel încât firele să se extindă sub inel și pixelii să se îndrepte din inel. Încercați să instalați în mod uniform firele, deoarece acestea vor forma suportul de bază pentru lampă
  • Lipiți un fir negru în aer liber GND, Data ieșire, și PWR +5 găuri deasupra inelului, orientate în sus în aceeași direcție cu pixelii. Ar trebui să aveți acum inelul de 24 de pixeli cu trei fire care se îndreaptă în jos și trei îndreptate în aceeași direcție cu pixelii
  • Lipiți cele trei fire negre de la inelul de 24 pixeli până la partea inferioară a inelului de 16 pixeli. Firele ar trebui să le conecteze Data ieșire (de la inelul de 24 de pixeli) la Introducere a datelor (pe inelul de 16 pixeli), GND (de la inelul 24) la Sol (pe 16) și PWR +5 (de la 24) la Putere 5V DC (pe 16). Acum veți avea un turn pixel cu două nivele
  • Lipiți trei fire negre pe partea inferioară a inelului de 12 pixeli în Data ieșire, Putere 5V DC, și GND găuri, astfel încât firele să rămână în afara zonei de la pixelii LED
  • Lipiți-l Introducere a datelor sârmă din partea de jos a inelului de 12 pixeli în poziția Data OUT gaura din partea de sus a inelului de 16 pixeli
  • Stingeți cele două fire rămase din inelul de 12 pixeli adăugând o atingere de lipire fiecăruia
  • Lipiți-l 5V DC Putere sârmă de la inelul de 12 pixeli până la partea superioară a firului care trece prin Putere 5V DC gaură pe inelul de 16 pixeli. Dacă ați îndepărtat o izolație completă de 1/4 "de la capetele firelor, ar trebui să existe sufletul destrămat suficient prin vârful inelului de 16 pixeli pentru a lipi conectați cele două fire
  • Lipiți firul rămas rămas din inelul de 12 pixeli GND gaură în partea superioară a firului prin care trece prin GND gaură pe inelul de 16 pixeli

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.


Turnul LED asamblat

Asamblați circuitul Breadboard

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.

  • Comutatorul pornit / oprit întrerupe alimentarea nereglementată de 7V de la sursa de alimentare care alimentează inelele LED și Arduino. Se recomandă ca acest comutator să fie setat la de pe înainte de conectarea sau scoaterea sursei de alimentare. Acest lucru va proteja inelele de vârfurile de alimentare de la surse de alimentare de înaltă calitate.
  • Butoanele instantanee conectează o magistrală regulată de 5V de la regulatorul de tensiune de pe Arduino la pinii care vor detecta apăsarea butonului. Rezistențele de 10K Ohm păstrează pinii LOW până când apăsați butonul.
Circuit Diagramă

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ă

Programați Arduino

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ă.

  • Deschis nightlight.ino în IDE-ul Arduino
  • Conectați dispozitivul Arduino Nano la computer prin cablul mini-USB-USB
  • Asigurați-vă că portul serial este setat la portul detectat de computer când ați conectat dispozitivul Arduino utilizând Instrumente> Port serial meniul
  • Asigurați-vă că placa este setată la Arduino Nano w / ATmega328 utilizând Instrumente> Consiliul meniul
  • Verificați dacă bibliotecile sunt instalate corect făcând clic pe Verifica și asigurați-vă că nu există erori
  • Folosește Încărcați pentru a împinge codul la Arduino
  • Deschideți fereastra Monitor serial prin apăsarea tastei Control-Shift-M și asigurați-vă că este setat la 19200 baud. Ar trebui să vedeți inițierea Arduino cu ieșire ca exemplul de mai jos
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 
  • Asigurați-vă că întrerupătorul de pornire / oprire este în poziția oprit
  • Atașați sursa de alimentare de 7V la conectorul barilului
  • Rotiți comutatorul pe
  • Încercați butoanele și vedeți că acestea răspund așa cum este descris mai sus, de la stânga la dreapta: comutator pornire / oprire, mod presetare culoare, nivel prestabilit de luminozitate, mod efect. Modul de efecte inițiază o urcare lentă a pixelilor din inelul inferior, care schimbă lent culoarea la următoarea presetare. Odată ce toți cei 52 de pixeli s-au schimbat la următoarea culoare, procesul de schimbare a culorilor va începe din nou. Apăsarea butonului Efect în mod repetat, va schimba viteza efectului.

Note despre program

EEPROM

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.

Întreruperile

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.

rezumat

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.