In diesem Beitrag möchte ich ein kleines Arduino Projekt zum Weihnachtsfest präsentieren, es ist ein LED Weihnachtsbaum.
Das Layout des PCB habe ich selber erstellt und bereits im Tutorial Eigene PCBs mit Seeedstudio erstellen erläutert.
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:
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.
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.
Dieses hat den Vorteil das die LEDs nicht wieder rausrutschen können.
Schritt 2 – Piezo Buzzer einlöten
Auf dem Piezo Buzzer ist ein kleines (+) Zeichen abgebildet, dieses spielt beim Einlöten keine Rolle.
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.
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.
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.
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.
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.
Schritt 5 – Programmieren vom LED Weihnachtsbaum
Die Melodie habe ich aus dem Sketch von
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); }