Zum Inhalt springen
Kaminfeuer mit Arduino

Kaminfeuer auf der LED-Matrix

Der Winter ist da. Höchste Zeit, sich ein paar warme Gedanken zu machen und ein Kaminfeuer auf einer LED-Matrix.

Bauteile

Für dieses Projekt brauchst du:

Schaltplan

Kaminfeuer mit Arduino und LED Matrix Schaltplan

Die LED-Matrix wird direkt an das Arduino angeschlossen. Dazu benötigt man drei digitale Pins für die SPI-Kommunikation und zwei Kabel für die Stromversorgung (GND und 5V+).


Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


Mehr Informationen zur Funktionsweise der LED-Matrix findest du in der Sektion Tutorials: Arduino Matrix Display 8×8 Pixel und jede Menge Spaß.

Code

Hier ist der Programm-Code. Die Leuchthöhe der einzelnen Reihen wird festgelegt.

if (int(random(1)) == 0) {
  for (int x = 0; x < 8; x++) {
    theHeightTarget[x] = int(random(5)) + 1;
  }
}

Dann versucht das Programm, die aktuelle Leuchthöhe anzupassen.

// update
for (int x = 0; x < 8; x++) {
  if (theHeightTarget[x] > theHeightCurrent[x])theHeightCurrent[x]++;
  if (theHeightTarget[x] < theHeightCurrent[x])theHeightCurrent[x]--;
}

Das wird dann auf der Matrix dargestellt:

// show display 
for (int x = 0; x < 8; x++) {
  for (int y = 0; y < theHeightCurrent[x]; y++) {
    lc.setLed(0, x, y, 1);
  }
  for (int y = theHeightCurrent[x]; y < 8; y++) {
    lc.setLed(0, x, y, 0);
  }
}

Ab und zu löst sich ein Funke und fliegt nach oben.

// spark – Funkenflug
sparkX = int(random(8));
if (int(random(40)) == 0) {
  for (int y = 4; y < 8; y++) {
    if (y == 4) {
      lc.setLed(0, sparkX, y, 1);
    } else {
      lc.setLed(0, sparkX, y, 1);
      lc.setLed(0, sparkX, y - 1, 0);
    }
  delay(25);
  }
} else {
  delay(100);
}

Hier ist der Code im Gesamten:

#include "LedControl.h"
LedControl lc = LedControl(12, 11, 10, 1);

int theHeightTarget[8];
int theHeightCurrent[8];

int fireHeight = 0;
int sparkX = 0;

void setup() {
  lc.shutdown(0, false);
  lc.setIntensity(0, 8);
  lc.clearDisplay(0);
  Serial.begin(115200);
}

void loop() {  
  //lc.clearDisplay(0);
  // set Heights
  if (int(random(1)) == 0) {
    for (int x = 0; x < 8; x++) {
      theHeightTarget[x] = int(random(5)) + 1;
    }
  }

  // update
  for (int x = 0; x < 8; x++) {
    if (theHeightTarget[x] > theHeightCurrent[x])theHeightCurrent[x]++;
    if (theHeightTarget[x] < theHeightCurrent[x])theHeightCurrent[x]--;
  }

  // show display 
  for (int x = 0; x < 8; x++) {
    for (int y = 0; y < theHeightCurrent[x]; y++) {
      lc.setLed(0, x, y, 1);
    }
    for (int y = theHeightCurrent[x]; y < 8; y++) {
      lc.setLed(0, x, y, 0);
    }
  }

  // spark – Funkenflug
  sparkX = int(random(8));
  if (int(random(40)) == 0) {
    for (int y = 4; y < 8; y++) {
      if (y == 4) {
        lc.setLed(0, sparkX, y, 1);
      } else {
        lc.setLed(0, sparkX, y, 1);
        lc.setLed(0, sparkX, y - 1, 0);
      }
      delay(25);
    }
  } else {
    delay(100);
  }
}

Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

  • Die beliebtesten Arduino-Projekte von StartHardware
  • Inklusive Schaltplan, Beschreibung und Code
  • Arduino-Schnellstart-Kapitel
  • Kompakter Programmierkurs


Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

 

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.