So bauen Sie eine Arduino-Stimmungslampe

Die neueste Generation adressierbarer RGB-LEDs eröffnet eine ganze Welt von Möglichkeiten für Projekte. Dieses Projekt führt Sie durch die Entwicklung eines Arduino-gesteuerten Stimmungslichts, mit dem Sie Farben, Helligkeit und sogar einen Farbkrawalleffekt wechseln können, der an die beliebte Lava-Lampe vergangener Zeiten erinnert.

In diesem Tutorial zeige ich Ihnen, wie Sie eine dreistufige LED-Lampe bauen, Pinwechsel-Interrupts auf der Arduino-Plattform verwenden und dauerhafte Werte für das Abschalten im Arduino-Speicher speichern.

Sammeln Sie die Komponenten, Tools und Bibliotheken

Komponenten

  • 12 LED-Neopixel
  • 16 LED-Neopixel
  • 24 LED-Neopixel
  • Offizieller Arduino Nano (oder Klon, wenn Sie auf das Budget achten)
  • 7V-2A-Netzteil (Neopixels können viel Saft und den Nano ~ 7V verwenden)
  • 10K Ohm Widerstände (1/4 Watt) Braun-Rot-Orange (Behalten Sie einen Satz Widerstände in Ihrem Kit)
  • Breadboard-freundlicher 2,1-mm-DC-Fassanschluss
  • Breadboard 1/4 Größe
  • 22 Gauge-Anschlussdraht (mehrere Farben) (Eine ganze Box wie diese ist für viele Projekte hilfreich)
  • 20 Gauge-Verbindungsdraht (schwarz) für die Steigpfosten
  • Breadboard-freundlicher Ein / Aus-Schalter
  • Breadboard-freundliche Taster (4 aus dem 20er-Pack)
  • LRF-Unterstützung (kleine Gummifüße)

Werkzeuge

  • Lötkolben
  • Löten
  • Abisolierzange, die 22 Gauge abisolieren kann
  • Computer mit Arduino IDE zur Programmierung von Nano
  • Arduino IDE (1.0.5 oder höher)
  • USB-A-Stecker an Mini-B-Kabel (zur Programmierung von Nano)

Bibliotheken

Laden Sie die folgenden Aduino-Bibliotheken herunter, starten Sie die Arduino-IDE und installieren Sie jede mit der Skizze> Bibliothek importieren> Bibliothek hinzufügen Speisekarte. 

  • PinChangeInterrupt Library zum Erkennen von Pin-Änderungsereignissen
  • Adafruit Neopixel Library zur Steuerung der Neopixel-Ringe

Mit dieser Methode müssen Sie nicht mehr manuell suchen Bibliothek Verzeichnis und entpacken. Die IDE übernimmt diesen Schritt für Sie. Beenden Sie nach dem Importieren der Bibliotheken die Arduino IDE.

Überblick

Die folgenden Anweisungen zeigen Ihnen, wie Sie die Lampe und die Schaltung auf der Platine montieren und die Programmierung des Arduino durchführen. Die Funktion der Lampe ist ziemlich einfach: Jede Taste löst einen Interrupt im Arduino aus, der wiederum eine Verhaltensänderung auslöst. 

Die Tasten von rechts nach links (weil ich so schwierig bin) sind: Ein / Aus-Schalter, Farbvoreinstellungsmodus, Helligkeitseinstellungsstufe, Effektmodus. Wenn die Lampe ausgeschaltet ist, erlöschen die LED-Anzeigen und die aktuellen Einstellungen werden in den permanenten Speicher geschrieben. Wenn die Lampe sich einschaltet, liest sie die Einstellungen und kann an der Stelle weiterfahren, an der Sie aufgehört haben.

Montage des LED-Turms

Mit den drei LED-Ringen konstruieren Sie einen LED-Turm, den Lampenteil der Lampe. 

  • Schneiden Sie neun 3-Zoll-Längen des schwarzen 20 Gauge-Drahtes
  • Streifen Sie jeden Draht 1/4 "an jedem Ende ab
  • Löten Sie einen schwarzen Draht in die GND, Dateneingabe, und PWR +5 Löcher am 24-Pixel-Ring von unten, so dass sich die Drähte unter dem Ring erstrecken und die Pixel vom Ring nach oben zeigen. Versuchen Sie, die Drähte gleichmäßig zu platzieren, da diese den Sockel für die Lampe bilden
  • Löten Sie einen schwarzen Draht ins Freie GND, Daten aus, und PWR +5 Löcher auf dem Ring, die in die gleiche Richtung wie die Pixel nach oben zeigen. Der 24-Pixel-Ring sollte jetzt mit drei Drähten von unten nach unten und drei in dieselbe Richtung wie die Pixel nach oben weisen
  • Löten Sie die drei schwarzen Drähte vom 24-Pixel-Ring bis zum unteren Rand des 16-Pixel-Rings. Die Drähte sollten das verbinden Daten aus (vom 24-Pixel-Ring) bis zum Dateneingabe (auf dem 16-Pixel-Ring) die GND (vom 24 Ring) zum Boden (auf der 16) und die PWR +5 (von 24) bis Stromversorgung 5V DC (auf der 16). Sie haben jetzt einen zweistufigen Pixelturm
  • Löten Sie drei schwarze Drähte auf die Unterseite des 12-Pixel-Rings im Daten aus, 5V Gleichstrom, und GND Löcher, so dass die Drähte von den LED-Pixeln weg von der Seite ragen
  • Löten Sie die Dateneingabe Draht von der Unterseite des 12-Pixel-Rings in die Datenausgang Loch auf der Oberseite des 16-Pixel-Rings
  • Verzinnen Sie die beiden verbleibenden Drähte aus dem 12-Pixel-Ring, indem Sie jedem Lötzinn etwas hinzufügen
  • Löten Sie die 5 V DC Leistung Draht vom 12-Pixel-Ring zur Spitze des Drahtes, der durch den Draht stößt Stromversorgung 5V DC Loch auf dem 16-Pixel-Ring. Wenn Sie die Enden der Drähte mit 1/4 "der Isolierung abisoliert haben, sollte ausreichend Kabel durch die Oberseite des 16-Pixel-Rings gesteckt werden, um die beiden Drähte zu löten
  • Löten Sie den verbleibenden losen Draht vom 12-Pixel-Ring GND Loch an der Spitze des Drahts durchstoßen GND Loch auf dem 16-Pixel-Ring

Vergewissern Sie sich am Ende dieses Vorgangs, dass der Erdungsdraht von unten nach oben durch alle Bohrungen mit dem Namen "Boden" hindurch verläuft, und dass die Stromversorgung für die Löcher mit dem Namen "Power" gleich ist. 

Es gibt eine kleine Abweichung in der Namensgebung der Siebdruckfarben für die Ringe, aber Sie haben die Idee. Vergewissern Sie sich, dass der Datenausgangskabel jedes Ringes vom nächsten Ring in das Datenloch geht. Auf diese Weise wird ein einzelner Streifen adressierbarer Lichter für die Neopixel-Bibliothek erzeugt. 

So sehr ich auch versuchte, die Drähte gleichmäßig zu halten, stellte ich fest, dass ich sie nach dem Löten ein wenig biegen musste, um die Ringe auf dem Turm auszurichten. Möglicherweise müssen Sie dasselbe tun. Es sollte ungefähr so ​​aussehen wie das folgende Bild.


LED-Turm zusammengebaut

Breadboard-Schaltung zusammenbauen

Verwenden Sie das Diagramm unten, um die Schaltung zu verdrahten. Jede der Komponenten sollte problemlos in die Platine passen, und Sie möchten möglicherweise den 22-Gauge-Verbindungsdraht für das Verlegen auf dem Steckbrett individuell abschneiden, um die Passgenauigkeit zu verbessern. Ein paar Dinge zu beachten über die Rennstrecke.

  • Der Ein / Aus-Schalter unterbricht die ungeregelte 7-V-Stromversorgung von der Stromversorgung, die die LED-Ringe und den Arduino speist. Es wird dringend empfohlen, diesen Schalter auf zu setzen aus vor dem Anschließen oder Entfernen der Stromversorgung. Dies schützt die Ringe vor Spannungsspitzen auch von hochwertigen Netzteilen.
  • Mit den Tastern wird ein regulierter 5-V-Bus vom Spannungsregler des Arduino an die Pins angeschlossen, die den Tastendruck erkennen. Die 10K Ohm Widerstände halten die Pins auf LOW, bis die Taste gedrückt wird.
Schaltplan

Sobald die Platine zusammengebaut ist, positionieren Sie den LED-Turm auf der Platine, sodass der Erdungsdraht mit einem Erdungsbus, der Stromdraht mit dem ungeregelten Energiebus (der obere rote Energiebus in der Abbildung) und der Signaldraht mit dem verbunden sind D10 Pin auf dem Arduino. Schließlich tragen Sie vier kleine Gummifüße auf der Unterseite des Steckbrettes auf, um ein Abrutschen zu verhindern.

Montierte Lampe

Programmieren Sie den Arduino

Die Hardware ist jetzt aufgebaut und der nächste Schritt ist das Programmieren. Laden Sie die mit diesem Tutorial gepackte ZIP-Datei herunter oder sehen Sie sich das Github-Repository für das Licht an.

  • Öffnen Nachtlicht in der Arduino IDE
  • Verbinden Sie den Arduino Nano mit dem USB-zu-USB-Minikabel mit dem Computer
  • Stellen Sie sicher, dass der serielle Port auf den Port eingestellt ist, den der Computer beim Anschließen des Arduino mit erkannt hat Extras> Serienport Speisekarte
  • Stellen Sie sicher, dass die Karte mit der Taste auf Arduino Nano w / ATmega328 eingestellt ist Extras> Platine Speisekarte
  • Vergewissern Sie sich, dass die Bibliotheken ordnungsgemäß installiert sind, indem Sie auf klicken Überprüfen und stellen Sie sicher, dass keine Fehler auftreten
  • Verwenden Sie die Hochladen Taste, um den Code zum Arduino zu drücken
  • Öffnen Sie das Serial Monitor-Fenster, indem Sie drücken Control-Shift-M und stellen Sie sicher, dass es auf 19200 Baud eingestellt ist. Sie sollten das Arduino mit der Ausgabe wie im folgenden Beispiel initialisieren sehen
RGB-Stimmungslicht V1.0: Bereit Lesen aus dem EEPROM: Status: 1 Helligkeitsvoreinstellung: 1 Farbvoreinstellung: 1 Effektpegel: 9 Status: 1 Setup abgeschlossen. Im Aus-Modus. slewdelay = 20 Climbedelay = 200 In Funktion Initialisierungseffekt mit Voreinstellung: 1 
  • Stellen Sie sicher, dass der Ein / Aus-Schalter in der Aus-Position ist
  • Bringen Sie das 7-V-Netzteil am Stecker an
  • Drehe den Schalter auf
  • Probieren Sie die Tasten aus und stellen Sie sicher, dass sie wie oben beschrieben von links nach rechts reagieren: Ein / Aus-Schalter, Farbvoreinstellungsmodus, Helligkeitseinstellungsstufe, Effektmodus. Der Effektmodus startet einen langsamen Anstieg der Pixel vom unteren Ring, die die Farbe langsam zum nächsten Preset ändern. Sobald alle 52 Pixel in die nächste Farbe geändert wurden, beginnt der Farbänderungsprozess erneut. Drücken Sie die Bewirken Durch wiederholtes Drücken der Taste wird die Geschwindigkeit des Effekts geändert.

Hinweise zum Programm

EEPROM

Das Arduino verfügt über eine bestimmte Menge an EEPROM, das beschrieben und gelesen werden kann. Die Werte bleiben beim Ausschalten des Arduino erhalten. Das Lampenprogramm enthält die Datei EEPROM.h, die die Funktionen verfügbar macht EEPROM.read () und EEPROM.write () diese lesen und schreiben Bytes in den EEPROM-Speicherplatz. 

Als Programmierer sind Sie dafür verantwortlich, zu wissen, welche Adresse Sie lesen und schreiben müssen, und der enthaltene Code tut dies, indem Sie verwenden #definieren Wenn Sie die Adresse angeben möchten, wird eine bestimmte Einstellung beim Schreiben und Lesen gespeichert.

# definieren STATEADDR 1 # definieren BRIGHTADDR 2 # definieren COLORADDR 3 # definieren EFFECTADDR 4
 // lesen Sie die Variablen aus dem EPROM und richten Sie den Systemstatus ein = EEPROM.read (STATEADDR); currentBrightLevel = EEPROM.read (BRIGHTADDR); currentColorPreset = EEPROM.read (COLORADDR); currentEffectLevel = EEPROM.read (EFFECTADDR); 

Der EEPROM-Speicher hat ein Limit dafür, wie oft er geschrieben werden kann, bevor er sich verschlechtert. Die Anzahl liegt jedoch bei 10.000, so dass es in den nächsten Jahrzehnten keine Probleme gibt, das EEPROM mit dieser Anwendung zu verschleißen. Bitte beachten Sie, dass es keine gute Idee ist, jede Sekunde in einer Anwendung in das EEPROM zu schreiben.

Unterbricht

Das Programm verwendet Interrupts, um zu erkennen, wann die Tasten gedrückt werden, anstatt abzufragen, wann der Pin hoch ist. Im folgenden Code aus der Konfiguration() Routing, die Funktion fobHandler () wird zugewiesen, um aufgerufen zu werden, wenn eine der vier Tasten gedrückt wird.

  // Setze den Interrupt auf jedem der Pins. PCintPort :: attachInterrupt (FOBPINA, & ​​fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINB, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPINC, & fobHandler, RISING); PCintPort :: attachInterrupt (FOBPIND, & fobHandler, RISING); 

Die Interrupt-Methode ermöglicht eine wesentlich genauere Erkennung des Tastendrucks. Das Arduino verfügt nur über zwei generische Hardware-Interrupts, unterstützt aber auch einen PinChangeInterrupt an jedem Pin. 

Der Atmel-Chip kann an jedem Pin Änderungen, steigende oder fallende Modi erkennen. Wenn der Interrupt ausgelöst wird, wird die zuvor im Programm angegebene Funktion ausgeführt fobHandler () unterbricht den ausführenden Code und übernimmt. Wenn der Interrupt-Handler abgeschlossen ist, kehrt die Ausführung zu dem Programm zurück, an dem sie unterbrochen wurde. Weitere Informationen zu Pin Change Interrupts finden Sie auf der Projektseite zum Thema.

Das Programm erkennt anhand eines Interrupts, welcher Pin geändert wurde und welche Funktion er hat fobHandler () Legt die globale Variable fest latest_interrupted_pin auf die Nummer des Pins, der sich geändert hat. Der Chip ist so eingestellt, dass er a erkennt STEIGEND Spannungsänderung, dh sie wird ausgelöst, wenn die Taste gedrückt wird und nicht, wenn sie losgelassen wird. 

Die Hauptschleife des Programms prüft auf eine Änderung der latest_interrupted_pin variabel und entscheidet, was zu tun ist. Das schwere Anheben des Tastendrucks bleibt dem Hauptgerät überlassen Schleife() weil die Ausführung bestimmter Funktionen innerhalb der Interrupt-Funktion dazu führen kann, dass Dinge wie zB Serialdruck (), Millis (), verzögern(), und alles, was die zusätzliche Verwendung von Interrupts erfordert. 

In diesem Programm ändert das Interrupt-Handling-Routing einfach eine Variable und lässt die Hauptschleife die komplizierte Arbeit erledigen, um Wackeligkeiten zu vermeiden.

Zusammenfassung

Sie haben jetzt eine neuartige Stimmungslampe gebaut, die von einem Arduino angetrieben wird. In der Grundkonfiguration können Sie Farbe, Helligkeit und Wirkung der Lampe per Tastendruck ändern. 

Ich habe Ihnen gezeigt, wie Sie Neopixel-Einheiten miteinander verketten, während Sie einen einzelnen adressierbaren Streifen erstellen. Während dieses Builds haben Sie außerdem erfahren, wie Sie mit Pin-Änderungsinterrupts Hardwareänderungen lesen und wie Sie Daten im permanenten Speicher Ihres Arduino speichern, um Einstellungen zu erstellen, die auch nach Stromausfällen erhalten bleiben.

Es gibt viele Orte, an denen Sie dieses Projekt durchführen können, wenn Sie es hacken wollen, um jenseits der neuartigen blanken Drahtlichtskulptur zu sein, die es heute ist. Zu den Verbesserungen, die Sie möglicherweise ausprobieren möchten, gehören das Hinzufügen weiterer Farbvorgaben, ein anderer Effekt, wenn sich die Lampe im Effektmodus befindet, oder sogar ein Farbton aus durchscheinendem Velum.