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.
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.
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.
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.
Mit den drei LED-Ringen konstruieren Sie einen LED-Turm, den Lampenteil der Lampe.
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.
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.
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 LampeDie 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.
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
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.
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.
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.