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.
Scarica le seguenti librerie Aduino, avvia l'IDE Arduino e installa ciascuna con il Schizzo> Importa libreria> Aggiungi libreria menu.
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.
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.
Utilizzerai i tre anelli LED per costruire una torre LED che è la parte della lampada della lampada.
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.
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.
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 assemblataL'hardware è ora costruito e il prossimo passo è programmarlo. Scarica il pacchetto zip compresso con questo tutorial o consulta il repository github per la luce.
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
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.
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.
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.