{"id":7546,"date":"2023-12-20T22:01:49","date_gmt":"2023-12-20T21:01:49","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=7546"},"modified":"2024-01-25T13:29:49","modified_gmt":"2024-01-25T12:29:49","slug":"grabador-de-apnea-borrador","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/","title":{"rendered":"Grabador de apnea"},"content":{"rendered":"\n<p class=\"has-black-color has-text-color has-link-color has-medium-font-size wp-elements-bae273b466ed10db190bcc25f7c03ff3\">Hecho por:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li style=\"font-size:18px\">Rub\u00e9n Bargue\u00f1o Prieto<\/li>\n\n\n\n<li style=\"font-size:18px\">Iv\u00e1n Bernal Blanco<\/li>\n\n\n\n<li style=\"font-size:18px\">Robert Ray L\u00f3pez Villavicencio<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading has-black-color has-text-color has-link-color wp-elements-40b3e838ae90fc1573f70dac29daa0f0\" style=\"font-size:32px;text-transform:uppercase\">Introducci\u00f3n<\/h2>\n\n\n\n<p style=\"font-size:18px\">En este proyecto se trata de crear un dispositivo que grabe el ruido ambiente por la noche y as\u00ed poder detectar la apnea del sue\u00f1o. El proyecto se basa en una Arduino Mega y otros componentes mencionados m\u00e1s adelante.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:32px\">MATERIALES<\/h2>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table class=\"has-fixed-layout\"><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">Componente<\/th><th class=\"has-text-align-center\" data-align=\"center\">Precio Unidad(\u20ac)<\/th><th class=\"has-text-align-center\" data-align=\"center\">Unidades<\/th><th class=\"has-text-align-center\" data-align=\"center\">Total(\u20ac)<\/th><th class=\"has-text-align-center\" data-align=\"center\">Gastos de env\u00edo(\u20ac)<\/th><th class=\"has-text-align-center\" data-align=\"center\">Total con env\u00edo(\u20ac)<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">Arduino Mega 2560<\/td><td class=\"has-text-align-center\" data-align=\"center\">14,24<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">14,24<\/td><td class=\"has-text-align-center\" data-align=\"center\">0<\/td><td class=\"has-text-align-center\" data-align=\"center\">14,24<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Proto Shield<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,47<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,47<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,89<\/td><td class=\"has-text-align-center\" data-align=\"center\">4,36<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Adaptador Micro SD<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,57<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,57<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,11<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,68<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Tarjeta Micro SD 2GB<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,9<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,9<\/td><td class=\"has-text-align-center\" data-align=\"center\">0<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,9<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Reloj RTC DS3231<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,3<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,3<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,71<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,01<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Micr\u00f3fono MAX9814<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,46<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,46<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,7<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,16<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Power Bank<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,74<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,74<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,87<\/td><td class=\"has-text-align-center\" data-align=\"center\">3,61<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Bater\u00eda Ion Litio 3.7v<\/td><td class=\"has-text-align-center\" data-align=\"center\">3,56<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">3,56<\/td><td class=\"has-text-align-center\" data-align=\"center\">0<\/td><td class=\"has-text-align-center\" data-align=\"center\">3,56<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Amp. Audio NS8002<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,38<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,38<\/td><td class=\"has-text-align-center\" data-align=\"center\">0<\/td><td class=\"has-text-align-center\" data-align=\"center\">2,38<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Micro Interruptor<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,08<\/td><td class=\"has-text-align-center\" data-align=\"center\">2<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,16<\/td><td class=\"has-text-align-center\" data-align=\"center\">0<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,16<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Micro Bot\u00f3n<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,08<\/td><td class=\"has-text-align-center\" data-align=\"center\">2<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,16<\/td><td class=\"has-text-align-center\" data-align=\"center\">0<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,16<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Altavoz 0,5w<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,1<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,1<\/td><td class=\"has-text-align-center\" data-align=\"center\">0<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,1<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Pulsadores Moment\u00e1neos<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,65<\/td><td class=\"has-text-align-center\" data-align=\"center\">3<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,95<\/td><td class=\"has-text-align-center\" data-align=\"center\">0<\/td><td class=\"has-text-align-center\" data-align=\"center\">1,95<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Conector USB<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,19<\/td><td class=\"has-text-align-center\" data-align=\"center\">1<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,19<\/td><td class=\"has-text-align-center\" data-align=\"center\">0<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,19<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">&nbsp;Leds 5v<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,28<\/td><td class=\"has-text-align-center\" data-align=\"center\">2<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,56<\/td><td class=\"has-text-align-center\" data-align=\"center\">0<\/td><td class=\"has-text-align-center\" data-align=\"center\">0,56<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Total<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\">39,02<\/td><\/tr><\/tbody><\/table><figcaption class=\"wp-element-caption\">Tabla de componentes y costes<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:32px\">DIAGRAMA DE CONEXI\u00d3N<\/h2>\n\n\n\n<figure data-wp-context=\"{&quot;imageId&quot;:&quot;69e88cb4d4349&quot;}\" data-wp-interactive=\"core\/image\" data-wp-key=\"69e88cb4d4349\" class=\"wp-block-image size-large is-style-default wp-lightbox-container\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"591\" data-wp-class--hide=\"state.isContentHidden\" data-wp-class--show=\"state.isContentVisible\" data-wp-init=\"callbacks.setButtonStyles\" data-wp-on--click=\"actions.showLightbox\" data-wp-on--load=\"callbacks.setButtonStyles\" data-wp-on-window--resize=\"callbacks.setButtonStyles\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche-1024x591.png\" alt=\"Diagrama de conexiones del &quot;Grabador de apnea&quot;\" class=\"wp-image-7553\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche-1024x591.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche-300x173.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche-768x443.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche-1536x887.png 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche-2048x1182.png 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><button\n\t\t\tclass=\"lightbox-trigger\"\n\t\t\ttype=\"button\"\n\t\t\taria-haspopup=\"dialog\"\n\t\t\taria-label=\"Agrandar\"\n\t\t\tdata-wp-init=\"callbacks.initTriggerButton\"\n\t\t\tdata-wp-on--click=\"actions.showLightbox\"\n\t\t\tdata-wp-style--right=\"state.imageButtonRight\"\n\t\t\tdata-wp-style--top=\"state.imageButtonTop\"\n\t\t>\n\t\t\t<svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"12\" height=\"12\" fill=\"none\" viewBox=\"0 0 12 12\">\n\t\t\t\t<path fill=\"#fff\" d=\"M2 0a2 2 0 0 0-2 2v2h1.5V2a.5.5 0 0 1 .5-.5h2V0H2Zm2 10.5H2a.5.5 0 0 1-.5-.5V8H0v2a2 2 0 0 0 2 2h2v-1.5ZM8 12v-1.5h2a.5.5 0 0 0 .5-.5V8H12v2a2 2 0 0 1-2 2H8Zm2-12a2 2 0 0 1 2 2v2h-1.5V2a.5.5 0 0 0-.5-.5H8V0h2Z\" \/>\n\t\t\t<\/svg>\n\t\t<\/button><figcaption class=\"wp-element-caption\">Diagrama de conexiones del \u00abGrabador de apnea\u00bb<\/figcaption><\/figure>\n\n\n\n<p style=\"font-size:18px\">El conector USB estar\u00eda conectado en la misma fila que los pines GND y 5v, este conector se usar\u00e1 solo si se quiere alimentar el circuito de otro modo que no sea directamente a la placa Arduino Mega.<\/p>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>Conexiones detalladas<\/summary>\n<p>El Arduino MEGA 2560 se conecta a las dos primeras l\u00edneas de la protoboard mediante el pin GND (tierra) y 5V (corriente).<br><br>El adaptador microSD posee siete pines:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Los dos primeros se conectan a la protoboard en tierra y corriente.&nbsp;<\/li>\n\n\n\n<li>Los cuatro siguientes se conectan al arduino con los pines digitales de entrada y salida.<\/li>\n\n\n\n<li>El \u00faltimo pin se conecta al Arduino con un pin digital de entrada y salida PWM.<\/li>\n<\/ul>\n\n\n\n<p>El m\u00f3dulo de reloj de tiempo real (DS3231 RTC) tiene cuatro pines:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Los dos primeros se conectan al Arduino mediante sus pines correspondientes (los de interrupciones externas).<\/li>\n\n\n\n<li>Los dos siguientes se conectan a la protoboard en tierra y corriente.<\/li>\n<\/ul>\n\n\n\n<p>El micr\u00f3fono MAX9814 dispone de tres pines:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El primero se conecta al Arduino mediante un pin anal\u00f3gico de entrada.<\/li>\n\n\n\n<li>Los dos siguientes se conectan a la protoboard en tierra y corriente.<\/li>\n<\/ul>\n\n\n\n<p>El amplificador de audio (NS8002) tiene seis conexiones:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El primero se conecta al Arduino con un pin digital de entrada y salida PWM.<\/li>\n\n\n\n<li>El segundo se conecta al Arduino con un pin digital de entrada y salida.<\/li>\n\n\n\n<li>Los dos siguientes se conectan a la protoboard en tierra y corriente.<\/li>\n\n\n\n<li>Los dos \u00faltimos se conectan al altavoz.<\/li>\n<\/ul>\n\n\n\n<p>Los dos botones (borrar y play) disponen de dos conexiones cada uno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Poseen una conexi\u00f3n a tierra y otra al Arduino mediante un pin digital de entrada y salida PWM.<\/li>\n<\/ul>\n\n\n\n<p>El interruptor (escucha) posee tres conexiones:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Posee una conexi\u00f3n a tierra, otra a corriente y otra al Arduino mediante un pin digital de entrada y salida PWM.<\/li>\n<\/ul>\n\n\n\n<p>Los dos leds disponen de dos conexiones cada uno:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Poseen una conexi\u00f3n a tierra y otra al Arduino mediante un pin digital de entrada y salida PWM.<\/li>\n<\/ul>\n<\/details>\n\n\n\n<h2 class=\"wp-block-heading\" style=\"font-size:32px\">IMPLEMENTACI\u00d3N DEL SOFTWARE<\/h2>\n\n\n\n<p style=\"font-size:18px\">Para el desarrollo de este proyecto se ha utilizado como principal recurso de software la librer\u00eda TMRpcm de Arduino cuyo principal cometido es la reproducci\u00f3n de audio desde una tarjeta SD utilizando el m\u00f3dulo serial. Est\u00e1 principalmente dise\u00f1ada para funcionar con tarjetas de memoria SD y reproductores de audio integrados. Como se ha mencionado, su principal funci\u00f3n es la reproducci\u00f3n de audio y el grabado del mismo en la memoria mediante el uso del formato .WAV, que pese a ser m\u00e1s pesado que otros formatos, es el que soporta esta librer\u00eda. Estos archivos deben cumplir ciertas especificaciones y resoluci\u00f3n de bits concretos.\u00a0<br>Su mayor limitaci\u00f3n es la duraci\u00f3n de audio que se puede grabar debido a que depende \u00fanicamente del tama\u00f1o de la tarjeta SD que se utilice.\u00a0<br>Para este proyecto se han utilizado muchas de las funcionalidades que nos ofrece, las m\u00e1s importantes se explicar\u00e1n a continuaci\u00f3n.<br><strong><em>stopPlayback() <\/em><\/strong>se encarga de detener la reproducci\u00f3n del archivo de audio poniendo la variable correspondiente al estado de la reproducci\u00f3n (playing) a cero.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/CRT6oNfOhQS-K5NkCu7w6SrpHCM4CbDNWZNanfaP6_O5kTQX1LU41yFppljYtLYgBu7tEFRFNiF8JcgakO_DKrBQbCsB37zSTJzh41D0GOfWQgUm76apvPt1VacC1T53e6cAIE2GkApqQu21SW_WV2M\" alt=\"\" \/><\/figure>\n\n\n\n<p style=\"font-size:18px\">createWavTemplate() es la funci\u00f3n encargada de la creaci\u00f3n del archivo .WAV donde se grabar\u00e1 el audio.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/Ndaz8FupagxiLez_pMZ2kbSQO2N5UZbcLD3URCDni4uYo2nGsFfjTy3QLoEfxAiw6bCWIP9i_RrlNpw2je4cyt2ZMZ_sMAjzNG8alWynVBI01GZtkOom6aBm6mt1Pe4V2znjE-jyHQwHWK-zHWfoHQs\" alt=\"\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/qviiC8j1js3MtmaIqtn2r4fbcXfv4-1ujj0wbw0SP5h2K2U4Kev1Q1CkGOmYLGzPw8wGOTwUb3BePZoZm_dOUbFcYukYlJZLdApIxv4ztowh9KtIE-5r5jrSyR4qe6VL6FcZxylIt1neFl0kEETb8BI\" alt=\"\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/s29-mTqSKp1Q66PF6hqSasjCNdwIrxiyL6jqFTEEwrJZ_rKxFFmdSQn57FfsHFh89TGHUdpf3a29smQpI7B81PBOdQoWh8zwOVMPe0DTj3PwL6kQOpqHPpSp5hEhFCJC5u-F_vq2tsHV8lqid02QApw\" alt=\"\" \/><\/figure>\n\n\n\n<p style=\"font-size:18px\"><br>Por \u00faltimo se comentar\u00e1 la funci\u00f3n <strong><em>startRecording()<\/em><\/strong> que se activa cuando se pulsa el bot\u00f3n de grabaci\u00f3n. Esta funci\u00f3n coloca el puntero en el Byte n\u00famero 44 donde comenzar\u00e1 a grabarse el archivo. Una vez est\u00e1 todo dispuesto, la variable recording cambia su valor para indicar al micr\u00f3fono que debe empezar a captar audio y a al dispositivo que debe guardar este audio en el archivo creado. Una vez se ha terminado de grabar, o bien porque se ha detenido el ruido, o el dispositivo se ha desconectado, la variable se pone a cero y deja de grabar mediante la funci\u00f3n <strong><em>stopRecording()<\/em><\/strong>. El resultado final es un archivo .WAV en el que se encuentra el audio recogido durante la noche.<br><\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/34SF0yN5u9v-i9CN87q-q6jFPthEZFQNxsGgqZ-Ts5iL9-zdE72OFbM4JcIBbMa_4MsiTi65PmlObJ4xIea_lGK5wXpGEwx_hebFCsC-Unzu8UdFAx7NehE8xSkwUNleouo8bmeRYoea6zs8qw8QAn8\" alt=\"\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/4ALNkWqMnDA4BEyFJ9igURPGNLG7UZ1WZD440r1SSgg9lmd9SrsjL71VXxtFvdaxv9iy4lzC0UvbovuJ5bxDWQwaTDM1PFyE2B6PJRoyGZYPgmPksPvm76LqtjTMitO5UEk_boDMbbvSZ5eG68UPiKA\" alt=\"\" \/><\/figure>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>C\u00f3digo del archivo GrabdorApneaNoche.ino<\/summary>\n<pre class=\"wp-block-code\"><code>\/\/ ----------------------------------------------------\n\/\/\n\/\/\n\/\/ ----------------------------------------------------\n\n#include &lt;SD.h&gt; \/\/ La SD Card va por el bus SPI.\n#include &lt;Wire.h&gt; \/\/ El RTC va por el bus I2C.\n#include &lt;TMRpcm.h&gt;     \n\n#define cbi(sfr, bit) (_SFR_BYTE(sfr) &amp;= ~_BV(bit))\n#define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit))\n\nTMRpcm tmrpcm;\n\nFile rec;\n\nconst unsigned int darBufSize = 128;\nconst unsigned int totalBuf = darBufSize * 8;\nconst unsigned int bufSplit_1 = darBufSize;\nconst unsigned int bufSplit_2 = darBufSize * 2;\nconst unsigned int bufSplit_3 = darBufSize * 3;\nconst unsigned int bufSplit_4 = darBufSize * 4;\nconst unsigned int bufSplit_5 = darBufSize * 5;\nconst unsigned int bufSplit_6 = darBufSize * 6;\nconst unsigned int bufSplit_7 = darBufSize * 7;\n\nconst int chipSelect = 4;\nunsigned long fileSize = 0L;\nunsigned long waveChunk = 16;\nunsigned int waveType = 1;\nunsigned int numChannels = 1;\n\nchar nombrefich_graba&#091;13] =\"HH-MI-SS.wav\";\n\n\/\/----------- FRECUENCIA DE MUESTREO -------------------\nunsigned long sampleRate = 16000;\n\/\/----------- FRECUENCIA DE MUESTREO -------------------\n\nunsigned long bytesPerSec = sampleRate;\nunsigned int blockAlign = 1;\nunsigned int bitsPerSample = 8;\nunsigned long dataSize = 0L;\nunsigned long recByteCount = 0L;\nunsigned long recByteSaved = 0L;\nunsigned long playByteCount = 0L;  \/\/ RBP. 24\/10\/2023\nunsigned long playByteRead = 0L; \/\/ RBP. 24\/10\/2023\nunsigned long ultSonido; \/\/ RBP. 11\/11\/2023\nconst int btnEscucha =6; \nint leidos;\nunsigned int bufCuenta;\nint val_btnEscucha; \nint val_btnEscucha_ant=HIGH; \nconst int btnBorra =3; \nint val_btnBorra; \nint val_btnBorra_ant=HIGH; \nconst int btnPlay =2; \nint val_btnPlay; \nint val_btnPlay_ant=HIGH; \nint pinMute = 8; \/\/ RBP 11\/11\/2023\nconst int ledEscucha = 5; \/\/ RBP 30\/10\/2023\nconst int ledGraba = 7; \/\/ RBP 30\/10\/2023\nconst int altavoz = 9; \nint modoPlay = 0;\nint modoGraba = false;\nint modoGraba_ant = false;\nint modoEscucha = false;\nbyte buf00&#091;darBufSize]; \/\/ buffer array 1\nbyte buf01&#091;darBufSize]; \/\/ buffer array 2\nbyte buf02&#091;darBufSize]; \/\/ buffer array 3\nbyte buf03&#091;darBufSize]; \/\/ buffer array 4\nbyte buf04&#091;darBufSize]; \/\/ buffer array 5\nbyte buf05&#091;darBufSize]; \/\/ buffer array 6\nbyte buf06&#091;darBufSize]; \/\/ buffer array 7\nbyte buf07&#091;darBufSize]; \/\/ buffer array 8\n\nbyte cabecera_wav&#091;44]; \/\/ RBP 30\/10\/2023. Cabecera de los ficheros WAV\nbyte byte1, byte2, byte3, byte4;\nbyte byteLeido;\nbyte byteSonado=1;\nbyte lastBuf = 7;\nbyte valOCR2A = 16000000\/(8*sampleRate);\n\nbool v_borra_fich;\n\nsigned int v_adc, v_adc_ant=0;\nbyte v_adc_buf;\nunsigned long v_time_act;  \/\/ RBP 30\/10\/2023. Marca de tiempo.\nunsigned long v_time_borra; \/\/ RBP 06\/11\/2023. Para contar que el pulsador de borrado est\u00e9 presionado 1 seg.\nbool fich_abierto; \/\/  preparado, leelo;\n\n\/\/ #define NIVEL_SONIDO 0x2A\n#define NIVEL_SONIDO 0x3A\n\nvoid setup() { \/\/ THIS RUNS ONCE\n  Setup_ADC();\n  pinMode(ledEscucha, OUTPUT);  \n  pinMode(ledGraba, OUTPUT);  \n  pinMode(altavoz, OUTPUT);\n  pinMode(pinMute, OUTPUT);\n  pinMode(btnEscucha, INPUT_PULLUP); \n  pinMode(btnBorra, INPUT_PULLUP); \n  pinMode(btnPlay, INPUT_PULLUP); \n\n  digitalWrite(pinMute, HIGH);\n  digitalWrite(ledEscucha, LOW);\n  digitalWrite(ledGraba, LOW);\n  \n  precalc_cabecera_wav(); \/\/ RBP 30\/10\/2023. Prec\u00e1lculo de la cabecera de los ficheros WAV\n\n  memset(buf00, 0xFF, darBufSize);\n  memset(buf01, 0xFF, darBufSize);\n  memset(buf02, 0xFF, darBufSize);\n  memset(buf03, 0xFF, darBufSize);\n  memset(buf04, 0xFF, darBufSize);\n  memset(buf05, 0xFF, darBufSize);\n  memset(buf06, 0xFF, darBufSize);\n  memset(buf07, 0xFF, darBufSize);              \n\n  Serial.begin(9600);\n\n  tmrpcm.speakerPin = 46;\n  if (SD.begin(chipSelect)) { \/\/ }, SPI_FULL_SPEED) { \/\/ initialise card on SPI to 8MHz SPI bus speed  \n    Serial.println(\"SD correcta\");\n    for (int dloop = 0; dloop &lt; 4; dloop++) {\n      digitalWrite(ledEscucha,(dloop+1)%2); \n      delay(100);\n    }\n  } else { \/\/ if error, flash LED twice per second, until reset\n    Serial.println(\"fallo SD\");\n    int v_led =0;\n    while(1) {\n      v_led =!v_led;\n      digitalWrite(ledEscucha,v_led); \n      delay(500);\n    }\n  }\n\n  Wire.begin();\n  \n  val_btnEscucha_ant =digitalRead(btnEscucha);\n}\n\nvoid loop() { \n\n  \/\/ gesti\u00f3n del modo \"escucha\"\n  val_btnEscucha =digitalRead(btnEscucha);\n  if (val_btnEscucha == LOW &amp;&amp; val_btnEscucha_ant == HIGH) { \n    delay(1500);\n    Serial.println(\"escuchando ...\");\n    StartEscucha(); \n  }\n  if (val_btnEscucha == HIGH &amp;&amp; val_btnEscucha_ant == LOW) { \n    if (modoGraba) {\n      StopGraba();\n    }\n    StopEscucha(); \n    Serial.println(\"fin escucha\");    \n    delay(1500);    \n  }   \n  val_btnEscucha_ant =val_btnEscucha;\n\n  \/\/ gesti\u00f3n del bot\u00f3n de borrado\n  val_btnBorra =digitalRead(btnBorra); \/\/ RBP 08\/11\/2023. Lectura del bot\u00f3n de borrado de los audios.\n  if (!modoGraba) { \/\/ &amp;&amp; !tmrpcm.isPlaying()) {    \n    if (val_btnBorra == LOW) {\n      if (val_btnBorra_ant == HIGH) {  \/\/ se toma el tiempo nada m\u00e1s pulsarse\n        v_time_borra =millis();\n      } else {\n        if (v_time_borra!=0 &amp;&amp; (millis()-v_time_borra)&gt;1500) { \/\/ RBP 06\/11\/2023. Cuando se mantiene pulsado el bot\u00f3n de borrado por m\u00e1s de 1.5 seg\n                                                              \/\/ se borran los archivos .WAV de las tarjeta SD.\n          for (int dloop = 0; dloop &lt; 4; dloop++) {   \/\/ indicaci\u00f3n de borrado en el led rojo\n            digitalWrite(ledGraba,(dloop+1)%2); \n            delay(100);\n          }\n          v_time_borra =0;\n\n          borraWavs(); \/\/ RBP 07\/11\/2023. Borra los ficheros WAV.\n        }\n      }\n    } else {\n      if (val_btnBorra_ant == LOW) {\n        v_time_borra =0;\n      }\n    }    \n  }\n  val_btnBorra_ant =val_btnBorra;\n\n  \/\/ gesti\u00f3n del bot\u00f3n de play\n  val_btnPlay =digitalRead(btnPlay); \/\/ RBP 08\/11\/2023. Lectura del bot\u00f3n de play.\n  if (val_btnPlay == LOW) {              \n    if (val_btnPlay_ant == HIGH) {   \/\/ Nada m\u00e1s pulsarse. \n      \/\/ digitalWrite(ledGraba,HIGH); \n      playWavs();\n      delay(100);\n    }\n  }\n  val_btnPlay_ant =val_btnPlay;\n\n  \/\/ gesti\u00f3n de la grabaci\u00f3n\n  if (modoGraba) {    \n    if (!fich_abierto) {\n      escribeCabeceraAudio();                \n    }\n    fich_abierto =true;\n\n    if (recByteCount % totalBuf &gt; bufSplit_1 &amp;&amp; lastBuf == 7) { \n      rec.write(buf00,darBufSize); lastBuf = 0; recByteSaved += darBufSize; \n    } else if (recByteCount % totalBuf &gt; bufSplit_2 &amp;&amp; lastBuf == 0) {\n      rec.write(buf01,darBufSize); lastBuf = 1; recByteSaved += darBufSize; \n    } else if (recByteCount % totalBuf &gt; bufSplit_3 &amp;&amp; lastBuf == 1) { \n      rec.write(buf02,darBufSize); lastBuf = 2; recByteSaved += darBufSize; \n    } else if (recByteCount % totalBuf &gt; bufSplit_4 &amp;&amp; lastBuf == 2) { \n      rec.write(buf03,darBufSize); lastBuf = 3; recByteSaved += darBufSize; \n    } else if (recByteCount % totalBuf &gt; bufSplit_5 &amp;&amp; lastBuf == 3) { \n      rec.write(buf04,darBufSize); lastBuf = 4; recByteSaved += darBufSize;       \n    } else if (recByteCount % totalBuf &gt; bufSplit_6 &amp;&amp; lastBuf == 4) { \n      rec.write(buf05,darBufSize); lastBuf = 5; recByteSaved += darBufSize; \n    } else if (recByteCount % totalBuf &gt; bufSplit_7 &amp;&amp; lastBuf == 5) { \n      rec.write(buf06,darBufSize); lastBuf = 6; recByteSaved += darBufSize; \n    } else if (recByteCount % totalBuf &lt; bufSplit_1 &amp;&amp; lastBuf == 6) { \n      rec.write(buf07,darBufSize); lastBuf = 7; recByteSaved += darBufSize; \n    }             \n  } else {\n    if (fich_abierto) {        \n      terminaAudio();\n      fich_abierto =false;\n      digitalWrite(ledGraba,LOW); \n    } \n  }\n  modoGraba_ant =modoGraba;\n}\n\n\/\/ inicia modo escucha\nvoid StartEscucha() {\n  modoEscucha = true;\n  Setup_timer2_rec();\n\n  sbi (TIMSK2, OCIE2A); \/\/ enable timer interrupt, start grabbing audio\n  digitalWrite(ledEscucha,HIGH);\n}\n\n\/\/ inicio del proceso de grabaci\u00f3n para un nuevo audio\nvoid StartGraba() { \n  digitalWrite(ledGraba,HIGH);\n  recByteCount = 0;\n  recByteSaved = 0;\n  ultSonido = 0;\n  lastBuf =7;\n  fich_abierto =false;\n  modoGraba = true; \n}\n\n\/\/ reproduce un audio\nvoid playAudio(char *p_nombrefich) { \/\/ RBP. 24\/10\/2023\n  StopGraba();\n  StopEscucha();\n  tmrpcm.setVolume(4);  \/\/ 4\n  Serial.println(\"sonando \"+String(p_nombrefich));\n  tmrpcm.play(p_nombrefich);\n  while (tmrpcm.isPlaying());\n  Serial.println(\"fin audio\");\n}\n\n\/\/ parar proceso de grabaci\u00f3n\nvoid StopGraba() { \n  modoGraba = false; \n}\n\n\/\/ fin del proceso de escucha\nvoid StopEscucha() { \n  modoGraba = false;\n  modoEscucha = false;\n  cbi (TIMSK2, OCIE2A); \/\/ deshabilitar interrupci\u00f3n del timer 2\n  digitalWrite(ledGraba,LOW); \n  digitalWrite(ledEscucha,LOW); \n}\n\n\/\/ actualiza la cabecera WAV del audio con el tama\u00f1o final del audio\nvoid terminaAudio() { \n  unsigned long j;\n  bool hay_voz;\n  signed int valor_adc;\n\n  rec.seek(4);\n  byte1 = recByteSaved &amp; 0xff;\n  byte2 = (recByteSaved &gt;&gt; 8) &amp; 0xff;\n  byte3 = (recByteSaved &gt;&gt; 16) &amp; 0xff;\n  byte4 = (recByteSaved &gt;&gt; 24) &amp; 0xff;  \n  rec.write(byte1);  rec.write(byte2);  rec.write(byte3);  rec.write(byte4);\n  rec.seek(40);\n  rec.write(byte1);  rec.write(byte2);  rec.write(byte3);  rec.write(byte4);\n\n  rec.seek(ultSonido+44+9600); \n  while (rec.available()) {\n    rec.write(0x80); \/\/ silencio\n  }\n  rec.close();\n}\n\n\/\/ RBP 03\/11\/2023. Precalcula, en un array, la cabecera del audio para que sea m\u00e1s r\u00e1pida la creaci\u00f3n del mismo.\nvoid precalc_cabecera_wav() { \n  cabecera_wav&#091;0] ='R';\n  cabecera_wav&#091;1] ='I';\n  cabecera_wav&#091;2] ='F';\n  cabecera_wav&#091;3] ='F';\n  cabecera_wav&#091;4] =0;\n  cabecera_wav&#091;5] =0;\n  cabecera_wav&#091;6] =0;\n  cabecera_wav&#091;7] =0;\n  cabecera_wav&#091;8] ='W';\n  cabecera_wav&#091;9] ='A';\n  cabecera_wav&#091;10] ='V';\n  cabecera_wav&#091;11] ='E';\n  cabecera_wav&#091;12] ='f';\n  cabecera_wav&#091;13] ='m';\n  cabecera_wav&#091;14] ='t';\n  cabecera_wav&#091;15] =' ';\n  byte1 = waveChunk &amp; 0xff;\n  byte2 = (waveChunk &gt;&gt; 8) &amp; 0xff;\n  byte3 = (waveChunk &gt;&gt; 16) &amp; 0xff;\n  byte4 = (waveChunk &gt;&gt; 24) &amp; 0xff;  \n  cabecera_wav&#091;16] =byte1;\n  cabecera_wav&#091;17] =byte2;\n  cabecera_wav&#091;18] =byte3;\n  cabecera_wav&#091;19] =byte4;\n  byte1 = waveType &amp; 0xff;\n  byte2 = (waveType &gt;&gt; 8) &amp; 0xff;\n  cabecera_wav&#091;20] =byte1;\n  cabecera_wav&#091;21] =byte2;\n  byte1 = numChannels &amp; 0xff;\n  byte2 = (numChannels &gt;&gt; 8) &amp; 0xff;\n  cabecera_wav&#091;22] =byte1;\n  cabecera_wav&#091;23] =byte2;\n  byte1 = sampleRate &amp; 0xff;\n  byte2 = (sampleRate &gt;&gt; 8) &amp; 0xff;\n  byte3 = (sampleRate &gt;&gt; 16) &amp; 0xff;\n  byte4 = (sampleRate &gt;&gt; 24) &amp; 0xff;  \n  cabecera_wav&#091;24] =byte1;\n  cabecera_wav&#091;25] =byte2;\n  cabecera_wav&#091;26] =byte3;\n  cabecera_wav&#091;27] =byte4;\n  byte1 = bytesPerSec &amp; 0xff;\n  byte2 = (bytesPerSec &gt;&gt; 8) &amp; 0xff;\n  byte3 = (bytesPerSec &gt;&gt; 16) &amp; 0xff;\n  byte4 = (bytesPerSec &gt;&gt; 24) &amp; 0xff;  \n  cabecera_wav&#091;28] =byte1;\n  cabecera_wav&#091;29] =byte2;\n  cabecera_wav&#091;30] =byte3;\n  cabecera_wav&#091;31] =byte4;\n  byte1 = blockAlign &amp; 0xff;\n  byte2 = (blockAlign &gt;&gt; 8) &amp; 0xff;\n  cabecera_wav&#091;32] =byte1;\n  cabecera_wav&#091;33] =byte2;\n  byte1 = bitsPerSample &amp; 0xff;\n  byte2 = (bitsPerSample &gt;&gt; 8) &amp; 0xff;\n  cabecera_wav&#091;34] =byte1;\n  cabecera_wav&#091;35] =byte2;\n  cabecera_wav&#091;36] ='d';\n  cabecera_wav&#091;37] ='a';\n  cabecera_wav&#091;38] ='t';\n  cabecera_wav&#091;39] ='a';    \n  cabecera_wav&#091;40] =0;\n  cabecera_wav&#091;41] =0;\n  cabecera_wav&#091;42] =0;\n  cabecera_wav&#091;43] =0;      \n}\n\n\/\/ escribe la cabecera WAV del fichero de audio, d\u00e1ndole un nombre basado en la hora\nvoid escribeCabeceraAudio() { \n  recByteSaved = 0;\n                                                \/\/ librer\u00eda DS3231:\n  nombre_fichero_hora_RTC(nombrefich_graba);    \/\/  obtiene el nombre del fichero en el formato \"HH-MI-SS.wav\", \n                                                \/\/ a partir de la hora del Real Time Clock\n  cli(); \/\/ deshabilitar interrupciones                                                \n  rec =SD.open(nombrefich_graba, O_CREAT | O_TRUNC | O_RDWR);\n  rec.write(cabecera_wav,44);  \/\/ escrite la cabecera precalculada\n  sei(); \/\/ habilitar interrupciones\n}\n\n\/\/ inicia el TIMER2 con la frecuencia de muestreo\nvoid Setup_timer2_rec() {\n  TCCR2B = _BV(CS21);  \/\/ prescala de Timer2 a : 8\n  TCCR2A = _BV(WGM21); \/\/ frecuencia de interrupci\u00f3n\n  OCR2A = valOCR2A; \/\/ ajuste de la frecuencia de muestreo\n}\n\n\/\/ configura el ADC para leer del micr\u00f3fono en el pin A6\nvoid Setup_ADC() {\n  ADMUX = 0x66; \/\/ configura ADC para leer del pin A6, ADLAR a 1 (justificado a la izquierda)\n  cbi(ADCSRA,ADPS2); \/\/ configura prescala a 3 \/ ADC clock = 4MHz\n  sbi(ADCSRA,ADPS1);\n  sbi(ADCSRA,ADPS0);\n}\n\n\/\/ RBP 07\/11\/2023. Reproducir todos los audios .WAV del directorio ra\u00edz de la tarjeta SD.\nvoid playWavs() { \n  int mylen;\n  File dir;\n\n  dir =SD.open(\"\/\", O_RDWR);  \n  while(true) {\n    File entry =  dir.openNextFile();\n    \n    if (!entry) {\n      break;\n    }\n     \n    mylen=strlen(entry.name())-4; \/\/ compara los \u00faltimos 4 caracteres\n     \n    entry.close();     \n    if ((strcmp(entry.name() + mylen,\".WAV\")==0) || \n        (strcmp(entry.name() + mylen,\".wav\")==0)) {\n      digitalWrite(pinMute, LOW);          \n      playAudio(entry.name());\n    } \n  }\n  dir.close();\n  digitalWrite(pinMute, HIGH);\n}\n\n\/\/ RBP 07\/11\/2023. Borrar todos los audios .WAV del directorio ra\u00edz de la tarjeta SD.\nvoid borraWavs() { \n  int mylen;\n  File dir;\n\n  dir =SD.open(\"\/\", O_RDWR);  \n  while(true) {\n    File entry =  dir.openNextFile();\n    \n    if (!entry) {\n      break;\n    }\n     \n    mylen=strlen(entry.name())-4; \/\/ compara los \u00faltimos 4 caracteres\n     \n    entry.close();     \n    if ((strcmp(entry.name() + mylen,\".WAV\")==0) || \n        (strcmp(entry.name() + mylen,\".wav\")==0)) {\n      SD.remove(entry.name()); \/\/ RBP 07\/11\/2023. Borrar el fichero WAV\n    } \n  }\n  dir.close();\n}\n\n\/\/ ISR, rutina de interrupci\u00f3n de servicio del TIMER2\nISR(TIMER2_COMPA_vect) {\n  cli(); \/\/ deshabilitar interrupciones  \n\n  sbi(ADCSRA, ADSC); \/\/ inicio muestreo ADC \n  while(bit_is_set(ADCSRA, ADSC));  \/\/ esperar hasta que el bit ADSC pase a 0 = nueva muestra lista\n  recByteCount++; \/\/ incrementar contador de muestras\n  \n  v_adc =ADCH-0x40; \/\/ quitar el offset de 1.25V que trae el m\u00f3dulo del micr\u00f3fono\n  if (abs(v_adc) &gt;NIVEL_SONIDO) { \/\/ RBP 31\/10\/2023. Si hay un nivel de sonido.\n    if (!modoGraba) {  \n      StartGraba(); \/\/ RBP 30\/10\/2023. Comienzo de la grabaci\u00f3n.    \n    } \n    v_time_act =millis(); \/\/ RBP 31\/10\/2023. Actualizamos la referencia de tiempo.\n    ultSonido =recByteCount;\n  } \n  if (modoGraba &amp;&amp; (millis()-v_time_act)&gt;2000) { \/\/ RBP 31\/10\/2023. Si pasan m\u00e1s de 2 segundos sin sonido.\n    StopGraba(); \/\/ RBP 30\/10\/2023. Fin de la grabaci\u00f3n.    \n  }\n\n  if (modoGraba) {\n    v_adc =(v_adc + v_adc_ant)&gt;&gt;1;   \/\/ filtro para suavizar ruido \n    v_adc_buf =(v_adc+0x80) &amp; 0xFF;  \/\/ volver a poner un offset de 2.5V para que el valor est\u00e9 comprendido entre 0 y 255, sin signo\n\n    if (recByteCount % totalBuf &lt; bufSplit_1) { \/\/ guardamos en los bufferes el valor final de la muestra, para que el bucle principal\n                                                \/\/ lo escriba en el fichero, por bloques \n      buf00&#091;recByteCount % darBufSize] = v_adc_buf;\n    } else if (recByteCount % totalBuf &lt; bufSplit_2) { \n      buf01&#091;recByteCount % darBufSize] = v_adc_buf;\n    } else if (recByteCount % totalBuf &lt; bufSplit_3) {\n      buf02&#091;recByteCount % darBufSize] = v_adc_buf;\n    } else if (recByteCount % totalBuf &lt; bufSplit_4) {\n      buf03&#091;recByteCount % darBufSize] = v_adc_buf;\n    } else if (recByteCount % totalBuf &lt; bufSplit_5) {\n      buf04&#091;recByteCount % darBufSize] = v_adc_buf;\n    } else if (recByteCount % totalBuf &lt; bufSplit_6) {\n      buf05&#091;recByteCount % darBufSize] = v_adc_buf;\n    } else if (recByteCount % totalBuf &lt; bufSplit_7) {\n      buf06&#091;recByteCount % darBufSize] = v_adc_buf;\n    } else {\n      buf07&#091;recByteCount % darBufSize] = v_adc_buf;\n    }\n  }\n  v_adc_ant =v_adc;  \/\/ valor anterior para filtro de ruido  \n  v_adc =0;\n\n  sei(); \/\/ habilitar interrupciones\n}\n\n<\/code><\/pre>\n<\/details>\n\n\n\n<details class=\"wp-block-details is-layout-flow wp-block-details-is-layout-flow\"><summary>C\u00f3digo del archivo DS3231.ino <\/summary>\n<pre class=\"wp-block-code\"><code>#include &lt;Wire.h&gt; \/\/ El reloj en tiempo real va por el bus I2C\r\n#include &lt;DS3231.h&gt;\r\n\r\n\/\/Variables RTC\r\nbyte Year ;\r\nbyte Month ;\r\nbyte Date ;\r\nbyte DoW ;\r\nbyte Hour ;\r\nbyte Minute ;\r\nbyte Second ;\r\nbool Century \t= false;\r\nbool h12 ;\r\nbool PM ;\r\n\r\n\/\/ RTC\r\nDS3231 Clock;\r\n\r\n\/\/ RBP. 29\/10\/2023. Para obtener el nombre del fichero en formato \"HH-MI-SS.wav\"\r\nvoid nombre_fichero_hora_RTC(char *nombre_fichero) {\r\n sprintf(nombre_fichero, \"%02d-%02d-%02d.wav\\0\", Clock.getHour(h12, PM), Clock.getMinute(), Clock.getSecond());\r\n}\r\n\r\n\/\/ Funciones del RTC -----------------------------------------------------------------------------\r\nvoid readRTC( ) { \/\/ function readRTC \r\n \t\/\/\/\/Read Real Time Clock\r\n \tSerial.print(Clock.getYear(), DEC);\r\n \tSerial.print(\"-\");\r\n \tSerial.print(Clock.getMonth(Century), DEC);\r\n \tSerial.print(\"-\");\r\n \tSerial.print(Clock.getDate(), DEC);\r\n \tSerial.print(\" \");\r\n \tSerial.print(Clock.getHour(h12, PM), DEC); \/\/24-hr\r\n \tSerial.print(\":\");\r\n \tSerial.print(Clock.getMinute(), DEC);\r\n \tSerial.print(\":\");\r\n \tSerial.println(Clock.getSecond(), DEC);\r\n \tdelay(1000);\r\n}\r\n\r\nvoid setDate( ) { \/\/ function setDate \r\n \t\/\/\/\/Set Real Time Clock\r\n \tif (Serial.available()) {\r\n\r\n \t\t\t\/\/int _start = millis();\r\n\r\n \t\t\tGetDateStuff(Year, Month, Date, DoW, Hour, Minute, Second);\r\n\r\n \t\t\tClock.setClockMode(false); \t\/\/ set to 24h\r\n\r\n \t\t\tClock.setSecond(Second);\r\n \t\t\tClock.setMinute(Minute);\r\n \t\t\tClock.setHour(Hour);\r\n \t\t\tClock.setDate(Date);\r\n \t\t\tClock.setMonth(Month);\r\n \t\t\tClock.setYear(Year);\r\n \t\t\tClock.setDoW(DoW);\r\n\r\n \t}\r\n}\r\n\r\nvoid GetDateStuff(byte&amp; Year, byte&amp; Month, byte&amp; Day, byte&amp; DoW, byte&amp; Hour, byte&amp; Minute, byte&amp; Second) { \/\/ function GetDateStuff \r\n \t\/\/\/\/Get date data\r\n \t\/\/ Call this if you notice something coming in on\r\n \t\/\/ the serial port. The stuff coming in should be in\r\n \t\/\/ the order YYMMDDwHHMMSS, with an 'x' at the end.\r\n \tboolean GotString = false;\r\n \tchar InChar;\r\n \tbyte Temp1, Temp2;\r\n \tchar InString&#091;20];\r\n\r\n \tbyte j = 0;\r\n \twhile (!GotString) {\r\n \t\t\tif (Serial.available()) {\r\n \t\t\t\t\tInChar = Serial.read();\r\n \t\t\t\t\tInString&#091;j] = InChar;\r\n \t\t\t\t\tj += 1;\r\n \t\t\t\t\tif (InChar == 'x') {\r\n \t\t\t\t\t\t\tGotString = true;\r\n \t\t\t\t\t}\r\n \t\t\t}\r\n \t}\r\n \tSerial.println(InString);\r\n \t\/\/ Read Year first\r\n \tTemp1 = (byte)InString&#091;0] - 48;\r\n \tTemp2 = (byte)InString&#091;1] - 48;\r\n \tYear = Temp1 * 10 + Temp2;\r\n \t\/\/ now month\r\n \tTemp1 = (byte)InString&#091;2] - 48;\r\n \tTemp2 = (byte)InString&#091;3] - 48;\r\n \tMonth = Temp1 * 10 + Temp2;\r\n \t\/\/ now date\r\n \tTemp1 = (byte)InString&#091;4] - 48;\r\n \tTemp2 = (byte)InString&#091;5] - 48;\r\n \tDay = Temp1 * 10 + Temp2;\r\n \t\/\/ now Day of Week\r\n \tDoW = (byte)InString&#091;6] - 48;\r\n \t\/\/ now Hour\r\n \tTemp1 = (byte)InString&#091;7] - 48;\r\n \tTemp2 = (byte)InString&#091;8] - 48;\r\n \tHour = Temp1 * 10 + Temp2;\r\n \t\/\/ now Minute\r\n \tTemp1 = (byte)InString&#091;9] - 48;\r\n \tTemp2 = (byte)InString&#091;10] - 48;\r\n \tMinute = Temp1 * 10 + Temp2;\r\n \t\/\/ now Second\r\n \tTemp1 = (byte)InString&#091;11] - 48;\r\n \tTemp2 = (byte)InString&#091;12] - 48;\r\n \tSecond = Temp1 * 10 + Temp2;\r\n}<\/code><\/pre>\n<\/details>\n\n\n\n<h2 class=\"wp-block-heading has-black-color has-text-color has-link-color wp-elements-69f6aa9c6d6d0eb200c1790e9a4ca064\" style=\"font-size:32px;text-transform:uppercase\">Casos de uso<\/h2>\n\n\n\n<p style=\"font-size:18px\">Existen seis estados en el proyecto:<br><br>Sin tarjeta SD: al encender el sistema y no encontrar la tarjeta el LED amarillo, el de escucha, empezar\u00e1 a parpadear continuamente indicando este hecho.<br><br>Standby: al encender el sistema y este tener tarjeta SD el LED amarillo parpadea y despu\u00e9s se apaga indicando que todo est\u00e1 correcto, en este modo se puede borrar los archivos de la tarjeta SD, reproducir los archivos WAV de la tarjeta, o entrar en el modo escucha.<br><br>Borrado: al estar en Standby si se mantiene presionado el bot\u00f3n rojo(Borrar) por un segundo y medio, este borrar\u00e1 los archivos con extensi\u00f3n WAV de la tarjeta y volver\u00e1 al modo anterior(Standby).<br><br>Reproducci\u00f3n: si se presiona el bot\u00f3n negro(Play) estando en modo Standby, el sistema reproducir\u00e1 todos los archivos .WAV de la tarjeta SD, tras finalizar, al igual que en el modo de Borrado, volver\u00e1 a Standby.<br><br>Escucha: accionando el interruptor Escucha, el dispositivo encender\u00e1 el led amarillo y este se mantendr\u00e1 encendido hasta que se abandone el modo Escucha y el modo Grabaci\u00f3n. Al detectar sonido m\u00e1s alto que el umbral definido en el c\u00f3digo, entrar\u00e1 en modo Grabaci\u00f3n. Se volver\u00e1 al modo Standby al volver a cambiar la posici\u00f3n del interruptor.<br><br>Grabaci\u00f3n: como se ha dicho antes si se est\u00e1 en modo escucha y se supera el umbral de volumen entrar\u00e1 en este modo, al hacerlo comenzar\u00e1 a grabar el sonido y el LED rojo(Grabando) se encender\u00e1. Tras no escuchar sonido que supere el umbral durante un breve lapso de tiempo el LED se apagar\u00e1 y se crear\u00e1 el archivo WAV en la tarjeta SD con nombre de la hora minutos y segundos a la que ha sido grabado. Tras esto regresar\u00e1 al modo Escucha.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-black-color has-text-color has-link-color wp-elements-eb87d2e5d82252e3ca84e06018711634\" style=\"font-size:32px;text-transform:uppercase\">Problemas encontrados<\/h2>\n\n\n\n<p style=\"font-size:18px\">Algunos problemas m\u00e1s leves que fuimos encontrado a medida que se realizaba el proyecto fueron los siguientes: falta de memoria, falta de conocimiento de los componentes utilizados\/c\u00f3digo necesario. El primer problema se solucion\u00f3 empleando una Arduino MEGA, y el segundo buscando informaci\u00f3n a cerca de la grabaci\u00f3n\/reproducci\u00f3n, el RTC y el almacenamiento en la SD.<br><br>Otro problema m\u00e1s importante relacionado con los objetivos del proyecto fue la dificultad al reconocer la apnea, este objetivo finalmente se elimin\u00f3 y se pas\u00f3 a grabar el sonido y grabarlo en la SD y el resultado de estas ser\u00eda analizado por un profesional.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hecho por: Introducci\u00f3n En este proyecto se trata de crear un dispositivo que grabe el ruido ambiente por la noche y as\u00ed poder detectar la apnea del sue\u00f1o. El proyecto se basa en una&#46;&#46;&#46;<\/p>\n","protected":false},"author":192,"featured_media":7553,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[8],"class_list":["post-7546","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos","tag-arduino"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Grabador de apnea - 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\/grabador-de-apnea-borrador\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Grabador de apnea - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Hecho por: Introducci\u00f3n En este proyecto se trata de crear un dispositivo que grabe el ruido ambiente por la noche y as\u00ed poder detectar la apnea del sue\u00f1o. El proyecto se basa en una&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-20T21:01:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-01-25T12:29:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2363\" \/>\n\t<meta property=\"og:image:height\" content=\"1364\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"DSE_2023_24_G11\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"DSE_2023_24_G11\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"17 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\\\/grabador-de-apnea-borrador\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/\"},\"author\":{\"name\":\"DSE_2023_24_G11\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/3a5b08fd7af6100e909fb043c1b9e5ad\"},\"headline\":\"Grabador de apnea\",\"datePublished\":\"2023-12-20T21:01:49+00:00\",\"dateModified\":\"2024-01-25T12:29:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/\"},\"wordCount\":1227,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/grabador_apnea_noche.png\",\"keywords\":[\"Arduino\"],\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/\",\"name\":\"Grabador de apnea - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/grabador_apnea_noche.png\",\"datePublished\":\"2023-12-20T21:01:49+00:00\",\"dateModified\":\"2024-01-25T12:29:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/grabador_apnea_noche.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/grabador_apnea_noche.png\",\"width\":2363,\"height\":1364},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/grabador-de-apnea-borrador\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Grabador de apnea\"}]},{\"@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\\\/3a5b08fd7af6100e909fb043c1b9e5ad\",\"name\":\"DSE_2023_24_G11\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fbe974fdf0b85bcff11c0318d8b462c715a133271e389b489b3c65e77958a3ff?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fbe974fdf0b85bcff11c0318d8b462c715a133271e389b489b3c65e77958a3ff?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/fbe974fdf0b85bcff11c0318d8b462c715a133271e389b489b3c65e77958a3ff?s=96&d=mm&r=g\",\"caption\":\"DSE_2023_24_G11\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/dse202324g11\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Grabador de apnea - 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\/grabador-de-apnea-borrador\/","og_locale":"es_ES","og_type":"article","og_title":"Grabador de apnea - Proyectos con Arduino.","og_description":"Hecho por: Introducci\u00f3n En este proyecto se trata de crear un dispositivo que grabe el ruido ambiente por la noche y as\u00ed poder detectar la apnea del sue\u00f1o. El proyecto se basa en una&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2023-12-20T21:01:49+00:00","article_modified_time":"2024-01-25T12:29:49+00:00","og_image":[{"width":2363,"height":1364,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche.png","type":"image\/png"}],"author":"DSE_2023_24_G11","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"DSE_2023_24_G11","Tiempo de lectura":"17 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/"},"author":{"name":"DSE_2023_24_G11","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/3a5b08fd7af6100e909fb043c1b9e5ad"},"headline":"Grabador de apnea","datePublished":"2023-12-20T21:01:49+00:00","dateModified":"2024-01-25T12:29:49+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/"},"wordCount":1227,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche.png","keywords":["Arduino"],"articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/","name":"Grabador de apnea - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche.png","datePublished":"2023-12-20T21:01:49+00:00","dateModified":"2024-01-25T12:29:49+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/grabador_apnea_noche.png","width":2363,"height":1364},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/grabador-de-apnea-borrador\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Grabador de apnea"}]},{"@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\/3a5b08fd7af6100e909fb043c1b9e5ad","name":"DSE_2023_24_G11","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/fbe974fdf0b85bcff11c0318d8b462c715a133271e389b489b3c65e77958a3ff?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/fbe974fdf0b85bcff11c0318d8b462c715a133271e389b489b3c65e77958a3ff?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/fbe974fdf0b85bcff11c0318d8b462c715a133271e389b489b3c65e77958a3ff?s=96&d=mm&r=g","caption":"DSE_2023_24_G11"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/dse202324g11\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/7546","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\/192"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=7546"}],"version-history":[{"count":12,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/7546\/revisions"}],"predecessor-version":[{"id":7776,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/7546\/revisions\/7776"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/7553"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=7546"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=7546"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=7546"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}