{"id":902,"date":"2021-09-21T19:43:37","date_gmt":"2021-09-21T17:43:37","guid":{"rendered":"https:\/\/www.pinguytaz.net\/?p=902"},"modified":"2021-09-21T19:43:39","modified_gmt":"2021-09-21T17:43:39","slug":"musica-con-un-arduinoesp32-y-un-buzzer","status":"publish","type":"post","link":"https:\/\/www.pinguytaz.net\/index.php\/2021\/09\/21\/musica-con-un-arduinoesp32-y-un-buzzer\/","title":{"rendered":"Musica con un Arduino&#038;ESP32 y un Buzzer"},"content":{"rendered":"\n<p>Con un circuito muy sencillo de un <a href=\"https:\/\/www.arduino.cc\">Arduino<\/a> o un <a href=\"https:\/\/www.espressif.com\">ESP32<\/a>, podemos generar  sonidos de forma simple y barata, la calidad de sonido es baja pero suficiente para alertas, podemos incluso crear peque\u00f1as piezas musicales, claro esta con baja calidad recordando al antiguo <a href=\"https:\/\/es.wikipedia.org\/wiki\/Sinclair_ZX_Spectrum\">ZX-Spectrum<\/a> con su sentencia \u201cBEEP\u201d. <\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignleft size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-15.png\" alt=\"\" class=\"wp-image-903\" width=\"166\" height=\"96\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-15.png 408w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-15-300x173.png 300w\" sizes=\"auto, (max-width: 166px) 100vw, 166px\" \/><\/figure><\/div>\n\n\n\n<p>El funcionamiento es muy simple conectaremos el positivo a una de las entradas PWM y la otra a GND, lo que nos permitir\u00e1 realizar ondas de alto a bajo que generaran el zumbido. Debemos tener cuidado pues la corriente de salida de Arduino no podr\u00e1 pasar de 40mA. Tambi\u00e9n podemos colocar un altavoz pero en este caso sera necesaria m\u00e1s potencia y ademas proteger las salidas de nuestro <a href=\"https:\/\/www.arduino.cc\">Arduino<\/a> o <a href=\"https:\/\/www.espressif.com\">ESP32<\/a> (Placa de desarrollo desde ahora) con alguna resistencia.<\/p>\n\n\n\n<p>En <meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\"><a href=\"https:\/\/www.arduino.cc\">Arduino<\/a> disponemos de la funci\u00f3n \u201c<em>tone<\/em>\u201d que nos genera una onda cuadrada de una frecuencia especifica en el pin que indiquemos. Debemos tener en cuenta que solo podremos generar un tono a la vez, aunque sean en diferentes pines, y debemos saber  tambi\u00e9n que solo producir\u00e1 tonos mayores de 31Hz.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-code\"><code>tone(Pin,frecuencia);\ntone(Pin,frecuencia,duraci\u00f3n);\n\nnoTone(Pin);  \/\/ Para la generaci\u00f3n de onda<\/code><\/pre>\n<\/div>\n<\/div>\n\n\n\n<p>En el <meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\"><a href=\"https:\/\/www.espressif.com\">ESP32<\/a> no disponemos de la funci\u00f3n <em>tone<\/em> pero tenemos otra similar, ledcWriteTone, incluso alguna otra funci\u00f3n que nos ayuda a  generar notas musicales.<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\" style=\"flex-basis:100%\">\n<pre class=\"wp-block-code\"><code>\/\/ Antes de usar Tonos deberemos definir el Pin y canal a utilizar como en PWM, \nledcAttachPin(GPIO, Canal)\n\nledcWriteTone(GPIOx, Frecuencia)\ndelay(duraci\u00f3n)  \n\n\/\/ Silenciamos noTone()\nledcDetachPin(GPIOx)\nledcWrite(Canal,0)\n\n\/\/ Especial Notas musicales de ESP32\nledcWriteTone(Canal,frecuencia);\nledcWriteNote(Canal, Nota, Octava);  Genera una nota de la octava elegida.<\/code><\/pre>\n\n\n\n<p>En este POST no usaremos las funciones de notas musicales del ESP32 ya que generaremos la nuestra propia para compatibilizar Arduino &amp; ESP32 en uno solo de la forma m\u00e1s sencilla posible.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-16-1024x575.png\" alt=\"\" class=\"wp-image-905\" width=\"360\" height=\"202\" srcset=\"https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-16-1024x575.png 1024w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-16-300x168.png 300w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-16-768x431.png 768w, https:\/\/www.pinguytaz.net\/wp-content\/uploads\/2021\/09\/image-16.png 1188w\" sizes=\"auto, (max-width: 360px) 100vw, 360px\" \/><\/figure><\/div>\n\n\n\n<p>El Circuito es muy simple conectaremos la masa de nuestra plataforma a un pin del Buzzer y el otro pin al PWM que elijamos.<\/p>\n\n\n\n<p>Las notas musicales son frecuencias lo \u00fanico que deberemos conocer la frecuencia que corresponde a cada nota y generarla con la salida PWM conectada al Buzzer.<\/p>\n\n\n\n<p>Conociendo que el <strong>DO<\/strong> de la <strong>4\u00aa Octava<\/strong> tiene una frecuencia de 261,63 Hz, que tomaremos como nota 0, para octavas inferiores generaremos ordenes negativos como se puede ver en la tabla siguiente.<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td><strong>Nota<\/strong><\/td><td><strong>Frecuencia Hz<\/strong><\/td><td><strong><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\"><strong>Orden<\/strong><\/strong><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\"><strong><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\"><strong>Octava<\/strong><\/strong><\/td><\/tr><tr><td>La<\/td><td>220,00<\/td><td>-3<\/td><td>Octava 3\u00aa<\/td><\/tr><tr><td>La# \/ Sib<\/td><td>233,08<\/td><td>-2<\/td><td>Octava 3\u00aa<\/td><\/tr><tr><td>Si<\/td><td>246,94<\/td><td>-1<\/td><td>Octava 3\u00aa<\/td><\/tr><tr><td><em><strong>Do<\/strong><\/em><\/td><td><em><strong>261,63<\/strong><\/em><\/td><td>0<\/td><td>Octava 4\u00aa<\/td><\/tr><tr><td><em><strong>Do# \/ Reb<\/strong><\/em><\/td><td><em><strong>277,18<\/strong><\/em><\/td><td><em><strong>1<\/strong><\/em><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 4\u00aa<\/td><\/tr><tr><td><em><strong>Re<\/strong><\/em><\/td><td><em><strong>293,66<\/strong><\/em><\/td><td><em><strong>2<\/strong><\/em><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 4\u00aa<\/td><\/tr><tr><td><em><strong>Re# \/Mib<\/strong><\/em><\/td><td><em><strong>311,13<\/strong><\/em><\/td><td><em><strong>3<\/strong><\/em><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 4\u00aa<\/td><\/tr><tr><td><em><strong>Mi<\/strong><\/em><\/td><td><em><strong>329,63<\/strong><\/em><\/td><td><em><strong>4<\/strong><\/em><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 4\u00aa<\/td><\/tr><tr><td><em><strong>Fa<\/strong><\/em><\/td><td><em><strong>349,23<\/strong><\/em><\/td><td><em><strong>5<\/strong><\/em><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 4\u00aa<\/td><\/tr><tr><td><em><strong>Fa# \/Solb<\/strong><\/em><\/td><td><em><strong>369,99<\/strong><\/em><\/td><td><em><strong>6<\/strong><\/em><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 4\u00aa<\/td><\/tr><tr><td><em><strong>Sol<\/strong><\/em><\/td><td><em><strong>391,99<\/strong><\/em><\/td><td><em><strong>7<\/strong><\/em><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 4\u00aa<\/td><\/tr><tr><td><em><strong>Sol# \/ Lab<\/strong><\/em><\/td><td><em><strong>415,30<\/strong><\/em><\/td><td><em><strong>8<\/strong><\/em><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 4\u00aa<\/td><\/tr><tr><td><em><strong>La<\/strong><\/em><\/td><td><em><strong>440,00<\/strong><\/em><\/td><td><em><strong>9<\/strong><\/em><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 4\u00aa<\/td><\/tr><tr><td><em><strong>La# \/ Sib<\/strong><\/em><\/td><td><em><strong>466,16<\/strong><\/em><\/td><td><em><strong>10<\/strong><\/em><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 4\u00aa<\/td><\/tr><tr><td><em><strong>Si<\/strong><\/em><\/td><td><em><strong>493,88<\/strong><\/em><\/td><td><em><strong>11<\/strong><\/em><\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 4\u00aa<\/td><\/tr><tr><td>Do<\/td><td>523,25<\/td><td>12<\/td><td>Octava 5\u00aa<\/td><\/tr><tr><td>Do# \/ Reb<\/td><td>554,36<\/td><td>13<\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 5\u00aa<\/td><\/tr><tr><td>Re<\/td><td>587,33<\/td><td>14<\/td><td><meta http-equiv=\"content-type\" content=\"text\/html; charset=utf-8\">Octava 5\u00aa<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Pero como seguro que nos interesan tener m\u00e1s octavas diremos que esta tabla se puede completar f\u00e1cilmente con la siguiente formula:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ Recordemos empezamos desde el DO de la 4\u00aaOctava que corresponde al orden 0 y frecuencia 261.63\nFrecuencia = 261,625 * pow(1,0594630943593, Orden)<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Ahora debemos tener un valor de duraci\u00f3n aproximado para cada nota<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Nombre<\/strong><\/td><td><strong>Valor Musical<\/strong><\/td><td><strong>Tiempo<\/strong><\/td><\/tr><tr><td>Redonda<\/td><td>4\/4<\/td><td>4 segundos<\/td><\/tr><tr><td>Blanca<\/td><td>2\/4<\/td><td>2 segundos<\/td><\/tr><tr><td>Negra<\/td><td>1\/4<\/td><td>1 segundo<\/td><\/tr><tr><td>Corchea<\/td><td>1\/8<\/td><td>\u00bd Segundos<\/td><\/tr><tr><td>Semicorchea<\/td><td>1\/16<\/td><td>\u00bc Segundo<\/td><\/tr><tr><td>Fusa<\/td><td>1\/32<\/td><td>\u215b Segundo<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Y ya podemos generar nuestra funci\u00f3n \u00abbeep\u00bb en recuerdo del ZX-Spectrum.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/************************************************************\n * Funciones para generar sonido\n * \n * void beep(float, unsigned int tono)  \n *    Genera una nota indexada como 0 el DO de la 4\u00aa Octava\n *    de una duraci\u00f3n.\n *    La Nota 100 Indica silencio\n  ************************************************************\/\nvoid beep(float duracion, unsigned int nota)\n{\n   int frecuencia;  \n\n   if(nota &lt; 100)\n   {\n      \/\/ Calculamos la frecuencia a tocar, indice 0 Do4\n      frecuencia = (int) 261.625 * pow(1.0594630943593,nota);\n   }\n   else frecuencia =0;\n   \n \/\/ Codigo Arduino\n  #if defined(PLAT_ARDUINO)\n     \/\/ Codigo Arduino\n     tone(BZ, frecuencia);\n     delay(duracion*500);\n     noTone(BZ);\n  #else\n    ledcWriteTone(0, frecuencia); \/\/Toca Tono definido en la frecuencia con su duraci\u00f3n\n    delay(duracion*500);\n    ledcWrite(0,0);   \n  #endif\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n\n\n\n<p>Tenemos el codigo completo, compatible con Arduino y ESP32 en <a href=\"https:\/\/github.com\/pinguytaz\/Arduino\/blob\/master\/CuadernoTecnico\/PWM\/Musica\/Musica.ino\">GITHUB<\/a> \u00abhttps:\/\/github.com\/pinguytaz\/Arduino\/blob\/master\/CuadernoTecnico\/PWM\/Musica\/Musica.ino\u00bb<\/p>\n\n\n\n<p> de esta forma si se decide actualizar o mejorar el c\u00f3digo siempre lo tendremos actualizado, as\u00ed como si a\u00f1adimos nuevas m\u00fasicas en los fichero .h ya que de momento solo tenemos dos FrereJacwues y La Guerra de las Galaxias.<\/p>\n\n\n\n<p><\/p>\n<\/div>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Con un circuito muy sencillo de un Arduino o un ESP32, podemos generar sonidos de forma simple y barata, la calidad de sonido es baja pero suficiente para alertas, podemos incluso crear peque\u00f1as piezas musicales, claro esta con baja calidad recordando al antiguo ZX-Spectrum con su sentencia \u201cBEEP\u201d. El funcionamiento es muy simple conectaremos el [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":905,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-container-style":"default","site-container-layout":"default","site-sidebar-layout":"default","disable-article-header":"default","disable-site-header":"default","disable-site-footer":"default","disable-content-area-spacing":"default","footnotes":""},"categories":[3,176],"tags":[23,178,177,181,180,179],"class_list":["post-902","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-arduino","category-esp32","tag-arduino","tag-buzzer","tag-esp32","tag-notas-musicales","tag-pwm","tag-zx-spectrum"],"_links":{"self":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/902","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/comments?post=902"}],"version-history":[{"count":5,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/902\/revisions"}],"predecessor-version":[{"id":909,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/posts\/902\/revisions\/909"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media\/905"}],"wp:attachment":[{"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/media?parent=902"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/categories?post=902"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pinguytaz.net\/index.php\/wp-json\/wp\/v2\/tags?post=902"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}