{"id":190,"date":"2017-03-12T22:55:02","date_gmt":"2017-03-12T22:55:02","guid":{"rendered":"http:\/\/escueladefrikis.com\/?p=190"},"modified":"2017-03-12T22:55:02","modified_gmt":"2017-03-12T22:55:02","slug":"theremin-proyecto-3","status":"publish","type":"post","link":"https:\/\/escueladefrikis.com\/index.php\/2017\/03\/12\/theremin-proyecto-3\/","title":{"rendered":"Therem\u00edn &#8211; Proyecto 3"},"content":{"rendered":"<p>Hoy vamos a modificar nuestro anterior proyecto (medidor de distancias) para construir un therem\u00edn, o algo que se aproxima a su funcionamiento.<\/p>\n<p>Como siempre, comenzamos con preguntas: \u00bfqu\u00e9 es un <a href=\"https:\/\/es.wikipedia.org\/wiki\/Therem%C3%ADn\">therem\u00edn<\/a>?<\/p>\n<p style=\"text-align: center;\"><iframe loading=\"lazy\" src=\"\/\/www.youtube.com\/embed\/_YYABE0R3uA\" width=\"560\" height=\"314\" allowfullscreen=\"allowfullscreen\"><\/iframe><\/p>\n<p>Un therem\u00edn es un instrumento musical que se toca sin contacto f\u00edsico, haciendo variar las notas aproximando y alejando las manos del instrumento.\u00a0Como ya sabemos <a href=\"https:\/\/www.escueladefrikis.com\/2017\/02\/20\/segundo-proyecto-detector-distancias\/\" target=\"_blank\">medir distancias<\/a>, vamos a utilizar la distancia que estamos midiendo para generar un sonido.<!--more--><\/p>\n<h3>\u00bfC\u00f3mo generamos sonido?<\/h3>\n<p>Para ello utilizaremos un \u00abbuzzer\u00bb, que viene a ser un vibrador o zumbador.<\/p>\n<p>El sonido no deja de ser aire vibrando que nuestros o\u00eddos captan. Dependiendo de a qu\u00e9 frecuencia vibre, oiremos un sonido u otro: cuanto menor sea la frecuencia m\u00e1s grave ser\u00e1 el sonido y cuanto mayor sea la frecuencia m\u00e1s agudo. El o\u00eddo humano es capaz de percibir frecuencias entre los 20 Hercios (Hz, n\u00famero de ciclos por segundo) y los 20.000 Hz.<\/p>\n<p>Para nuestro proyecto vamos a traducir la distancia medida a una frecuencia y vamos a hacer vibrar el \u00abbuzzer\u00bb a esa frecuencia. El \u00abbuzzer\u00bb es un cilindro negro con un s\u00edmbolo \u00ab+\u00bb encima de una de sus patillas, indicando su polaridad.<\/p>\n<p>Para hacer vibrar el \u00abbuzzer\u00bb y por tanto generar un sonido, tenemos que activarlo (poniendo el pin a valor HIGH, es decir, +5 voltios) y desactivarlo (poniendo el pin a valor LOW, es decir, 0 voltios) a la frecuencia deseada, pero tenemos una funci\u00f3n que nos permite hacerlo de manera sencilla: <a href=\"https:\/\/www.arduino.cc\/en\/Reference\/Tone\" target=\"_blank\"><span style=\"font-family: 'courier new', courier, monospace;\">tone()<\/span><\/a>. He aqu\u00ed un ejemplo de c\u00f3digo:<\/p>\n<pre>int PIN_BUZZER=9;\nint FREQUENCY=440; \/\/ A (la) pitch\nint DURATION=1000;  \/\/ in milliseconds\n\ntone(PIN_BUZZER,FREQUENCY,DURATION);<\/pre>\n<p>Este c\u00f3digo genera una se\u00f1al de 440 hercios, que equivale a la nota La, durante un segundo en el pin n\u00famero 9.<\/p>\n<h3>Potenci\u00f3metros<\/h3>\n<p>Para que nuestra familia no quiera echarnos de casa, vamos a a\u00f1adirle un control del volumen. \u00bfC\u00f3mo hacemos esto?. Controlando el voltaje del \u00abbuzzer\u00bb: a mayor voltaje, m\u00e1s sonar\u00e1. Y, \u00bfc\u00f3mo podemos controlar o modificar el voltaje de una parte del circuito? Utilizando un potenci\u00f3metro.<\/p>\n<p>Un potenci\u00f3metro es una resistencia variable, normalmente mediante una ruedecilla:<\/p>\n<figure id=\"attachment_203\" aria-describedby=\"caption-attachment-203\" style=\"width: 300px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-203\" src=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/03\/potenciometro-1s.jpg\" alt=\"Potenci\u00f3metro\" width=\"300\" height=\"106\" \/><figcaption id=\"caption-attachment-203\" class=\"wp-caption-text\">Potenci\u00f3metro<\/figcaption><\/figure>\n<p>Como veis, este componente tiene 3 patillas y la patilla central (patilla B en el gr\u00e1fico) es la que nos proporciona una resistencia variable. En nuestro caso tenemos un potenci\u00f3metro de 10 K\u03a9, as\u00ed que girando el potenci\u00f3metro tendremos una resistencia entre 0 \u03a9 y 10 K\u03a9. De esta manera podemos controlar cu\u00e1l es el voltaje del buzzer y por tanto su volumen con este circuito<\/p>\n<h3>Conexiones<\/h3>\n<p>Las conexiones que vamos a realizar son exactamente las mismas que en el proyecto anterior pero sustituyendo el LED por el \u00abbuzzer\u00bb. La conexi\u00f3n del \u00abbuzzer\u00bb se har\u00eda de la siguiente manera:<\/p>\n<figure id=\"attachment_201\" aria-describedby=\"caption-attachment-201\" style=\"width: 667px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-201\" src=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/03\/circuito_buzzer-1.png\" alt=\"Circuito buzzer con potenci\u00f3metro\" width=\"667\" height=\"458\" srcset=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/03\/circuito_buzzer-1.png 667w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/03\/circuito_buzzer-1-300x206.png 300w\" sizes=\"auto, (max-width: 667px) 100vw, 667px\" \/><figcaption id=\"caption-attachment-201\" class=\"wp-caption-text\">Circuito buzzer con potenci\u00f3metro<\/figcaption><\/figure>\n<p>Y conectado quedar\u00eda:<\/p>\n<figure id=\"attachment_206\" aria-describedby=\"caption-attachment-206\" style=\"width: 688px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" class=\"size-large wp-image-206\" src=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/03\/2017-03-12-21.13.39-1-1024x759.jpg\" alt=\"Proyecto theremin\" width=\"688\" height=\"510\" srcset=\"https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/03\/2017-03-12-21.13.39-1-1024x759.jpg 1024w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/03\/2017-03-12-21.13.39-1-300x222.jpg 300w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/03\/2017-03-12-21.13.39-1-768x569.jpg 768w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/03\/2017-03-12-21.13.39-1-1536x1139.jpg 1536w, https:\/\/escueladefrikis.com\/wp-content\/uploads\/2017\/03\/2017-03-12-21.13.39-1-2048x1518.jpg 2048w\" sizes=\"auto, (max-width: 688px) 100vw, 688px\" \/><figcaption id=\"caption-attachment-206\" class=\"wp-caption-text\">Proyecto theremin<\/figcaption><\/figure>\n<h3>C\u00f3digo<\/h3>\n<p>Aqu\u00ed ten\u00e9is el c\u00f3digo del programa.<\/p>\n<pre>\/\/ Constants\nconst int PIN_TRIGGER=9;\nconst int PIN_ECHO=10;\nconst int PIN_BUZZER=12;\nconst long MIN_DISTANCE=200;\n\n\/\/ Vars\nlong distance;\nlong echoDurationTime;\nString stringOutput;\n\nvoid setup(){\n Serial.begin(9600);\n pinMode(PIN_TRIGGER, OUTPUT);\n pinMode(PIN_ECHO, INPUT);\n pinMode(PIN_BUZZER,OUTPUT);\n}\n\nvoid loop(){\n Serial.println(\"---------------------------------\");\n digitalWrite(PIN_TRIGGER,LOW); \/\/ Assure that we are LOW before we activate the trigger\n delayMicroseconds(5); \n digitalWrite(PIN_TRIGGER, HIGH); \/\/ Activate the trigger\n delayMicroseconds(10);\n\n echoDurationTime=pulseIn(PIN_ECHO, HIGH); \/\/ Read the echo signal\n \n distance= 0.17*echoDurationTime; \/\/ Distance in milimeters\n\n int pitch=31+distance;\n tone(PIN_BUZZER,pitch);\n delay(10);\n Serial.print(\"Buzzing at \");\n Serial.print(pitch);\n Serial.println(\" Hz.\");\n}<\/pre>\n<p>La primera parte del c\u00f3digo es exactamente igual que nuestro <a href=\"https:\/\/www.escueladefrikis.com\/2017\/02\/20\/segundo-proyecto-detector-distancias\/\" target=\"_blank\">proyecto anterior de medir distancias<\/a>, pero hemos sustituido el c\u00f3digo que hac\u00eda encenderse el LED por el c\u00f3digo que genera el sonido:<\/p>\n<ul>\n<li>El rango audible comienza en los 20 Hz, pero si miramos la referencia de la funci\u00f3n <a href=\"https:\/\/www.arduino.cc\/en\/Reference\/Tone\" target=\"_blank\">tone()<\/a> vemos que la frecuencia m\u00ednima es 31 Hz. Para comenzar en los 31 Hz le sumamos 31 a la distancia calculada.<\/li>\n<li>Despu\u00e9s, utilizamos la funci\u00f3n <span style=\"font-family: 'courier new', courier, monospace;\">tone()<\/span> para emitir un sonido del tono (<em>pitch<\/em> en ingl\u00e9s) deseado.<\/li>\n<li>A\u00f1adimos un peque\u00f1o retardo.<\/li>\n<\/ul>\n<h3>C\u00f3mo mejorar nuestro proyecto<\/h3>\n<p>El principal problema viene dado por la sensibilidad del sensor y c\u00f3mo traducir la distancia en una nota:<\/p>\n<ul>\n<li>Hay tonos realmente desagradables, tanto muy bajos como muy altos. Una opci\u00f3n es descartar frecuencias muy altas y muy bajas. Se puede hacer con un simple if:<\/li>\n<\/ul>\n<pre>if (distance&lt;=50) {\n  distance=50;\n} else if\u00a0(distance&gt;=1000) {\n  distance=1000;\n}<\/pre>\n<p style=\"padding-left: 30px;\">O bien con la funci\u00f3n <a href=\"https:\/\/www.arduino.cc\/en\/Reference\/Constrain\" target=\"_blank\"><span style=\"font-family: 'courier new', courier, monospace;\">constrain()<\/span><\/a>, que b\u00e1sicamente hace lo mismo:<\/p>\n<pre>distance=constrain(distance, 50, 1000)<\/pre>\n<ul>\n<li>Probando el proyecto tal cual, puede resultar que a poco que nos movamos y que la distancia cambie, el tono cambia mucho. Con este c\u00f3digo, cada mil\u00edmetro de diferencia implica un hercio de cambio y puede ser excesivo. Una manera ser\u00eda hacer menos sensible a la distancia, dividiendo la distancia por 2 o por 3:<\/li>\n<\/ul>\n<pre> int pitch=31+distance\/2;\n<\/pre>\n<p style=\"padding-left: 30px;\">Una manera m\u00e1s \u00abelegante\u00bb de manejar la sensibilidad es utilizar la funci\u00f3n <a href=\"https:\/\/www.arduino.cc\/en\/Reference\/Map\" target=\"_blank\">map()<\/a>, que traslada un rango de valores a otro rango de valores:<\/p>\n<pre>pitch=map(distance, 50, 1000,440,880);<\/pre>\n<p style=\"padding-left: 30px;\">Con este c\u00f3digo trasladar\u00edamos los valores de distancia entre 50 y 1000 mil\u00edmetros al rango entre 440 .Hercios (la) y 880 Hercios (la en una octava m\u00e1s alta), es decir, el rango que equivale a una octava (nota:\u00a0<a href=\"https:\/\/es.wikipedia.org\/wiki\/Frecuencias_de_afinaci%C3%B3n_del_piano\" target=\"_blank\">frecuencias de afinaci\u00f3n de un piano<\/a>).<\/p>\n<p>Con estos cambios, podemos cambiar la siguiente parte de c\u00f3digo:<\/p>\n<pre> int pitch=31+distance;<\/pre>\n<p>Podemos cambiarlo de la siguiente manera:<\/p>\n<pre>distance=constrain(distance, 50, 1000)\nint pitch=map(distance,50,1000,440,880);<\/pre>\n<p>Y a partir de aqu\u00ed, la imaginaci\u00f3n es el l\u00edmite. Probad a realizar este proyecto y espero vuestros comentarios.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hoy vamos a modificar nuestro anterior proyecto (medidor de distancias) para construir un therem\u00edn, o algo que se aproxima a su funcionamiento. Como siempre, comenzamos con preguntas: \u00bfqu\u00e9 es un therem\u00edn? Un therem\u00edn es un instrumento musical que se toca sin contacto f\u00edsico, haciendo variar las notas aproximando y alejando las manos del instrumento.\u00a0Como ya [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[10,13,27,33],"class_list":["post-190","post","type-post","status-publish","format-standard","hentry","category-arduino","tag-arduino","tag-buzzer","tag-proyectos","tag-ultrasonidos"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/posts\/190","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/comments?post=190"}],"version-history":[{"count":0,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/posts\/190\/revisions"}],"wp:attachment":[{"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/media?parent=190"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/categories?post=190"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/escueladefrikis.com\/index.php\/wp-json\/wp\/v2\/tags?post=190"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}