Inhaltsverzeichnis:
Video: Eine LED-Stimmungslampe für 1 $ mit ATtiny13 und WS2812 - Gunook
2024 Autor: John Day | [email protected]. Zuletzt bearbeitet: 2024-01-30 07:15
Von arduinocelentanoFolgen Sie mehr vom Autor:
Dies ist eine kostengünstige Stimmungslampe mit vier Modi.
1. Regenbogenfunke. Ein Lichtfunke bewegt sich immer wieder nach oben und verändert nach und nach die Farbe.
2. Regenbogenglühen. Ein stabiles Leuchten, das die Farbe allmählich ändert.
3. Kerzenfeuersimulation.
4. Aus.
Sie können den Modus wechseln, indem Sie oben auf eine Touch-Schaltfläche tippen. Der aktuelle Modus wird nach dem Ausschalten im EEPROM-Speicher gespeichert.
Wie klein ist ATtiny13?
Die Idee war, mit minimaler Hardware maximale Funktionen zu erzielen, etwas komplexer als automatisierte Schalter oder Thermometer, ein Projekt, das am Rande dieses winzigen Mikrocontrollers liegt. Schließlich machen Einschränkungen Sie kreativ, oder? Naja, am Anfang sah es danach aus.
Die größte Herausforderung in diesem Projekt bestand darin, den gesamten Code in ATtiny13 zu schieben. Der Mikrocontroller hat 1K Byte Flash und nur 64 Byte RAM. Ja, wenn ich „Bytes“sage, meine ich solche, die aus acht Bits bestehen. 64 Byte für alle Ihre lokalen Variablen und Aufrufliste. Um es klar zu machen, bedenken Sie, dass wir 8 RGB-LEDs steuern müssen. Jeder von ihnen ist durch 3 Bytes definiert (jeweils eines für den Rot-, Grün- und Blaukanal). Um den Zustand von 8 LEDs zu speichern, müssen wir also ein Array von 8 Strukturen mit jeweils 3 Byte implementieren und ein Zeiger auf den Anfang dieses Arrays würde ein weiteres Byte benötigen. Somit sind 25 von 64 Bytes out. Wir haben gerade 39 % des Arbeitsspeichers verbraucht und noch nicht richtig angefangen. Um sieben grundlegende Regenbogenfarben zu speichern, benötigen Sie außerdem 7 × 3 = 21 Byte, also sind 72 % des RAM leer. Nun, bei den Grundfarben übertreibe ich: Wir brauchen nicht alle gleichzeitig im RAM und sie ändern sich nie, also können sie als konstantes Array implementiert werden, das im Flash statt im RAM gespeichert wird. Auf jeden Fall vermittelt es einen Gesamteindruck über gebrauchte Hardware.
Ich erinnere mich an Knuths Aussage zur vorzeitigen Optimierung und begann damit, drei Lampenmodi separat zu prototypieren, um zu sehen, was passiert. Ich habe sie separat getestet, um sicherzustellen, dass sie richtig funktionieren und jeder zu meinem Mikrocontroller passt. Es hat ein paar Abende gedauert, um es zu bewerkstelligen und alles lief gut… bis ich versuchte, sie in der switch-Anweisung zusammenzufügen. Das Dienstprogramm avr-size meldete eine Textabschnittsgröße von 1,5 KB (mit dem Flag -s von avr-gcc). In diesem Moment war meine ursprüngliche Absicht, mir ATtiny25 mit 2Kb Flash zu schnappen und das hätte das Happy End dieser Geschichte sein können.
Aber irgendwie hatte ich das Gefühl, dass ich es nach beträchtlicher Optimierung schaffen könnte, diesen beschissenen Code auf 1 KB zu verkleinern. Es dauerte jedoch eine weitere Woche, um zu erkennen, dass es unmöglich ist, und eine weitere Woche, um es trotzdem zu schaffen. Ich musste einen Regenbogen auf fünf Grundfarben (ohne signifikanten visuellen Unterschied) zuschneiden. Ich habe case-Anweisungen beseitigt und eine Kette von if-then-if verwendet, um die Binärcodegröße zu verringern. Die Feueranimation benötigt einen ziemlich sperrigen Pseudozufallszahlengenerator, daher habe ich eine vereinfachte Version von LFSR mit konstantem Anfangswert implementiert. Ich interessiere mich nicht für die volle Zykluslänge von PRNG und suche nur nach einem absteigenden Gleichgewicht zwischen Codegröße und "realistischer Feueranimation". Ich habe auch viele kleinere Optimierungen implementiert, an die ich mich gerade nicht erinnern kann, und es sogar geschafft, alle Modi außer Feuer in den Chip zu flashen. Als mir die Ideen ausgingen, war mein Gesamtcode ungefähr 1200 Bytes.
Ich habe mir eine Auszeit genommen und viel über AVR-Code-Optimierung gelesen. Ich war kurz davor, aufzugeben und alles in Assembler umzuschreiben, gab ihm aber die letzte Chance. Während des letzten Optimierungsrausches habe ich einen Regenbogen in drei Grundfarben geschnitten und andere im Handumdrehen berechnet, ich habe alles inspiziert und die AVR-Optimierungsempfehlungen befolgt und schließlich…
avrdude: Flash schreiben (1004 Byte):
Schreiben | ################################################ | 100 % 0,90 s
Ich brauche nicht zu sagen, dass ich fast den gesamten RAM und nur ein Byte EEPROM verwendet habe, um den aktuellen Modus zu speichern. Ich behaupte nicht, dass dies eine ideale und ultimative Implementierung ist. Es funktioniert einfach und passt zum Mikrocontroller. Ich bin sicher, du könntest es besser machen. Ich bin wirklich. Ich möchte nur den Spaß teilen, ein scheinbar unpraktisches Problem zu lösen, das Sie am Anfang für fast unmöglich halten. „Hacking bedeutet also, die Grenzen des Möglichen auszuloten…“– Richard Stallman.
Lieferungen:
1x ATtiny13 MCU (0,28 $ = 0,24 $ für MCU im SOP-8-Paket und 0,04 $ für DIP8-Adapter)
8x WS2812 RGB-LEDs (ich empfehle eine Platine oder ein Stück LED-Streifen) (0,42 $)
1x TTP223-Touch-Taste (0,10 USD)
1x Micro-USB-auf-DIP-Adapter (0,14 $)
1x 10kΩ Widerstand (<$0,01)
1x 100nF Keramikkondensator (<$ 0,01)
1x 10–47µF Elektrolytkondensator (<0,01 $)
Gesamt <0,97 $
Schritt 1: Software-Setup
Sie benötigen die avr-gcc-Toolchain zum Kompilieren des Quellcodes und das avrdude-Dienstprogramm zum Hochladen des ROM des Mikrocontrollers. Der Installationsprozess ist ziemlich einfach und unkompliziert, hängt jedoch von Ihrem Betriebssystem ab. Wenn Sie irgendeine Art von GNU/Linux verwenden, haben Sie wahrscheinlich bereits die richtigen Pakete in Ihrem Repository-Baum. Der Quellcode dieses Projekts kann hier heruntergeladen werden:
github.com/arduinocelentano/t13_ws2812_lamp
Sie benötigen außerdem eine light_ws2812-Bibliothek:
github.com/cpldcpu/light_ws2812
Sobald Sie die avr-gcc-Toolchain und die Projektquellen haben, führen Sie Ihr Terminal aus und geben Sie den folgenden Code ein:
CD-Pfad/zum/Projekt
machen
Schritt 2: Programmierung des Mikrocontrollers
Wenn Sie eine Art USBASP-Programmierer haben, verbinden Sie ihn einfach entsprechend seiner Pinbelegung mit Attiny. Normalerweise würde es so aussehen, aber ich empfehle dringend, Ihre tatsächliche Pinbelegung zu überprüfen!
Alternativ können Sie ein Arduino-Board als Programmierer verwenden. Öffnen Sie die Arduino IDE und suchen Sie das Arduino ISP-Beispiel im Menü „Datei→Beispiele“. Nach dem Hochladen der Skizze fungiert Ihr Arduino-Board als Programmierer. Die Kommentare im Sketch-Code geben Ihnen einen Hinweis auf die Pinbelegung.
Jetzt lauf
blitz machen
um die MCU zu flashen und
Sicherung machen
Fuse-Bits zu setzen.
Empfohlen:
So erstellen Sie eine Android-App mit Android Studio: 8 Schritte (mit Bildern)
So erstellen Sie eine Android-App mit Android Studio: In diesem Tutorial lernen Sie die Grundlagen zum Erstellen einer Android-App mit der Android Studio-Entwicklungsumgebung. Da Android-Geräte immer häufiger werden, wird die Nachfrage nach neuen Apps nur zunehmen. Android Studio ist ein einfach zu bedienendes (ein
So erstellen Sie eine einfache Webseite mit Klammern für Anfänger – wikiHow
So erstellen Sie eine einfache Webseite mit Klammern für Anfänger: EinführungDie folgenden Anweisungen bieten eine Schritt-für-Schritt-Anleitung zum Erstellen einer Webseite mit Klammern. Brackets ist ein Quellcode-Editor mit Schwerpunkt auf Webentwicklung. Es wurde von Adobe Systems erstellt und ist eine kostenlose Open-Source-Software, die
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Erfahren Sie, wie Sie mit PROCESSING eine Echtzeitschnittstelle in ARDUINO erstellen !!!!): 5 Schritte (mit Bildern)
SCARA-Roboter: Lernen über Vorwärts- und inverse Kinematik !!! (Plot Twist Learn How to Make a Real Time Interface in ARDUINO Using PROCESSING !!!!): Ein SCARA-Roboter ist eine sehr beliebte Maschine in der Industriewelt. Der Name steht sowohl für Selective Compliant Assembly Robot Arm als auch für Selective Compliant Articulated Robot Arm. Es ist im Grunde ein Roboter mit drei Freiheitsgraden, da er die ersten beiden Displ
So erstellen Sie eine Website (eine Schritt-für-Schritt-Anleitung): 4 Schritte
So erstellen Sie eine Website (eine Schritt-für-Schritt-Anleitung): In dieser Anleitung zeige ich Ihnen, wie die meisten Webentwickler ihre Websites erstellen und wie Sie teure Website-Builder vermeiden können, die für eine größere Website oft zu begrenzt sind helfen Ihnen, einige Fehler zu vermeiden, die ich am Anfang gemacht habe
So beschreiben Sie eine TV-Serie für einen blinden Freund: 4 Schritte (mit Bildern)
So beschreiben Sie eine TV-Serie für einen blinden Freund.: Einige TV-Serien werden beschrieben (DVS), viele jedoch nicht, und wenn Sie blind oder sehbehindert sind, kann es etwas verwirrend werden. Sie können einen Freund bitten, eine Beschreibung einzugeben (die für diesen Freund etwas zu zeitaufwändig wird), aber notieren Sie