loader image

Máquina de sonidos con Arduino

Arduino Proyectos 0
Proyecto de máquina de sonidos con Arduino UNO

Las máquinas de sonido o tableros de audio son maravillosos, estos pequeños aparatos portátiles son indispensables para pasar un buen rato en el hogar o en cualquier oficina.

Con este diseño con Arduino podrás utilizar los sonidos que tú quieras.

16 botones disparan una gran variedad de sonidos tanto divertidos como molestos. ¡Es perfecto para pasar un rato agradable con tus amigos y compañeros!

Material

La siguiente lista muestra los materiales necesarios para construir tu propia máquina de sonidos con Arduino.

Elementos y componentes

  • Arduino UNO

    Protoboard

    Cable, jumpers o similar

    16 botones push button

    Resistencia 1kOhm

    DFPlayer Mini

    Tarjeta MicroSD

    Altavoz

  • Software, aplicaciones y servicios online

  • Arduino IDE

  • Diagrama de circuito

    El circuito consiste en un DFPlayer Mini, un altavoz y 16 botones. El DFPlayer se alimenta con GND y 5V y se conecta a los pines seriales 10 y 11.

    La conexión al pin 11 tiene una resistencia de 1kOhm. El altavoz está conectado directamente al DFPlayer.

    Se utilizan las resistencias internas de la placa Arduino para los push buttons que más tarde activarán los sonidos. Todos los botones están conectados a GND y a un pin digital o analógico del Arduino.

    Los pines de entrada analógica también pueden ser usados como pines digitales para leer los botones.

    Tarjeta SD

    Copia los siguientes sonidos a una tarjeta SD. Asegúrate de que esté formateado en FAT16 o FAT32. Los archivos MP3 individuales deben estar en la carpeta «MP3» en el directorio raíz de la tarjeta SD.

    Aprende también sobre:  COVID-19 Dispensador de jabón automático con Arduino

    Los usuarios de Mac deben asegurarse de que también seleccionen la opción Master Boot Record en la utilidad de disco duro cuando formateen.


    Descarga:


    Los archivos son de los siguientes autores y están bajo licencia CC-BY:

    Código

    El programa declara 16 pines de Arduino como INPUT_PULLUP y los registra de forma continua en el bucle. Si se presiona uno de los botones, se dispara un sonido.

    Se deja las funciones de depuración dentro del loop ya que hace la depuración sea mucho más fácil.

    #include "Arduino.h"
    #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 a los que se conectan los botones
    
    void setup() {
      mySoftwareSerial.begin(9600); // Iniciando la comunicación SoftwareSerial
      Serial.begin(115200); // Iniciando la comunicación serial "normal" para el Monitor Serial
    
    if (!myDFPlayer.begin(mySoftwareSerial)) { // Conexión del software de comunicación en serie con el DFPlayer
      Serial.println(F("Unable to begin:"));
      Serial.println(F("1.Please recheck the connection!"));
      Serial.println(F("2.Please insert the SD card!")); // Detener el programa -> while(true) es un loop infinito 
      while(true){
        delay(0);
      }
    }
    
    myDFPlayer.volume(20); // Volumen ajustado a 20 (use valores de 0 a 30)
    for (int i=0; i<16; i++){ // repetir 16 veces (para cada botón)
      pinMode(buttonPins[i], INPUT_PULLUP); // Los botones se usan con resistencias internas PULLUP
      }
    }
    
    void loop() {
      for (int i=0; i<16; i++){ // repetir 16 veces (para cada botón)
        if (digitalRead(buttonPins[i]) == LOW){ // cuando se presiona un botón
          Serial.println(i);
          myDFPlayer.playMp3Folder(i+1); // reproducir el MP3 según el número del botón de la tarjeta SD
          delay(200);
        }
      }
      delay(20);
    
    /* Todo a partir de aquí es para la depuración y provienen de los archivos de ejemplo de la biblioteca */
      if (myDFPlayer.available()) { // Print the detail message from DFPlayer to handle
        different errors and states.
        printDetail(myDFPlayer.readType(), myDFPlayer.read());
      }
    }
    
    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;
      }
    }

    Submit your review
    1
    2
    3
    4
    5
    Submit
         
    Cancel

    Create your own review

     

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

    Deja una Review

    Submit your review
    1
    2
    3
    4
    5
    Submit
         
    Cancel

    Create your own review