„Happy Birthday“ dreistimmig auf Arduino Nano – Endlose Melodie mit Licht-Sync
Komponenten und Materialien
| Arduino Nano R3 | 1 |
Apps und Online-Dienste
- Arduino IDE
Über das Projekt
Das Projekt spielt „Happy Birthday“ in dreistimmiger Polyphonie auf einem Arduino Nano mit drei Summer (Buzzern) auf einem einzigen Mini-Breadboard.
Demonstration
An jede USB-Stromquelle angeschlossen (nicht nur PC) spielt das Gerät die Melodie endlos – bis man sie nicht mehr hören kann. Die LEDs blinken taktsynchron zu jedem Notenwechsel im jeweiligen Kanal/Summer.
Schaltplan & Aufbau
Ziel war ein superkompaktes Gerät mit (fast) keinem Löten. Alles passt auf ein winziges Breadboard:
Die inneren Verbindungen des Breadboards:
Der Trick: Das Arduino Nano Board passt PERFEKT in ein solches Breadboard, sodass auf beiden Seiten Bauteile angeschlossen werden können.
Verwendet: Arduino Nano v3.0 (Gravitech), beliebige Piezo-Summer und LEDs. Widerstände 100 Ω (üblich 220 Ω für LEDs – hier egal).
Wichtig: Die Summer-Pins werden so in das Breadboard gesteckt:
Der mittlere Summer ist größer – ursprünglich für „Bass“ gedacht, klingt aber identisch. Drei gleiche Summer funktionieren ebenfalls; dann müssen Position und Pin-Nummern im Code angepasst werden.
Hack: Mehrere Arduino I/O-Pins werden als GND für Summer und LEDs genutzt. Setzt man einen Pin auf LOW, verhält er sich wie ein Ground-Pin. Cool, oder? ;)
Zur Programmierung
Der vollständige Sketch steht unten. Voraussetzung: Die Tone-Bibliothek installieren:
Tone.zip (Dropbox) – Pop-up einfach schließen.
Installation: In der Arduino IDE → Sketch → Bibliothek einbinden → .ZIP-Bibliothek hinzufügen → Datei wählen.
Die Bibliothek nutzt Hardware-Timer und Interrupts für echte simultane Tonerzeugung („Redneck-Multitasking“ auf einem Kern ohne OS). Autor: Bhagman, GitHub: Tone Library.
Hinweis: Der Code ist umfangreich und schwer lesbar, da drei „unabhängige“ Melodie-Threads in einem linearen Ablauf verwaltet werden. Eine spätere Refaktorisierung für andere Songs blieb aus. Viel Erfolg – Feedback willkommen!
Code
Wichtig: Tone-Bibliothek vorher installieren!
#include <Tone.h>
Tone solo; Tone bass; Tone rythm;
const int t = 600; // Viertelnote Dauer
const int tt = t * 2;
const int t14 = round(t * 1 / 4);
const int t24 = round(t * 2 / 4);
const int t34 = round(t * 3 / 4);
const int bassLedPin = 15; // A1
const int rythmLedPin = 17; // A3
const int soloLedPin = 19; // A5
void wait(Tone t) { while (t.isPlaying()) { } }
int bassLedState = LOW;
void switchBassLed() { bassLedState = !bassLedState; digitalWrite(bassLedPin, bassLedState); }
int rythmLedState = LOW;
void switchRythmLed() { rythmLedState = !rythmLedState; digitalWrite(rythmLedPin, rythmLedState); }
int soloLedState = LOW;
void switchSoloLed() { soloLedState = !soloLedState; digitalWrite(soloLedPin, soloLedState); }
void setup() {
pinMode(14, OUTPUT); // A0 – LED GND
pinMode(16, OUTPUT); // A2 – LED GND
pinMode(18, OUTPUT); // A4 – LED GND
pinMode(bassLedPin, OUTPUT);
pinMode(rythmLedPin, OUTPUT);
pinMode(soloLedPin, OUTPUT);
pinMode(2, OUTPUT); // Solo Summer GND
pinMode(9, OUTPUT); // Rythm Summer GND
solo.begin(6); // Solo Summer Signal
bass.begin(12); // Bass Summer Signal
rythm.begin(0); // Rythm Summer Signal
// Intro: zwei kurze D4-Töne
solo.play(NOTE_D4, t34); switchSoloLed(); wait(solo);
solo.play(NOTE_D4, t14); switchSoloLed(); wait(solo);
}
void loop() {
// Die gesamte Melodie wird notenweise abgespielt.
// Jeder Block: play() → LED toggeln → wait() auf dem längsten Ton (meist rythm).
// Struktur: Bass, Rythm, Solo parallel.
// Siehe Originalcode für die vollständige Notenfolge.
// ...
}
Hinweis: Der vollständige Notencode ist sehr lang. Das obige Gerüst zeigt die Struktur; die komplette Notenfolge finden Sie im Originalprojekt.
Herstellungsprozess
- K30 CO₂-Sensor: Echtzeit-Luftqualitätsmessung mit Arduino
- Kommunikationshilfe für Taubblinde: 1Sheeld + Arduino + Sprachausgabe & Anzeige
- Smartes Sparschwein: Münzprüfer mit Arduino Nano steuern
- Arduino Nano Bundle: CrazyCircuits, DFRobot Sensoren & Werkzeuge – Projekte mit Vertrauen umsetzen
- LED per Bluetooth mit Arduino steuern – Einfache DIY-Anleitung
- DFRobot Kapazitiver Fingerabdrucksensor mit Arduino oder ESP8266 einbinden
- Interaktives Nextion HMI Projekt mit Arduino Mega und Sensoren
- Arduino-basierter 6-DoF Roboterarm mit Nunchuk-Steuerung
- Zwei Schrittmotoren mit Arduino Nano & Joystick steuern – Einfaches Tutorial
- Handheld Geigerzähler mit Arduino Nano selbst bauen