Töne erzeugen mit aktiven und passiven Summer

Töne erzeugen mit einem Summer (auch Piezo oder Buzzer genannt)

Es gibt zwei Arten von Summern.
Einmal die aktiven Buzzer, die intern einen Oszillator besitzen, der auf einer festgelegten Frequenz schwingt und somit bei Spannungsversorgung nur einen Ton ausgibt. Auf das plus Zeichen des Aufklebers achten, hier wird 3,3 V oder 5 V angeschlossen

void setup(){
pinMode(8,OUTPUT);
}
void loop()
{
digitalWrite(8,HIGH); // Ton an
delay(2000);
digitalWrite(8,LOW); // Ton aus
delay(2000);
}

Und die passiven Buzzer, die im Sketch zusätzlich noch eine Frequenz-Angabe benötigen, können da schon kleine Melodien ausgeben.
(Je nach Bauart ist es somit möglich, nur durch Spannung anlegen herauszufinden, ob es ein aktiver oder passiver Summer ist) Auch hier auf das plus Zeichen achten.
Hierzu finden wir in der Arduino-Referenz den Befehl „tone“
Mit diesen tone-Parametern „tone(7, 1000)“ würde ein Ton auf dem Pin 7 mit der Frequenz 1.000 Hz ausgegeben werden.

void setup() {
tone(7,3000,2000);
}
void loop() {
}

Da „tone“ lediglich per Timer ein schnelles Ein und Ausschalten am GPIO erzeugt, wird kein Pin mit Pulsweitenmodulation PWM benötigt.
Beispiel einer Frequenzfolge als Melodie:

int melodie[] = {262, 196, 196, 220, 196, 0, 247, 262}; // abzuspielende Frequenzen in Hz:
int Dauer[] = {4, 8, 8, 4, 4, 4, 4, 4}; // Notentyp: 4 = Viertelnote, 8 = Achtelnote, usw.

void setup() {
  // die Noten der Melodie durchlaufen:
  for (int dieseNote = 0; dieseNote < 8; dieseNote++) {

    // Um die Notendauer zu berechnen, nehme eine Sekunde geteilt durch den Notentyp.
    //e.g. quarter note = 1000 / 4, eighth note = 1000/8, etc.
    int NoteDauer = 1000 / Dauer[dieseNote];
    tone(7, melodie[dieseNote], NoteDauer); // Pin, Frequenz, Dauer

    // Um die Noten zu unterscheiden, stelle eine Mindestzeit zwischen ihnen ein.
    // Die Dauer der Note + 30% klingt angenehm.
    int pausezwischenNoten = NoteDauer * 1.30;
    delay(pausezwischenNoten);
    noTone(7); //stoppt Ausgabe
  }
}

void loop() {
  // loop nicht benötigt
}

Lister aller Ton-Frequenzen unter https://github.com/bhagman/

Hardware:
Arduino Uno
Aktiver Piezo Buzzer
Passiver Piezo Buzzer
Passiver Summer bis 90 DB

Video:


,