Skip to content

Technik Blog

Programmieren | Arduino | ESP32 | MicroPython | Python | Raspberry Pi | Raspberry Pi Pico

Menu
  • Smarthome
  • Gartenautomation
  • Arduino
  • ESP32 & Co.
  • Raspberry Pi & Pico
  • Solo Mining
  • Deutsch
  • English
Menu

Arduino Projekt: LED Weihnachtsbaum

Posted on 29. Oktober 20187. Juni 2024 by Stefan Draeger

In diesem Beitrag möchte ich ein kleines Arduino Projekt zum Weihnachtsfest präsentieren, es ist ein LED Weihnachtsbaum.

Arduino Projekt "Weihnachtsbaum"
Dieses Video auf YouTube ansehen.

Das Layout des PCB habe ich selber erstellt und bereits im Tutorial Eigene PCBs mit Seeedstudio erstellen erläutert.

PCBs von Seeedstudio.com
PCBs von Seeedstudio.com

  • Benötige Bauelemente & Werkzeuge zum Aufbau des LED Weihnachtsbaum
    • Testen der LEDs
  • Hinweis zum Aufbau
  • Schritt 1 – Auflöten der LEDs
  • Schritt 2 – Piezo Buzzer einlöten
  • Schritt 3 – Einlöten der Stiftleiste(n)
  • Schritt 4 – Einlöten der Widerstände
  • Schritt 4 – anschließen der Breadboardkabel
  • Schritt 5 – Programmieren vom LED Weihnachtsbaum
    • Quellcode

Benötige Bauelemente & Werkzeuge zum Aufbau des LED Weihnachtsbaum

Für das Zusammenbauen verwende ich folgende Werkzeuge:

  • Lötkolben,
    • inkl. Lötzinn ∅ 0,5 mm,
    • Ständer,
    • hitzebeständige Unterlage,
  • Seitenschneider,
  • Pinzette

Für das PCB Layout benötige ich des Weiteren:

  • 9 LEDs 5 mm* oder 3 mm, (Farbe je nach eigener Wahl)
  • 9 Widerstände a 220 Ohm*,
  • 1 Piezo Buzzer*,
  • 12 Pins einer Stiftleiste mit einem Reihenabstand von 2,54 mm*

Für den Betrieb des PCBs wird benötigt:

  • 12x Breadboardkabel, 20 cm, männlich – weiblich*,
  • 1x Arduino Nano*

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Den Arduino Nano gibt es als „China clone“ für schon knapp 4 € zu kaufen, wenn man jedoch den Originalen erwerben möchte, muss man schon deutlich tiefer in die Tasche greifen. Beim Kaufen eines „China clones“ muss man darauf achten welcher Chip montiert ist. Hier gibt es einige Unterschiede, obwohl alle die Bezeichnung „Arduino Nano v3.0“ tragen.

Für den Arduino Workshop habe ich den Arduino Nano v3.0 mit dem ATmega168  Chip* und dem für diese Typen üblichen CH340G Chip verwendet. Dieser musste in der Arduino IDE „nur“ unter Bootloader eingestellt werden und dann lief auch dieser zuverlässig.

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Testen der LEDs

Bevor mit dem zusammenbauen begonnen wird, empfehle ich hier die LEDs auf die korrekte Funktion zu testen. Dieses kann mit einer Knopfzelle schnell erledigt werden. Oder aber man hat ein Messinstrument, mit welchem man Dioden testen kann, hier wird eine geringe Spannung ausgegeben und die LED leuchtet auf.
Auf ebay.de gibt es auch spezielle Geräte zum Testen von Leuchtdioden für schon knapp 3 Euro inkl. Versandkosten.

Hinweis von mir: Die mit einem Sternchen (*) markierten Links sind Affiliate-Links. Wenn du über diese Links einkaufst, erhalte ich eine kleine Provision, die dazu beiträgt, diesen Blog zu unterstützen. Der Preis für dich bleibt dabei unverändert. Vielen Dank für deine Unterstützung!

Hinweis zum Aufbau

Auf der Platine ist für jede LED ein kleines Symbol eingezeichnet, wo man erkennen kann wie herum diese eingesteckt wird.
In meinem Fall ist es nun das genau dieses Symbol um 180° verdreht ist, somit wird die Kathode (der Minuspol) nach oben und die Anode (der Pluspol) nach unten eingesteckt.

Schritt 1 – Auflöten der LEDs

Als Erstes wollen wir die LEDs einlöten.

Lötaugen für die LEDs, Kathode - Anode
Lötaugen für die LEDs, Kathode – Anode

Ich wähle hier 5 mm LEDs in den Farben rot und gelb.

Die LEDs werden mit der Kathode (kurzes Beinchen bzw. abgeflachte Seite) nach oben in die Löcher gesteckt und die Beinchen auf der Rückseite umgebogen.

Aufbau einer LED
Aufbau einer LED

Dieses hat den Vorteil das die LEDs nicht wieder rausrutschen können.

Weihnachtsbaum einlöten der LEDsWeihnachtsbaum einlöten der LEDs
Weihnachtsbaum einlöten der LEDs

Schritt 2 – Piezo Buzzer einlöten

Auf dem Piezo Buzzer ist ein kleines (+) Zeichen abgebildet, dieses spielt beim Einlöten keine Rolle.

Piezo Buzzer
Piezo Buzzer

Für den Piezo Buzzer sind zwei kleine Lötaugen auf der Platine welche mit „Buzzer“ markiert sind, diese führen zu zwei Stifte, welche im nächsten Schritt eingelötet werden.

Schritt 3 – Einlöten der Stiftleiste(n)

Die 12 Stiftleisten müssen in

  • 1x 9er-Stiftleiste (für die LEDs)
  • 1x 2er-Stiftleiste (für den Buzzer)
  • 1x 1er-Stift (für GND)

mit einem Seitenschneider getrennt werden.

Hier empfehle ich den Erwerb von Stiftleisten mit einer definierten Kerbe.

Stiftleiste 2,54mm
Stiftleiste 2,54 mm

Es gibt die Stiftleisten auch mit einer glatten Kante, jedoch habe ich hier festgestellt das diese sich nur mit aller Vorsicht und einer feinen Säge vernünftig teilen lassen. Daher greife ich immer gerne auf die Abgebildeten Stiftleisten zurück.

Die Stiftleisten lassen sich nicht umbiegen und daher hat man etwas „Fummelarbeit“ vor sich. Ich stapel mir immer etwas auf so das die Platine und die Stifte im rechten Winkel stehen, danach wird ein Stift angelötet.

Platine mit Lötstiften
Platine mit Lötstiften

Hat man dieses getan, so kann man die restlichen Stifte bequem mit einer 3. Hand festlöten.

Schritt 4 – Einlöten der Widerstände

Die 9 Widerstände werden in die markierten (R1..R9) Löcher gesteckt und eingelötet.

eingelötete, 220 Ohm Widerstände auf der Platine
eingelötete, 220 Ohm Widerstände auf der Platine

Bei einem Widerstand ist es egal wie herum dieser eingelötet wird, es ist jedoch ansehnlicher für den Betrachter, wenn alle Widerstände in die gleiche Richtung eingelötet wurden.

220 Ohm Widerstand
220 Ohm Widerstand

Bei den Widerständen ist es wichtig, dass die Beinchen auf der Rückseite umgebogen werden, denn diese verrutschen sehr schnell.

Schritt 4 – anschließen der Breadboardkabel

Im vierten Schritt werden die Breadboardkabel angeschlossen ich verwende 20 cm lange,  mit Stecker und Buchse.

Weihnachtsbaum mit Breadboardkabel
Weihnachtsbaum mit Breadboardkabel

Schritt 5 – Programmieren vom LED Weihnachtsbaum

Die Melodie habe ich aus dem Sketch von AbhishekGhosh entnommen, dieser hat auf dem GitHub Repository https://github.com/AbhishekGhosh/Arduino-Buzzer-Tone-Codes/blob/master/Jingle-bells.ino ein entsprechendes Arduino Sketch bereitgestellt. 

Somit konnte ich dieses fast 1:1 übernehmen. Ich habe da nur ein paar Variablennamen, die Funktion zum Abspielen der Melodie sowie ein paar modifier angepasst.

Es werden keine zusätzlichen Bibliotheken benötigt!

Quellcode

//LEDs an den digitalen Pins 2 bis 10 angeschlossen
#define LED1 2
#define LED2 3
#define LED3 4
#define LED4 5
#define LED5 6
#define LED6 7
#define LED7 8
#define LED8 9
#define LED9 10
//Array mit den LEDs sowie dem Status der LED
int leds[9][2] = {{LED1,LOW}, {LED2,LOW}, {LED3,LOW}, {LED4,LOW}, {LED5,LOW}, {LED6,LOW}, {LED7,LOW}, {LED8,LOW}, {LED9,LOW}};
//Intervall zum ändern eines Status der LED
//Wenn die LEDs öffters / schneller blinken sollen muss diese Variable kleiner werden ansonsten größer.
const int LED_ACTION_INTERVALL = 750;
//Variable zum speichern der letzten Ausführung.
long lastLedAction =0;

//Piezo Buzzer am digitalen PWM Pin 11 angeschlossen
#define BUZZER 11

//Definieren der Töne
#define  C     2100
#define  D     1870 
#define  E     1670
#define  f     1580
#define  G     1400 
#define  R     0 //reset

//Melodie von Jingle Bells
const int jingleBellsMelody[] = {E, E, E,R, E, E, E,R, E, G, C, D, E, R, f, f, f,f, f, E, E,E, E, D ,D,E, D, R, G ,R, E, E, E,R, E, E, E,R, E, G, C, D, E, R, f, f, f,f, f, E, E, E,  G,G, f, D, C,R };
//Berechnen der Anzahl der Töne in der Melodie
const int MAX_COUNT = sizeof(jingleBellsMelody) / 2;
const int beat = 50;
const long tempo = 10000;
int rest_count = 100;
int pause = 1000;

void setup(){
  //Initialisieren der LEDs als Ausgänge und mit dem Status LOW (AUS)
   for(int i=0;i<9;i++){
    digitalWrite(leds[i][0], leds[i][1]); 
  }

  //Setzen des Buzzer Pins als Ausgang
  pinMode(BUZZER, OUTPUT);  
}

/**
 * Spielt die Melodie ab.
 */
void playTone(int tone_, long duration) {
   long elapsed_time = 0;
   //Wenn der Ton kein Reset ist dann...
   if (tone_ > 0) {
     //Prüfen ob die Zeit vom letzten ausführen eines LED blinkens kleiner als 
     //die aktuelle Zeit + dem Intervall ist.
     if(lastLedAction < (millis()+LED_ACTION_INTERVALL)){
        //speichern der aktuellen Zeit
        lastLedAction = millis();
        //erzeugen einer Zufallszahl von 0 bis 8
        int randomValue = random(8);
        //lesen des Status aus dem Array mit den LEDs 
        int status = leds[randomValue][1];
        //Wenn der Status LOW / AUS ist dann soll er auf HIGH gewechselt werden.
        if(status == LOW){
          leds[randomValue][1] = HIGH;
        } else {
          //Wenn der Status HIGH / AN ist dann soll auf LOW gewehcselt werden.
          leds[randomValue][1] = LOW;
        }
        //neues Auslesen des Status aus dem Array
        status = leds[randomValue][1];

        //Setzen der LED mit dem neuen Status
        digitalWrite(leds[randomValue][0], status); 
     }

     //Abspielen der Melodie
     while (elapsed_time < duration) {
       //Buzzer an
       digitalWrite(BUZZER,HIGH);
       //Pause von der länge des Tones durch 2
       delayMicroseconds(tone_ / 2);
       // DOWN
       //Buzzer aus
       digitalWrite(BUZZER, LOW);
       //Pause von der länge des Tones durch 2
       delayMicroseconds(tone_ / 2);
       //Speichern wielange der Ton dauerte
       elapsed_time += (tone_);
     }
   }
   else { // Reset 
     for (int j = 0; j < rest_count; j++) {
       delayMicroseconds(duration); 
     } 
   }                                
 }

void loop(){
  long duration = beat * tempo; // Set up timing
  //Für jede Note aus der Melodie....
  for (int i=0; i<MAX_COUNT; i++) {
    //lesen der Note i aus dem Array der Melodie    
    playTone(jingleBellsMelody[i], duration);
    //Wenn die Melodie schneller abgespielt werden soll dann muss 
    //die Variable für den beat sowie die pause angepasst werden.
    delayMicroseconds(pause);  // eine kleine Pause zwischen den Noten....
  }
    
  delay(500);
}

Schreibe einen Kommentar Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Fragen oder Feedback?

Du hast eine Idee, brauchst Hilfe oder möchtest Feedback loswerden?
Support-Ticket erstellen

Newsletter abonnieren

Bleib auf dem Laufenden: Erhalte regelmäßig Updates zu neuen Projekten, Tutorials und Tipps rund um Arduino, ESP32 und mehr – direkt in dein Postfach.

Jetzt Newsletter abonnieren

Unterstütze meinen Blog

Wenn dir meine Inhalte gefallen, freue ich mich über deine Unterstützung auf Tipeee.
So hilfst du mit, den Blog am Leben zu halten und neue Beiträge zu ermöglichen.

draeger-it.blog auf Tipeee unterstützen

Vielen Dank für deinen Support!
– Stefan Draeger

Kategorien

Tools

  • Unix-Zeitstempel-Rechner
  • ASCII Tabelle
  • Spannung, Strom, Widerstand und Leistung berechnen
  • Widerstandsrechner
  • 8×8 LED Matrix Tool
  • 8×16 LED Matrix Modul von Keyestudio
  • 16×16 LED Matrix – Generator

Links

Blogverzeichnis Bloggerei.de TopBlogs.de das Original - Blogverzeichnis | Blog Top Liste Blogverzeichnis trusted-blogs.com

Stefan Draeger
Königsberger Str. 13
38364 Schöningen
Tel.: 01778501273
E-Mail: info@draeger-it.blog

Folge mir auf

link zu Fabook
link zu LinkedIn
link zu YouTube
link zu TikTok
link zu Pinterest
link zu Instagram
  • Impressum
  • Datenschutzerklärung
  • Disclaimer
  • Cookie-Richtlinie (EU)
©2025 Technik Blog | Built using WordPress and Responsive Blogily theme by Superb
Cookie-Zustimmung verwalten
Wir verwenden Technologien wie Cookies, um Geräteinformationen zu speichern und/oder darauf zuzugreifen. Wir tun dies, um das Surferlebnis zu verbessern und um personalisierte Werbung anzuzeigen. Wenn Sie diesen Technologien zustimmen, können wir Daten wie das Surfverhalten oder eindeutige IDs auf dieser Website verarbeiten. Wenn Sie Ihre Zustimmung nicht erteilen oder zurückziehen, können bestimmte Funktionen beeinträchtigt werden.
Funktional Immer aktiv
Die technische Speicherung oder der Zugang ist unbedingt erforderlich für den rechtmäßigen Zweck, die Nutzung eines bestimmten Dienstes zu ermöglichen, der vom Teilnehmer oder Nutzer ausdrücklich gewünscht wird, oder für den alleinigen Zweck, die Übertragung einer Nachricht über ein elektronisches Kommunikationsnetz durchzuführen.
Vorlieben
Die technische Speicherung oder der Zugriff ist für den rechtmäßigen Zweck der Speicherung von Präferenzen erforderlich, die nicht vom Abonnenten oder Benutzer angefordert wurden.
Statistiken
Die technische Speicherung oder der Zugriff, der ausschließlich zu statistischen Zwecken erfolgt. Die technische Speicherung oder der Zugriff, der ausschließlich zu anonymen statistischen Zwecken verwendet wird. Ohne eine Vorladung, die freiwillige Zustimmung deines Internetdienstanbieters oder zusätzliche Aufzeichnungen von Dritten können die zu diesem Zweck gespeicherten oder abgerufenen Informationen allein in der Regel nicht dazu verwendet werden, dich zu identifizieren.
Marketing
Die technische Speicherung oder der Zugriff ist erforderlich, um Nutzerprofile zu erstellen, um Werbung zu versenden oder um den Nutzer auf einer Website oder über mehrere Websites hinweg zu ähnlichen Marketingzwecken zu verfolgen.
Optionen verwalten Dienste verwalten Verwalten von {vendor_count}-Lieferanten Lese mehr über diese Zwecke
Einstellungen anzeigen
{title} {title} {title}