Einfachen Sound ausgeben

Mehr
12 Feb 2018 11:35 - 12 Feb 2018 19:39 #357 von Johannes MTC
Johannes MTC erstellte das Thema Einfachen Sound ausgeben
:oops:

Servus aus Österreich.

Ich arbeite nun seit einem Monat an einem Projekt, dass meine Modelleisenbahn per W-Lan steuern soll.

Name des Projekts:
WiFi-MTC
MTTC steht für Model-Train-Controller

Habe dazu bereiz eine App im "MIT App- Inventor" erstellt und einen "D1 Mini" dazu gebracht zu reagieren.
Die Kommunikation läuft über UDP, dass von der App alle 250 ms angestoßen wird. Der ESP gibt darauf hin eine Antwort, welche die aktuellen Parameter der Lok zurück sendet.

Die Loks werden am Programmstart gesucht und können aus einer Liste dann ausgewählt werden. Danach kann die jeweilige Lok eingeschalten (Dampfgenerator ein oder Stromabnehmer hoch usw) die Geschwindigkeit, sowie das Licht und einen Extra- Kanal (Für fernsteuerbare Kupplung , Licht in den Waggons oder was einem sonst so einfällt) steuern.

(Habe noch ein kleines Hitze- Problem beim Netzteil, dass ich mittels eines Schaltnetzteils in Ordnung bringen werde.)

Nun kommen wir zu meinem Problem:

Ich möchte dass die Lok Pfeifen oder einen Sound ausgeben kann, der das Betriebsgeräusch simuliert.
Da die Modelle selbst recht lauf sind, lohnt es nicht hier groß auf die Sound- Qualität zu achten. 8 Bit 8000 Hz Wave Files reichen allemal.


Kann bei geräumigen Modellen sicher auf einen externen mp3 Player zurückgreifen. Doch in Dampfloks wird es richtig eng. Gleichrichter, Netzteil, der ESP8266 und der DC- Motor- Treiber nehmen schon den ganzen Platz in Anspruch. Ein 2A Schmitt-trigger muss auch noch Platz finden, um den Extra- Kanal aus zu koppeln. Ein Handylautprecher ist wirklich klein und findet recht leicht Platz. Zudem der irgendwo platziert werden kann. Sind ja nur 2 Drähte.

Mein Ansatz:
Die Motorsteuerung wird alle 50 ms aufgerufen und die aktuelle Geschwindigkeit (PWM Signal an den Motor-
Treiber) mit der Zielgeschwindigkeit verglichen. Einfache mathematische Gleichungen geben dann die neue Zielgeschwindigkeit vor.
Das ganze läuft sehr schön und kann auch recht feinfühlig per App gesteuert werden.
Ähnlich stelle ich mir nun die Soundausgabe vor.
Rufe die Soundausgabe auch in Intervallen auf, welche dann das Signal an über I2S an einen Operationsverstärker ausgibt.
Leider verstehe ich nicht ganz, wie der I2S Port arbeitet. Puffert dieser Daten, oder muss ich laufend Signale an diesen ändern?
Die Beschreibung von "ESP8266 audio" verstehe ich leider auch nicht wirklich. (Mein Englisch ist grottten schlecht)

Beispielprojekte sind recht umfangreich vorhanden, doch diese haben zu viele Funktionen mit eingebaut. Möchte einfach mal eine Wave ausgeben. Ähnlich wie das Blink- Beispiel, dass weder gesteuert noch irgendwie beeinflusst werden kann.

Kennt einer einer solches Beispiel?
Ist es zwingend erforderlich den ESP8266 dazu hoch zu tackten?

(Die Ausgabe braucht ja wirklich nicht besonders fein zu sein, da ein Megafon ja auch eigentlich nur ein zweistimmiges krächzen ist. Das Geräusch eine Dapmflok ist ja eben auch nur ein Geräusch.

Das Geräusch eine Elok lässt sich übrigens mittels dem PWM Signal an den Motorregler sehr elegant erzeugen. Passe dazu die PWM Ausgangsfrequenz an. Damit klingt das ganze schon von Natur aus wie eine Große. (Prinzip der Ansteuerung ist ja ähnlich). :woohoo:

Wagondurchsagen oder Türgeräusche werde ich mittels MP3 Player lösen. Der hat dann ja im Waggon platz.

Falls wer meint, man könnte mit "tone(X, XXX)" arbeiten?
Leider kann man per "tone(X, XXX)" immer nur einen Ton ausgeben. Das ist wirklich nur ein summen.
Versuche zwei verschiedene Töne gleichzeitig an zwei CPIO´s auszugeben lassen immer nur den letzten aufgerufenen erklingen. (Sonst würde ich mir das Geräusch selbst mischen.)


Viele Dank für Eure Hilfe

Edit:

Habe heute nochmal die "ESP8266audio" Libery versucht.
github.com/earlephilhower/ESP8266Audio
Mit einer mp3- Datei bekomme ich das zum laufen.
Habe nur den fetten Text im Sketsch angepasst.
Die Qualität ist absolut ausreichend.

#include <Arduino.h>
#include "AudioFileSourceSPIFFS.h"
#include "AudioGeneratorMP3.h"
#include "AudioOutputI2SNoDAC.h"

AudioGeneratorMP3 *mp3;
AudioFileSourceSPIFFS *file;
AudioOutputI2SNoDAC *out;
void setup() {
Serial.begin(115200);
delay(1000);
SPIFFS.begin();
file = new AudioFileSourceSPIFFS("/ice_signal.mp3");
out = new AudioOutputI2SNoDAC();
mp3 = new AudioGeneratorMP3();
mp3->begin(file, out);
}

void loop() {
if (mp3->isRunning()) {
if (!mp3->loop()) {
mp3->stop();
}
}
else {
Serial.printf("MP3 done\n");
delay(1000);
}
}

Was müsste ich nun verändern, um das mit einer wav- Datei zum laufen zu bekommen?

Vielen Dank für die Hilfe.

LG. Johannes
Letzte Änderung: 12 Feb 2018 19:39 von Johannes MTC. Begründung: Eigene Erkenntnisse:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Powered by Kunena Forum