Generare toni

FunduinoUltimo aggiornamento il

Vom einzelnen Piepton bis zur Melodie mit dem passiven Lautsprecher

Mit dem Arduino kannst du auf verschiedene Arten Töne erzeugen. Am einfachsten geht das mit einem aktiven Lautsprecher (active buzzer), den du lediglich an die Spannung von 5V anschließt. Die Tonerzeugung übernimmt eine im Inneren eingebaute Elektronik. Der Nachteil: Ein active buzzer kann nur einen einzigen Ton erzeugen – Melodien oder Sirenengeräusche sind damit nicht möglich.

Aufgabe: Mit einem passiven Lautsprecher erzeugst du unterschiedliche Töne und eine Melodie.

Unterseite von Lautsprecher und Piezospeaker im Vergleich – der Lautsprecher hat eine sichtbare grüne Platine
Unterseite: links der Lautsprecher, rechts der Piezospeaker
Oberseite von Lautsprecher und Piezospeaker im Vergleich
Oberseite: links der Lautsprecher, rechts der Piezospeaker
1 / 2

Aktive und passive Lautsprecher – ein kleiner Exkurs

Mit einem passiven Lautsprecher (passive buzzer) kannst du mithilfe des Arduino-Mikrocontrollers verschiedene Töne, Melodien oder Sirenensignale erzeugen, denn im passive buzzer steckt keine Elektronik, die einen Ton vorgibt.

Auf den Bildern zu dieser Anleitung siehst du, wie sich Piezospeaker und Lautsprecher unterscheiden. Links ist jeweils der Lautsprecher abgebildet, rechts der Piezospeaker. Am deutlichsten erkennst du den Lautsprecher an der sichtbaren grünen Platine auf der Unterseite.

Den Lautsprecher anschließen

Die Tonerzeugung basiert maßgeblich auf dem Befehl tone(x, y). Der x-Wert gibt den Pin an, an dem der Lautsprecher mit der positiven Seite angeschlossen ist, und der y-Wert die Tonhöhe. Ein Beispiel:

Schaltplan mit Piezo-Lautsprecher an Pin 8 des Arduino UNO
Schaltplan: Piezo-Lautsprecher am Arduino UNO
So funktioniert der Befehl tone()
tone(8, 100); // Der Lautsprecher an Pin 8 wird mit der Tonhöhe "100" aktiviert
delay(1000); // Pause von 1000 Millisekunden, also 1 Sekunde - der Lautsprecher bleibt so lange aktiv.
noTone(8); // Der Lautsprecher an Pin 8 wird deaktiviert

Einfache Tonerzeugung

Im ersten Sketch gibt der Lautsprecher abwechselnd eine Sekunde lang einen Ton aus und bleibt eine Sekunde lang stumm.

Programmcode – Einfache Tonerzeugung
// Im Setup werden keine Informationen benötigt.
// Die Spannungsausgabe für den Piezo-Lautsprecher legt der Arduino-Befehl "tone" automatisch fest.
void setup()
{
}
void loop()
{
  tone(8, 100); // Im Hauptteil wird nun mit dem Befehl "tone(x, y)" ein Ton abgegeben.
  delay(1000); // mit einer Dauer von 1 Sekunde
  noTone(8); // Der Ton wird abgeschaltet
  delay(1000); // Der Lautsprecher bleibt eine Sekunde aus
}

Abwechselnde Tonhöhen erzeugen

Im zweiten Beispiel ergänzt du im Hauptteil (loop) nur ein paar Zeilen. Dadurch ertönen zwei Töne abwechselnd mit der Tonhöhe „100“ bzw. „200“, wie bei einer Sirene. Eine Pause zwischen den Tönen gibt es nicht.

Programmcode – Abwechselnde Tonhöhen
void setup()
{
}
void loop()
{
  tone(8, 100);
  delay(1000);
  noTone(8); // An dieser Stelle geht der erste Ton aus.
  tone(8, 200); // Der zweite Ton mit der Tonhöhe "200" ertönt.
  delay(1000); // ... und zwar für eine Sekunde ...
  noTone(8); // An dieser Stelle geht der zweite Ton aus und der Loop-Teil beginnt von vorn.
}

Ton erzeugen durch Tastendruck

Im dritten Beispiel kommt ein Taster an Pin 6 zum Aufbau hinzu. Im Hauptteil liest eine IF-Abfrage den Taster aus. Falls der Taster gedrückt ist, ertönt für eine Sekunde ein Ton mit der Tonhöhe „300“.

Schaltplan mit Lautsprecher an Pin 8 und einem Taster an Pin 6 des Arduino UNO
Schaltplan: Ton erzeugen durch Tastendruck
Programmcode – Ton durch Tastendruck
int Taster = 6;
int Tasterstatus = 0;
void setup()
{
  pinMode(Taster, INPUT);
}
void loop()
{
  Tasterstatus = digitalRead(Taster);
  if (Tasterstatus == HIGH) // Wenn der Taster gedrückt ist ...
  {
    tone(8, 300); // ... spiele diesen Ton ...
    delay(1000); // ... und zwar für eine Sekunde ...
    noTone(8); // Ton abschalten
  }
}

Töne in Abhängigkeit von verschiedenen Tasten erzeugen

Im vierten Beispiel entscheidet der Sketch je nach gedrückter Taste, welchen Ton der Lautsprecher abgibt. Dazu schließt du jeweils einen Taster an Pin 6 und an Pin 7 an. Im Hauptteil entscheiden zwei IF-Abfragen, welcher Ton abgegeben wird.

Schaltplan mit Lautsprecher an Pin 8 sowie Tastern an Pin 6 und Pin 7 des Arduino UNO
Schaltplan: Töne in Abhängigkeit von verschiedenen Tasten
Programmcode – Zwei Taster, zwei Töne
int Taster1 = 6; // Taster 1 an Pin 6 angeschlossen
int Taster2 = 7; // Taster 2 an Pin 7 angeschlossen
int Tasterstatus1 = 0; // Variable, um den Status von Taster 1 zu speichern.
int Tasterstatus2 = 0; // Variable, um den Status von Taster 2 zu speichern.
void setup()
{
  pinMode(Taster1, INPUT); // Taster 1 als Eingang festlegen
  pinMode(Taster2, INPUT); // Taster 2 als Eingang festlegen
}
void loop()
{
  Tasterstatus1 = digitalRead(Taster1); // Status von Taster 1 auslesen (HIGH oder LOW)
  Tasterstatus2 = digitalRead(Taster2); // Status von Taster 2 auslesen (HIGH oder LOW)
  if (Tasterstatus1 == HIGH) // Wenn Taster 1 gedrückt ist, dann ...
  {
    tone(8, 100); // Ausgabe eines Tons mit der Tonhöhe 100.
    delay(1000); // mit der Dauer von einer Sekunde
    noTone(8); // Ausschalten des Tons.
  }
  if (Tasterstatus2 == HIGH) // Wenn Taster 2 gedrückt ist, dann ...
  {
    tone(8, 200); // Ausgabe eines Tons mit der Tonhöhe 200.
    delay(1000); // mit der Dauer von einer Sekunde
    noTone(8); // Ausschalten des Tons.
  }
}

Melodien mit dem Arduino erzeugen

In der Arduino-Software steckt eine Datei speziell zum Erzeugen von Tönen mit einem Lautsprecher (passive buzzer). Statt Tonhöhen als Zahlen anzugeben – wie zum Beispiel tone(8, 200) – kannst du damit Töne aus der Tonleiter auswählen. Als Beispiel gibt es dazu in der Arduino-Software den Sketch „toneMelody“.

In diesem Beispiel ist die Datei bereits hinterlegt, in der die Zuordnung von Tonhöhe und Zahlenwert steht. Sie heißt „pitches.h“. Ihren Inhalt siehst du dir an, indem du im geöffneten Beispielprogramm auf den zweiten Kartenreiter innerhalb des Sketches klickst.

Um auf die Datei zugreifen zu können, baust du im Sketch lediglich den Befehl #include "pitches.h" ein – und die Datei selbst muss als Tab geöffnet sein. Am besten öffnest du dazu den Sketch „toneMelody“ aus den Beispielen in der Arduino-Software und bearbeitest ihn. Dadurch wird die Datei „pitches.h“ automatisch als Tab aufgerufen.

Der folgende kurze Sketch spielt abwechselnd zwei Töne aus der Datei „pitches.h“ ab.

In diesem Sketch brauchst du noTone() nicht mehr: Der erweiterte Befehl tone(x, y, z) beendet den Ton selbst. Dabei ist x der Pin des Lautsprechers, y die Tonhöhe und z die Dauer des Tones in Millisekunden.

Menü der Arduino-Software mit dem Beispielsketch toneMelody
Zu finden unter „Beispiele“ → „02.Digital“ → „toneMelody“
Geöffneter Sketch toneMelody mit dem Kartenreiter pitches.h
Die Datei pitches.h liegt im zweiten Kartenreiter des Sketches
1 / 2
Programmcode – Noten aus pitches.h abspielen
#include "pitches.h"
void setup()
{
  pinMode(8, OUTPUT); // Lautsprecher an Pin 8
}
void loop()
{
  tone(8, NOTE_C4, 1000); // An Pin 8 wird die Note C4 für 1000 ms gespielt
  delay(3000); // Der Sketch pausiert 3 Sekunden. Da der Ton nur 1 Sekunde dauert, bleiben danach noch zwei Sekunden Stille.
  tone(8, NOTE_G3, 1000); // An Pin 8 wird die Note G3 für 1000 ms gespielt
  delay(3000); // Der Sketch pausiert 3 Sekunden. Da der Ton nur 1 Sekunde dauert, bleiben danach noch zwei Sekunden Stille.
}
Valuta le istruzioni

Commenti

Fare una domanda o condividere un'esperienza

Scrivici se qualcosa non funziona. Indica la tua scheda e il messaggio di errore.

Controlliamo ogni commento prima della pubblicazione. Il tuo indirizzo e-mail rimane presso di noi.