Lichtbogensimulation mit "nur" einer RGB-LED?

Hallo Zusammen,

wenn ich mich kurz vorstellen darf…
Ich bin vor fast zwanzig Jahren des Berufes wegen in den Ruhrpott gezogen und habe mittlerweile das erste halbe Jahrhundert überschritten.
Ich bin aus hobbyistischer Sicht eher bei den Brett- und Tabletop-Spielern einzusortieren, habe aber aufgrund des Dranges nach dem schönerem Spielerlebnis meinen Weg in den 3D-Druck und dann auch irgendwie zu den Arduinos gefunden.
Bisher konnte ich durch das reichhaltige Angebot hier im Forum, Selbststudium und „try and error“ meine kleine Projektchen umsetzen.
Persönlich ordne ich mich ich mich eher in der Kategorie Anwender und Code-Anpasser ein.
Jetzt stoße ich aber mit meinem begrenzten Wissen an meine Grenzen und hoffe hier Rat zu finden bzw. ob mein Vorhaben in dieser Art überhaupt umzusetzen ist.
Für eine Tabletopsequenz wollte ich ein Flackerlicht (Lichtbogenschweißen) das durch eine RGB-LED erzeugt wird installieren, dass nach loslassen des Tasters noch von gelb über orange nach rot ausglimmt. Der Lichtbogen sollte weiß, cyan und blau sein.
Der Grund, warum ich eine RGB-LED nur einsetzen will, ist dem Platz von einem Zylinder von nur 8 mm Durchmesser geschuldet.

Jetzt die grundlegenden Fragen hierzu:
a) Ist so ein Lichtspektakel mit nur einer RGB-LED umsetzbar?
Das Nachglühen denke ich, sollte das geringste Problem darstellen. Aber den Lichtbogen zu simulieren, finde ich keinen Ansatz für die RGB-LED

b) Ich bastle im Moment hierzu an einem Arduino UNO. Kann ich den Sketch dann auch auf eine Micro bzw. Nano übertragen?

c) Wenn ich den Taster drücke, würde eine Spannung von 3-5 Volt anliegen. Wäre dies als Steuerstrom z.B. über einen Analogen Pin A0-A5 denkbar?

Ich hatte mit einigen Flacker-Modellen (Lagerfeuer, Fackel usw.) schon experimentiert. Der schönste Farbeffekt entsteht bei der Farbfolge mit einer weißen, blauen und cyanfarbenen LED. Aber ich arbeite mit drei LEDs.

Hier mein Laiencode:

int ledPin1 = 9; // weiß
int ledPin2 = 10; // cyan
int ledPin3 = 11; // blau

void setup()
{
pinMode(ledPin1, OUTPUT);
pinMode(ledPin2, OUTPUT);
pinMode(ledPin3, OUTPUT);
}

void loop() {
analogWrite(ledPin1, random(220)+105);
analogWrite(ledPin2, random(210)+90);
analogWrite(ledPin3, random(215)+135);
delay(random(75));
}

Ich würde mich freuen, wenn Ihr mir etwas auf die Sprünge helfen könntet und bedanke mich schon einmal im Voraus

Viele Grüße
Chris

3 bis 5 V sind Spannung und nicht Strom.
Für den Taster würde ich Dir eher vorschlagen, den nach GND zu schalten und mit INPUT_PULLUP zu arbeiten, da sparst Du einen externen Widerstand.

Vor die RGB-LED solltest Du einen Diffusor (Milchglas/-Plastik oder Ahnliches hängen)

Aber der wichtigste Teil ist der, die Farben, die Dir für Dein Vorhaben gefallen mit der RGB-LED zu ermitteln. Dazu änderst Du die 3 Grundfarben Rot/Grün/Blau im Bereich zwischen 0 und 255 und schaust Dir die entstehende Farbe an. Wenn Dir eine gefällt, schreibe Dir die Werte auf. Evtl. kannst Du diesesn Sketch zum Testen der Farben benutzen.
Da Auge und LED nicht linear sind, solltest Du Dir auch diesen Artikel anschauen.

Erst wenn Du passende Farben gefunden hast, kann man über die Realisierung nachdenken.

Gruß Tommy

Die Haupt-Frage ist, ob deine RGB - LED ein ausreichend helles kaltweißes Licht erzeugen kann, das ein Betrachter mit etwas Phantasie als Lichtbogen/Schweißen erkennen kann. Fang mal komplett weiß oder mit RGB = (250,250,255) an. Dunkler/roter geht immer. Flacker-Effekte sind auch kein Geschwindigkeitsproblem.

b) Was auf dem Uno läuft, geht auch auf dem Nano oder Micro, mit denselben Pin-Nummern.
c) Du kannst auch A0 .. A5 als Digitalpin verwenden. Hauptsache, du verwendest für die 3 RGB-Pins PWM-fähige.

ist allerdings Mist, denn das liefert einen Wert im Bereich 135 .. 349. Definiert für analogWrite ist maximal 255. Ob analogWrite(pin, 256); auf 255 begrenzt oder per Überlauf eine 0 draus macht, kannst du zwar ausprobieren und recht sicher sein, dass sich Nano und Uno gleich verhalten werden, schön ist es allerdings nicht.

Moin
Ich habe einen Sketch "zusammengelötet".
Hier mußt du noch den Feinschliff für die Farben und Zeiten vornehmen und eine Schaltfunktion hinzufügen. Dazu hatte ich keine Lust mehr.

//BLOCK COMMENT
// https://forum.arduino.cc/t/lichtbogensimulation-mit-nur-einer-rgb-led/890965/3
#define ProjectName "Lichtbogensimulation mit “nur” einer RGB-LED"
// CONSTANT DEFINITION
// you may need to change these constants to your hardware
const byte Output_[] {3, 5, 6};
enum {Red, Green, Blue};
// VARIABLE DECLARATION
struct FLASH {
  byte red;
  byte green;
  byte blue;
} flash [] {
  // red      green     blue
  {255 >> 4, 255 >> 4, 255 >> 0},
  {255 >> 3, 255 >> 3, 255 >> 0},
  {255 >> 2, 255 >> 2, 255 >> 2},
  {255 >> 1, 255 >> 1, 255 >> 1},
  {255 >> 0, 255 >> 0, 255 >> 0},
  {255 >> 0, 255 >> 0, 255 >> 0},
  {255 >> 1, 255 >> 1, 255 >> 1},
  {255 >> 4, 255 >> 4, 255 >> 4},
  {255 >> 5, 255 >> 5, 255 >> 5},
  {255 >> 4, 255 >> 4, 255 >> 4},
  {255 >> 3, 255 >> 3, 255 >> 3},
  {255 >> 1, 255 >> 1, 255 >> 1},
  {255 >> 0, 255 >> 0, 255 >> 0},
  {255 >> 0, 255 >> 0, 255 >> 0},
  {255 >> 8, 255 >> 8, 255 >> 8},
  {255 >> 0, 255 >> 0, 255 >> 0},
};
// FUNCTIONS
void setup() {
  Serial.begin(9600);
  Serial.println(F("."));
  Serial.print(F("File   : ")), Serial.println(__FILE__);
  Serial.print(F("Date   : ")), Serial.println(__DATE__);
  Serial.print(F("Project: ")), Serial.println(ProjectName);
  pinMode (LED_BUILTIN, OUTPUT);
  for (auto Output : Output_) pinMode(Output, OUTPUT);
}
void loop () {
  unsigned long currentTime = millis();
  digitalWrite(LED_BUILTIN, (currentTime / 500) % 2);
  static unsigned long myMillis;
  static unsigned long myDuration;
  if (currentTime - myMillis >=  myDuration) {
    myMillis = millis();
    myDuration = random(2, 20);
    static int rgb;
    analogWrite(Output_[Red], flash[rgb].red);
    analogWrite(Output_[Green], flash[rgb].green);
    analogWrite(Output_[Blue], flash[rgb].blue);
    rgb++;
    rgb = rgb % ((sizeof(flash) / sizeof(FLASH)));
  }
}

Statt einer RGB LED kannst Du auch eine LED mit integrierten Controller a la WS2812 aka Neopixel.
Diese LED gibt es auch im 5mm oder 8mm LED auch milchig.
zB PL9823 F5 Durchmesser 5mm bzw PL9823 F8 Durchmesser 8mm

Grüße Uwe

Gibt es die auch als RGBW?
Damit wäre das kalte Weis wohl gut machbar

Gruß Tommy

Hallo und guten Morgen,

vielen, vielen Dank für die Hilfe und die Mühe, die Ihr Euch gemacht habt!

Auch das Ihr die Arbeit für einen Sketch investiert, wärmt mir das Herz.

Den Tipp für die LED habe ich direkt umgesetzt und schon welche geordert.

Schön ist zu Wissen, dass mein kleines Projekt an Sicht schon einmal umsetzbar ist. Aber ich muss mich doch noch intensiver mit der Programmierung bzw. dem Thema Arduino beschäftigen, was nicht schlimm ist.

Ich verziehe mich dann mal wieder in meinen Bunker und melde mich über den weiteren Verlauf.

Euch wünsche ich noch einen schönen Sonntag.

Viele Grüße

Chris

Hallo Zusammen,

ich hatte mich mit den hier vorgestellten Lösungen beschäftigt und bin doch sehr schnell an meine Grenzen gestoßen.

Da ich zurzeit auch in einer Umschulung stecke, ist auch nicht immer die Zeit vorhanden, die ich gerne hier investieren würde. Um das ganze abzurunden ist jetzt mittlerweile auch durchgesickert, dass die eigentlichen Schulungen, die wir im Rahmen der Umschulungen rund um die Bereiche Arduino, Programmierung, Elektronik haben sollten ersatzlos gestrichen wurden.

Nun gut, also selbst weiter probieren.

Ich habe jetzt das ganz so weit verändert, dass ich auf 4 x PL9823-LEDs in 8mm gewechselt habe. Ich dachte/hoffte mit Adafruit schneller einen Erfolg zu erzielen.

Ich hatte auch ein paar Scripts ausprobiert, aber es fehlt schlicht an der Basis meines Wissens.

Ich packe Euch noch mal meinen letzten Versuchsaufbau hier mit rein, vielleicht hat von Euch ja wer noch eine Lösung.

Abschließend nur noch eine Frage: Was könntet Ihr an vernünftiger Literatur empfehlen um die Grundlagen sich anzueignen?

Danke im Voraus und bis bald

Chris

Wofür soll der Widerstand in der 5V-Leitung sein? Der sollte eher zwischen D2 und 1. LED. Die Arduino-Referenz in deutsch. Die andere ist derzeit nicht erreichbar, da das andere Forum seit 3 Tagen wegen Serverumzug tot ist (was machen die so lange?)

Gruß Tommy

Hallo
Schaue dir das Tutorial an:

Hallo,
reine Spekulatius :wink:
festgestellt das das was Sie vorhatten nicht geht "but Point of no return is on the back". :sleepy:
Heinz

wegen Serverumzug tot ist (was machen die so lange?)

Fahren die Server von Mönchen nach Bremen mit DB :wink:

Eher zu Fuß und geben alle Datensätze nach dem Ausdrucken händichsch wieder ein.
Ich hatte beim Umzug meines Forums 3 Stunden Auszeit. Den Rest kann man vorab im Testsystem und auf dem neuen Servr vorbereiten.
Ich hatte nur eine Gesamtdeadline von 2 Wochen zwischen Testabzug der Datenbank und letzem Abzug vor Insolvenz des alten Anbieters.

Gruß Tommy

Zunächst stellt sich die Frage, wie solch ein Lichtbogen aussieht. Da bin ich mir nicht so sicher, denke daher an Schweißen.

Als Motivation ein ausbaufähiges Programm:

// 
// Lichtbogensimulation mit “nur” einer RGB-LED?
// getestet mit UNO
#include <FastLED.h>

FASTLED_USING_NAMESPACE

#define DATA_PIN    2
#define LED_TYPE    WS2812B
#define COLOR_ORDER RGB      // Farbreihenfolge variiert je nach Hersteller
#define NUM_LEDS    9
CRGB leds[NUM_LEDS];

void setup() {
  // tell FastLED about the LED strip configuration
  FastLED.addLeds<LED_TYPE, DATA_PIN, COLOR_ORDER>(leds, NUM_LEDS);
  /* zum Testen der Farbreihenfolge
    leds[0] = CHSV( 64, 255, 255);
    leds[1] = CHSV(   0, 255, 255);  // Rot
    leds[2] = CHSV(  96, 255, 255);  // Grün
    leds[3] = CHSV( 160, 255, 255);  // Blau
  */
  FastLED.show(); // send the 'leds' array out to the actual LED strip
}

void loop()
{
  schweissen();
}

void schweissen()
{
  uint32_t jetzt = millis();
  static uint32_t vorhin = jetzt, intervall = 0;
  static bool blitz = true;
  uint8_t wahl = 0, farbe = 64;

  if (jetzt - vorhin >= intervall)
  {
    vorhin = jetzt;
    blitz = !blitz;
    if (blitz)
    {
      wahl = random(0, 3);
      intervall = random(5, 100);             // Blitzzeit
      switch (wahl)
      {
        case 0:
          farbe = random(32, 64);             // gelblicher Blitz
          leds[0] = CHSV( farbe, 255, 255);
          break;
        case 1:
          farbe = random(118, 138);           // bläulicher Blitz
          leds[0] = CHSV( farbe, 255, 255);
          break;
        default:
          leds[0] = CHSV( 64, 0, 255);        // weißer Blitz
      }
    } else {
      leds[0] = CHSV( 50, 255, 255);          // Grundfarbe
      intervall = random(5, 500);
    }
    FastLED.show(); // send the 'leds' array out to the actual LED strip
  }
}