Audiostehle mit DFPlayer mini friert ein

Hallo Liebes Forum,
ich bin blutiger Anfänger in der Arduino Welt habe jedoch ein Projekt, welches ich gern damit umsetzten würde.

Ich arbeite in einem Museum in welchem Audostehlen zu finden sein sollen bei welchen per Knopfdruck eine MP3 Datei abgespielt werden soll. Hierbei kommen diese Audiostationen mit 1 bis 4 Knöpfen aus für 1-4 unterschiedliche Audiodateien. Jeweils zusätzlich ein Stop Knopf.

Umgesetzt werden soll es mit einem Nano und einem DFPlayer Mini.
Soweit so gut und es funktioniert auch grundsätzlich allerdings friert gefühlt der Nano nach einer nicht definierbaren Zeit ein und reagiert nicht mehr auf die Knopfdrücke und ich hab keine Ahnung warum. Vielleicht könnt ihr mir als Arduino Newbee zumindest sagen ob ich in der mir erarbeiteten Programmierung einen Fehler habe.

/*
Control a DFRobotDFPlayerMini with a Arduino and buttons conectet to GND. Each button plays one track 
and one button stop the playing. Volume is controlled by a potentiometer.

*/
// DFRobotDFPlayerMini - Version: Latest 
#include <DFRobotDFPlayerMini.h>
#include <SoftwareSerial.h>
SoftwareSerial mySoftwareSerial(15,14); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
//volume Potentiometer
int Potti = A5; //Datapin of the potentiometer
int PottiValue = 0;
int PottiValueOld = 0;
//Play Buttons
int ButtonPin[] = {12,11,10}; //Array of Digital Pins witch in Use 
int mp3Nummber[] = {1,2,3};//Deffinine the Soudnumbers for each Pin above
int Stop = 9; // the Stopbutton Pin
//Variabels
int i = 0;
int x = 0;

void setup() 
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);

  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
  
  for (i=0; i < (sizeof(ButtonPin)/sizeof(ButtonPin[0])); i++ ){
    pinMode(ButtonPin[i], INPUT_PULLUP);
  }
  
  pinMode(Stop, INPUT_PULLUP);
}

void loop() {
  
  PottiValue =  map(analogRead(Potti),0,1022,0,30); // Maping the Value of the poteniometer to volume (0-30)
  if (PottiValueOld != PottiValue){ //checking if Value has change since last loop
    myDFPlayer.volume(PottiValue);// change the volume
    PottiValueOld = PottiValue; // save the new value as old for the next loop
  }
  
  for (x=0; x < (sizeof(ButtonPin)/sizeof(ButtonPin[0])); x++ ){ // one "for-round" for each button Pin in the Array 
    if (digitalRead(ButtonPin[x]) == LOW){ 
      myDFPlayer.play(mp3Nummber[x]); // play the MP3 track for the button
      delay(1000);
    }
  }
  
  if (digitalRead(Stop) == LOW){
    myDFPlayer.pause(); // stop/pause the playing if the stopbutton is pressed
    delay(1000);
  }
}

Moin,
drückst Du auf den 4ten Knopf der nicht in Betrieb ist? :wink:

Du solltest unbedingt die Warnungen einschalten.
DATEI - VOREINSTELLUNGEN - den Haken setzen bei "Ausführliche Ausgabe während "-> Kompilierung
Und darunter ALLE Warnungen einschalten
Deine int sind alles unsigned int. dann geht auch die Warnung weg.
Pins sind unveränderlich, alles const.

Dann wäre evtl. zu klären, ob der Stop-Button klemmt oder so und damit die anderen ausser Gefecht setzt.

Um das auszutesten bau Dir mal nen "tik" ein.
Im loop der Funktionsaufruf:

tik(500);

und dann folgende Funktion:

void tik(unsigned long tiktime)
{
  static unsigned long lastmillis = 0;
  if (millis() - lastmillis > tiktime)
  {
    lastmillis = millis();
    digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));
  }
}

Damit blinkt die LED auf dem Nano schön vor sich hin.

Ist der eingefroren, dann blinkts nicht mehr.

wozu braucht es dann einen Arduino? Nimm doch einfach einen MP3 Player der sich mit Tasten auslösen lässt. Eine Komponente weniger - ein Problem weniger.

Das Ding von ELV fällt mir da ein: MP3 Modul. Ich weis von mehreren Standalone Betrieb dieser Dinger, die seit Jahren funktionieren. Andere Module mit Tastenansteuerung gibt es aber sicher auch...

Auch den DFplayer mini kann man direkt über Tasten steuern. Da braucht es keinen Arduino.

Bei dem aktuellen Problem vermute ich ein Spannungsproblem.
Mit welcher Spannung betreibst du den Arduino und wie hast du den MP3-Player an die Spannung angeschlossen ?

Hallo Zusammen,
entschuldigt bitte meine späte Antwort aber hier durften die Museen wieder öffen und das machte doch einiges an Stress.

Ich versuche erstmal eure Fragen/ Hinweise zu beantworten bevor ich dann gleich eine stelle:

[quote="my_xy_projekt, post:2, topic:867616"]aufgefallen
drückst Du auf den 4ten Knopf der nicht in Betrieb ist?
[/quote]
Gut gesehen hier war ich aber nur etwas schlampig Knöpfe sind natürlich nur an den genannten Pins zum Test angeschlossen

Das wäre schön einfach aber leider nein es klemmen keine Knöpfe und ich hab es sogar schon mit unterschiedlichen getestet

Alles beides berechtigte Einwände wenn man nur eine Audiostehle bracht wäre das auch mein Tip an alle die es nachbauen wollen einfach die passenden Widerstände an die ADKEY Anschlüsse des DFPlayers bzw. Knöpfe anschließen quasi fertig.

Da die Ansprüche an Museen und ihre Ausstellungen immer größer werden möchte ich gern vorbereitet sein um später noch andere Sensoren oder zb. Relais noch anschließen zu können Beispiel: Besucher drückt einen Knopf eine Stimme erzählt etwas zu einem Kunstwerk und die passende Beleuchtung geht an oder LED's Blinken an den passender Stelle.

Das verstehe ich nicht gibts hier vielleicht einen erklärenden Link?

So jetzt wieder zum Problem. Den Tik hab ich ausprobiert aber die LED hat einfach nur dauerhaft geleuchtet. Das hat mich aber auf die Idee gebracht bei den Knopfbefehlen einfach mal noch ein Blinken mit einzubauen um zu sehen ob der Nano oder der Player hängt.

Vorab noch mein Aufbau Strom geht über USBanschluss an den Nano dieser speist den DFPlayer mit 5v Strom und RX/TX vom Player geht das Audio über die Boxeinschlüsse zum Kopfhöreranschluss

Resultat der Blink-Forschung:

  • Listenelement
    +nach dem Überspielen des Sketches gehen Nano und Player
    +trenne ich den Nano vom Rechner und gebe ihm nur Strom geht es nicht
    +bekommt der Nano nur Strom und drücke ich dann die Resettaste geht es

Angespornt von den Erkenntnissen hab ich überlegt wo es vielleicht überall hängen könnte.
Nach dem ich so ziemlich alles auskommentiert und wieder einkommentiert hatte und mir nochmal die for-schleifen doku angeschaut hab bin ich auf das folgende gestoßen. wenn ich im Setup die Prüfschelife des DFPlayers rausnehme und den Potti ins Setup verlege läuft es. Allerdings verstehe ich nicht wirklich warum vielleicht könnt ihr mir das beantworten? Oder könnt mir sagen was ich an dem Code noch bessser machen könnte?

Control a DFRobotDFPlayerMini with a Arduino and buttons conectet to GND. Each button plays one track 
and one button stop the playing. Volume is controlled by a potentiometer.

*/
// DFRobotDFPlayerMini - Version: Latest 
#include <DFRobotDFPlayerMini.h>
#include <SoftwareSerial.h>
SoftwareSerial mySoftwareSerial(15,14); // RX, TX evtl. andersrum
DFRobotDFPlayerMini myDFPlayer;
//volume Potentiometer
int Potti = A5; //Datapin of the potentiometer
int PottiValue = 0;

//Play Buttons
int ButtonPin[] = {12,11,10}; //Array of Digital Pins witch in Use 
int mp3Nummber[] = {1,2,3};//Deffinine the Soudnumbers for each Pin above
int Stop = 9; // the Stopbutton Pin

void setup() 
{
  mySoftwareSerial.begin(9600);
  Serial.begin(115200);
  myDFPlayer.begin(mySoftwareSerial);
/*
  if (!myDFPlayer.begin(mySoftwareSerial)) {  //Use softwareSerial to communicate with mp3.
    Serial.println(F("Unable to begin:"));
    Serial.println(F("1.Please recheck the connection!"));
    Serial.println(F("2.Please insert the SD card!"));
    while(true);
  }
*/
  for (int i=0; i < (sizeof(ButtonPin)/sizeof(ButtonPin[0])); i++ ){
    pinMode(ButtonPin[i], INPUT_PULLUP);
  }
  
  pinMode(Stop, INPUT_PULLUP);
  pinMode(13, OUTPUT);
  
  PottiValue = map(analogRead(Potti),0,408,0,30); // Maping the Value of the poteniometer to volume (0-30)
  myDFPlayer.volume(PottiValue);// change the volume
}

void loop() {

  for (int x=0; x < (sizeof(ButtonPin)/sizeof(ButtonPin[0])); x++ ){ // one "for-round" for each button Pin in the Array 
    if (digitalRead(ButtonPin[x]) == LOW){ 
      digitalWrite(13, HIGH);
      delay(100);
      digitalWrite(13, LOW);
      myDFPlayer.play(mp3Nummber[x]); // play the MP3 track for the button
      delay(1000);
    }
  }
  
  if (digitalRead(Stop) == LOW){
    digitalWrite(13, HIGH);
    delay(100);
    digitalWrite(13, LOW);
    myDFPlayer.pause();// stop/pause the playing if the stopbutton is pressed
    delay(1000);
  }
}

Das verstehe ich nicht.
Und 5Volt ist nicht Strom sondern Spannung.
Der DFPlayer zieht im Betrieb richtig Strom, da solltest du besser eine eigene, stabile Spannungsversorgung verwenden. Auch um Störgeräusche zu verhindern.

Verwende ein 5Volt Netzteil und speise damit den Nano am 5Volt-Anschluß und den DFPlayer am 5Volt Anschluß.