Buzzer betreiben

Manchmal ist von einer Schaltung nicht nur optisches Feedback (Blinken) gewünscht, sondern auch akustisches. Dazu werden wir in dieser Lektion einen Lautsprecher an den Arduino anschließen und mit diesem Töne produzieren.

Die Schaltung

Verbinde einen Anschluss des Lautsprechers mit Pin 8 des Ardunio. Beachte, dass je nach Lautsprecher ein Vorwiderstand nötig ist, um den Strom, der durch den Lautsprecher fließt, zu begrenzen. Bei den Lautsprechern in unserem Arduino-Kit ist dies jedoch nicht nötig.

<html><!– Den anderen schließt du über einen 100Ω-Widerstand an Masse (GND) an. Der Widerstand begrenzt den Strom, der über den Lautsprecher fließen kann. Würde man den Widerstand weglassen, könnte - je nach verwendetem Lautsprecher - ein zu hoher Strom den Arduino beschädigen. –></html>

Das Programm

Bei den Beispielen unter dem Namen toneMelody zu finden.

 #include "pitches.h"

// notes in the melody:
int melody[] = {
  NOTE_C4, NOTE_G3,NOTE_G3, NOTE_A3, NOTE_G3,0, NOTE_B3, NOTE_C4};

// note durations: 4 = quarter note, 8 = eighth note, etc.:
int noteDurations[] = {
  4, 8, 8, 4,4,4,4,4 };

void setup() {
  // iterate over the notes of the melody:
  for (int thisNote = 0; thisNote < 8; thisNote++) {

    // to calculate the note duration, take one second
    // divided by the note type.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int noteDuration = 1000/noteDurations[thisNote];
    tone(8, melody[thisNote],noteDuration);

    // to distinguish the notes, set a minimum time between them.
    // the note's duration + 30% seems to work well:
    int pauseBetweenNotes = noteDuration * 1.30;
    delay(pauseBetweenNotes);
    // stop the tone playing:
    noTone(8);
  }
}

void loop() {
  // no need to repeat the melody.
}

Dieses Programm spielt eine kurze Melodie ab. Da es komplett im „Setup“-Teil steht, wird die Melodie nur ein einziges Mal gespielt.

Die #include-Anweisung ganz vorne sagt dem Compiler, dass aus einer anderen Datei etwas einzubinden ist. In diesem Fall ist das die Datei „pitches.h“, die definitionen für die einzelnen Töne enthält. Damit können wir dann die Notennamen (z.B. NOTE_C4) verwenden, anstatt jedes Mal die Frequenz in Hz angeben zu müssen. Danach werden zwei Listen (Arrays) definiert, das erste gibt die Noten der Melodie an, das zweite, wie lange die Noten jeweils zu spielen sind.

Wichtig: Die Datei pitches.h muss sich im selben Ordner befinden, wie die Datei, in der die Melodie abgespielt wird. Du solltest die Datei also von Digital → toneMelody in deinen Arbeitsordner kopieren.

Im Setup-Teil des Programms befindet sich nun eine for-Schleife. Diese zählt die Variable thisNote von 0 bis 7 hoch. Jedes Mal wird dann tone aufgerufen, das drei Parameter enthält. Der erste ist eine 8, die Nummer des Pins an dem der Lautsprecher hängt. Der zweite ist die Tonhöhe des aktuell zu spielenden Tons (thisNote wird als Index auf dem Array verwendet, gibt also an, auf den wievielten Eintrag wir zugreifen wollen). Der dritte ist die Dauer in Millisekunden, wie lang der Ton zu spielen ist. Da wir zu Beginn nur angegeben haben, ob es jeweils eine Viertel- oder Achtelnote ist, wird in der Zeile davor 1000 geteilt durch den Wert der Note (4 oder 8) gerechnet. Dabei kommt dann entweder 250 (1000 / 4) oder 125 (1000 / 8) raus, also jeweils eine Viertel- oder Achtelsekunde.

Die delay-Anweisung danach sorgt dafür, dass das Programm pausiert, während der Ton gespielt wird. Es wird 1,3-Mal so lang pausiert wie der Ton dauert. Dadurch wird eine kurze Pause erzielt und die Töne werden voneinander unterscheidbar.