Zum Inhalt springen
Sound Machine mit Arduino

Sound Machine mit Arduino

    Sound Machines und Sound Boards sind super. Ich meine die kleinen kompakten Geräte, die aus keinem Startup-Büro wegzudenken sind. 16 Knöpfe lösen die unterschiedlichsten Sounds aus und sorgen sowohl für erheiterte, als auch für genervte Gesichter. Perfekt also für den Büroalltag.

    Manchmal wünscht man sich aber, die Sounds austauschen zu können. Kann man so eine Sound Machine nicht einfach mit Arduino bauen? Ja! Das geht. Wie genau, das erfährst du hier.

    Bauteile

    Schaltplan

    Die Schaltung besteht aus dem DFPlayer Mini, einen Lautsprecher und 16 Taster. Der DFPlayer ist mit GND und 5V versorgt und an die SoftwareSerial-Pins 10 und 11 verbunden. Die Verbindung mit dem Pin 11 bekommt noch einen 1kOhm Widerstand. Der Lautsprecher ist direkt an den DFPlayer angeschlossen.


    Sieh dir jetzt meinen neuen Arduino-Videokurs an: Jetzt ansehen!


    Wir verwenden für die Taster, die später die Sounds auslösen sollen, die internen Pullup-Widerstände des Arduino-Boards. Alle Taster sind mit dem GND und jeweils einem digitalen oder analogen Pin des Arduinos verbunden. Die analogen Input-Pins lassen sich nämlich auch einfach als digitale Pins zum Auslesen von Tastern verwenden.

    Sound Machine mit Arduino Schaltplan

    Mehr Infos zum DFPlayer Mini findest du übrigens hier: DFPlayer Mini mit Arduino.

    SD-Karte

    Kopiere die folgenden Sounds auf eine SD-Karte. Achte darauf, dass sie im FAT16 oder FAT32 Format formatiert ist. Die einzelnen MP3-Dateien müssen im Ordner »MP3« im Hauptverzeichnis (root) der SD-Karte zu finden sein. Darüber hinaus müssen sie 0001.mp3, 0002.mp3 usw. heißen (Danke Tom für den Hinweis).

    Mac-User sollten beim Formatieren darauf achten, dass sie auch Master Boot Record im Festplattendienstprogramm auswählen.

    Download: Sounds

    Die Dateien sind von folgenden Urhebern und stehen unter CC-BY Lizenz:

    1. Lachen (CC-BY LittleRainySeasons)
    2. Airhorn (CC-BY SPANAC)
    3. Rimshot (CC-BY SPANAC)
    4. Cartoon Clock (CC-BY SPANAC)
    5. Sad Trumpet(CC-BY SPANAC)
    6. Boo(CC-BY SPANAC)
    7. Wah-Wah-Wah (CC-BY ALEXANDAR)
    8. Badum-Tss (CC-BY ALEXANDAR)
    9. Car Lock Sound (CC-BY SPANAC)
    10. Burp (CC-BY SPANAC)
    11. Coo-Coo-Clock (CC-BY SPANAC)
    12. Bell-Rings-Short (CC-BY SPANAC)
    13. Crash-Sound (CC-BY SPANAC)
    14. Clapping (CC-BY SPANAC)
    15. Hammer (CC-BY SPANAC)
    16. Extreme Alarm Sound (CC-BY SPANAC)

    Code für die Sound Machine mit Arduino

    Das Programm deklariert 16 Arduino-Pins als INPUT_PULLUP und fragt diese im Loop ständig ab. Wird einer der Button gedrückt, wird ein Sound ausgelöst.

    Die Debugging-Funktionen habe ich drin gelassen, da es die Fehlersuche enorm erleichtert.

    #include "SoftwareSerial.h"
    #include "DFRobotDFPlayerMini.h"
    
    SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
    DFRobotDFPlayerMini myDFPlayer;
    
    int buttonPins[16] = {19,18,17,16,15,14,2,3,4,5,6,7,8,9,12,13};   // Pins, an denen die Taster angeschlossen sind
    
    void setup() {
      mySoftwareSerial.begin(9600);           // Start der SoftwareSerial Kommunikation
      Serial.begin(115200);                   // Start der "normalen" seriellen Kommunikation für den Serial Monitor
    
      if (!myDFPlayer.begin(mySoftwareSerial)) {  // Verbindung der Software Serial Kommunikation mit dem DFPlayer
        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){                          // Programmabbruch -> while(true) ist Endlosschleife
          delay(0);                           // Code für den Watchdog des ESP8266, nicht relevant für Arduino UNO
        }
      }
        
      myDFPlayer.volume(20);                      // Lautstärke auf 10 ( Werte von 0 – 30 ist möglich)
      for (int i=0; i<16; i++){                   // wiederhole 16 Mal (für jeden Taster)
        pinMode(buttonPins[i], INPUT_PULLUP);     // Taster werden mit internen Pullup-Widerständen verwendet  
      }
      
    }
    
    void loop() {
      for (int i=0; i<16; i++){                   // wiederhole 16 Mal (für jeden Taster)
        if (digitalRead(buttonPins[i]) == LOW){   // wenn ein Taster gedrückt wird
         Serial.println(i);
         myDFPlayer.playMp3Folder(i+1);                      // spiele das MP3 der Nummer des Tasters nach von der SD-Karte
         delay(200);
        }
      }
      delay(20);
    
      /* Alles ab hier dient dem Debugging und kommt aus den Beispiel-Dateien der Library */
      if (myDFPlayer.available()) {
        printDetail(myDFPlayer.readType(), myDFPlayer.read()); // Print the detail message from DFPlayer to handle different errors and states.
      }
    }
    
    void printDetail(uint8_t type, int value){
     
      switch (type) {
        case TimeOut:
          Serial.println(F("Time Out!"));
          break;
        case WrongStack:
          Serial.println(F("Stack Wrong!"));
          break;
        case DFPlayerCardInserted:
          Serial.println(F("Card Inserted!"));
          break;
        case DFPlayerCardRemoved:
          Serial.println(F("Card Removed!"));
          break;
        case DFPlayerCardOnline:
          Serial.println(F("Card Online!"));
          break;
        case DFPlayerUSBInserted:
          Serial.println("USB Inserted!");
          break;
        case DFPlayerUSBRemoved:
          Serial.println("USB Removed!");
          break;
        case DFPlayerPlayFinished:
          Serial.print(F("Number:"));
          Serial.print(value);
          Serial.println(F(" Play Finished!"));
          break;
        case DFPlayerError:
          Serial.print(F("DFPlayerError:"));
          switch (value) {
            case Busy:
              Serial.println(F("Card not found"));
              break;
            case Sleeping:
              Serial.println(F("Sleeping"));
              break;
            case SerialWrongStack:
              Serial.println(F("Get Wrong Stack"));
              break;
            case CheckSumNotMatch:
              Serial.println(F("Check Sum Not Match"));
              break;
            case FileIndexOut:
              Serial.println(F("File Index Out of Bound"));
              break;
            case FileMismatch:
              Serial.println(F("Cannot Find File"));
              break;
            case Advertise:
              Serial.println(F("In Advertise"));
              break;
            default:
              break;
          }
          break;
        default:
          break;
      }
    }

    Wenn dir das Projekt gefallen hat und du von weiteren interessanten Projekten inspiriert werden willst, sieh dir doch mal mein neues E-Book »Arduino Projekte Volume 1« an!

    • Die beliebtesten Arduino-Projekte von StartHardware
    • Inklusive Schaltplan, Beschreibung und Code
    • Arduino-Schnellstart-Kapitel
    • Kompakter Programmierkurs


    0 0 votes
    Article Rating
    Abonnieren
    Benachrichtige mich bei

    Diese Seite verwendet Akismet, um Spam zu reduzieren. Erfahre, wie deine Kommentardaten verarbeitet werden..

    27 Comments
    Newest
    Oldest Most Voted
    Inline Feedbacks
    Alle Kommentare anzeigen
    Tabularas
    1 Jahr zuvor

    Also ich habe alles wie geschrieben angeschlossen. Zu beginn leuchtet der DFPlayer mini kurz auf (beim anschließen des Arduino an Strom/USB) dann passiert nichts. Und auch beim Serial Monitor bekomme ich nur folgende Meldung:

    20:42:23.585 -> Unable to begin:
    20:42:23.585 -> 1.Please recheck the connection!
    20:42:23.585 -> 2.Please insert the SD card!

    Hab ich die falsche Library für den DFPlayer mini oder an was kann es hier liegen?

    Olli J
    1 Jahr zuvor

    Hey Leute, Ich hatte große Probleme das Projekt ans laufen zu bekommen habe aber nach fast 4 Tagen festgestellt, dass Ich eine alte Version der Bibliothek DFRobotDFPlayerMini v 1.0.3 Installieren musste, und siehe da ohne Probleme.
    Vielen Dank für dieses coole Projekt!

    Gerhard Walter
    1 Jahr zuvor

    Hallo habe da eine Frage.
    Ich habe mir einen V-8 Motor im Maßstab 1:4 gebaut der mit einem E-Motor läuft. Ich hätte gern den Motorsound dazu möglichst an die Drehzahl an gepasst ! Ist das mit dem ! Ist das mit dem Arduino möglich?
    Vielen Dank schon mal im voraus❗

    Niklas Westermann
    1 Jahr zuvor

    Moin, hoffentlich kann mir einer helfen

    Ich schaffe es einfach nicht den code für nur 3 Taster umzuschreiben bzw generell auf nur ein Taster zu reduzieren um erstmal zu schauen obs funktioniert…MfG Niklas

    Uli
    2 Jahre zuvor

    Hallo.
    Ich habe die Schaltung mit einem Nano nachgebaut und das entsprechende Board ausgewählt. Der Code lässt sich auch übertragen.
    Leider bekomme ich aber keine Verbindung zum DFPlayer hergestellt. Es kommt immer die Meldung im Seriellen Monitor „Unable to begin:“. Ich habe auch schon versucht die seriellen Pins umzulegen mit „mySoftwareSerial(7, 8); // RX, TX“. Leider auch ohne Erfolg.
    Verbaut ist eine 32GB microSDHC im FAT32 Format.

    Eske
    3 Jahre zuvor

    Hi, ich hab alles soweit aufgebaut und den Code kopiert. Beim Überspielen auf den Arduino bekomme ich den Fehler „Serial port not selceted.“
    Eine kleine Änderung in der Hardware habe ich, ich hab nämlich einen Arduino Nano verbaut.
    Kann mir da jemand weiter helfen? Dies ist mein erstes Mal mit Arduinos, kann es sein, dass ich da beim ersten Setup etwas vergessen habe?

    Peter Süssenbach
    3 Jahre zuvor

    Hallo, Markus,
    ich melde mich…aber was meint PN?
    Du kannst meine Mail oder Tel. haben.
    Wo wohnst du denn, vielleicht kann man sich treffen. Ich wohne im Pott, Bochum und Dortmund liegen bei Witten.
    Wäre schön, wenn du helfen könntest. Danke!
    Grüße
    pesü

    Markus Baumer
    Antworte an  Peter Süssenbach
    3 Jahre zuvor

    PN = private Nachricht, weiß gar nicht ob das hier geht. Möchte meine e-mail Adresse nicht veröffentlichen

    Markus Baumer
    Antworte an  Peter Süssenbach
    3 Jahre zuvor

    Gerne kannst du mir deine Kontaktdaten zukommen lassen

    Peter Süssenbach
    Antworte an  Markus Baumer
    3 Jahre zuvor

    …ich habe mich mal „vernetzen“ lassen…bei Stefan.

    Peter Süssenbach
    3 Jahre zuvor

    Also mal…nachgefragt. Spielt der Player nur kleine „Rülpser“ oder „Pupser“ oder auch etwas längere Musik, wie zum Beispiel die ersten 8/10 Takte von Queen „We are the Champions“. ?
    Und noch mal nachgefragt….ich habe keine Ahnung vom BAsteln mit Strom. Gibt es jemanden, der mir so ein Teil bauen würde? Bezahlt natürlich?
    Liebe Grüße
    pesü

    Peter Süssenbach
    Antworte an  Stefan Hermann
    3 Jahre zuvor

    Hallo, Stefan, danke für die Antwort. Ich bin jetzt ein Stück weiter. Vielleicht findet sich ja jemand, der mir helfen kann, was die Hardware betrifft.
    Liebe Grüße
    pesü

    Markus
    Antworte an  Peter Süssenbach
    3 Jahre zuvor

    Hallo pesü,
    Ich hab seinerzeit bis auf den Arduino alles in zweifacher Ausführung gekauft, liegt also noch ein Satz zu Hause. Falls du daran Interesse hast meld dich per PN
    Gruß Markus

    Peter Süssenbach
    Antworte an  Markus
    3 Jahre zuvor

    Hallo, Markus,
    ich melde mich…aber was meint PN?
    Du kannst meine Mail oder Tel. haben.
    Wo wohnst du denn, vielleicht kann man sich treffen. Ich wohne im Pott, Bochum und Dortmund liegen bei Witten.
    Wäre schön, wenn du helfen könntest. Danke!
    Grüße
    pesü

    Rudolf Gerlinger
    4 Jahre zuvor

    Hallo Stefan,
    ich habe ein spezieles Projekt mit der Soundmachine vor, vorab gedanklich im Hinterkopf…
    Man kann ja mehrere Ordner auf der SD-Karte anlegen und den Titel abspielen.
    Ich möchte mit einem Taster oder mehreren Taster die Ordner ansprechen und dann die Titel
    mit den restlichen Tastern abspielen.
    Was müsste ich im Programm ändern.

    MfG
    Rentner Rudolf

    Tom
    Antworte an  Rudolf Gerlinger
    2 Jahre zuvor

    So etwas habe ich mit Raspberry Pi programmiert.

    https://github.com/Wikinaut/Soundboard

    Markus
    4 Jahre zuvor

    Hallo, danke für dieses super Tutorial, sehr coole Idee, und gleichzeitig mein ersten Projekt mit einem Arduino. Folgendes Problem habe ich: die ersten sechs Taster (vom Player aus gesehen) funktionieren einwandfrei. Alles ab da nach rechts keine Funktion. Sprich die Kabel, die am Arduino an 5,4,3,2, und auf den Analog in A0-A5 angeschlossen sind.
    Habe das Board noch ein zweites Mal aufgebaut, vermute den Fehler daher in der Software bei mir.
    Wahrscheinlich ein ganz simpler Fehler, vielleicht ne Idee?
    Danke!

    Engelbert
    Antworte an  Markus
    2 Jahre zuvor

    Hallo, ich weiss nicht, ob das Problem gelöst wurde, aber kann mir vorstellen wo hier der Fehler liegt.
    Manche günstigen Breadboards sind in den Versorgungsleisten unterteilt. da müsste man eine kleine Drahtbrücke herstellen um die restlichen Taster auch an – anzuschließen.
    Mfg Engelbert

    27
    0
    Ich würde mich über deine Meinung freuen.x