Kopfhörer Schaltkontakt Masse wenn gesteckt

Hallo zusammen.

Ich habe einen vorhandene 3,5mm Klinke Buchse auf einer Platine den ich gerne nutzen möchte. Hier wird die Masse vom Klinkestecker bei gesteckt auf einen weiteren Schalt-Kontakt gelegt.

Sprich Masse an PinX wenn Stecker gesteckt.
Kontakt PinX offen wenn Stecker frei.

Ich möchte diesen gerne mit dem Dac vom DFPlayer verbinden was ja hier für mich kein Problem darstellt.

Wie kann ich das mit dem PinX Kontakt lösen das wenn gesteckt (Masse liegt an) die Lautsprecher abgeschaltet werden und der Arduino auf Kopfhören mit Separater Lautstärkeneinstellung umschaltet.

Die Klinkebuchse soll auf jeden Fall mit Stereo Dac versorgt werden.

Schon mal vielen Dank für eure Hilfe.

Schau mal hier:

@Thomas-Lehnert hat da eine Schaltung verlinkt.

Hier habe ich mal die Bauteile der Platine durchgemessen und einen Schaltplan erstellt.

Ich möchte gerne nur diese eine Buchse nutzen. Ist es nicht möglich mit deM geschalteten GND dieser Buchse das ganze zu verwirklichen?

@Thomas-Lehnert hättest du da eine Idee?

Du kannst mit deiner Buchse einen Pin auf Ground ziehen und daher wie mit einem Taster den Arduino zu einer Aktion auffordern. Es ist aber so, dass der MP3 Player einfach R/L und Spk1/2 immer befeuert. Da bringt dir das recht wenig.

Die Lösung dafür steckt in einer Buchse, die Hardwareseitig Spk1/2 trennt.
Das kann deine leider nicht.
Eine Lösung den Verstärker über Software zu entkoppeln ist mir nicht bekannt.

:wink:

Okay also mit zusätzlicher Hardware.

Also man könnte einen Pin des Arduino durch das einstecken auf GND ziehen und dann einen anderen Pin ansteuern, der etwa über Mosfets den Lautsprecher trennt.
Vlt. Geht es sogar direkt (ohne den Arduino) mit einem passenden Mosfet und einer entsprechenden Schaltung.

So eine Lösung hatte ich anfangs nicht bedacht (sorry), weil ich an eine Lösung ohne weitere Hardware dachte.

Grundsätzlich ist alles möglich. Wenn du eine getrennte Lautstärkeeinstellung für den Lautsprecher und die Kopfhörer haben willst geht nur entweder oder. Das heißt: Abhängig vom Pegel des Sens-Signals von der KH Buchse, legst du den Volume-wert über die Software fest. Du könntest dann z.B. den aktuellen Volume-wert der bei aktivem Lautsprecher benutzt wird als Standartwert lassen, wie in der Original Software vorgesehen. Wird ein eingesteckter Kopfhörer erkannt kannst du über die Software festlegen, dass z.B. nur noch volume-geteilt durch 2 oder 3 als Lautstärke wert aktiv ist. Wird der Kopfhörer wieder abgezogen geht der Volume wert wieder auf den alten Wert zurück. Hier ist aber zusätzlich eine Hardwareerweiterung nötig um den Lautsprecher abzuschalten. Z.B. die Lösung mit den zwei MosFets, die ich auch verwende. Alternativ kann man aber auch mit einem geeigneten Miniaturrelais arbeiten, das aber wieder extra Strom verbraucht.

Vielen Dank für die vielen Vorschläge.

@Thomas-Lehnert

Wo finde ich die Erweiterung der Programmierung für Abschaltung und Kopfhörer Erkennung wenn Masse bei gesteckt?
Würde es dann so machen mit zwei Mosfets

Hier sollte der Code verlinkt sein

Hallo alle zusammen
Ich habe mal die entscheidenden Stellen aus meinem Code herausgezogen.
Hoffe dass ich nichts vergessen habe. Wichtig die Zeilen wo die Variable Ear ausgelesen wird so anpassen, dass die Pegel die die KH Platine liefert richtig eingetragen werden, Also entweder HIGH oder LOW. Kommentare beachten.
Die Elemente die zur Steuerung über den Wecker dienen sind hier herausgenommen.

//Am Anfang die Defines setzen
// -------------------------------------------------------------------------------------------------
#define SpkOnOff              // Aus und Einschalten des Lautsprechers über MOSFET's
                              // zur Unterdrückung des Einschaltgeräusches und 
                              // Möglichkeit der Abschaltung beim Anschluss eines Kopfhörers
                              // Hardwareerweiterung erforderlich: (Abschaltung des Lautsprechers über MOS-FET's)
// ------------------------------------------------------------------------------------------------      
#define EarPhone              // Abschaltung des Lautsprechers über Software, wenn Kopfhörer angeschlossen sind
    #ifdef EarPhone           // Hardwareerweiterung erforderlich: (Kopfhöerbuchse mit Schaltkontakten, oder Kopfhöreranschlussplatine)
       #ifndef SpkOnOff       // wenn SpkOnOff nicht aktiviert ist, wird diese Funktion automatisch mit aktiviert
        #define SpkOnOff      // Hardwareerweiterung erforderlich: (Abschaltung des Lautsprechers über MOS-FET's)
       #endif
    #endif  
// --------------------------------------------------------------------------------------------------
// Pin Deklarationen

#ifdef EarPhone
  #define EarPhonePin A5            // Kontrollpin Kopfhörer angeschlossen
#endif
#ifdef SpkOnOff
  #define SpkOnPin 6                // Lautsprecher Ein/Aus, Steuersignal zu den MosFets
#endif

//---------------------------------------------------------------------------------------------------
// Variablen

#ifdef SpkOnOff
  bool SpkisOn = false;             // Marker Lautsprecher Ein/Aus, Voreinstellung Aus
#endif
#ifdef EarPhone
  int Ear;                          // Abfrageergebnis Pinabfrage EarPhonePin
#endif

// ************************* Kopfhörer *************************************************

// ************** Lautsprecher abschalten wenn Kopfhörer angeschlossen *******************
 
 
#ifdef EarPhone
void Earphone ()
{ 
 Ear = digitalRead(EarPhonePin);  // Auslesen Status EarPhonePin
 
 if(Ear == HIGH)                  // Wenn Kopfhörer eingesteckt , Je nach Hardwarekonfiguration der KH-Platine ggf auf LOW ändern 
  {
   if(SpkisOn == true)            //wenn Lautsprecher eingeschaltet
    {
                  
       SpkOff();                  // Lautsprecher Ausschalten
     
    }
  }

  //************ Lautsprecher einschalten wenn Kopfhörer getrennt *************************
  
 if(Ear == LOW)                   //wenn kein Kopfhörer angeschlossen ,Je nach Hardwarekonfiguration der KH-Platine ggf auf HIGH ändern
  {
    
    if(SpkisOn == false)          //Lautsprecher ausgeschaltet?
    {
     SpkOn();                     // Lautsprecher Einschalten
    }
  }
}
 #endif
 
// ************************** Lautsprecher über Software an und Ausschalten *****************************************

// **************************Speaker On *******************
#ifdef SpkOnOff
void SpkOn()
 {
  digitalWrite(SpkOnPin, HIGH);                               // Lautsprecher über Mosfets Einschalten
  Serial.println(F("Kopfhörer getrennt! "
                  "Lautsprecher wird eingeschaltet!"));
  SpkisOn = true;
 }
#endif

// **************************Speaker Off *******************
#ifdef SpkOnOff
void SpkOff()
 {
  digitalWrite(SpkOnPin, LOW);                                // Lautsprecher über Mosfets Ausschalten
  Serial.println(F("Kopfhörer angeschlossen! "
                  "Lautsprecher wird ausgeschaltet!"));
  SpkisOn = false;
 }
#endif

      
#ifdef SpkOnOff
  void SpkrOnOff()
  {
  #ifndef EarPhone  
    SpkOn();                                                  // Lautsprecher über Mosfets Einschalten
  #endif
  }
#endif  

//************************************************************************************
// Im Setup
#ifdef EarPhone
  pinMode (EarPhonePin,INPUT_PULLUP);   // Eingang,Sensor ob Kopfhörer angeschlossen?
#endif

#ifdef SpkOnOff
  pinMode(SpkOnPin, OUTPUT);            // Ausgang Lautsprecher-Einschaltsignal
  digitalWrite(SpkOnPin, LOW);          // Voreinstellung - Speaker Off
#endif


// Im setup vor abspielen des welcom sounds

  //  ******************* Lautsprecher einschalten ***Hardwareerweiterung erforderlich *****
#ifdef SpkOnOff

  SpkrOnOff();
 
#endif  

//************************************************************************************
// IM Loop am Anfang hinter do {

 #ifdef EarPhone
    Earphone ();
  #endif

Macht es mehr Sinn den IRFML8244TRPBF mit R DS 0,041 Ohm zu nutzen statt dem IRLML2502PbF mit R DS 0,045 Ohm?

Zur Programierung. Wo muss ich diese im Sketch einfügen und was muss ich ausklammern. Ist für mich Neuland.

Möchte als Erweiterung die Abschaltung der Spk beim einschalten nutzen und den Kopfhöreranschluss welcher GND liefert wenn Klinke gesteckt ist incl. Separater Lautstärken Begrenzung / Konfig beim Kopfhörer.

Welchen MosFet du von den beiden Typen verwendest, macht keinen signifikanten Unterschied. Der Unterschied des RDSon beträgt 4 tausendstel Ohm. Da hat eine Lötstelle mehr widerstand.
Wo du was im Code einfügen musst ist im Codeauszug direkt erklärt.
Bei der Funktion Lautsprecher ausschalten wenn Kopfhörer eingesteckt,
musst du die Zeile
if(Ear == HIGH) // Wenn Kopfhörer eingesteckt , Je nach Hardwarekonfiguration der KH-Platine ggf auf LOW ändern

Ändern in
if(Ear == LOW) // Wenn Kopfhörer eingesteckt , Je nach Hardwarekonfiguration der KH-Platine ggf auf HIGH ändern

und
bei Lautsprecher einschalten wenn Kopfhörer getrennt

if(Ear == LOW) //wenn kein Kopfhörer angeschlossen ,Je nach Hardwarekonfiguration der KH-Platine ggf auf HIGH ändern

ändern in

if(Ear == HIGH) //wenn kein Kopfhörer angeschlossen ,Je nach Hardwarekonfiguration der KH-Platine ggf auf LOW ändern

weil du das sensorsignal der Kopfhörerbuchse auf Low bei eingestecktem KH gesetzt hast.

Super vielen Dank das hatte ich mir schon gedacht. Vielen Dank für die Bestätigung.

Kannst du mir deinen Schaltplan ein wenig erläutern?

Wofür sind die Transistoren, den 4093 und auch den Levelshifter? Störgeräusche hattest du denke ich mal keine aufgrund des weggelassenen Widerstand 1K im RX?

Greifst du auch über USB auf die SD Karte zu? Waren hier keine 27 Ohm Widerstände nötig?

Un die Dioden vor den Tastern dienen als Pull down bzw. Pull Up

Achso und wo ist in der Programmierung hinterlegt das die Lautsprecher zur Unterdrückung des Einschaltgeräuch erst verspätet zugeschaltet werden?

Q1 und das IC 4093 nebst RC Beschaltung sind für das Einschalten über die Bedientasten, und die automatische Abschaltung über den Standbytimer.
Der Levelshifter übersetzt die Signale zwischen Arduino und RFID-Modul und DF-Player von der 5V Ebene auf die 3,3V Ebene und umgekehrt. deshalb ist auch der 1k Widerstand entfallen.

Die Störgeräusche beim Einschalten werden über die Softwaremäßige Ab bzw Zuschaltung des Lautsprechers unterdrückt. Hierbei ist das Timing im Setup wichtig. Beim Hochfahren des Tonuino ist der Lautsprecher auf Aus voreingestellt. Erst unmittelbar vor abspielen des welcome sounds am Ende des Setup wird er eingeschaltet. Als Schalter fungieren hier Q3 und Q4. Der Q2 schaltet lediglich die 5V Betriebsspannung für die USB-Buchse wenn das Abspielen von einem USB-Stick gewünscht ist. Ich nutze dieses feature aber nicht mehr, da es ziemliche Verzögerungen und Träges Reagieren des Tonuino verursacht hat. Vielleicht Typabhängig vom USB-Stick.
Zugriff auf die USB-Karte zum Bearbeiten über USB nutze ich nicht, da zu langsam.

Un die Dioden vor den Tastern dienen als Pull down bzw. Pull Up

Nein diese Dioden entkoppeln die Taster voneinander, da ich alle Taster zum Einschalten benutze. Sie verhindern, dass sich die Taster gegenseitig über die Einschaltleitung beeinflussen.

Achso und wo ist in der Programmierung hinterlegt das die Lautsprecher zur Unterdrückung des Einschaltgeräusch erst verspätet zugeschaltet werden?

Das ist das schon angesprochene Timing im Setup.

Der Schalter in der 5V Leitung von der Powerbank ist als Mainswitch gedacht, um den Tonuino auch komplett ausschalten zu können. Die Automatische Abschaltung und das wiederauffwecken der Powerbank funktionieren mit der Schaltung 4093 und Q1. Ich nutze die Intenso 10000S von Amazon.

@Thomas-Lehnert

Wow super vielen Dank für die tolle Erklärung und deine Zeit zum Antworten.
Mit der Abschaltung der Lautsprecher funktioniert super.

Jetzt hätte ich noch mehrere Frage.

Frage1:
Wie kann ich den Einschaltsound ohne Weckerfunktion nutzen?
Weckerfunktion benötige ich nicht und habe ich auch nicht in der Schaltung mit integriert.

Frage 2:
Standby Timer. Wann greift dieser? Wenn keine Musik läuft?
Funktioniert dieser nur mit MOSFET switch oder Pololu oder kann ich auch ohne beides den Arduino incl. DFPlayer in den Sleep schicken um Strom zu sparen?
Und mit einem Hauptswitch zum aktivieren wieder aus / einschalten.

Frage 3:
Die Einstellung der Min/Max Laufstärke.

Ist diese bei aktivem Kopfhörer und ohne verschieden?
Bzw. ist sie in deiner
Tonuino-DEV-alwaysQueue_maxAusstattung-20-08-18 integriert?

Besteht die Möglichkeit einer Hinterlegung der Startlautstärke (Gestecklautstärke) separat im Admin Menü sobald / nach eingesteckten Klinkenstecker?
Beispiel wenn der Klinkeausgang als Line-Out genutzt wird.
Hier muss ich nach einstecken vorher immer lauter auf Max stellen.

Aber wenn ich Ihn ausziehe ist der Lautsprecher dann auch laut.
Wäre schön wenn nach dem ausstecken wieder die Ursprungslautstärke gesetzt wird oder alternativ die im Admin Menü hinterlegte Einschaltlautstärke.

Vielen Dank für die Mühe

Hallo @Jumi
Hier die Antworten auf deine Fragen.

Frage1:
Wie kann ich den Einschaltsound ohne Weckerfunktion nutzen?
Weckerfunktion benötige ich nicht und habe ich auch nicht in der Schaltung mit integriert.

Wenn du bei den #defines am Anfang des scetches die Weckerfunktion in Kommentar setzt " // " wird dieser Programmteil nicht mit aufgespielt. Den Einschaltsound configurierst du im Adminmenü bei den Shortcuts.

Frage 2:
Standby Timer. Wann greift dieser? Wenn keine Musik läuft?
Funktioniert dieser nur mit MOSFET switch oder Pololu oder kann ich auch ohne beides den Arduino incl. DFPlayer in den Sleep schicken um Strom zu sparen?
Und mit einem Hauptswitch zum aktivieren wieder aus / einschalten.

Der Standbytimer wird immer automatisch gestartet, wenn nichts abgespielt wird.
Der Tonuino wird immer in den Stromsparmodus versetzt, unabhängig davon ob eine Hardware zum Abschalten vorhanden ist. Dann wie beschrieben mit dem Hauptswitch die Powerbank wieder aufwecken zum Einschalten.
Hier noch ein Hinweis. Im Standbytimer ist bei meiner Software mp3.sleep auskommentiert. Das durch entfernen der Kommentarzeichen wieder aktivieren, so dass der mp3 Player auch in den Stromsparmodus geht.

Frage 3:
Die Einstellung der Min/Max Laufstärke.

Ist diese bei aktivem Kopfhörer und ohne verschieden?
Bzw. ist sie in deiner
Tonuino-DEV-alwaysQueue_maxAusstattung-20-08-18 integriert?

Diese Einstellungen entsprechen der original Dev und wurden nicht verändert. D.h. Die Lautstärke wird nicht differenziert nach Lautsprecher oder Kopfhörer.

Besteht die Möglichkeit einer Hinterlegung der Startlautstärke (Gestecklautstärke) separat im Admin Menü sobald / nach eingesteckten Klinkenstecker?
Beispiel wenn der Klinkeausgang als Line-Out genutzt wird.
Hier muss ich nach einstecken vorher immer lauter auf Max stellen.

Das kann man sicher leicht im Code integrieren. Dazu muss im Adminmenü ein extra Menüpunkt in den Lautstärkeeinstellungen integriert werden. Der dabei gespeicherte Wert in mySettings muss dann bei gestecktem Lineout dem volume zugewiesen werden.

Aber wenn ich Ihn ausziehe ist der Lautsprecher dann auch laut.
Wäre schön wenn nach dem ausstecken wieder die Ursprungslautstärke gesetzt wird oder alternativ die im Admin Menü hinterlegte Einschaltlautstärke.

Dass muss dann auch als volumewert in der Funktion Ear zugewiesen werden.