MP3 Dateien per Knopfdruck abspielen

Hallo zusammen,

Als Arduino-Neuling habe ich für ein Weihnachtsgeschenk folgende, für Arduino-Kenner bestimmt einfache, Aufgabe zu lösen.
Ich möchte an einer Wand Bilder mit einer Nummerierung aufhängen und dann per Tastendruck zu den einzelnen Bildern eine kurze 5-10s lange Tondatei abspielen. Ich brauche keine Funktionen wie Pause, vor, zurück etc.
Es soll z.B. bei Druck auf die Taste 1 - Ton 1 einmal abgespielt werden, bei Taste 2 einmal Ton 2 unsw.

  1. Welcher Arduino eignet sich am besten für meine Zwecke? Ein UNO?
  2. Kann ich auch Teile von Elegoo oder anderen Herstellern verwenden? Hat jeder Hersteller eine eigene Programmiersoftware?
  3. Welche Bauteile brauche ich noch, außer Lautsprecher, Steckverbinder und Leiterplatte? Welche einfache Fernbedienung kann ich verwenden?
  4. Habt ihr eventuell passende Videos zum Thema? Habe diverse Ansätze gefunden, leider nicht in dieser Kombination.

Schon mal vielen Dank im Voraus! :slight_smile:

Am einfachsten und sichersten ist es mit einem Uno, DFPlayer mini (MP3) und Infrarot Fernbedienung + Empfänger.

Bis Weihnachten ohne Erfahrung ist das schon sehr sportlich.

HotSystems:
Bis Weihnachten ohne Erfahrung ist das schon sehr sportlich.

Noch dazu wo das Lernen per Video so elend lange dauert. Bei mir jedenfalls geht lesen schneller.

@naughty_nerd:
Wie viele Tasten sollen es denn werden?
Wie laut soll es denn tönen?

Was die Teile angeht: Dieters Liste würde ich noch um ein Netzteil ergänzen wollen.

wno158:
@naughty_nerd:
Wie viele Tasten sollen es denn werden?
Wie laut soll es denn tönen?

Was die Teile angeht: Dieters Liste würde ich noch um ein Netzteil ergänzen wollen.

Ein 3W Lautsprecher reicht mir vollkommen aus. Sollen am Ende wohl 5-7 Töne werden.

naughty_nerd: Ein 3W Lautsprecher reicht mir vollkommen aus. Sollen am Ende wohl 5-7 Töne werden.

Na dann, das mit dem Netzteil stimmt. und Lautsprecher ist natürlich auch wichtig. Und los gehts, keine Zeit verlieren. ;)

Achja...du kannst auch einen Clone einsetzen. Das funktioniert auch. Ich empfehle da ein Starterset z.B. Funduino.

  • Uno
  • Im Prinzip ja; manchmal zicken die Nachbauten etwas. Nein, die Arduino-IDE ist für alle gleich.
  • Liste ist geklärt. Fernbedienung und Empfänger müssen zusammenpassen.
  • Nein, mit Videos kann ich nicht dienen. Wenn Du Beispiele für den DFPlayer und die Fernbedienung findest, sollte das Zusammensetzen möglich sein. Ich würde aber eher Ostern anpeilen. Vielleicht wird Dir, wenn Du Deine Teile-Links hier bekannt gibst, jemand einen Vorschlag machen. Der könnte auch funktionieren, aber Du wirst ihn nicht verstanden haben. Das wäre ungünstig für evtl. spätere Änderungen und Erweiterungen.

Bei dem von mir vorgeschlagenen Starterset ist die IR-Fernbedienung und passender Empfänger dabei.

Kurze Planänderung. Das ganze soll nun doch nicht per Fernbedienung funktionieren, sondern mit Tastern.

Teile habe ich dank Amazon bereits und einen kleinen Testaufbau.


Es fehlt mir lediglich eine kleine SD Karte…die ganzen Karten mit großem Speicher bekommt man ja leider nicht ohne Umwege auf FAT32

Habe eine Programmierung (ist bestimmt etwas lang fürs Forum, hab aber leider keine Spoilerfunktion entdeckt) die ist aber um die Taster jeweils mit “vor” “zurück” und “Pause” zu belegen. Wie muss ich das Ganze abändern, dass jeweils nur eine Datei einmal abgespielt wird bei Taste 1,23,?

///              MP3 PLAYER PROJECT
//////////////////////////////////////////


#include "SoftwareSerial.h"
SoftwareSerial mySerial(10, 11);
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]

# define ACTIVATED LOW

int buttonNext = 2;
int buttonPause = 3;
int buttonPrevious = 4;
boolean isPlaying = false;



void setup () {

pinMode(buttonPause, INPUT);
digitalWrite(buttonPause,HIGH);
pinMode(buttonNext, INPUT);
digitalWrite(buttonNext,HIGH);
pinMode(buttonPrevious, INPUT);
digitalWrite(buttonPrevious,HIGH);

mySerial.begin (9600);
delay(1000);
playFirst();
isPlaying = true;


}



void loop () { 

if (digitalRead(buttonPause) == ACTIVATED)
 {
   if(isPlaying)
   {
     pause();
     isPlaying = false;
   }else
   {
     isPlaying = true;
     play();
   }
 }


if (digitalRead(buttonNext) == ACTIVATED)
 {
   if(isPlaying)
   {
     playNext();
   }
 }

  if (digitalRead(buttonPrevious) == ACTIVATED)
 {
   if(isPlaying)
   {
     playPrevious();
   }
 }
}

void playFirst()
{
 execute_CMD(0x3F, 0, 0);
 delay(500);
 setVolume(20);
 delay(500);
 execute_CMD(0x11,0,1); 
 delay(500);
}

void pause()
{
 execute_CMD(0x0E,0,0);
 delay(500);
}

void play()
{
 execute_CMD(0x0D,0,1); 
 delay(500);
}

void playNext()
{
 execute_CMD(0x01,0,1);
 delay(500);
}

void playPrevious()
{
 execute_CMD(0x02,0,1);
 delay(500);
}

void setVolume(int volume)
{
 execute_CMD(0x06, 0, volume); // Set the volume (0x00~0x30)
 delay(2000);
}

void execute_CMD(byte CMD, byte Par1, byte Par2)
// Excecute the command and parameters
{
// Calculate the checksum (2 bytes)
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
// Build the command line
byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,
Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};
//Send the command line to the module
for (byte k=0; k<10; k++)
{
mySerial.write( Command_line[k]);
}
}

Muss ich beim Anlegen der Dateien/Ordner auf der SD Karte etwas beachten?

P.S. Ich hab geschrieben ich bin neu mit Arduino, das stimmt. Ich baue aber beruflich Alarmanlagen, hab also schon das ein oder andere Verständnis von elektrischen Schaltungen :stuck_out_tongue:

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).
Dann ist er auch auf mobilen Geräten besser lesbar.
Das kannst Du auch noch nachträglich ändern.

Gruß Tommy

Es fehlen leider noch die Code-Tags, wie Tommy dir geschrieben hat.

Und warum verwendest du nicht die Library zum DFPlayer. Da wird viele einfacher.

Habe tatsächlich etwas gefunden was genau meiner Vorstellung entspricht:

https://de.elv.com/elv-mp3-sound-modul-msm-2-komplettbausatz-092853

So kann ich mir eigentlich die komplett Geschichte mit dem "MP3-Player", den ich eigentlich nur begrenzt nutze sparen. Ich werde mir wohl einfach die jeweiligen Kontakte auf das Teil schalten.

naughty_nerd: Habe tatsächlich etwas gefunden was genau meiner Vorstellung entspricht:

https://de.elv.com/elv-mp3-sound-modul-msm-2-komplettbausatz-092853

So kann ich mir eigentlich die komplett Geschichte mit dem "MP3-Player", den ich eigentlich nur begrenzt nutze sparen. Ich werde mir wohl einfach die jeweiligen Kontakte auf das Teil schalten.

Das ist auch "nur" ein MP3-Player, aber ok, deine Entscheidung.

HotSystems: Das ist auch "nur" ein MP3-Player, aber ok, deine Entscheidung.

Stimmt, nur brauche ich nicht den DFPlayer Mini dafür. Der hat ja keine direkten Eingänge die ich frei benutzen kann. Vor, zurück und Play sind ja fest vergeben. So kann ich einfach die analogen Ausgänge auf die Eingänge schalten, die mir entsprechend dann für jeden Eingang eine MP3 Datei abspielen.

naughty_nerd: Stimmt, nur brauche ich nicht den DFPlayer Mini dafür. Der hat ja keine direkten Eingänge die ich frei benutzen kann. Vor, zurück und Play sind ja fest vergeben. So kann ich einfach die analogen Ausgänge auf die Eingänge schalten, die mir entsprechend dann für jeden Eingang eine MP3 Datei abspielen.

Ich seh schon, du hast das Prinzip nicht verstanden.

Das kannst du ja alles frei im Arduino programmieren und per serielle an den DFPlayer übertragen, der im übrigen deutlich günstuger ist. Aber wenn du mit dem Teil klar kommst, ist das ok.