Come costruire una lampada per l'umore di Arduino

L'ultima generazione di LED RGB indirizzabili apre un intero mondo di possibilità per i progetti. Questo progetto ti guiderà attraverso la creazione di una luce d'atmosfera controllata da Arduino che ti consentirà di cambiare colore, luminosità e persino di passare ad un effetto di scansione dei colori che ricorda l'amata lampada lava delle epoche passate.

In questo tutorial ti mostrerò come costruire una lampada a LED a tre livelli, utilizzare interruttori di cambio pin sulla piattaforma Arduino e conservare i valori persistenti di spegnimento nella memoria di Arduino.

Raccogli i componenti, gli strumenti e le librerie

componenti

  • 12 LED Neopixel
  • 16 LED Neopixel
  • 24 LED Neopixel
  • Arduino Nano ufficiale (o clone se stai pensando al budget)
  • Alimentazione 7V-2A (i Neopixel possono usare molto succo e il Nano ~ 7V)
  • Resistori da 10 K Ohm (1/4 di watt) Marrone-Rosso-Arancio (mantenere un set di resistenze nel kit)
  • Jack da 2,1 mm con connettore CC a prova di pane
  • Tagliere 1/4 dimensioni
  • 22 Gauge Hookup Wire (più colori) (Un'intera scatola come questa è utile per molti progetti)
  • Cavo di collegamento a calibro 20 (nero) per i montanti
  • Interruttore on / off adatto al tagliere
  • Interruttori momentanei adatti al tagliere (4 della confezione da 20)
  • Supporto LRF (Little Rubber Feet)

Utensili

  • Saldatore
  • Saldare
  • Filo spelafili che può spellare il filo calibro 22
  • Computer con IDE Arduino per la programmazione di Nano
  • Arduino IDE (1.0.5 o successivo)
  • Cavo USB da A-Male a Mini-B (per programmazione Nano)

biblioteche

Scarica le seguenti librerie Aduino, avvia l'IDE Arduino e installa ciascuna con il Schizzo> Importa libreria> Aggiungi libreria menu. 

  • Libreria PinChangeInterrupt per rilevare gli eventi di cambio pin
  • Adafruit Neopixel Library per controllare gli anelli di Neopixel

Con questo metodo non è più necessario trovare manualmente il Biblioteca directory e decomprimere. L'IDE si prenderà cura di questo passaggio per te. Dopo aver importato le librerie, esci dall'IDE di Arduino.

Panoramica

Le istruzioni seguenti ti mostreranno come assemblare la lampada e il circuito sul circuito stampato e la programmazione di Arduino. La funzione della lampada è abbastanza semplice: ogni pulsante attiverà un'interruzione nell'Arduino che, a sua volta, provocherà un cambiamento di comportamento. 

I pulsanti da destra a sinistra (perché sono difficili in questo modo) sono: attivazione / disattivazione, modalità colore preimpostata, livello pre-impostato luminosità, modalità effetto. Quando si spegne la lampada, il LED squilla e le impostazioni correnti vengono scritte nella memoria permanente. Quando la lampada si accende, legge le impostazioni ed è pronta per riprendere da dove era stata interrotta.

Assemblaggio della torre LED

Utilizzerai i tre anelli LED per costruire una torre LED che è la parte della lampada della lampada. 

  • Taglia nove lunghezze da 3 pollici del cavo di collegamento nero da 20 gauge
  • Striscia ogni filo 1/4 "su ciascuna estremità
  • Saldare un filo nero nel GND, Inserimento dati, e PWR +5 fori sull'anello da 24 pixel dal basso in modo che i fili si estendano sotto l'anello e che i pixel puntino verso l'alto dall'anello. Prova a distanziare uniformemente i fili in quanto questi formeranno il riser base per la lampada
  • Saldare un filo nero all'aperto GND, Data Out, e PWR +5 fori sulla sommità dell'anello, rivolti verso l'alto nella stessa direzione dei pixel. Ora dovresti avere l'anello da 24 pixel con tre fili rivolti verso il basso dal basso e tre rivolti verso l'alto nella stessa direzione dei pixel
  • Saldare i tre fili neri dall'anello da 24 pixel alla parte inferiore dell'anello da 16 pixel. I fili dovrebbero collegare il Data Out (dalla suoneria da 24 pixel) al Inserimento dati (sull'anello da 16 pixel), il GND (dal 24 anello) al Terra (sul 16), e il PWR +5 (dal 24) a Potenza 5 V DC (il 16). Ora avrai una torre pixel a due livelli
  • Saldare tre fili neri sul fondo dell'anello da 12 pixel nel Data Out, 5 V DC, e GND fori in modo che i fili sporgano dal lato lontano dai pixel del LED
  • Saldare il Inserimento dati cavo dalla parte inferiore dell'anello di 12 pixel nel a Dati OUT foro nella parte superiore dell'anello da 16 pixel
  • Tin i due fili rimanenti dall'anello da 12 pixel aggiungendo un tocco di lega a ciascuno
  • Saldare il 5 V DC Energia filo dall'anello da 12 pixel alla parte superiore del filo che passa attraverso il Potenza 5 V DC foro sull'anello da 16 pixel. Se hai spogliato un intero 1/4 "di isolamento dalle estremità dei fili, ci dovrebbe essere abbastanza filo spellato che spunta attraverso la parte superiore dell'anello da 16 pixel per saldare i due fili
  • Saldare il filo rimanente dall'anello da 12 pixel GND buco nella parte superiore del filo che spunta attraverso il GND foro sull'anello da 16 pixel

Alla fine di questo processo, verifica che il cavo di terra funzioni dal fondo alla sommità della torre a LED dell'anello attraverso tutti i fori denominati a terra e che il potere faccia lo stesso per i fori con il nome di potenza.. 

C'è una piccola variazione nella convenzione di denominazione della serigrafia sugli anelli, ma tu hai l'idea. Verificare che il filo di uscita dati di ciascun anello entri nei dati in buca dall'anello successivo. Questo creerà una singola striscia di luci indirizzabili per quanto riguarda la libreria Neopixel. 

Per quanto cercassi di mantenere i cavi, scoprii che dovevo piegarli un po 'dopo la saldatura per livellare gli anelli sulla torre. Potrebbe essere necessario fare lo stesso. Dovrebbe assomigliare alla seguente immagine.


Torre LED assemblata

Assemblare il circuito del tagliere

Usa l'immagine del diagramma qui sotto per cablare i circuiti. Ciascuno dei componenti dovrebbe adattarsi facilmente alla scheda e si potrebbe desiderare di tagliare su misura il cavo di aggancio 22-gauge per l'instradamento sulla breadboard per un adattamento più rifinito. Alcune cose da segnalare sul circuito.

  • L'interruttore on / off interrompe l'alimentazione 7 V non regolata dall'alimentazione che alimenta gli anelli LED e Arduino. Si consiglia vivamente di impostare questo interruttore su via prima di collegare o rimuovere l'alimentazione. Ciò proteggerà gli anelli dai picchi di potenza anche da alimentatori di alta qualità.
  • I pulsanti temporanei collegano un bus a 5 V regolato dal regolatore di tensione sull'arduino ai pin che rilevano la pressione del pulsante. I resistori da 10 K Ohm mantengono i pin BASSI finché non viene premuto il pulsante.
Schema elettrico

Una volta assemblata la scheda, posizionare la torre a LED sulla scheda in modo che il filo di terra si connetta a un bus di terra, il cavo di alimentazione al bus di alimentazione non regolato (il bus di alimentazione rosso superiore nello schema) e il cavo di segnale al D10 pin su Arduino. Infine applica quattro piedini in gomma sul fondo della breadboard per evitare che scivoli.

Lampada assemblata

Programma l'Arduino

L'hardware è ora costruito e il prossimo passo è programmarlo. Scarica il pacchetto zip compresso con questo tutorial o consulta il repository github per la luce.

  • Aperto nightlight.ino nell'IDE di Arduino
  • Collega Arduino Nano al computer con il cavo mini USB-to-USB
  • Assicurarsi che la porta seriale sia impostata sulla porta rilevata dal computer quando si è collegato Arduino utilizzando il Strumenti> Porta seriale menu
  • Assicurarsi che la scheda sia impostata su Arduino Nano w / ATmega328 usando il Strumenti> Scheda menu
  • Verificare che le librerie siano installate correttamente facendo clic su Verificare pulsante e assicurarsi che non ci siano errori
  • Utilizzare il Caricare pulsante per inviare il codice ad Arduino
  • Aprire la finestra del monitor seriale premendo Control-Shift-M e assicurarsi che sia impostato su 19200 baud. Dovresti vedere l'inizializzazione di Arduino con l'output come nell'esempio seguente
RGB Mood light V1.0: Ready Reading da EEPROM: Stato: 1 Preset Bright: 1 Color preset: 1 Effect Level: 9 State: 1 Setup completo. In modalità spento. slewdelay = 20 climbdelay = 200 In Function Initializing Effetto con preset: 1 
  • Assicurarsi che l'interruttore on / off sia in posizione off
  • Collegare l'alimentatore da 7 V al connettore cilindrico
  • Gira l'interruttore sopra
  • Prova i pulsanti e per vedere che rispondono come descritto sopra, da sinistra a destra: attivazione / disattivazione, modalità colore preimpostata, livello pre-impostato, modalità effetto. La modalità effetto avvia una lenta scalata dei pixel dall'anello inferiore che cambia lentamente colore alla preimpostazione successiva. Una volta che tutti i 52 pixel sono passati al colore successivo, il processo di cambio colore ricomincia. Premendo il tasto Effetto pulsante ripetutamente cambierà la velocità dell'effetto.

Note sul programma

EEPROM

L'Arduino ha una certa quantità di EEPROM che può essere scritta e letta da cui manterrà i valori al di fuori dell'alimentazione di Arduino. Il programma della lampada include il file EEPROM.h che espone le funzioni EEPROM.read () e EEPROM.write () che legge e scrive byte nello spazio di memoria EEPROM. 

Come programmatore, sei responsabile di sapere quale indirizzo leggere e scrivere e il codice incluso lo fa usando #definire per specificare l'indirizzo che un'impostazione specifica terrà su scrivere e leggere.

#define STATEADDR 1 #define BRIGHTADDR 2 #define COLORADDR 3 #define EFFECTADDR 4
 // legge le variabili da EPROM e setup system state = EEPROM.read (STATEADDR); currentBrightLevel = EEPROM.read (BRIGHTADDR); currentColorPreset = EEPROM.read (COLORADDR); currentEffectLevel = EEPROM.read (EFFECTADDR); 

La memoria EEPROM ha un limite a quante volte può essere scritta prima che degeneri, ma quel numero è di 10.000 range quindi c'è poco da preoccuparsi di indossare la tua EEPROM con questa applicazione nei prossimi decenni. Basta notare che non è una buona idea scrivere alla EEPROM circa ogni secondo in un'applicazione.

interrupt

Il programma utilizza gli interrupt per rilevare quando i pulsanti vengono premuti invece del polling per quando il pin è alto. Nel seguente codice dal impostare() routing, la funzione fobHandler () è assegnato per essere chiamato quando viene premuto uno dei quattro pulsanti.

  // imposta l'interrupt su ciascuno dei pin PCintPort :: attachInterrupt (FOBPINA, & ​​fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINB, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINC, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPIND, & fobHandler, RISING); 

Il metodo di interruzione fornisce un rilevamento molto più accurato della pressione del pulsante. L'Arduino ha solo due built in interrupt hardware generici ma supporta anche un PinChangeInterrupt su ogni pin. 

Il chip Atmel è in grado di rilevare modi di variazione, aumento o diminuzione su ciascun pin. Quando l'interrupt viene attivato, la funzione specificata in precedenza nel programma fobHandler () interrompe il codice in esecuzione e prende il sopravvento. Quando il gestore di interrupt completa l'esecuzione, ritorna al programma da cui era stato interrotto. Per ulteriori informazioni su Pin Change Interrupts, vedere la pagina del progetto sull'argomento.

Il programma utilizza un interrupt per rilevare quale pin è stato modificato e la funzione fobHandler () imposta la variabile globale latest_interrupted_pin al numero del pin che è cambiato. Il chip è impostato per rilevare a RISING cambiamento di tensione, il che significa che si innescherà quando si preme il pulsante piuttosto che quando viene rilasciato. 

Il ciclo principale del programma verifica la modifica di latest_interrupted_pin variabile e decide cosa fare. Il sollevamento pesante di cosa fare quando si preme il pulsante viene lasciato al main ciclo continuo() perché l'esecuzione di determinate funzioni all'interno della funzione di interruzione può causare problemi come ad esempio Serial.print (), millis (), ritardo(), e tutto ciò che richiede l'uso aggiuntivo di interrupt. 

In questo programma l'instradamento della gestione degli interrupt cambia semplicemente una variabile e lascia che il ciclo principale svolga il lavoro complicato per evitare il malessere.

Sommario

Ora hai costruito una nuova lampada d'atmosfera alimentata da un Arduino. Nella configurazione di base è possibile modificare il colore, la luminosità e l'effetto della lampada con la semplice pressione di un pulsante. 

Ti ho mostrato come concatenare le unità Neopixel insieme creando una singola striscia indirizzabile. Durante questa build hai anche imparato a utilizzare gli interrupt di modifica dei pin per leggere le modifiche dell'hardware e come archiviare i dati nella memoria permanente di Arduino per creare impostazioni che persistono in caso di mancanza di corrente.

Ci sono molti posti in cui prendere questo progetto se vuoi inciderlo per essere qualcosa che va oltre la novità della scultura di luce a fili elettrici che è oggi. I miglioramenti che potresti provare includono l'aggiunta di ulteriori preimpostazioni di colore, un effetto diverso quando la lampada è in modalità effetto o anche una sfumatura in velum traslucido.