{"id":8505,"date":"2024-05-05T10:09:31","date_gmt":"2024-05-05T08:09:31","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=8505"},"modified":"2024-05-05T10:15:04","modified_gmt":"2024-05-05T08:15:04","slug":"piano-electronico","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/","title":{"rendered":"Piano Electr\u00f3nico"},"content":{"rendered":"\n<p>Autores: Iker Pizarro Fern\u00e1ndez y Brais Cabo Felpete<\/p>\n\n\n\n<p>Grupo 6 &#8211; 2023\/2024<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6-1024x576.jpeg\" alt=\"\" class=\"wp-image-8517\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6-1024x576.jpeg 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6-300x169.jpeg 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6-768x432.jpeg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6.jpeg 1280w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Introducci\u00f3n<\/h2>\n\n\n\n<p>La historia del piano lo sit\u00faa como uno de los instrumentos m\u00e1s ic\u00f3nicos y relevantes de la humanidad, a pesar de ser relativamente moderno en su creaci\u00f3n. Con una riqueza tonal sin igual y una versatilidad incomparable, su evoluci\u00f3n se ha potenciado con la llegada de los teclados electr\u00f3nicos, capaces no solo de emular su sonido tradicional, sino tambi\u00e9n de incorporar una amplia gama de sonidos de otros instrumentos.<\/p>\n\n\n\n<p>Inicialmente, concebimos la idea de desarrollar un teclado electr\u00f3nico compacto de una octava, con capacidad para alternar entre diferentes instrumentos. Sin embargo, para a\u00f1adir mayor complejidad y originalidad al proyecto, decidimos expandir su funcionalidad. As\u00ed, nuestra propuesta consiste en llevar la experiencia de un teclado digital a un sistema empotrado de reducido tama\u00f1o, pero con caracter\u00edsticas distintivas.<\/p>\n\n\n\n<p>Introducimos la capacidad no solo de cambiar entre diferentes instrumentos, sino tambi\u00e9n de variar los tonos en los que se representan dichos instrumentos. Estos tonos e instrumentos pueden ser a\u00f1adidos al sistema mediante archivos almacenados en una tarjeta SD, brindando flexibilidad para personalizar la experiencia musical. Adem\u00e1s, implementamos un modo adicional llamado \u00abReproducci\u00f3n de Archivos de Audio\u00bb, que permite reproducir archivos de audio almacenados en la tarjeta SD, complementando la funcionalidad de representaci\u00f3n de instrumentos.<\/p>\n\n\n\n<p>Para la realizaci\u00f3n de este proyecto, hemos utilizado diversos componentes, entre los que destacan el Arduino Mega, el lector de tarjetas SD, altavoces y una pantalla LCD.<\/p>\n\n\n\n<p>A lo largo de este informe, detallaremos cada una de las partes que conforman el proyecto, abarcando tanto el hardware como el software responsable de su funcionamiento, as\u00ed como los desaf\u00edos enfrentados durante su desarrollo y la distribuci\u00f3n de tareas entre el equipo. Adem\u00e1s, se presentar\u00e1n algunas ideas adicionales que surgieron durante el proceso y que podr\u00edan ser implementadas en futuras iteraciones del proyecto.<span id=\"docs-internal-guid-68172bba-7fff-3ca1-c24c-74151a1ad59d\"><\/span><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Desarrollo e implementaci\u00f3n<span id=\"docs-internal-guid-68172bba-7fff-3ca1-c24c-74151a1ad59d\"><div><span style=\"font-size: 11pt;font-family: Arial, sans-serif;background-color: transparent;vertical-align: baseline\"><\/span><\/div><\/span><\/h2>\n\n\n\n<p>Para desarrollar la totalidad del proyecto, recurrimos a una implementaci\u00f3n incremental, en la que \u00edbamos realizando peque\u00f1os avances, incluyendo funcionalidades y probando que todo funcionara satisfactoriamente, hasta que logramos una versi\u00f3n final completamente funcional.<\/p>\n\n\n\n<p>Los pasos seguidos para implementar el piano han sido los siguientes:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Selecci\u00f3n del hardware: <\/strong>&nbsp;Lo primero que hicimos fue reunirnos y buscar informaci\u00f3n sobre los componentes que \u00edbamos a necesitar para implementar la idea que ten\u00edamos en mente. En un principio pens\u00e1bamos que los archivos de audio podr\u00edan estar almacenados en el ordenador conectado a la placa pero pronto descubrimos que esto no era as\u00ed y que tendr\u00edamos que utilizar un lector de tarjetas SD. Tambi\u00e9n nos dimos cuenta de que no \u00edbamos a poder utilizar una placa Arduino Uno ya que necesit\u00e1bamos una gran cantidad de pines disponibles en la placa. Recabando informaci\u00f3n descubrimos que una Arduino Mega servir\u00eda para realizar el trabajo que nos propusimos.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Detectar la pulsaci\u00f3n de un bot\u00f3n: <\/strong>El primer paso que dimos una vez ya hab\u00edamos elegido el hardware fue conectar un bot\u00f3n a la placa para comprobar que esta funcionara correctamente.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Botones y l\u00f3gica para las 12 notas musicales: <\/strong>Posteriormente, conectamos todos los botones relativos a las notas musicales y realizamos la l\u00f3gica para detectar el bot\u00f3n que estaba siendo pulsado sin necesidad de introducir una condici\u00f3n para cada bot\u00f3n. En este punto nos dimos cuenta de que conllevaba demasiado esfuerzo conectar los 12 botones junto con las resistencias, las tomas al positivo, al negativo, y al PIN de la placa correspondiente. Aqu\u00ed descubrimos el modo INPUT_PULL_UP de las placas arduino con el que solo es necesario conectar el bot\u00f3n al GND y al pin correspondiente para que se detecte la pulsaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Botones y l\u00f3gica para cambio de instrumento y tono: <\/strong>En este paso conectamos los 4 botones, 2 para cambiar de instrumento y 2 para cambiar de tono, necesarios para poder realizar las funcionalidades que dese\u00e1bamos. Tambi\u00e9n creamos \u00e9l c\u00f3digo correspondiente, reutilizando el c\u00f3digo ya que la l\u00f3gica para cambiar de tono y de instrumento es muy parecida por lo que evitamos la duplicaci\u00f3n de c\u00f3digo.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Conexi\u00f3n de tarjeta SD: <\/strong>Fue en este paso cuando recibimos el lector de tarjetas SD, por lo que la conectamos a la placa. Una vez hechas las conexiones y habiendo comprobado que funcionaba el lector correctamente pensamos que ser\u00eda una buena idea que los instrumentos se cargaran directamente de la tarjeta SD con sus correspondientes tonos en lugar de estar fijados en el c\u00f3digo. M\u00e1s adelante, creamos la l\u00f3gica para que la informaci\u00f3n se cargue de esta forma en el arranque del proyecto leyendo los directorios de la tarjeta SD.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Conexi\u00f3n altavoz: <\/strong>Acto seguido, conectamos el altavoz a la placa e implementamos la l\u00f3gica para que las notas pulsadas emitieran el sonido correspondiente por el altavoz. Para ello, utilizamos la librer\u00eda TMRpcm que permite reproducir archivos .wav presentes en la tarjeta SD.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Amplificaci\u00f3n del sonido del altavoz<\/strong>: En este punto, comprobamos que el sonido emitido por el altavoz ten\u00eda un volumen casi inaudible. Buscando por internet encontramos la forma de construir un amplificador de sonido con un transistor NPN, por lo que reconectamos el altavoz amplificando su sonido.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Conexi\u00f3n pantalla LCD: <\/strong>Hasta este momento, todas las salidas de informaci\u00f3n se mostraban por el serial. Fue en este paso cuando conectamos la pantalla LCD para mostrar la informaci\u00f3n de instrumento y tono seleccionados, as\u00ed como que en el arranque del dispositivo muestre la cantidad de instrumentos encontrados en la tarjeta SD.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Creaci\u00f3n del modo de reproducci\u00f3n de archivos: <\/strong>En este paso, pensamos en posibles mejoras para el proyecto. Fue cuando tuvimos la idea de crear un modo \u201cReproductor de m\u00fasica\u201d que permite reproducir archivos de la tarjeta SD sin la necesidad de que est\u00e9n ligados a una nota de un instrumento. Para esto creamos un modo que escanea los archivos presentes en la SD y permite ir navegando entre los mismos, de forma que se pueda reproducir el seleccionado, as\u00ed como pausar el que se est\u00e1 reproduciendo en ese momento o reanudar la reproducci\u00f3n si hay alg\u00fan archivo pausado. Tambi\u00e9n incluimos un bot\u00f3n para cambiar entre los modos.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Construcci\u00f3n del artefacto: <\/strong>En este paso, construimos la caja para introducir todos los elementos electr\u00f3nicos, as\u00ed como el mecanismo de pulsado de teclas.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Empaquetado: <\/strong>Este fue el \u00faltimo paso del desarrollo. En \u00e9l empaquetamos los componentes electr\u00f3nicos en la caja construida y adecuamos los botones a las teclas del piano.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Hardware<\/h2>\n\n\n\n<p>Para el desarrollo de este proyecto, hemos necesitado un microcontrolador Arduino Mega, un lector de tarjetas SD, un altavoz de 3 W compatible con Arduino, 19 botones, una pantalla LCD 16 X 02 y cables para realizar las conexiones.<\/p>\n\n\n\n<p>La necesidad de utilizar un Arduino Mega en lugar de un Arduino Uno es debido a la gran cantidad de pines digitales que requer\u00eda nuestro proyecto.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1416\" height=\"1600\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-9.png\" alt=\"\" class=\"wp-image-8515\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-9.png 1416w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-9-266x300.png 266w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-9-906x1024.png 906w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-9-768x868.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/image-9-1359x1536.png 1359w\" sizes=\"auto, (max-width: 1416px) 100vw, 1416px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size\">Imagen representativa del hardware utilizado realizada con el dise\u00f1ador Fritzing. En el hardware real hemos conectado los botones a una mini protoboard y con cables a las teclas pero consideramos que este dise\u00f1o es m\u00e1s legible y las conexiones representadas son equivalentes.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Software<\/h2>\n\n\n\n<p>Respecto al software del proyecto, cabe destacar que hemos intentado modularizar el c\u00f3digo lo m\u00e1ximo posible, as\u00ed como evitar la repetici\u00f3n favoreciendo la reutilizaci\u00f3n. Tambi\u00e9n cabe mencionar que hemos utilizado cuatro librer\u00edas externas para facilitar el desarrollo:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>SD: <\/strong>Esta librer\u00eda se ha utilizado para leer y manejar los archivos de la tarjeta SD.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>TMRpcm<\/strong>: El uso de esta librer\u00eda es el de reproducir archivos de audio presentes en la tarjeta SD.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LinkedList: <\/strong>Esta librer\u00eda sirve para tener una implementaci\u00f3n de una lista para simplificar el trabajo con varios datos.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>LiquidCrystal: <\/strong>El uso de esta librer\u00eda est\u00e1 dedicado al control de la pantalla LCD.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">C\u00f3digo<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;LiquidCrystal.h&gt;\n#include &lt;SPI.h&gt;\n#include &lt;SD.h&gt;\n#include &lt;LinkedList.h&gt;\n#include &lt;TMRpcm.h&gt;\n\nTMRpcm audio;\nboolean playingAudio = false;\n\nint D7_pin = 7;\nint D6_pin = 6;\nint D5_pin = 5;\nint D4_pin = 4;\nint EN_pin = 10;\nint RS_pin = 12;\nLiquidCrystal lcd(RS_pin, EN_pin, D4_pin, D5_pin, D6_pin, D7_pin);\n\nconst int CS_PIN = 53;\n\nconst int PIN_DO = 22;\nconst int PIN_DO_S = 24;\nconst int PIN_RE = 26;\nconst int PIN_RE_S = 28;\nconst int PIN_MI = 30;\nconst int PIN_FA = 32;\nconst int PIN_FA_S = 34;\nconst int PIN_SOL = 36;\nconst int PIN_SOL_S = 38;\nconst int PIN_LA = 40;\nconst int PIN_LA_S = 42;\nconst int PIN_SI = 44;\nconst int PIN_NEXT_MELODY = 46;\nconst int PIN_PREVIOUS_MELODY = 48;\nconst int PIN_NEXT_TONE = 23;\nconst int PIN_PREVIOUS_TONE = 25;\n\nconst int PINES&#091;] = {PIN_DO, PIN_DO_S, PIN_RE, PIN_RE_S, PIN_MI, PIN_FA, PIN_FA_S, PIN_SOL, PIN_SOL_S, PIN_LA, PIN_LA_S, PIN_SI, PIN_NEXT_MELODY, PIN_PREVIOUS_MELODY, PIN_NEXT_TONE, PIN_PREVIOUS_TONE};\nconst int NUM_PINES = sizeof(PINES) \/ sizeof(int);\n\nconst String NOTAS&#091;] = {\"Do\", \"Do#\", \"Re\", \"Re#\", \"Mi\", \"Fa\", \"Fa#\", \"Sol\", \"Sol#\", \"La\", \"La#\", \"Si\"};\nconst int NUM_NOTAS = sizeof(NOTAS) \/ sizeof(String);\n\nLinkedList&lt;String&gt; melodiesList = LinkedList&lt;String&gt;();\nint numMelodies = 0;\nconst int NUM_MELODIES_PINS = 2;\n\nLinkedList&lt;String&gt; tonesList = LinkedList&lt;String&gt;();\nint numTones = 0;\nconst int NUM_TONES_PINS = 2;\n\nLinkedList&lt;String&gt; songsList = LinkedList&lt;String&gt;();\nint numSongs = 0;\n\nconst String INSTRUMENT_DIRECTORY = \"INSTRU\";\nconst String SONG_DIRECTORY = \"SONGS\";\n\nint selectedMelody = 0;\nint selectedTone = 0;\nint selectedSong = 0;\n\nboolean playPianoMode = true;\n\nconst int PIN_CHANGE_MODE = 31;\nconst int PIN_VOLUME_UP = 27;\nconst int PIN_VOLUME_DOWN = 29;\n\nconst int PIN_NEXT_SONG = 46;\nconst int PIN_PREVOUS_SONG = 48;\nconst int PIN_PAUSE_SONG = 23;\nconst int PIN_PLAY_SONG = 25;\n\nconst int PIN_SPEAKER = 11;\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ Initialization functions\n\/\/ ------------------------------------------------------------------------------------\n\n\/\/ Initialize piano keys input pins\nvoid initializePianoKeyPins()\n{\n    pinMode(PIN_DO, INPUT_PULLUP);\n    pinMode(PIN_DO_S, INPUT_PULLUP);\n    pinMode(PIN_RE, INPUT_PULLUP);\n    pinMode(PIN_RE_S, INPUT_PULLUP);\n    pinMode(PIN_MI, INPUT_PULLUP);\n    pinMode(PIN_FA, INPUT_PULLUP);\n    pinMode(PIN_FA_S, INPUT_PULLUP);\n    pinMode(PIN_SOL, INPUT_PULLUP);\n    pinMode(PIN_SOL_S, INPUT_PULLUP);\n    pinMode(PIN_LA, INPUT_PULLUP);\n    pinMode(PIN_LA_S, INPUT_PULLUP);\n    pinMode(PIN_SI, INPUT_PULLUP);\n}\n\n\/\/ Initialize melody pins\nvoid initializeMelodyPins()\n{\n    pinMode(PIN_PREVIOUS_MELODY, INPUT_PULLUP);\n    pinMode(PIN_NEXT_MELODY, INPUT_PULLUP);\n}\n\n\/\/ Initalize tone pins\nvoid initializeTonePins()\n{\n    pinMode(PIN_PREVIOUS_TONE, INPUT_PULLUP);\n    pinMode(PIN_NEXT_TONE, INPUT_PULLUP);\n}\n\n\/\/ Initialize volume pins\nvoid initializeVolumePins()\n{\n    pinMode(PIN_VOLUME_UP, INPUT_PULLUP);\n    pinMode(PIN_VOLUME_DOWN, INPUT_PULLUP);\n}\n\n\/\/ Initialize change mode pin\nvoid initiaizeModePin()\n{\n    pinMode(PIN_CHANGE_MODE, INPUT_PULLUP);\n}\n\n\/\/ Initialize SD card\nvoid initializeSD()\n{\n    displayValuesOnScreen(\"Inicializando SD\", \"\");\n    delay(500);\n\n    while (!SD.begin(CS_PIN))\n    {\n        displayValuesOnScreen(\"SD no encontrada\", \"\");\n        while (1)\n            ;\n    }\n\n    displayValuesOnScreen(\"SD encontrada\", \"\");\n    delay(1000);\n}\n\n\/\/ Loads all melodies in the sd card\nvoid initializeMelodies()\n{\n    melodiesList.clear();\n    File dir = SD.open(\"\/\" + INSTRUMENT_DIRECTORY);\n    getDirectoryFolders(dir, melodiesList);\n    numMelodies = melodiesList.size();\n    if (numMelodies == 0)\n    {\n        displayValuesOnScreen(\"Instrumentos\", \"no encontrados\");\n        while (1)\n            ;\n    }\n    else\n    {\n        String message = \"Encontrados: \" + String(numMelodies);\n        displayValuesOnScreen(\"Instrumentos\", message.c_str());\n        delay(500);\n    }\n}\n\n\/\/ Loads all songs\nvoid initializeSongs()\n{\n    songsList.clear();\n    File dir = SD.open(\"\/\" + SONG_DIRECTORY);\n    getDirectoryFiles(dir, songsList);\n    numSongs = songsList.size();\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ LCD Display Funcions\n\/\/ ------------------------------------------------------------------------------------\n\n\/\/ Display piano info on screen\nvoid displayPianoInfoOnScreen()\n{\n    displayValuesOnScreen(melodiesList.get(selectedMelody), \"TONO: \" + tonesList.get(selectedTone));\n}\n\n\/\/ Display reprodution mode info on screen\nvoid displaySongInfoOnScren()\n{\n    displayValuesOnScreen(\"Elige cancion\", songsList.get(selectedSong));\n}\n\n\/\/ Display passed info on screen\nvoid displayValuesOnScreen(String firstLine, String secondLine)\n{\n    lcd.clear();\n    lcd.print(firstLine);\n    lcd.setCursor(0, 1);\n    lcd.print(secondLine);\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ Directory utils functions\n\/\/ ------------------------------------------------------------------------------------\n\n\/\/ Gets folders names on directory\nvoid getDirectoryFolders(File dir, LinkedList&lt;String&gt; &amp;directoryFolders)\n{\n    getDirectoryItems(dir, directoryFolders, true);\n}\n\n\/\/ Gets file names on directory\nvoid getDirectoryFiles(File dir, LinkedList&lt;String&gt; &amp;directoryFiles)\n{\n    getDirectoryItems(dir, directoryFiles, false);\n}\n\n\/\/ Gets folders or files names on directory\nvoid getDirectoryItems(File dir, LinkedList&lt;String&gt; &amp;directoryItems, boolean getDirectories)\n{\n    while (true)\n    {\n        File entry = dir.openNextFile();\n        if (!entry)\n        {\n            break;\n        }\n        if (entry.isDirectory() == getDirectories)\n        {\n            directoryItems.add(entry.name());\n        }\n        entry.close();\n    }\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ Piano Mode Notes Functions\n\/\/ ------------------------------------------------------------------------------------\n\n\/\/ Plays a piano note by the selected ping\nvoid playPianoTone(int selectedPin)\n{\n    String playedPianoNote = getPlayedPianoNote(selectedPin);\n    playNote(playedPianoNote);\n}\n\n\/\/ Plays a piano note by the selected note\nvoid playNote(String note)\n{\n    String path = \"\/\" + INSTRUMENT_DIRECTORY + \"\/\" + melodiesList.get(selectedMelody) + \"\/\" + tonesList.get(selectedTone) + \"\/\" + note + \".wav\";\n    Serial.println(\"Playing note: \" + path);\n    playAudio(path);\n    delay(200);\n}\n\n\/\/ Gets note name by selectedPin\nString getPlayedPianoNote(int selectedPin)\n{\n    return NOTAS&#091;selectedPin];\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ Piano Mode Controll Functions\n\/\/ ------------------------------------------------------------------------------------\n\n\/\/ Switches melody by the selected pin\nvoid changMelody(int selectedPin)\n{\n    Serial.println(\"Change melody\");\n    changeValue(selectedPin, PIN_PREVIOUS_MELODY, selectedMelody, numMelodies);\n    updateCurrentMelodyTones();\n    displayPianoInfoOnScreen();\n}\n\n\/\/ Switches tone by the selected pin\nvoid changeTone(int selectedPin)\n{\n    Serial.println(\"Change tone\");\n    changeValue(selectedPin, PIN_PREVIOUS_TONE, selectedTone, numTones);\n}\n\n\/\/ Loads selected melody availaible tones\nvoid updateCurrentMelodyTones()\n{\n    tonesList.clear();\n    File dir = SD.open(\"\/\" + INSTRUMENT_DIRECTORY + \"\/\" + melodiesList.get(selectedMelody));\n    getDirectoryFolders(dir, tonesList);\n    numTones = tonesList.size();\n    selectedTone = 0;\n}\n\n\/\/ Changes selected value by selectedPin, current value and cuantity of availaible values\nvoid changeValue(int selectedPin, int pinPreviousValue, int &amp;currentValue, int numValues)\n{\n    pauseAudio();\n    currentValue = getSelectedValue(selectedPin, currentValue, pinPreviousValue, numValues);\n    displayPianoInfoOnScreen();\n    delay(200);\n}\n\n\/\/ Returns selected value by selectedPin, current value and cuantity of availaible values\nint getSelectedValue(int selectedPin, int currentValue, int pinPreviousValue, int numValues)\n{\n    int valueVariation = 0;\n    if (PINES&#091;selectedPin] == pinPreviousValue)\n    {\n        if (currentValue == 0)\n        {\n            return numValues - 1;\n        }\n        valueVariation = -1;\n    }\n    else\n    {\n        valueVariation = 1;\n    }\n    return (currentValue + valueVariation) % numValues;\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ Detect Button presed on piano mode\n\/\/ ------------------------------------------------------------------------------------\n\nvoid playedButtonOnPianoMode()\n{\n    \/\/ Se obtiene el indice del bot\u00f3n pulsado\n    int selectedPin = getSelectedPin();\n    \/\/ En este caso no se ha pulsado ning\u00fan bot\u00f3n\n    if (selectedPin &lt; 0)\n    {\n        return;\n    }\n\n    Serial.print(\"SELECTED PIN: \");\n    Serial.println(PINES&#091;selectedPin]);\n\n    \/\/ En este caso se ha pulsado un bot\u00f3n para tocar el piano\n    if (selectedPin &lt; NUM_NOTAS)\n    {\n        playPianoTone(selectedPin);\n        return;\n    }\n    \/\/ En este caso se ha pulsado un bot\u00f3n para cambiar el instrumento\n    if (selectedPin &lt; NUM_NOTAS + NUM_MELODIES_PINS)\n    {\n        changMelody(selectedPin);\n        return;\n    }\n    \/\/ En este caso se ha pulsado un bot\u00f3n para cambiar el tono\n    if (selectedPin &lt; NUM_NOTAS + NUM_MELODIES_PINS + NUM_TONES_PINS)\n    {\n        changeTone(selectedPin);\n    }\n}\n\n\nint getSelectedPin()\n{\n    for (int i = 0; i &lt; NUM_PINES; i++)\n    {\n        if (digitalRead(PINES&#091;i]) == LOW)\n        {\n            return i;\n        }\n    }\n    return -1;\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ Archive Reprodution mode controlls\n\/\/ ------------------------------------------------------------------------------------\n\n\/\/ Selects the following or the previous song\nvoid changeSelectedSong(int songVariation)\n{\n    Serial.println(\"Change song\");\n    selectedSong = (selectedSong + songVariation) % numSongs;\n    if (selectedSong &lt; 0)\n    {\n        selectedSong = numSongs - 1;\n    }\n    displaySongInfoOnScren();\n}\n\n\/\/ Plays selected song\nvoid playSelectedSong()\n{\n    String selectedSongName = songsList.get(selectedSong);\n    String path = \"\/\" + SONG_DIRECTORY + \"\/\" + selectedSongName;\n    Serial.println(\"Play song: \" + path);\n    playAudio(path);\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ Detect Button presed on archive roprodution mode\n\/\/ ------------------------------------------------------------------------------------\n\nvoid playedButtonOnMusicMode()\n{\n    if (digitalRead(PIN_NEXT_SONG) == LOW)\n    {\n        changeSelectedSong(+1);\n    }\n    else if (digitalRead(PIN_PREVOUS_SONG) == LOW)\n    {\n        changeSelectedSong(-1);\n    }\n    else if (digitalRead(PIN_PAUSE_SONG) == LOW)\n    {\n        Serial.println(\"Pause\/Resume song\");\n        pauseResumeAudio();\n    }\n    else if (digitalRead(PIN_PLAY_SONG) == LOW)\n    {\n        playSelectedSong();\n    }\n\n    delay(200);\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ Mode Controll\n\/\/ ------------------------------------------------------------------------------------\n\n\/\/ Changes the mode of the execution, if it is some archive being reproduced it get paused\nvoid changeMode()\n{\n    Serial.println(\"Change mode\");\n    playPianoMode = !playPianoMode;\n    pauseAudio();\n    if (playPianoMode)\n    {\n        displayPianoInfoOnScreen();\n    }\n    else\n    {\n        displaySongInfoOnScren();\n    }\n    delay(200);\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ Audio Play Controll\n\/\/ ------------------------------------------------------------------------------------\n\n\/\/ Pauses audio if its playing, if its not playing it has no effect\nvoid pauseAudio()\n{\n    if (playingAudio)\n    {\n        playingAudio = false;\n        audio.pause();\n    }\n    delay(200);\n}\n\n\/\/ Pauses audio if its playing, if the audio is paused it continous it\nvoid pauseResumeAudio(){\n    playingAudio = !playingAudio;\n    audio.pause();\n}\n\n\/\/ Play a archive in the route passed as parameter\nvoid playAudio(String path){\n  if (!playingAudio){\n    audio.pause();\n  }\n    playingAudio = true;\n    audio.play(path.c_str());\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ Volume Controll\n\/\/ ------------------------------------------------------------------------------------\n\nvoid volumeUp()\n{\n    Serial.println(\"Volume up\");\n    audio.volume(1);\n    delay(200);\n}\n\nvoid volumeDown()\n{\n    Serial.println(\"Volume down\");\n    audio.volume(0);\n    delay(200);\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ Setup\n\/\/ ------------------------------------------------------------------------------------\n\n\/\/ Initializes, lcd, buttons, sd card, charges melodies, tones and archives\nvoid setup()\n{\n    Serial.begin(9600);\n    lcd.begin(16, 2);\n\n    initializePianoKeyPins();\n    initializeMelodyPins();\n    initializeTonePins();\n    initializeVolumePins();\n    initiaizeModePin();\n\n    initializeSD();\n    initializeMelodies();\n    updateCurrentMelodyTones();\n    initializeSongs();\n\n    displayPianoInfoOnScreen();\n    audio.speakerPin = PIN_SPEAKER;\n    audio.setVolume(5);\n    audio.quality(1);\n}\n\n\/\/ ------------------------------------------------------------------------------------\n\/\/ loop\n\/\/ ------------------------------------------------------------------------------------\n\nvoid loop()\n{\n    if (digitalRead(PIN_CHANGE_MODE) == LOW)\n    {\n        changeMode();\n        return;\n    }\n\n    if (digitalRead(PIN_VOLUME_UP) == LOW)\n    {\n        volumeUp();\n        return;\n    }\n\n    if (digitalRead(PIN_VOLUME_DOWN) == LOW)\n    {\n        volumeDown();\n        return;\n    }\n\n    if (playPianoMode)\n    {\n        playedButtonOnPianoMode();\n    }\n    else\n    {\n        playedButtonOnMusicMode();\n    }\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Materiales, costes y precios<\/h2>\n\n\n\n<p>Esta secci\u00f3n est\u00e1 compuesta por una tabla con los materiales y componentes utilizados para la realizaci\u00f3n del proyecto, tambi\u00e9n se muestra el precio que tienen todos los materiales y el coste que ha repercutido sobre nosotros:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Nombre<\/td><td>Coste<\/td><td>Precio<\/td><\/tr><tr><td>M\u00f3dulo Lector SD<\/td><td>5,49 \u20ac<\/td><td>5,49 \u20ac<\/td><\/tr><tr><td>Altavoz 3W<\/td><td>1,99 \u20ac<\/td><td>1,99 \u20ac<\/td><\/tr><tr><td>Potenci\u00f3metro 10K<\/td><td>&#8211;<\/td><td>1,00 \u20ac<\/td><\/tr><tr><td>Pantalla LCD 16X02<\/td><td>&#8211;<\/td><td>6,00 \u20ac<\/td><\/tr><tr><td>1 Arduino Mega<\/td><td>19,99 \u20ac<\/td><td>19,99 \u20ac<\/td><\/tr><tr><td>1 Protoboard<\/td><td>&#8211;<\/td><td>4,79 \u20ac<\/td><\/tr><tr><td>1 mini-Protoboard<\/td><td>&#8211;<\/td><td>2,33 \u20ac<\/td><\/tr><tr><td>20 Botones<\/td><td>1 \u20ac<\/td><td>1 \u20ac<\/td><\/tr><tr><td>Cables<\/td><td>7,50 \u20ac<\/td><td>9,50 \u20ac<\/td><\/tr><tr><td>Transistor NPN<\/td><td>&#8211;<\/td><td>0,50 \u20ac<\/td><\/tr><tr><td>Tornillos<\/td><td>&#8211;<\/td><td>2 \u20ac<\/td><\/tr><tr><td>Metacrilato<\/td><td>10 \u20ac<\/td><td>10 \u20ac<\/td><\/tr><tr><td>Madera<\/td><td>&#8211;<\/td><td>10 \u20ac<\/td><\/tr><tr><td>Cinta Doble Cara<\/td><td>3,50 \u20ac<\/td><td>3,50 \u20ac<\/td><\/tr><tr><td>Total<\/td><td>49,47 \u20ac<\/td><td>78,09 \u20ac<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Nos gustar\u00eda aclarar que la madera utilizada ya la ten\u00edamos en casa por eso no ha repercutido un coste sobre nosotros. El metacrilato para las piezas s\u00ed que lo tuvimos que adquirir aunque el servicio de corte fue gratuito.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Casos de uso<\/h2>\n\n\n\n<p>En esta secci\u00f3n se comentar\u00e1n los distintos casos de uso que podemos encontrarnos en el proyecto:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Lectura archivos SD: <\/strong>Al conectar el artefacto al ordenador, el primer paso que da el programa es leer el sistema de archivos archivos de la tarjeta SD. El primer paso es comprobar que la SD est\u00e1 insertada, indicando al usuario el resultado de esta comprobaci\u00f3n a trav\u00e9s de la pantalla LCD. La primera informaci\u00f3n que lee el programa es la relativa a los instrumentos y a los tonos, mostr\u00e1ndole al usuario la cantidad de instrumentos encontrados en la tarjeta SD. En caso de que no se hubiera insertado ning\u00fan instrumento el programa se bloquear\u00eda impidiendo el uso del artefacto. Posteriormente reconoce los archivos que se podr\u00e1n reproducir en el modo \u201cReproductor de archivos\u201d. En este caso no muestra ning\u00fan tipo de informaci\u00f3n al usuario. Una vez se ha finalizado esta lectura de archivos, se pasa al modo para reproducir los instrumentos, indicando el instrumento y tono seleccionados y este paso habr\u00eda terminado.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pulsaci\u00f3n nota musical: <\/strong>En el modo de reproducci\u00f3n de instrumentos si se acciona una de las notas del piano, se emite el sonido correspondiente con el tono e instrumento seleccionados.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cambio de instrumento: <\/strong>En el modo de reproducci\u00f3n de instrumentos se pueden accionar 2 botones para seleccionar el pr\u00f3ximo instrumento o el anterior. En el caso de que se accione uno de estos botones, se cambia el instrumento seleccionado, la informaci\u00f3n del nuevo instrumento se muestra por pantalla y se ajusta el tono con el que se corresponde en el nuevo instrumento seleccionado.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cambio de tono: <\/strong>En el modo de reproducci\u00f3n de instrumentos, se pueden accionar 2 botones para seleccionar el tono del instrumento que est\u00e1 seleccionado. En el caso de que se accione uno de estos botones, se cambia el tono del instrumento seleccionado. Una vez se ha cambiado el tono, se muestra el nuevo tono por pantalla.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cambio de modo: <\/strong>Existe un bot\u00f3n para alternar entre el modo \u201cReproducci\u00f3n de archivos\u201d y \u201cReproducci\u00f3n de instrumentos\u201d. Al alternar entre modos se muestra la informaci\u00f3n correspondiente con el modo seleccionado. En el modo de \u201cReproducci\u00f3n de archivos\u201d se muestra el archivo seleccionado para la reproducci\u00f3n. En el modo de \u201cReproducci\u00f3n de instrumentos\u201d se muestra el instrumento y tono seleccionados. Cuando se realiza un cambio de modo,&nbsp; se pausa el audio que estaba siendo reproducido.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Reproducir archivo: <\/strong>En el modo de \u201cReproducci\u00f3n de archivos\u201d existe un bot\u00f3n para comenzar la reproducci\u00f3n del archivo seleccionado.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pausar\/Reanudar reproducci\u00f3n: <\/strong>En el modo de \u201cReproducci\u00f3n de archivos\u201d existe un bot\u00f3n para pausar la reproducci\u00f3n del audio actual o en caso de que est\u00e9 pausado para reanudar la reproducci\u00f3n del mismo.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Selecci\u00f3n de archivo para reproducir: <\/strong>En el modo de \u201cReproducci\u00f3n de archivos\u201d existen 2 botones para seleccionar el archivo siguiente o el anterior. Cuando se selecciona un nuevo archivo se muestra el archivo seleccionado en la pantalla.<br><\/li>\n\n\n\n<li><strong>Subir y bajar volumen: <\/strong>En cualquier modo se pueden accionar 2 botones para subir o bajar el volumen del audio que se reproduce.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Reparto de las tareas<\/h2>\n\n\n\n<p>En esta secci\u00f3n se comentar\u00e1 la distribuci\u00f3n de las tareas a la hora de realizar el proyecto.<\/p>\n\n\n\n<p><strong>Brais Cabo Felpete: <\/strong>Desarrollo del software del proyecto, construcci\u00f3n del artefacto y dise\u00f1o del hardware en simulador.<\/p>\n\n\n\n<p><strong>Iker Pizarro Fern\u00e1ndez: <\/strong>Desarrollo del software del proyecto, construcci\u00f3n del artefacto y ensamblado de hardware en la placa.<\/p>\n\n\n\n<p>Nos gustar\u00eda destacar que en general ambos nos hemos ayudado en todas las tareas intentando resolver los bloqueos que pudi\u00e9ramos ir teniendo. Tambi\u00e9n nos gustar\u00eda mencionar que hemos realizado varias videollamadas y encuentros presenciales para trabajar de manera conjunta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Problemas y soluciones encontradas<\/h2>\n\n\n\n<p>En relaci\u00f3n a los problemas que nos hemos ido encontrando durante el desarrollo del proyecto, a continuaci\u00f3n comentaremos los m\u00e1s significativos y como hemos lidiado con ellos:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Utilizaci\u00f3n tarjeta SD: <\/strong>En un principio nos hab\u00edamos planteado reproducir los archivos almacenados en el ordenador. Buscando por internet hemos visto que esto no era posible por lo que tuvimos que buscar otro m\u00e9todo para la reproducci\u00f3n de los archivos. Fue en este momento cuando nos planteamos la viabilidad del proyecto, pero terminamos descubriendo que se pod\u00edan reproducir archivos almacenados en una tarjeta SD con la conexi\u00f3n de un lector de tarjetas SD.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Gesti\u00f3n de la alta cantidad de botones: <\/strong>En este proyecto como hemos ido comentando a lo largo de todo el documento, necesitamos una gran cantidad de botones. Para manejar esta gran cantidad de botones nos encontramos con dos problemas. El primer problema fue la falta de pines en el microcontrolador Arduino Uno, para resolver este problema adquirimos un microcontrolador Arduino Mega, que contaba con suficientes pines para resolver nuestro problema. El segundo problema encontrado fue la cantidad de resistencias, y conexiones extra que implica la conexi\u00f3n de botones, lo que puede conllevar el fallo de ciertos contactos y el mal funcionamiento de los mismos. Para resolver este problema configuramos los botones como INPUT_PULL_UP para necesitar \u00fanicamente una conexi\u00f3n al GND y al pin del microcontrolador correspondiente.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Volumen casi inaudible: <\/strong>Otro de los principales problemas encontrados fue el bajo volumen del altavoz. Esto nos llev\u00f3 a pensar que estaba defectuoso o que lo hab\u00edamos roto.Indagando por internet descubrimos que se puede construir un amplificador de sonido con un transistor NPN por lo que con este m\u00e9todo pudimos incrementar el volumen del sonido.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Mejoras a futuro del proyecto<\/h2>\n\n\n\n<p><span id=\"docs-internal-guid-ca3bb1ee-7fff-9a06-e090-ea17549297bf\"><p dir=\"ltr\" style=\"line-height:1.38;text-align: justify;margin-top:0pt;margin-bottom:0pt\"><span style=\"font-size: 11pt;font-family: Arial, sans-serif;background-color: transparent;vertical-align: baseline\">En esta secci\u00f3n se comentar\u00e1n algunas de las mejoras que hemos pensado que se pueden incluir al proyecto de forma razonable:<\/span><\/p><\/span><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Bater\u00eda con interruptor: <\/strong>Para mejorar la experiencia de utilizaci\u00f3n del proyecto se podr\u00eda incluir una pila de 9V con un interruptor para dejar pasar la alimentaci\u00f3n para que se pueda encender y apagar el aparato sin necesidad de conectar y desconectar la alimentaci\u00f3n y sin tener que conectarlo al ordenador.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Mejorar la pulsaci\u00f3n de las teclas: <\/strong>La pulsaci\u00f3n actual de las teclas es algo inestable, hemos pensado que se podr\u00eda incluir alg\u00fan tipo de estabilizador para mejorar esta sensaci\u00f3n de pulsaci\u00f3n de las teclas.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Mejorar la comodidad y tama\u00f1o del aparato: <\/strong>Otro de los aspectos que se podr\u00edan mejorar es la comodidad y el tama\u00f1o de la caja que contiene la electr\u00f3nica, ya que ahora mismo es bastante grande y un poco inc\u00f3moda de utilizar.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Mejorar la calidad del sonido: <\/strong>Un aspecto que creemos que tambi\u00e9n ser\u00eda interesante es el de introducir unos altavoces de mejor calidad que proporcionen un sonido m\u00e1s n\u00edtido.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Aumentar volumen del sonido: <\/strong>Otro de los aspectos que se podr\u00eda mejorar respecto al sonido es el del volumen del mismo. Para esto se podr\u00eda cambiar el amplificador casero por un amplificador ya construido con una mayor capacidad de amplificaci\u00f3n.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Video explicativo del proyecto<\/h2>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Proyecto Empotrados - Piano Electr\u00f3nico (Grupo 6)\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/GVhaunQO4J8?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Documentaci\u00f3n adicional<\/h2>\n\n\n\n<p>Presentaci\u00f3n: <a href=\"https:\/\/docs.google.com\/presentation\/d\/1xlcjC-kpZw60qGgTj-UTNc07vkcb6J_p8nuIlMjlADo\/edit?usp=sharing\">https:\/\/docs.google.com\/presentation\/d\/1xlcjC-kpZw60qGgTj-UTNc07vkcb6J_p8nuIlMjlADo\/edit?usp=sharing<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Autores: Iker Pizarro Fern\u00e1ndez y Brais Cabo Felpete Grupo 6 &#8211; 2023\/2024 Introducci\u00f3n La historia del piano lo sit\u00faa como uno de los instrumentos m\u00e1s ic\u00f3nicos y relevantes de la humanidad, a pesar de&#46;&#46;&#46;<\/p>\n","protected":false},"author":206,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8505","post","type-post","status-publish","format-standard","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Piano Electr\u00f3nico - Proyectos con Arduino.<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Piano Electr\u00f3nico - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Autores: Iker Pizarro Fern\u00e1ndez y Brais Cabo Felpete Grupo 6 &#8211; 2023\/2024 Introducci\u00f3n La historia del piano lo sit\u00faa como uno de los instrumentos m\u00e1s ic\u00f3nicos y relevantes de la humanidad, a pesar de&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-05T08:09:31+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-05T08:15:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6-1024x576.jpeg\" \/>\n<meta name=\"author\" content=\"dsemo2324g06\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"dsemo2324g06\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"20 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/\"},\"author\":{\"name\":\"dsemo2324g06\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/4d9b70d512dd5617d13f727252dfee3a\"},\"headline\":\"Piano Electr\u00f3nico\",\"datePublished\":\"2024-05-05T08:09:31+00:00\",\"dateModified\":\"2024-05-05T08:15:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/\"},\"wordCount\":2692,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/05\\\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6-1024x576.jpeg\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/\",\"name\":\"Piano Electr\u00f3nico - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/05\\\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6-1024x576.jpeg\",\"datePublished\":\"2024-05-05T08:09:31+00:00\",\"dateModified\":\"2024-05-05T08:15:04+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/05\\\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6.jpeg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/05\\\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6.jpeg\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/piano-electronico\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Piano Electr\u00f3nico\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"name\":\"Proyectos con Arduino.\",\"description\":\"Blog de proyectos de Arduino de alumnos de la URJC\",\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\",\"name\":\"Universidad Rey Juan Carlos\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2022\\\/05\\\/logourjc-1.jpg\",\"width\":745,\"height\":288,\"caption\":\"Universidad Rey Juan Carlos\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/logo\\\/image\\\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/4d9b70d512dd5617d13f727252dfee3a\",\"name\":\"dsemo2324g06\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86d49ce9369258479fe5aba352e62393b850742ce093a166c12f7ad8bb4ae4f5?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86d49ce9369258479fe5aba352e62393b850742ce093a166c12f7ad8bb4ae4f5?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/86d49ce9369258479fe5aba352e62393b850742ce093a166c12f7ad8bb4ae4f5?s=96&d=mm&r=g\",\"caption\":\"dsemo2324g06\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/dsemo2324g06\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Piano Electr\u00f3nico - Proyectos con Arduino.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/","og_locale":"es_ES","og_type":"article","og_title":"Piano Electr\u00f3nico - Proyectos con Arduino.","og_description":"Autores: Iker Pizarro Fern\u00e1ndez y Brais Cabo Felpete Grupo 6 &#8211; 2023\/2024 Introducci\u00f3n La historia del piano lo sit\u00faa como uno de los instrumentos m\u00e1s ic\u00f3nicos y relevantes de la humanidad, a pesar de&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2024-05-05T08:09:31+00:00","article_modified_time":"2024-05-05T08:15:04+00:00","og_image":[{"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6-1024x576.jpeg","type":"","width":"","height":""}],"author":"dsemo2324g06","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"dsemo2324g06","Tiempo de lectura":"20 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/"},"author":{"name":"dsemo2324g06","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/4d9b70d512dd5617d13f727252dfee3a"},"headline":"Piano Electr\u00f3nico","datePublished":"2024-05-05T08:09:31+00:00","dateModified":"2024-05-05T08:15:04+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/"},"wordCount":2692,"commentCount":1,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6-1024x576.jpeg","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/","name":"Piano Electr\u00f3nico - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6-1024x576.jpeg","datePublished":"2024-05-05T08:09:31+00:00","dateModified":"2024-05-05T08:15:04+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6.jpeg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/05\/10-Proyecto-Empotrados-Piano-Electronico-Grupo-6.jpeg","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/piano-electronico\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Piano Electr\u00f3nico"}]},{"@type":"WebSite","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","name":"Proyectos con Arduino.","description":"Blog de proyectos de Arduino de alumnos de la URJC","publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization","name":"Universidad Rey Juan Carlos","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2022\/05\/logourjc-1.jpg","width":745,"height":288,"caption":"Universidad Rey Juan Carlos"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/4d9b70d512dd5617d13f727252dfee3a","name":"dsemo2324g06","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/86d49ce9369258479fe5aba352e62393b850742ce093a166c12f7ad8bb4ae4f5?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/86d49ce9369258479fe5aba352e62393b850742ce093a166c12f7ad8bb4ae4f5?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/86d49ce9369258479fe5aba352e62393b850742ce093a166c12f7ad8bb4ae4f5?s=96&d=mm&r=g","caption":"dsemo2324g06"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/dsemo2324g06\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/8505","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/users\/206"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=8505"}],"version-history":[{"count":12,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/8505\/revisions"}],"predecessor-version":[{"id":8520,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/8505\/revisions\/8520"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=8505"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=8505"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=8505"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}