DIN 33404 mit Piezo nachmachen

Hallo,
erstmal ein frohes neues Jahr. Ich versuche gerade den in DIN33404 definierten Ton(Beispiel Video) mit einem Piezo nachzubauen. Meine Versuche klingen aber ehr wie ein sterbender Vogel. Mein aktueller Code sieht so aus:

int startFreq = 2000;
int stopFreq = 2300;
int steps = 3;
int sleep = 10;
void setup() {
  Serial.begin(9600);
  pinMode(6, OUTPUT);
  //delay(5000);
  tone(6, 2000, 200); 
  delay(2000);
  int i = startFreq;
  while(i <= stopFreq){
    Serial.println(i);
    i = i + steps;
    //noTone(6);
    tone(6, steps);
    delay(sleep);
    }
    noTone(6);
  while(true){;}

}

void loop() {
 delay(500);
}

Die Frequenzen passen noch nicht, aber ich habe das Gefühl etwas falsch zu machen. Ich würde mich über Vorschläge und Hilfe freuen.

Vermutlich wird der Piezo dein Problem verschlechtern.
Die sind meist auf eine bestimmte Frequenz abgestimmt und werden deutlich schlechter, wenn man von dieser Frequenz abweicht.
Warum nimmst du keinen “richtigen” Lautsprecher ?

Dast Du eine genaue Beschreibung des Signals. Die Norm ist kostenpflichtig und darum kann ich sie nicht einsehen.
Grüße Uwe

Hallo,

ich glaube ja nicht das es sich bei dem original um ein rechteck Ton handelt. Wird ehr eine Kurve (sinus) sein. Eventuell kann man mi einer R-C Kombi noch was erreichen und das Rechteck im dem Frequenzbereich verrunden.

Hi

Gibt doch Sirenen-Chips für 'n Appel und n Ei' - ob dieser Ton dabei ist - gute Frage - wäre preislich aber unschlagbar.
(also Ami-Sirene, Kojak, MArtinshorn, und was sonst noch so Platz im Chip fand)

MfG

Hier mal der Frequenz Zeitverlauf des Signals

Die Vorgabe einer Frequenz bedeutet ein Sinus-Signal, alles andere wäre ein Gemisch mit Oberwellen.

Ein Piezo hat einen ganz anderen Frequenzgang als ein (elektrodynamischer) Lautsprecher, mit ausgeprägten Resonanzen bei höheren Frequenzen - also ideal zur Wiedergabe von Oberwellen.

Ich habe zufällig gestern bischen damit rumgespielt. Das hier kommt ein bischen in die Richtung deines Videos:

void setup() {
pinMode(6,OUTPUT);

}
void loop() {
  for (int f = 900; f <= 1500; f++) {
    tone(6, f);
    delay(1);
  }
  for (int f = 1500; f >= 800; f--) {
    tone(6, f);
    delay(1);
  }
}