====== Soundmodule ======
Je nach Softwareversion werden nur das **JQ6500**-Soundmodul (LocoTurn **V1.0**) oder das **JQ6500**-Soundmodul und der **DFPlayer** unterstützt (ab LocoTurn **V1.1**).
Die Lautstärke kann über das Menü oder über DCC-Befehle eingestellt werden. Der Wert der Laustärke (0 - 30) wird im EEPROM des Nano gespeichert und beim nächsten Einschalten von LocoTurn wieder geladen. Weiterhin kann der Sound generell über das Menü aktiviert/deaktiviert werden.
Hier die beiden Module, links der DF-Player und rechts das JQ6500:
{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:img_3279.jpeg?nolink |}}
===== Wo bekomme ich geeignete Sounds her? =====
Es ist zwar möglich, Soundausschnitte aus YouTube-Videos und anderweitigen Quellen privat zu nutzen; es wäre dann aber rechtlich schwierig, diese zu veröffentlichen. Wer die Möglichkeit und Beziehungen hat, den Ton einer Drehscheibe aufzuzeichnen, der kann sich gerne einbringen.
Hier gibt es gute MP3-Dateien von Drehscheiben-Sounds, die als Ausgangspunkt eine gute Basis bilden und ggf. bearbeitet/getuned werden müssen:
[[https://modellbahn.holgerlauer.de/]]
[[https://www.digitalzentrale.de/download/MP3_Sound.zip|Link digitalzentrale.de]]\\
===== Wie kann ich Sounds bearbeiten? =====
Für das Bearbeiten von mp3, wav oder ähnlichen Formaten eignet sich das kostenlose Programm Audacity [[https://www.audacity.de/]]. Hierfür gibt es im Netz gute Beschreibungen und Tutorials.
===== Welche Lautsprecher sind geeignet? =====
Als Lautsprecher muss ein 8 Ohm, 3 Watt Modell verwendet werden.\\
\\
Je nach verfügbarem Platz und Einbauort gibt es die unterschiedlichsten Lautsprecher-Größen, von winzig wie einem ESU-Brüllwürfel für den Einbau in Loks bis hin zu größeren Modellen mit mehreren cm Durchmesser.
----
===== Sketch-Version V1.0 =====
Die Sketch-Version V1.0 unterstützt nur das **JQ6500**-Soundmodul.
==== Initialisierung des JQ6500 und Hochladen von Soundfiles ====
{{ bilder:anleitungen:bauanleitungen:150:locoturn_v10:jq6500.jpg?nolink |}}
==== Soundfiles auf dem JQ6500 ====
Für Drehscheibenbewegungen sollten 3 Soundfiles auf dem JQ6500 abgespeichert werden, aktuell werden davon nur 1 und 3 genutzt:
* Sound 1 (= file 1) --> gesampeltes File bestehend aus Hupen, Anfahren und Fahren. Je nach Drehgeschwindigkeit und gewünschter Soundlänge (sollte schon ein paar Minuten dauern) muss der Fahrsound mehrfach hintereinander ins File kopiert werden (z.B. mit dem Programm //Audacity//)
* Sound 2 (= file 2) --> Abbremsen und Stopp (aktuell nicht im Einsatz, da Pause zwischen den sounds zu lange!)
* Sound 3 (= file 3) --> Hupen
Folgende #defines sind wichtig:
#define SOUND1_FILENR 1 // sound/file number of JQ6500 for turntable start and running (Hupe, Anfahren und Drehen)
#define SOUND2_FILENR 3 // sound for turntable stop (aktuell nur die Hupe)
Es können bei Bedarf noch weitere Sounds auf das JQ6500 gespielt werden, diese lassen sich dann über DCC-Befehle abspielen. Die Auswahl erfolgt über die #defines:
#define DCC_SOUNDFILE_1 1 // File-Nr. auf dem Soundmodul, das abgespielt wird mit dem entsprechenden DCC-Befehl
#define DCC_SOUNDFILE_2 2 // J6500; Dateien stehen im Rootverzeichnis, Reihenfolge geht nach Reihenfolge des Kopierens auf das Modul
#define DCC_SOUNDFILE_3 3 // DFPlayer: Dateien müssen im \mp3-Folder stehen, Nomenklatur 0001_beliebiger Text (4-stellige Nummer, führende Nullen + sprechender Text)
#define DCC_SOUNDFILE_4 4
#define DCC_SOUNDFILE_5 5
#define DCC_SOUNDFILE_6 6
----
===== Sketch-Version ab V1.1 =====
Die Versionen V1.1 und höher verwenden entweder das **JQ6500**-Soundmodul oder den **DFPlayer**.
In der Turntable_config.h muss das gewünschte Soundmodul beim **#define USE_SOUNDMODULE** hinterlegt werden:
#define DFPLAYER 1 // mit DS-Kartenslot
#define JQ6500 2 // 2MB Speicher onboard
#define USE_SOUNDMODULE DFPLAYER //JQ6500 Auswahl des verwendeten Soundmoduls
Auf das JQ6500-Modul passen 2 MByte mp3-Files, das reicht bei guter Sampling-Rate für mehrere Minuten Sounds.
Der DFPlayer verfügt über einen Micro-SD-Karten-Slot und unterstützt Karten bis 32 GByte (kleinere Karten bekommt man fast nicht mehr :-D). Hier kann man hohe Sampling-Raten verwenden und etwas verschwenderischer mit dem Speicherplatz umgehen.\\
\\
Allerdings sind die DFPlayer etwas heikel: Es gibt verschiedene Versionen mit unterschiedlichem Chipsatz, die auch noch verschiedene Firmware-Versionen aufgespielt haben. Ich habe nicht alle Kombinationen getestet, daher kann es sein, dass das euer eingebautes Modul nicht mit dem Sketch funktioniert! Da hilft nur ausprobieren; bei ein paar € pro DFPlayer hält sich der finanzielle Verlust in Grenzen.
----
===== Auswahl des Soundmoduls auf der Platine =====
Je nach Platinenversion muss das verwendete Soundmodul entweder über einen Lötjumper oder einen Workaround ausgewählt werden.
==== Lötjumper (Platine V1.1) ====
Ab Platinenversion V1.1 gibt es einen 3-fach Jumper JP17 "Sound". Dieser liegt unter dem Nano-Steckplatz. Der Jumper muss entsprechend des verwendeten Soundmoduls mit Lot überbrückt werden. Entweder die linken beiden Lötpunkte (JQ6500) oder die rechten beiden (DFPlayer).
{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:locoturn_v1.1_sound.jpg?nolink |}}
==== Notwendiger Workaround für Verwendung des DFPlayers (Platine V1.0) ====
Die Platine V1.0 unterstützt standardmäßig nur das JQ6500-Modul. Daher muss mann bei der Platine V1.0 den DFPlayer mit einem Workaround anschließen, da er nicht wie der JQ6500 an der hardware serial, sondern an einer software serial Schnittstelle betrieben wird:
- Hierfür muss entweder der 1kOhm Widerstand (R21 - dieser würde für das JQ6500 benötigt) von den RX-Pins der beiden Soundmodule entfernt werden (bzw. man baut ihn von Anfang an nicht ein) oder man unterbricht eine Leiterbahn (siehe Abbildung).
- Weiterhin ist ein separater 1k-Widerstand zur Verbindung des SoftwareSerial TX Pins (D12) des Nanos und des RX-Pins von DFPlayer erforderlich. Diesen lötet man am besten auf der Rückseite auf (Vorsicht, dass dabei kein Kurzschluss entsteht!)
{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:dfplayer_workaround.jpg?nolink |}}
{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:img_3280.jpeg?nolink |}}{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:img_3281.jpeg?nolink |}}
Der DFPlayer wird softwaremäßig über eine serielle Schnittstelle angesteuert. Es kann sein, dass sich die Ansteuerung mit der MobaLedLib-Schnittstelle in die Quere kommt. Dies wurde bislang nicht getestet!
----
==== Sound-Möglichkeiten ====
Beim Abspielen von Sounds bestehen zwei Möglichkeiten, die über das **#define ADVANCED_SOUND** gesteuert werden:
* Die "einfache" Version (**#define ADVANCED_SOUND 0**) spielt zwei Sounds ab, einen langen beim Starten der Bewegung (das soundfile beinhaltet Hupen, Anfahren und Fahren und sollte schon ein paar Minuten dauern) und den zweiten beim Stoppen (Hupen); ein separater Bremssound ist nicht verfügbar. Dies liegt daran, dass das JQ6500 dummerweise eine kurze Pause zwischen 2 unterschiedlichen Sounds macht (mehrere ms). Diese Pause ist wahrnehmbar und fällt bei Abspielen des Bremssounds auf, ist aber bei einem abschließenden Hupen verschmerzbar.
* Die erweiterte "advanced" Version (**#define ADVANCED_SOUND 1**) berechnet anhand der Fahrtdauer (= Entfernung zwischen Start- und Zielport) das abzuspielende Soundfile und startet einen entsprechend langen Sound, hierfür brauchen wir mehrere passgenaue Files auf dem Soundmodul. Jedes File enthält Hupen, Anfahren, Fahren, Bremsen bis zum Stopp und abschließendes Hupen. Der variable Anteil ist das Fahrgeräusch, das muss so lang sein, dass es für die entsprechende Fahrtstrecke reicht. Da hier lediglich ein MP3-Player verbaut und kein Loksounddekoder mit komplexen Soundstrukturen in einem Soundprojekt, muss man etwas in die Trickkiste greifen, um einen bewegungssynchronen Sound zu erreichen.
**Empfehlung**: \\
Für die einfache Version reicht ein JQ6500 aus. Um erste Erfahrungen zu sammeln, sollte man damit starten.
Wer unbedingt einen Bremssound beim Abbremsen der Bühne kurz vor dem Zielport haben möchte, kommt um die advanced Version nicht herum.
Diese ist etwas aufwendiger, da mehrere passende Soundfiles erzeugt werden müssen. Aufgrund des Speicherbedarfs ist hierfür nur der DFPlayer zu empfehlen.
----
==== Einfache Sound-Version ====
Für Drehscheibenbewegungen sollten 3 Soundfiles auf dem Soundmodul abgespeichert werden, aktuell werden davon nur 1 und 3 genutzt:
* Sound 1 (= file 1) --> gesampeltes File bestehend aus Hupen, Anfahren und Fahren. Je nach Drehgeschwindigkeit muss der Fahrsound mehrfach hintereinander ins File kopiert werden (z.B. mit dem Programm //Audacity//). Die Dauer sollte mehrere Minuten betragen, damit der Sound auch beim Endlosdrehen mit Poti einige Zeit ertönt.
* Sound 2 (= file 2) --> Abbremsen und Stopp (aktuell nicht im Einsatz, da Pause zwischen den Sounds zu lange!)
* Sound 3 (= file 3) --> Hupen
Folgende #defines sind wichtig:
#define SOUND1_FILENR 1 // sound-file number of JQ6500/DFPlayer for turntable start and running (Hupe, Anfahren und Drehen)
#define SOUND2_FILENR 3 // sound for turntable stop (aktuell nur die Hupe)
Es können bei Bedarf noch weitere Sounds auf den DFPlayer gespielt werden, diese lassen sich dann über DCC-Befehle abspielen.
----
==== Advanced Sound-Version ====
Für die advanced Version benötigt man mehrere Soundfiles und zwar je ein File für jede Fahrmöglichkeit zwischen Start- und Zielport. Aufgrund der benötigten Datenmenge bei annehmbaren Sampling-Raten ist diese Version nur mit dem DFPlayer und einer entsprechenden Speicherkarte sinnvoll zu nutzen!
=== Wieviele Soundfiles braucht man? ===
Üblicherweise liegen die Ports einer Drehscheibe in einem bestimmten Raster. Die folgenden Ausführungen beziehen sich auf eine Fleischmann-Drehscheibe. Diese besitzt maximal 48 Gleisabgänge, die im 7.5°-Raster angeordnet sind. Das Raster, auf das sich die Entfernungen zwischen Start- und Zielport beziehen, ist in **#define MAX_PORTS** festgelegt (bei Fleischmann = 48).\\
\\
Die Fahrtdauer ist immer ein ganzzahliges Vielfaches der Fahrtzeit, die die Bühne für eine Rastereinheit von 7,5°, d.h. einen Port benötigt.\\
\\
Die Abbildung zeigt einige beispielhafte Fahrtdauern zwischen Start- und Zielport.
{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:ports2go.jpg?nolink |}}
Man muss nun prüfen, welche Entfernung zwischen allen möglichen Start- und Zielportkombinationen liegen, also wieviele Raster bzw. potentielle Gleisabgänge die Drehscheibe jeweils fahren muss. Das erinnert ein bisschen an frühere ADAC-Entfernungstabellen zwischen Städten.
Bei der Drehscheibe in der Abbildung hat man folgende Fahrtdauern:
^Start ^Ziel ^Dauer in Ports (7,5°-Raster)^
|1 |2|1|
|1 |3|2|
|1 |4|4|
|1 |5|7|
|... |...|...|
|2 |3|1|
|2 |4|3|
|2 |5|6|
|... |...|...|
Die Drehscheibe wählt bei LocoTurn immer den kürzesten Weg zum Zielport. Daher dreht sich die Bühne maximal um 180°, also eine halbe Umdrehung. Es reicht daher aus, 24 fahrtdauerabhängige Sounds zu definieren, um alle Fahrtmöglichkeiten abzudecken.
Als Maximalausprägung braucht man bei einer Fleischmann-Drehscheibe mit 48 Abgängen folglich 24 fahrtdauerabhängige Sounds plus die 3 Standard-Soundfiles, um alles abzudecken. Wer also zu faul ist zu zählen, welche Kombinationen auf der Drehscheibe überhaupt auftreten, ist mit 24 +3 Sounds auf der sicheren Seite.
Bei der kleinen Fleischmann-Drehscheibe mit 24 Gleisabschlüssen braucht man 12 + 3 = 15 Sounds.
Folgende Sounds werden benötigt:
^Nr. ^Zweck^
|1| Hupen, Anfahren, Fahren (lange Version (5 min) für Endlos-Drehen)|
|2| //Bremsen (wird aktuell nicht benutzt!)//|
|3| Hupen|
|4| Hupen, Anfahren, Fahren, Bremsen, Hupen; Fahrtdauer 1 x 7,5°(1 Port)|
|5| Hupen, Anfahren, Fahren, Bremsen, Hupen; Fahrtdauer 2 x 7,5° = 15° (2 Ports)|
|6| Hupen, Anfahren, Fahren, Bremsen, Hupen; Fahrtdauer 3 x 7,5° = 22,5° (3 Ports)|
|...|...|
|26| Hupen, Anfahren, Fahren, Bremsen, Hupen; Fahrtdauer 23 x 7,5° = 172,5° (23 Ports)|
|27| Hupen, Anfahren, Fahren, Bremsen, Hupen; Fahrtdauer 24 x 7,5° = 180° (24 Ports) entspricht halber Drehung (dieses File wird auch auch bei U-Turn verwendet)|
== Sonderfälle ==
* Wird eine DS-Bewegung mittendrin abgebrochen (durch Drücken der Drehencoder-Taste oder via DCC-Befehl), ertönt die Hupe. Es gibt keinen Bremssound. Die Bühne bleibt irgendwo stehen.
* Fährt man wieder zu einem anderen Port nach einem solchen Stopp, ist u.U. nicht klar, wie lange die Fahrt dauert, da die DS ja im Nirwana, d.h. auch genau zwischen 2 Ports stehen kann. In diesem Fall wird beim Starten das lange File 1 abgespielt und beim Zielport lediglich die Hupe. Es gibt keinen Bremssound. Steht die DS in der Nähe eines Ports (+/- 10 Mikrosteps), wird jedoch der fahrtdauerabhängige Sound abgespielt.
* dito. bei Poti-Bewegung und anschließender neuer Fahrt mit Encoder oder via DCC etc.
* Bei Endlosdrehen CW/CCW wird immer das lange Sound-File Nr. 1 abgespielt (5 min ohne Bremsen und ohne Hupe am Ende). Beendet man das Endlosdrehen, wird die Hupe abgespielt.
* Bei U-Turns wird immer das File Nr. 27 gestartet, da die Bühne immer 24 Ports (= halbe Umdrehung) fährt.
== Abhängigkeiten ==
Wenn man advanced sound verwendet, dann sollte man das **#define ENCODER_LOGIC** auf 1 setzen.
* ENCODER_LOGIC = 0: macht hier keinen Sinn, der Sound würde nach jedem Encoder-Drehen neu starten (Soundfile 4, Bewegung um ein Raster), was keinen bewegungssynchronen Sound ergeben würde.
* ENCODER_LOGIC = 1: da hier die DS erst nach Bestätigung losfährt, kann auch der richtige Sound berechnet und abgespielt werden!
----
=== Erzeugung der Soundfiles ===
Zur Erzeugung der Soundfiles braucht man:
* geeignete Drehscheiben-Sounds (siehe die Links oben)
* eine (kostenlose) Software zur Bearbeitung von mp3, wav etc. files, z.B. Audacity
* Geduld zum Zusammenstellen der notwendigen Sounds
Zunächst bastelt man sich ein sehr langes File zusammen, bestehend aus:
* Hupen
* Anfahren/Beschleunigen
* Fahren --> das ist der variable Teil !
Das Fahrgeräusch kopiert man hierfür mehrfach hintereinander in das lange Soundfile, damit es ca. 5 min lang dauert. Dieses File brauchen wir später auch als File 1 (siehe oben).
{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:audacity_grundsound.jpg?nolink |}}
Weiterhin brauchen wir ein zweites File, das folgendes enthält:
* Abbremsen
* und ggf. abschließendes Hupen
{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:abbremsen.jpg?nolink|}}
----
=== Dauer der Soundfiles ===
Dann muss man auf der realen Drehscheibe messen, wie lange der Sound dauern muss, um die jeweilige Fahrt vom Start- zum Zielport abzudecken. Dies hängt ab von der Steppermotor-Geschwindigkeit (**#define MOVE_SPEED1**) und der Anfahr-/Bremsrampe (**#define STEPPER_RAMP_LENGTH**). Bevor man die Sounds erzeugt, sollte man diese beiden Parameter final festgelegt haben, sonst muss man die ganze Soundbastelarie erneut durchführen.
Ändert man später im Betrieb die Geschwindigkeit (z.B. über der seriellen Monitor oder DCC-Kommandos), dann passen die soundfiles natürlich nicht mehr zum Bewegungsablauf. Der Sound wird folglich entweder zu früh fertig sein, oder zu spät aufhören!
Zur Messung der Fahrtdauern kann man im Turntable_config.h das **#define FAHRTDAUER_MESSEN** aktivieren, um die Dauer im seriellen Monitor ausgeben zu lassen. \\
\\
Anschließend speichert man die Werte am besten in einem Excel und kann dann recht einfach berechnen, welche Soundanteile erforderlich sind, um eine bestimmte Fahrtdauer abzudecken. \\
\\
Da es nicht auf die ms ankommt, werden die Dauern gerundet. Das reine Fahren sollte einen linearen Verlauf haben und proportional zur Anzahl fahrender Drehscheiben-Raster sein.
Bei mir dauern die einzelnen Soundbestandteile z.B.:
{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:zeitanteile.jpg?nolink&600 |}}
{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:dauer_excel.jpg?nolink |}}
Das Excel-File steht hier zur Verfügung: {{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:berechnung_fahrtdauerabhaengige_sounds.xlsx |}}
Aus dem langen Maximal-File nimmt man dann den jeweiligen Anteil in ms (im Excel Spalte „Länge ab Start“), kopiert ihn in ein neues Audacity file und fügt am Ende den Bremsen + Hupen Sound aus dem zweiten File ein.
Dann noch als mp3 File abspeichern, mono reicht aus und schon hat man ein entsprechendes Soundfile, um von A nach zu B zu fahren.
Das ganze macht man nun noch 23 Mal, bis man alle Möglichkeiten abgedeckt hat.
Hier als Beispiel das Soundfile, um 5 Ports weit zu fahren (also 5 x 7,5°):
{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:5_ports.jpg?nolink |}}
=== Speicherung der Soundfiles ===
Die Dateien speichert man auf einer SD-Karte in einem Verzeichnis "Laufwerk:\mp3\" ab.\\
Die Dateien werden durchnummeriert, 4-stellig, führende Nullen, Rest vom Dateinamen kann anderweitig genutzt werden, um dem Sound einen sprechenden Namen zu geben:
{{ :bilder:anleitungen:bauanleitungen:150:locoturn_v10:sd-karte_files.jpg?nolink |}}
Es können bei Bedarf noch weitere Sounds auf den DFPlayer gespielt werden, diese lassen sich dann über DCC-Befehle abspielen. Die Auswahl erfolgt über die #defines:
#define DCC_SOUNDFILE_1 1 // File-Nr. auf dem Soundmodul, das abgespielt wird mit dem entsprechenden DCC-Befehl
#define DCC_SOUNDFILE_2 2 // J6500; Dateien stehen im Rootverzeichnis, Reihenfolge geht nach Reihenfolge des Kopierens auf das Modul
#define DCC_SOUNDFILE_3 3 // DFPlayer: Dateien müssen im \mp3-Folder stehen, Nomenklatur 0001_beliebiger Text (4-stellige Nummer, führende Nullen + sprechender Text)
#define DCC_SOUNDFILE_4 28
#define DCC_SOUNDFILE_5 29
#define DCC_SOUNDFILE_6 30
----