Hast du dich jemals gefragt, ob dein Arduino nicht nur blinken, sondern auch singen kann? Mit einem einfachen Piezolautsprecher und ein paar Zeilen Code verwandelst du deinen Arduino Uno in eine kleine Musikmaschine! In diesem Tutorial zeigen wir dir, wie du Töne erzeugst, diese in Musiknoten übersetzt und schließlich sogar ganze Lieder abspielst. Keine Sorge, du brauchst kein Musikgenie zu sein, wir erklären alles Schritt für Schritt. Los geht's!
Für dieses Projekt benötigst du:
Der Schaltplan ist denkbar einfach. Verbinde ein Bein des Piezolautsprechers mit einem digitalen Pin deines Arduino (z.B. Pin 8) und das andere Bein mit GND (Masse). Das Steckbrett hilft dir, die Verbindungen sauber und ordentlich herzustellen.
Hier ist ein Beispielcode, der eine einfache Melodie (in diesem Fall "Alle meine Entchen") abspielt:
// Definiere die Noten als Frequenzen in Hz
#define NOTE_C 131
#define NOTE_D 146
#define NOTE_E 165
#define NOTE_F 175
#define NOTE_G 196
#define NOTE_A 220
#define NOTE_B 246
// Definiere den Pin, an dem der Piezolautsprecher angeschlossen ist
const int piezoPin = 8;
// Melodie (Alle meine Entchen)
int melody[] = {
NOTE_E, NOTE_D, NOTE_C, NOTE_D, NOTE_E, NOTE_E, NOTE_E,
NOTE_D, NOTE_D, NOTE_D, NOTE_E, NOTE_G, NOTE_G, NOTE_E,
NOTE_D, NOTE_C, NOTE_D, NOTE_E, NOTE_E, NOTE_E,
NOTE_D, NOTE_D, NOTE_E, NOTE_D, NOTE_C
};
// Noten Dauern (relative Werte)
int noteDurations[] = {
4, 4, 4, 4, 4, 4, 2,
4, 4, 4, 4, 4, 4, 2,
4, 4, 4, 4, 4, 4, 2,
4, 4, 4, 4, 2
};
int melodyLength = sizeof(melody) / sizeof(melody[0]);
void setup() {
pinMode(piezoPin, OUTPUT);
}
void loop() {
for (int thisNote = 0; thisNote < melodyLength; thisNote++) {
// Berechnung der Notendauer
int noteDuration = 1000 / noteDurations[thisNote];
tone(piezoPin, melody[thisNote], noteDuration);
// Pause zwischen den Noten
int pauseBetweenNotes = noteDuration * 1.30;
delay(pauseBetweenNotes);
// Stoppe den Ton vor der nächsten Note
noTone(piezoPin);
}
delay(5000); // Warte 5 Sekunden, bevor die Melodie von vorne beginnt
}
const int piezoPin = 8;
legt fest, an welchem digitalen Pin der Piezolautsprecher angeschlossen ist. Passe diesen Wert an, wenn du einen anderen Pin verwendest.melody[]
enthält die Reihenfolge der Noten, die gespielt werden sollen. Die noteDurations[]
gibt an, wie lange jede Note gespielt werden soll. Kleinere Zahlen bedeuten längere Noten (z.B. 4 für eine Viertelnote, 2 für eine halbe Note).setup()
: In der setup()
-Funktion wird der piezoPin
als Ausgang (OUTPUT) deklariert.loop()
: In der loop()
-Funktion wird die Melodie abgespielt.
tone()
: Die Funktion tone(piezoPin, melody[thisNote], noteDuration)
erzeugt einen Ton mit der angegebenen Frequenz (melody[thisNote]
) auf dem angegebenen Pin (piezoPin
) für die angegebene Dauer (noteDuration
in Millisekunden).delay()
: Die Funktion delay()
pausiert das Programm für eine bestimmte Zeit in Millisekunden. Hier verwenden wir sie, um eine kurze Pause zwischen den Noten einzulegen.noTone()
: Die Funktion noTone(piezoPin)
stoppt die Tonerzeugung auf dem angegebenen Pin.int noteDuration = 1000 / noteDurations[thisNote];
berechnet die tatsächliche Dauer der Note in Millisekunden basierend auf dem relativen Wert in noteDurations[]
.melody[]
und noteDurations[]
Arrays an, um andere Lieder abzuspielen. Im Internet findest du viele Tabellen mit Notenfrequenzen und Beispielen.Mit ein paar einfachen Schritten hast du deinen Arduino in eine kleine Musikmaschine verwandelt. Du hast gelernt, wie du Töne erzeugst, diese in Musiknoten übersetzt und ein einfaches Lied abspielst. Experimentiere mit verschiedenen Melodien und Dauern, um deine eigenen musikalischen Kreationen zu erschaffen! Viel Spaß dabei!