Juegos Robótica

Cursos de programación con robótica educativa

  • Newsletter
  • ¿Dudas? Así es la plataforma de cursos
  • Iniciar sesión

Música con Arduino.

Crear música con Arduino o sonidos sueltos es relativamente fácil y suele ser una práctica muy interesante para hacer con alumnos que están empezando a familiarizarse con la programación.

En principio únicamente vamos a necesitar un zumbador piezoeléctrico y la placa de Arduino para poder generar música con Arduino. Una vez se comprende la generación de sonidos se pueden realizar proyectos más complejos implementando un pequeño instrumento electrónico donde le podamos indicar notas mediante teclas, sensores capacitivos, sensores de ultrasonidos, etc.

Un zumbador piezoaeléctrico consigue generar un sonido al vibrar en la frecuencia de la señal eléctrica que recibe. El valor en frecuencia de la señal determinará el tono en el que suene el piezoeléctrico. Es un sonido de muy baja calidad pero vamos a poder generar notas y con ello música.

Si usamos una interfaz de programación basada en Scratch como mBlock seguramente tengamos bloques disponibles para realizar sonidos, únicamente tendremos que tener en cuenta la notación anglosajona para “traducir” una partitura. Para familiarizarte con la programación de música mediante bloques te recomiendo que leas la entrada Música con mBot que es aplicable igualmente a Arduino.

En esta ocasión vamos a generar música con Arduino mediante código porque va a ser la manera de poder hacer sonar nuestro proyecto en cualquier nota que aparezca en la partitura que consultemos, ya que vamos a poder programar también sostenidas, algo que no se puede hacer por ejemplo con mBlock.

Vamos a hacer uso de la instrucción tone cuyos argumentos son el pin de salida al cual tenemos conectado el zumbador, la frecuencia de la señal que vamos a generar y que es la que variará la nota y la duración en milisegundos (opcional). Con varias instrucciones tone podremos hacer música con Arduino.

tone(pin,  frecuencia)

tone(pin,  frecuencia, tiempo)

El pin de salida debe ser de tipo PWM ya que debemos poder variar su frecuencia. En Arduino Uno, Mini y Nano  podrán ser 3, 5, 6, 9, 10 y 11

La frecuencia adecuada para cada nota la tenéis en una tabla al final del tutorial.música con arduino

El tiempo es la duración de la nota. Cada figura tendrá un tiempo determinado por el tiempo de la negra (t),de tal manera que una blanca durará doble que una negra y una corchea la mitad. La relación de los tiempos de las figuras es fija, pero el tempo lo vamos a marcar nosotros. Si no declaramos el tiempo en la instrucción tone deberemos hacer un delay con la duración y utilizar la instrución noTone posteriormente.

Por ejemplo si establecemos que una negra sea 1 segundo nos quedaría lo siguiente:

Figura Tiempo(ms)
Redonda 4000
Blanca 2000
Negra 1000
Corchea 500
Semicorchea 250
Fusa 125
Semifusa 62

Utilizaremos la instrucción noTone si no indicamos un tiempo en la instrucción tone. Esta instrucción indica que se deje de emitir la señal por el pin indicado.

noTone(pin)

Con esto ya podemos generar música con Arduino o notas musicales sueltas.

Debemos conectar el zumbador con su patilla marcada como negativa a masa (GND) y la patilla marcada como positiva a nuestro pin con posibilidad de salida PWM. No te preocupes si lo conectas al revés, simplemente no funcionará y tendrás que cambiarlo, pero no habrá humo en tu lugar de trabajo.

Este puede ser un ejemplo para hacer sonar una semicorchea Do de la 4ª octava (según los timepos de ejemplo de la tabla de arriba) a través del pin 3:

void setup()
{
pinMode(3, OUTPUT);      // Fija el pin 3 como salida.
}

void loop()
{
tone(3, 261.63, 250);      // Lanza señal a 261,63Hz por el pin 3 durante 250ms.
}

Este bucle sería equivalente a poner:

void loop()
{
tone(3, 261.63);      // Lanza señal a 261,63Hz por el pin 3.
delay(250);      // Espera 250ms.
noTone(3);  //  Dejamos de emitir la señal.
}

Si la música con Arduino que queremos crear es una melodía relativamente larga lo mejor es utilizar arrays para almacenar todas las notas (frecuencias) y todos los tiempos.

Primero definimos los arrays:

long DO=523.25, //definimos las frecuencias de las notas
        DoS=554.37,
        RE=587.33,
        RES=622.25,
        MI=659.26,
        FA=698.46,
        FAS=739.99,
        SOL=783.99,
        SOLS=830.61,
        LA=880,
        LAS=932.33,
        SI=987.77,
        RE2=1174.66,
        FAS2=1479.98,
        PAU=30000; //pausa
int melodia[] = {SI, RE2, SI, RE2, PAU, SI, LA, SI, SI, SI, PAU, RE2, SI, SI, PAU, RE2, PAU, RE2, RE2, PAU, SI, RE2, SI, RE2, PAU,
SI, LA, SI, SI, SI, PAU, RE2, SI, SI, PAU, RE2, PAU, RE2, RE2, PAU, RE2, PAU, SI, RE2, PAU, SI, RE2, PAU, SI, RE2,
PAU, SI, PAU, RE2, SI, LA, SI, PAU, RE2,PAU, SI, RE2, PAU, SI, RE2, PAU, SI, RE2, PAU, SI, PAU, RE2, SI, LA, SI,
PAU, FAS2, PAU, RE2, FAS2, PAU, RE2, FAS2, PAU, RE2 ,FAS2, PAU, RE2, FAS2, PAU, RE2, LA, SOLS, SI, PAU, FAS2, PAU,
RE2, FAS2, PAU, RE2, FAS2, PAU, RE2, FAS2, PAU, RE2, FAS2, PAU, RE2, LA, SI, SI
};
int d=1000, e=500, m=250, c=125; //definimos los tiempos de doble, entera, media y cuarta
int duracionNota[] = {m, m, m, m, e, c, m, m, c, m, e, m, m, m, e, m, m, m, m, d, m, m, m, m, e, c, m, m, c, m, e, m, m, m, e, m, m, m, m, d,
m, m, m, m, m, m, m, m, m, m, m, m, c, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m,
m, m, m, m, m, m, m, m, m, m, m, m, c, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m, m,
};

En el bucle incluiremos los arrays dentro de la función tone:

for (int notaActual = 0; notaActual < 112; notaActual++) {  //va a repetir las 112 notas
tone(11, melodia[notaActual]); //da el tono a la frecuencia de la nota en ese momento
delay(duracionNota[notaActual]);//se mantiene con la nota el tiempo definido para esa nota
noTone(11); //finaliza la melodía
}



Si te ha parecido muy complicado es que no lo he explicado bien. Es más sencillo de lo que parece y de hecho podemos partir de bloques para luego adaptar el código.

Te recomiendo que veas este vídeo y te ayude a crear música con Arduino, sólo tienes que practicar.

 

Prueba a configurar en clase o en casa instrumentos con diferentes moduladores, por ejemplo el sensor de ultrasonidos, y si tienes cualquier duda utiliza los comentarios y lo vemos.

Accediendo a la plataforma de cursos de Juegos Robótica aprenderás a aprovechar todas las posibilidades de Arduino y de otros kits de robótica ampliando tus conocimientos sobre programación aplicados a la música además del resto de funciones.

 

Dani S.


¿Cuál es tu perfil? *

Aviso legal

Comprueba tu bandeja de entrada o de spam ahora para confirmar tu suscripción.



Nota Octava Frequencia (Hz)
Do / C 0 16,35
Do# / C# 0 17,32
Re / D 0 18,35
Re# / D# 0 19,45
Mi / E 0 20,60
Fa / F 0 21,83
Fa# / F# 0 23,12
Sol / G 0 24,50
Sol# / G# 0 25,96
La / A 0 27,50
La# / A# 0 29,14
Si / B 0 30,87
Do / C 1 32,70
Do# / C# 1 34,65
Re / D 1 36,71
Re# / D# 1 38,89
Mi / E 1 41,20
Fa / F 1 43,65
Fa# / F# 1 46,25
Sol / G 1 49,00
Sol# / G# 1 51,91
La / A 1 55,00
La# / A# 1 58,27
Si / B 1 61,74
Do / C 2 65,41
Do# / C# 2 69,30
Re / D 2 73,42
Re# / D# 2 77,78
Mi / E 2 82,41
Fa / F 2 87,31
Fa# / F# 2 92,50
Sol / G 2 98,00
Sol# / G# 2 103,83
La / A 2 110,00
La# / A# 2 116,54
Si / B 2 123,47
Do / C 3 130,81
Do# / C# 3 138,59
Re / D 3 146,83
Re# / D# 3 155,56
Mi / E 3 164,81
Fa / F 3 174,61
Fa# / F# 3 185,00
Sol / G 3 196,00
Sol# / G# 3 207,65
La / A 3 220,00
La# / A# 3 233,08
Si / B 3 246,94
Do / C 4 261,63
Do# / C# 4 277,18
Re / D 4 293,67
Re# / D# 4 311,13
Mi / E 4 329,63
Fa / F 4 349,23
Fa# / F# 4 369,99
Sol / G 4 392,00
Sol# / G# 4 415,31
La / A 4 440,00
La# / A# 4 466,16
Si / B 4 493,88
Do / C 5 523,25
Do# / C# 5 554,37
Re / D 5 587,33
Re# / D# 5 622,25
Mi / E 5 659,26
Fa / F 5 698,46
Fa# / F# 5 739,99
Sol / G 5 783,99
Sol# / G# 5 830,61
La / A 5 880,00
La# / A# 5 932,33
Si / B 5 987,77
Do / C 6 1046,50
Do# / C# 6 1108,73
Re / D 6 1174,66
Re# / D# 6 1244,51
Mi / E 6 1318,51
Fa / F 6 1396,91
Fa# / F# 6 1479,98
Sol / G 6 1567,98
Sol# / G# 6 1661,22
La / A 6 1760,00
La# / A# 6 1864,66
Si / B 6 1975,53
Do / C 7 2093,01
Do# / C# 7 2217,46
Re / D 7 2349,32
Re# / D# 7 2489,02
Mi / E 7 2637,02
Fa / F 7 2793,83
Fa# / F# 7 2959,96
Sol / G 7 3135,96
Sol# / G# 7 3322,44
La / A 7 3520,00
La# / A# 7 3729,31
Si / B 7 3951,07
Do / C 8 4186,01
Do# / C# 8 4434,92
Re / D 8 4698,64
Re# / D# 8 4978,03
Mi / E 8 5274,04
Fa / F 8 5587,65
Fa# / F# 8 5919,91
Sol / G 8 6271,93
Sol# / G# 8 6644,88
La / A 8 7040,00
La# / A# 8 7458,62
Si / B 8 7902,13
Do / C 9 8372,02
Do# / C# 9 8869,84
Re / D 9 9397,27
Re# / D# 9 9956,06
Mi / E 9 10548,08
Fa / F 9 11175,30
Fa# / F# 9 11839,82
Sol / G 9 12543,86
Sol# / G# 9 13289,75
La / A 9 14080,00
La# / A# 9 14917,24
Si / B 9 15804,26

 

Tagged With: Arduino

Comments

  1. Angel Emilio Puricelli says

    04/06/2018 at 16:03

    No esta especificado los parametros para una nota REDONDA que es el doble de la BLANCA

    Responder
    • Dani says

      04/06/2018 at 16:16

      Gracias por tu comentario, he añadido la redonda en la tabla de tiempos.

      Responder
  2. Angel Emilio Puricelli says

    05/06/2018 at 22:39

    Gracias Dany pero aún te falta en la lista la última que es la SEMIFUSA que viene a ser la mitad de la FUSA.-

    Responder
    • Dani says

      05/06/2018 at 22:52

      Ya la he añadido, gracias por tus sugerencias Ángel.

      Podríamos llegar de la máxima a la semigarrapatea, pero es simplemente para que sirva de orientación.

      La verdad es que desgraciadamente sobre música sólo soy un aprendiz, así que agradezco cualquier sugerencia. Muchas gracias!

      Dani

      Responder
  3. Angel Emilio Puricelli says

    08/06/2018 at 00:01

    Gracias Dani.-

    Responder
  4. José Villanueva Ruibal says

    28/08/2018 at 00:45

    Hola Dani, Te consulto por lo siguiente, quisiera saber si reemplazando el zumbador por alguna placa arduino programada con un sketch se podría emular el sonido de algún instrumento para acercarse más a un intérprete midi. No se si ya hay algún proyecto que encare esto. Mi idea es construir una gaita gallega electrónica. Saludos, José.

    Responder
    • Dani says

      28/08/2018 at 10:47

      Hola José,
      Si que hay proyectos MIDI con Arduino pero utilizan una librería específica y tienen que ser programadas por código. Si haces una búsqueda no tendrás problemas en encontrar este tipo de proyectos.
      Por bloques podrías hacerlo utilizando la comunicación serie con el PC pero necesitarías más programación por código en la parte MIDI del PC por lo que no tendría mucho sentido.
      Si lo que quieres hacer es específicamente una gaita quizá puedas incluirlo como instrumento en mBlock igual que se haría con Scratch y luego podrías programarlo por bloques pero siempre en modo colaborativo con el PC.
      Saludos,
      Dani

      Responder
      • José Villanueva Ruibal says

        28/08/2018 at 15:18

        Gracias por tu pronta respuesta Dani, la idea es una gaita y en modo no colaborativo con el PC, sino con una placa arduino autónoma quemada con un sketch, a modo que utilizando un conjunto de teclas (toques sobre orificios) pueda construir un puntero para aprendizaje de gaita con auricular, Sin molestar a los vecinos. Tengo dudas sobre si con los modestos recursos de memoria de la Atmega o la 328 pudiera alojar un sketch con la función de reconstrucción de los parámetros de la gaita (cepstrum). Posiblemente la reconstrucción analogica del pitch con integrados analógicos discretos sumando cuatro ondas, sinusoidal, cuadrada, sierra y triangular en proporciones ajustables pueda facilitar el logro del objetivo. De la misma manera me surgen dudas sobre como gobernar los parámetros de tiempos de ataque, caída, sostenimiento y extinción de la señal de la nota pulsada. Cordialmente, José

        Responder
  5. Karen Luna says

    20/10/2018 at 07:17

    Disculpa, me gustaría saber como colocar 2 claves a la vez en el código, ya que una clave es de Sol pero la otra es de Fa y ambas tienen diferentes notas, y no sé como agregar ambas instrucciones a la vez en el código.

    Responder
    • Dani says

      21/10/2018 at 16:46

      Hola Karen,
      Me temo que esto no es posible, al menos por bloques. Con código puedes encontrar algunas librerías que te pueden permitir hacer lo que buscas, pero por bloque no.
      Saludos

      Responder
      • harreola says

        24/07/2020 at 22:37

        pero entonces cual seria la escritura para tocar dos tonos a la ves como el caso de los tonos dtmf

        Responder
        • Dani says

          25/07/2020 at 08:54

          A través de bloques no se puede conseguir generar tonos dtmf pero hay una librería específica que puedes utilizar con el IDE de Arduino. Te dejo enlace con la explicación: https://create.arduino.cc/projecthub/dilshan-jayakody/generate-dtmf-tones-only-using-arduino-7d3713

          Responder
    • Gonzalo says

      04/07/2021 at 12:04

      sí se puede hacer, porque te muestra todas las notas de todas las escalas, porque son los índices acústicos, y la clave de Fa es grave, entonces tienes que buscar por debajo de la 4ª escala.

      Responder
  6. Agustin says

    08/04/2019 at 00:35

    Hola, se pueden generar sonidos de guitarra?

    Responder
    • Dani says

      08/04/2019 at 07:37

      De manera directa no, pero utilizando un sintetizador o conectado a un ordenador si.

      Responder
  7. Agustin says

    08/04/2019 at 00:37

    quisiera hacer una especie de teclado con una guitarra de ps2 y que suene como una guitarra real, o similar.

    Responder
    • Dani says

      08/04/2019 at 07:39

      Tal y como te decía en un comentario anterior deberías poder conectar la guitarra a un sintetizador o a un ordenador si es USB. De manera independiente con Arduino es mucho más complicado y seguirías necesitando funciones de sintetizador. Hay librerías específicas de sintetizador para Arduino que podrían servirte.

      Responder
  8. Carlos jafet says

    18/04/2019 at 06:24

    Hola disculpa tengo una pequeña duda estoy haciendo un proyecto y quiero hacer un pequeño piano eléctrico y quiero saber como como hacer para cambiar de tonalidad como por ejemplo de tocar piano a guitarra o a órgano como en un teclado real es posible hacer eso?

    Responder
    • Dani says

      18/04/2019 at 17:47

      Se puede hacer pero a través de un controlador MIDI, investiga por MIDI + Arduino y encontrarás cosas.

      Responder
  9. TecnoPro says

    25/05/2019 at 19:44

    Una placa Arduino pude emitir por el mismo puerto dos notas a la vez con la función tone, algo tipo:

    tone(11,243,100);
    tone(11,654,100);
    Necesitaría una respuesta lo antes posible,
    Gracias

    Responder
    • Dani says

      25/05/2019 at 19:49

      Hola,
      A la vez no.
      Saludos

      Responder
  10. Erik C. says

    07/06/2019 at 03:00

    Quisiera saber , ¿Como puedo programar 2 buzzers?, para que suenen al mismo tiempo pero con melodías diferentes.
    Agradecería mucho si me pueden ayudar.

    Responder
    • Dani says

      07/06/2019 at 07:12

      Hola Erik,
      De momento con programación por bloques no vas a poder conseguir que 2 buzzers suenen al mismo tiempo, ya que utilizarían el mismo timer interno para conseguir la frecuencia deseada.
      Sin embargo utilizando el IDE de Arduino para programar con código la placa si que hay disponible alguna librería que permite el uso de múltiples buzzers.
      Saludos

      Responder
  11. wilsonadiaza says

    18/02/2020 at 01:24

    Hola buen dia, quisiera saber cuales serian las instrucciones para que sonase unas tonalidades básicas en el buzzer pero con la versión de mblock5? le agradecería mucho,
    Ya que toda la información que ustedes manejan solo esta con la versión anterior mblock3

    Responder
    • Dani says

      18/02/2020 at 06:13

      Hola Wilson,
      En mBlock5 tienes un bloque dentro del apartado “Pin” una vez has seleccionado el dispositivo Arduino llamado “toca nota” que te permite seleccionar la nota. Ya no está en notación anglosajona y puedes seleccionar de la nota “do” a “si” en varias escalas.
      En la plataforma de cursos vas a empezar a ver los nuevos cursos con mBlock5 así como los retos de programación, pero hemos estado muchos años utilizando mBlock3.
      Saludos

      Responder
  12. José Ramón says

    30/03/2020 at 00:17

    Hola. Me gustaría hacerle un libro musical a mi hijo. Había pensado que al pulsar, en vez de sonar notas, sonaran animales (archivos mp3 o wav) . Quizás fuera posible con algún reproductor SD y arduino. Soy novato pero sigo las explicaciones. Ojalá puedas ayudarme.

    Responder
    • Dani says

      30/03/2020 at 06:35

      Hola José Ramón,

      Me parece una muy buena idea y claro que se puede hacer. Hay disponibles reproductores MP3 como el que distribuye nuestro colaborador E-Ika que puedes controlar a través de Arduino.
      Nosotros hemos utilizado el módulo Me Audio Player de Makeblock para crear reproducir voces con efecto de robot en mp3 y funciona muy bien. Lo puedes programar por bloques con una extensión para mBlock y ya lleva un pequeño circuito que amplifica el sonido suficiente para emitirlo por el altavoz incorporado. Creo que para tu proyecto sería ideal.
      Además tiene un micrófono y se le puede dar la orden de grabar, y luego puedes reproducir el sonido grabado, que quizá también lo podrías incorporar como función dentro de tu proyecto de libro musical.

      Saludos

      Responder
      • José Ramón says

        01/04/2020 at 11:47

        Gracias amigo. He encontrado unos pulsadores que graban sonido y reproducen por unos 50 céntimos… sin hacer falta arruino , así que mejor que mejor. Gracias de nuevo

        Responder
        • Dani says

          01/04/2020 at 12:48

          Genial José Ramón, mucho más sencillo así.

          Responder
  13. Juan says

    02/05/2020 at 06:54

    Podrías hacer el código de una marcha chilena militar que se llama el último de línea

    Responder
    • Dani says

      02/05/2020 at 09:10

      Hola Juan,
      Lo lamento pero no hacemos código a medida.
      Inténtalo, seguro que puedes hacerlo, y si necesitas ayuda puedes apuntarte a nuestros cursos.
      Saludos

      Responder
  14. Pablo Garcia says

    21/05/2020 at 05:13

    hola dani,
    como le puedo hacer si quiero poner varias “canciones ” diferentes en un mismo sketch para reproducirlas

    Responder
    • Dani says

      21/05/2020 at 06:07

      Hola Pablo,
      Dentro de un mismo programa puedes poner varias melodías a las que llames a través de diferentes condiciones como pulsadores o un mando a distancia. También puedes organizarlas en subprogramas o funciones, pero simplemente con condicionales podrías establecer la selección de la canción.

      Responder
  15. Angel Antonio says

    08/06/2020 at 20:09

    hola dani estoy trabajando en un proyecto de construir un auto ya programado con modulo L298n para que haga movimientos espesificos (perdon que no tenga que ver con el proyecto) no se si tuvieras un programa para arduino ya que lo he intentado como 50 veces y me da que esta equivocado.
    Te agradeceria mucho que me ayudaras ?? sludos.

    Responder
    • Dani says

      08/06/2020 at 20:33

      Hola Ángel Antonio,
      No puedo prestarte ese tipo de ayuda. No creamos ni enviamos programas a medida.
      En la plataforma tenemos un curso para programar un vehículo en Arduino con el L298n y que se pueda manejar por bluetooth si te pudiera interesar.
      Saludos y siento no poder ser de más ayuda.

      Responder
  16. Emily says

    18/08/2020 at 22:31

    Hola Dani, quisiera tu ayuda, como coloco la negra y la blnca y todo eso?, para que sirven?, o sea puedo hacer la programación sin utilizar estos?

    Responder
    • Dani says

      19/08/2020 at 11:46

      Las diferentes figuras tienen que ver con el tiempo en el que el sonido se está produciendo tal y como tienes en la tabla del artículo. Se trata de establecer una base de tiempo y fijar el tiempo de cada figura en relación a esa base de tiempo. Por ejemplo una blanca va a durar el doble de tiempo que una negra.
      Si quieres que suene tal y como aparece en una partitura deberías programar esos tiempos tal y como se ve en el ejemplo del artículo con tone(pin, frecuencia, tiempo).

      Responder
  17. Carmen says

    05/06/2021 at 14:11

    Hola, al compilar el código me da como error que falta la declaración de “notaActual”, como puedo solucionarlo?. Gracias.

    Responder
    • Carmen says

      05/06/2021 at 14:17

      vale, ya lo he identificado el error, lo había escrito mal

      Responder
      • Dani says

        05/06/2021 at 14:24

        Si finalmente lo has solucionado, genial.

        Responder
  18. Mochodog says

    29/08/2021 at 20:59

    Muy buen post!.

    Responder
  19. Ricardo rdz says

    19/11/2022 at 07:11

    Buena explicación gracias.
    Podrías hacer un tutorial de una canción como la de Quevedo?
    o enseñarme como hacer el código de esa canción, te lo agradecería bastaste

    Responder
    • Dani says

      19/11/2022 at 10:53

      Si tienes la partitura no te será difícil convertir cualquier canción, no es necesario un tutorial por canción. Inténtalo y si tienes alguna duda concreta me preguntas y te intento ayudar.

      Responder
  20. Guillermo says

    27/12/2022 at 23:44

    gran aporte gracias

    Responder

Deja una respuesta Cancelar la respuesta

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

Libro | Contacto | Blog | EMPLEO | Sobre mi | Política de privacidad

Juegos Robótica© 2023 ·

Acceso Alumn@s

¿Has olvidado tu contraseña?

¿Te interesa la programación creativa y la robótica educativa?

Suscríbete al boletín de correo

¿Cuál es tu perfil? *

Aviso legal

Comprueba tu bandeja de entrada o de spam ahora para confirmar tu suscripción.