Als ich neulich bei mir auf dem Speicher aufgeräumt habe, habe ich eine Dekorationslaterne als Holz mit kleinen Glasfenstern gefunden, in die eine kleine Kerze gestellt werden kann. Da echte Kerzen bekanntlich ein nicht kleines Brandrisiko darstellen, und dazu ich auch meine Laterne bequem steuern wollte, ersetze ich echte das flackernde Kerzenlicht durch mit einem WS2812 Ring und simuliere den Kerzenschein und das typische Kerzenflackern. Wir bauen also in unserem heutigen Blog eine künstliche „Kerze“ in unsere Laterne ein. Damit bekommt die Laterne ein realistisches „Flammenflackern“ ohne Brandgefahr durch offenes Feuer.
Wir brauchen für unser Projekt und für diesen Teil 1 der Reihe folgende Hardware:
1 x AZ-Delivery Nano V 3
1 x RGB LED Ring WS2812b mit 12 RGB LEDs 5V für Arduino 50 mm Außendurchmesser
1 x 5 Volt / 1 Ampere Stromversorgung
Die Stromversorgung unserer Schaltung sollte mit 1 Ampere großzügig dimensioniert werden, da der RGB Ring eine maximale Stromaufnahme bei Vollaussteuerung von 12 * 60mA = 720 mA hat.
Wir bauen den elektronischen Teil der Laterne wie im folgenden Schaltbild gezeigt zusammen und verdrahten entsprechend:
Grundsätzlich kann natürlich auch statt des AZ-Delivery Nano V3 auch ein normaler Mikrokontroller, kompatibel mit Uno R3, verwendet werden, jedoch bietet der Nano Platzvorteile beim Einbau in eine Laterne.
Wenn wir die Schaltung fertig aufgebaut haben, müssen wir nun als nächstes die Adafruit Neopixel- Bibliothek einbinden, damit wir die LED ’s des Ringes einfach ansteuern können.
Die benötigte Bibliothek kann über 2 Wege unserer IDE hinzugefügt werden:
1.) Die Bibliothek auf der URL https://github.com/adafruit/Adafruit_NeoPixel herunterladen.
Dann in der IDE im Menüpunkt Sketch -> Bibliothek einbinden ->Zip Bibliothek manuell hinzufügen.
2.) Im Bibliotheksverwalter als Suchbegriff „Adafruit Neopixel“ eingeben, auf die Bibliothek Klicken und dann „Installieren“ aussuchen. Bitte mindestens Version 1.2.4 auswählen.
Wenn bis hierhin alles geklappt hat, wird der folgende Code auf den Nano hochgeladen:
#include <Adafruit_NeoPixel.h> #define PIN 6 // Which pin on the Arduino is connected to the NeoPixels? #define NUMPIXELS 12 // How many NeoPixels are attached to the Arduino? // Popular NeoPixel ring size Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); #define DELAYVAL 500 // Time (in milliseconds) to pause between pixels long lastTime; int interval; void setup() { pixels.begin(); // INITIALIZE NeoPixels interval = 150; randomSeed(analogRead(0)); } void SimulateFire (bool On, int FireSquence) { if (On) { long nowmilli = millis(); if (nowmilli - lastTime >= interval) { byte LightValue[NUMPIXELS * 3]; byte FireColor = 60; interval = random(150, 200); lastTime = nowmilli; FireColor = 60; //random(0,50); for (int i = 0; i < NUMPIXELS; i++) { // For each pixel... LightValue[i * 3] = random(240, 255); // 250 LightValue[i * 3 + 1] = random(30, 60); // 50 LightValue[i * 3 + 2] = 0; } // Switch some lights darker byte LightsOff = random(0, 4); for (int i = 0; i < LightsOff; i++) { byte Selected = random(NUMPIXELS); LightValue[Selected * 3] = random(50, 60); LightValue[Selected * 3 + 1] = random(5, 10); LightValue[Selected * 3 + 2] = 0; } for (int i = 0; i < NUMPIXELS; i++) { // For each pixel... pixels.setPixelColor(i, pixels.Color(LightValue[i * 3], LightValue[i * 3 + 1], LightValue[i * 3 + 2])); pixels.show(); // Send the updated pixel colors to the hardware. } } } else { for (int i = 0; i < NUMPIXELS; i++) { // For each pixel... pixels.setPixelColor(i, pixels.Color(0, 0, 0)); pixels.show(); // Send the updated pixel colors to the hardware. } } } void loop() { SimulateFire(true, 0); }
Ein Blick in den inneren Aufbau der Laterne:
Und so sah die Laterne ohne Elektronik und Diffusoren aus:
Ich wünsche viel Spaß beim Nachbauen und wie immer bis zum nächsten Mal.
26 Kommentare
Tobias Kuch
Hallo Oliver,
Ja das ist korrekt.
Gruß
Tobias
Randolf Liß
HAllo , bin ganz neu und noch keine Erfahrung mit der Programmierung .
Kann man das ganze auch mit einem LED Stripe betreiben und wie würde der Code dann aussehen .
M.f.G.
Randolf
Oliver
Hallo Tobias, vielen Dank für die schnelle Antwort. Mir würde der passende Befehl zum Ein- und Ausschalten des Ringes genügen. SimulateFire(false,0) / SimulateFire(true,0)?
Tobias Kuch
Hallo Oliver
Dein Wunsch erfordert in nicht un aufwendiges Umschreiben des Codes und damit einen nicht unerheblichen Zeitaufwand, der hier an dieser Stelle leider nicht geleistet werden kann. Bitte stelle deine Anfrage an AZ Delivery mit der Bitte ein Extra Blog über dein Thema zu schreiben.
Viele Grüße
Tobias Kuch
Oliver Schneider
Der Code funktioniert wunderbar auf einem Nano. Vielen Dank.
Ich würde den Ring über einen Lichtsensor bei Dunkelheit einschalten und bei einsetzender Dämmerung wieder abschalten. Wie kann ich das realisieren?
Matthias
Ich versuche das ganze mit einem ESP32 NodeMCU, aber der Code wirft einen Memory error.
Gibt es einen Grund warum das auf einem ESP32 nicht funktionieren sollte?
Karli
Kondensator auf Power und ein 220R Wiederstand in der Steuerleitung sollte schon noch dabei sein.
MfG
Tobias
Die Stromversorgung kann mit jedem Steckernetzteil mit 5 Volt / 1 Ampere Ausgang, oder mit dem gezeigten Spannungswandler mit jedem Netzteil 8-15 Volt / 1 Ampere Ausgang realisiert werden.
Frederick Hamm
Womit kann man denn die Stromversorgung realisieren? Habt ihr irgendwelche Beispiele?
Rainer Sins
Zu den Fragen wo denn der Code sei:
Der Code ist bei mir mit Firefox und Chrome einwandfrei ersichtlich.
Welchen Browser verwendet ihr?
Grüße…
Tobias
Der Code wurde noch im Artikel ergänzt. Ich habe als Diffusor auf dem Bild einfaches Papier verwendet, mit abgebildetem Ergebnis. Bei einem “professionellen” Diffusor (z.B aus einem alten LCD Monitor) erzielt man aber bestimmt noch bessere Ergebnisse.
Frank
Irgendwie kann ich keinen Code finden………….
Telemachos
Eine schöne Idee!
Sollte ###Code### noch durch den tatsächlichen Programmcode ersetzt werden?
Was wurde als Diffusor verwendet? Auf dem Foto erinnert es an Butterbrotpapier.
Und was ist “auf dem Speicher aufräumen”? Nie von gehört. 🤭
Jojo
Hey,
wie genau wird die Stromversorgung hier realisiert?
Beste Grüße
Jojo
Jan
Wo finde ich den Code?
Alex
Hi,
leider ist der Code nicht ersichtlich.
Immanuel Schade
Ja schön …. aber welcher Code? ;-)
Chr
Danke für den Beitrage, aber wo genau finde ich den Code?
/Chr.
A. Freudenstein
Kann man den Code so veröffentlichen, dass er ladbar ist?
So kann ich mit dem Link nichts anfangen!
Axel F
masterflai
Der Code fehlt noch.
masterflai
Ein sehr schönes Projekt und ich musste schmunzeln, denn genau diese Laterne stand bei uns auch herum. Die wird in einem Herbstprojekt auf Vordermann gebracht. Danke für diese tolle Idee.
Jürgen
Guten Abend,
keine schlechte Idee, jedoch vermisse ich den Code. Oder habe ich etwas falsch gemacht??
So sieht es bei mir aus: "Wenn bis hierhin alles geklappt hat, wird der folgende Code auf den Nano hochgeladen:
###CODE###
Ein Blick in den inneren Aufbau der Laterne:"
Gruß Jürgen
Ralph Schraven
Bitte jetzt noch den Code ;-)
Ralph Schraven
Bitte noch den Code ;-)
Ralph
Hr. Drews
Hallo,
schöne Idee auch für andere Zwecke. Ich kann aber den Quell-Code nicht sehen / öffnen.
Werner
Sehr schöne Idee und wirklich preisgünstig aufzubauen. Wird der CODE noch nachgereicht? Bei mir war er am 26.8.19 im Blog nicht sichtbar.