{"id":7611,"date":"2023-12-16T20:19:04","date_gmt":"2023-12-16T19:19:04","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=7611"},"modified":"2023-12-19T20:25:41","modified_gmt":"2023-12-19T19:25:41","slug":"caja-magica","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/","title":{"rendered":"Caja M\u00e1gica"},"content":{"rendered":"\n<p>Autores: \u00d3scar Fuente Fern\u00e1ndez y Antonio Herman Boeriu<\/p>\n\n\n\n<h1 class=\"wp-block-heading has-large-font-size\"><a>\u00cdNDICE<\/a><\/h1>\n\n\n\n<ol class=\"wp-block-list\">\n<li>INTRODUCCI\u00d3N<\/li>\n\n\n\n<li>MATERIAL UTILIZADO Y COSTES<\/li>\n\n\n\n<li>IMPELMENTACI\u00d3N DEL HARDWARE<\/li>\n\n\n\n<li>DISE\u00d1O DEL SOFTWARE\n<ul class=\"wp-block-list\">\n<li>Librer\u00edas y variables globales<\/li>\n\n\n\n<li>La inicializaci\u00f3n de las variables (setup)<\/li>\n\n\n\n<li>El comportamiento continuo del programa (loop)<\/li>\n\n\n\n<li>Funciones\/Subprogramas adicionales<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>PROBLEMAS OBSERVADOS<\/li>\n\n\n\n<li>DISE\u00d1O FINAL<\/li>\n\n\n\n<li>VIDEO DEMOSTRATIVO<\/li>\n\n\n\n<li>CONCLUSIONES<\/li>\n\n\n\n<li>C\u00d3DIGO COMPLETO<\/li>\n<\/ol>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>1. INTRODUCCI\u00d3N<\/a><\/h1>\n\n\n\n<p>El nombre de Caja M\u00e1gica es un nombre idealista para que atrajera el mayor inter\u00e9s posible, porque si lo llamara \u201ccaja in\u00fatil\u201d perder\u00eda toda su gracia. Es un proyecto que no sab\u00edas que exist\u00eda pero que una vez que lo conoces, querr\u00e1s tener uno personal siempre. El proyecto consiste en una caja con interruptores, los cuales, al ser pulsados, son inmediatamente recolocados en su estado original por el \u201cindividuo\u201d que se encuentra dentro de la caja. \u00bfParece aburrido el proyecto? Entonces s\u00edgueme en esta traves\u00eda llamada memoria, pues te contar\u00e9 todo el proyecto con lujo de detalles.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>2. MATERIAL UTILIZADO Y COSTES<\/a><\/h1>\n\n\n\n<p>A continuaci\u00f3n, se les mostrar\u00e1 los precios de los componentes utilizados:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Nombre<\/strong><\/td><td><strong>Cantidad<\/strong><\/td><td><strong>Utilizados<\/strong><\/td><td><strong>Precio<\/strong><\/td><\/tr><tr><td>Kit ELEGOO Arduino<\/td><td>1 unidad<\/td><td>M\u00faltiples componentes<\/td><td>39,07 \u20ac<\/td><\/tr><tr><td>Pack Servomotores 10 unidades<\/td><td>1 unidad<\/td><td>4 servomotores<\/td><td>17,89 \u20ac<\/td><\/tr><tr><td>Pack Interruptores 10 unidades<\/td><td>1 unidad<\/td><td>3 interruptores<\/td><td>10,42 \u20ac<\/td><\/tr><tr><td>Mini MP3 DFPlayer Player M\u00f3dulo con Altavoz Redonda 2W 8Ohm<\/td><td>1 unidad<\/td><td>1 m\u00f3dulo DFPlayer y 1 altavoz 2W 80hm<\/td><td>9,99 \u20ac<\/td><\/tr><tr><td>Tarjeta microSD 4 GB<\/td><td>1 unidad<\/td><td>1 microSD<\/td><td>8,31 \u20ac<\/td><\/tr><tr><td>Caja de madera y materiales de decoraci\u00f3n<\/td><td>15 unidades<\/td><td>15 unidades<\/td><td>14,95 \u20ac<\/td><\/tr><tr><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><td>&nbsp;<\/td><\/tr><tr><td><strong>Precio total<\/strong><\/td><td>&#8211;<\/td><td>&#8211;<\/td><td>100,63 \u20ac<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>3. IMPELMENTACI\u00d3N DEL HARDWARE<\/a><\/h1>\n\n\n\n<p>Ha llegado el apartado para explicar f\u00edsicamente c\u00f3mo est\u00e1n conectados todos los pines. Al final de este apartado se encontrar\u00e1 una tabla donde se observar\u00e1 de forma m\u00e1s visual como est\u00e1n conectados los pines y a qu\u00e9.<\/p>\n\n\n\n<p>Como el dise\u00f1o final queda un poco engorroso por el n\u00famero de cables utilizados, preferimos dividir el dise\u00f1o en la memoria para que la explicaci\u00f3n sea m\u00e1s clara.<\/p>\n\n\n\n<p>Empezando con el m\u00f3dulo DFPlayer y los altavoces. Para que la Caja M\u00e1gica estuviera m\u00e1s completa, hemos a\u00f1adido un m\u00f3dulo DFPlayer el cual se encarga de reproducir sonidos cargados en una memoria microSD a trav\u00e9s de los altavoces. Pero, a diferencia de los zumbadores pasivos y activos, este m\u00f3dulo puede reproducir audios y canciones en mp3. Al utilizar este m\u00f3dulo, nos permiti\u00f3 una gran variedad de sonidos para que cumpliera mejor su funci\u00f3n, entretener.<\/p>\n\n\n\n<p>Como no se ha conseguido encontrar el m\u00f3dulo DFPlayer para el dise\u00f1o 3D, hemos decidido poner una imagen de las conexiones del m\u00f3dulo como ejemplo y desarrollar a partir de ah\u00ed.&nbsp; El pin VCC del m\u00f3dulo une con el pin de 5V del Arduino. Los pines RX y TX est\u00e1n unidos a los pines 5 y 3, respectivamente y el pin GND del m\u00f3dulo est\u00e1 unido al GND del Arduino. Tras esto solo queda especificar que el SPK_1 y el SPK_2 est\u00e1n conectados a pin positivo y al pin negativo del altavoz, respectivamente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"675\" height=\"372\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-26.png\" alt=\"\" class=\"wp-image-7320\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-26.png 675w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-26-300x165.png 300w\" sizes=\"auto, (max-width: 675px) 100vw, 675px\" \/><figcaption class=\"wp-element-caption\">Pines del m\u00f3dulo DFPlayer <\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Con esto hemos terminado la parte del m\u00f3dulo, pero no sin antes mencionar que, en la parte superior del m\u00f3dulo, la zona gris en el medio de la imagen es donde se sit\u00faa la microSD.<\/p>\n\n\n\n<p>Tanto en los servomotores como en los interruptores tienen dos cables: positivo y negativo. El negativo de todos va a parar al mismo punto: GND del Arduino. El positivo es donde se marca la diferencia. Los interruptores 1, 2 y 3 est\u00e1n unidos a los pines 13, 12 y 2 respectivamente. Los servomotores 1, 2, 3 y 4 est\u00e1n unidos a los pines 11, 10, 9 y 6 del Arduino.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"786\" height=\"584\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-27.png\" alt=\"\" class=\"wp-image-7321\" style=\"width:940px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-27.png 786w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-27-300x223.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-27-768x571.png 768w\" sizes=\"auto, (max-width: 786px) 100vw, 786px\" \/><figcaption class=\"wp-element-caption\">Modelo 2D del dise\u00f1o de la Caja M\u00e1gica sin implementar el m\u00f3dulo DFPlayer y el altavoz.<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"541\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-28.png\" alt=\"\" class=\"wp-image-7322\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-28.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-28-300x183.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-28-768x469.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><figcaption class=\"wp-element-caption\">Modelo 2D de la implementaci\u00f3n del m\u00f3dulo DFPlayer en el Arduino.<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>A continuaci\u00f3n, se mostrar\u00e1n 3 im\u00e1genes sobre como est\u00e1 situado el Arduino y los componentes dentro de la caja.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"498\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-29.png\" alt=\"\" class=\"wp-image-7324\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-29.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-29-300x169.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-29-768x432.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><figcaption class=\"wp-element-caption\">Vista general de todas las conexiones<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"420\" height=\"746\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-30.png\" alt=\"\" class=\"wp-image-7325\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-30.png 420w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-30-169x300.png 169w\" sizes=\"auto, (max-width: 420px) 100vw, 420px\" \/><figcaption class=\"wp-element-caption\">Vista enfocada en los pines del Arduino<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"434\" height=\"773\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-31.png\" alt=\"\" class=\"wp-image-7326\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-31.png 434w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-31-168x300.png 168w\" sizes=\"auto, (max-width: 434px) 100vw, 434px\" \/><figcaption class=\"wp-element-caption\">Vista enfocada en las conexiones de la protoboard<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td><strong>Nombre<\/strong><\/td><td><strong>Pines del Arduino<\/strong><\/td><td><strong>Pines del m\u00f3dulo DFPlayer<\/strong><\/td><td><strong>Pines altavoz<\/strong><\/td><\/tr><tr><td>Interruptor 1<\/td><td>13<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>Interruptor 2<\/td><td>12<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>Interruptor 3<\/td><td>2<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>Servomotor 1<\/td><td>11<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>Servomotor 2<\/td><td>10<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>Servomotor 3<\/td><td>9<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>Servomotor 4<\/td><td>6<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>LED 1 Verde<\/td><td>8<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>LED 2 Azul<\/td><td>7<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>LED 3 Rojo<\/td><td>4<\/td><td>&#8211;<\/td><td>&#8211;<\/td><\/tr><tr><td>M\u00f3dulo DFPlayer RX<\/td><td>5<\/td><td>RX<\/td><td>&#8211;<\/td><\/tr><tr><td>M\u00f3dulo DFPlayer TX<\/td><td>3<\/td><td>TX<\/td><td>&#8211;<\/td><\/tr><tr><td>Altavoz +<\/td><td>&#8211;<\/td><td>SPK_1<\/td><td>Positivo<\/td><\/tr><tr><td>Altavoz &#8211;<\/td><td>&#8211;<\/td><td>SPK_2<\/td><td>Negativo<\/td><\/tr><tr><td>Ground (Tierra)<\/td><td>GND<\/td><td>GND<\/td><td>&nbsp;&#8211;<\/td><\/tr><tr><td>Voltaje<\/td><td>5V<\/td><td>VCC<\/td><td>&nbsp;&#8211;<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>4. DISE\u00d1O DEL SOFTWARE<\/a><\/h1>\n\n\n\n<p>El dise\u00f1o del software se puede dividir en cuatro partes principales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Librer\u00edas y variables globales<\/li>\n\n\n\n<li>La inicializaci\u00f3n de las variables (setup)<\/li>\n\n\n\n<li>El comportamiento continuo del programa (loop)<\/li>\n\n\n\n<li>Funciones\/Subprogramas adicionales<\/li>\n<\/ul>\n\n\n\n<p>A partir de aqu\u00ed desarrollar\u00e9 las tres partes mencionadas anteriormente:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><br>a. Librer\u00edas y variables globales<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"742\" height=\"550\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-33.png\" alt=\"\" class=\"wp-image-7329\" style=\"width:940px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-33.png 742w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-33-300x222.png 300w\" sizes=\"auto, (max-width: 742px) 100vw, 742px\" \/><figcaption class=\"wp-element-caption\">Librerias y variables globales<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>En esta secci\u00f3n,&nbsp;se inicializan los componentes y se establecen los valores de las variables. Al principio de todo, se incluyen las librer\u00edas Servo.h, SoftwareSerial.h y DFRobotDFPlayerMini.h. Entre ellas Servo.h la cual proporciona las funciones necesarias para controlar servomotores. SoftwareSerial.h proporciona las funciones necesarias para utilizar comunicaciones serie con un m\u00f3dulo externo. Y, por \u00faltimo, DFRobotDFPlayerMini.h que maneja la funcionalidad del m\u00f3dulo DFPlayer y los altavoces para que reproduzcan audios, sonidos o m\u00fasica en formato mp3.<\/p>\n\n\n\n<p>Tras las librer\u00edas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Servo servo1;<\/li>\n\n\n\n<li>Servo servo2;<\/li>\n\n\n\n<li>Servo servo3;<\/li>\n\n\n\n<li>Servo servo4;<\/li>\n<\/ul>\n\n\n\n<p>Estos apartados declaran cuatro objetos Servo, que representan los cuatro servomotores que se van a utilizar en el circuito.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>int interruptorPin1 = 13;<\/li>\n\n\n\n<li>int interruptorPin2 = 12;<\/li>\n\n\n\n<li>int interruptorPin3 = 2;<\/li>\n<\/ul>\n\n\n\n<p>Estos apartados declaran tres variables enteras que almacenan los n\u00fameros de los pines del Arduino a los que est\u00e1n conectados los interruptores.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>int servoPin1 = 11;<\/li>\n\n\n\n<li>int servoPin2 = 10;<\/li>\n\n\n\n<li>int servoPin3 = 9;<\/li>\n\n\n\n<li>int servoPin4 = 6;<\/li>\n<\/ul>\n\n\n\n<p>Estos apartados declaran cuatro variables enteras que almacenan los n\u00fameros de los pines del Arduino a los que est\u00e1n conectados los servomotores.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>const int ledPin1=8;<\/li>\n\n\n\n<li>const int ledPin2=7;<\/li>\n\n\n\n<li>const int ledPin3=4;<\/li>\n<\/ul>\n\n\n\n<p>Estos apartados declaran tres variables enteran que almacenan los n\u00fameros de los pines del Arduino a los que est\u00e1n conectados los LEDs. El 1 es led verde, 2 es led azul y 3 es led rojo.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>unsigned long tiempoInicio = 0;<\/li>\n<\/ul>\n\n\n\n<p>Esta variable almacena el tiempo en milisegundos en el que se inici\u00f3 el Arduino.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>const unsigned long tiempoEspera = 3000;<\/li>\n<\/ul>\n\n\n\n<p>Esta variable almacena el tiempo en milisegundos que se espera entre cada vez que se mueve un servomotor.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>bool resetearContador = false;<\/li>\n<\/ul>\n\n\n\n<p>Esta variable indica si se debe reiniciar el contador de tiempo.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>int estadoLed;<\/li>\n<\/ul>\n\n\n\n<p>Esta variable se encarga del estado del led, es decir, si se enciende o se apaga.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SoftwareSerial mySerial(5, 3);<\/li>\n<\/ul>\n\n\n\n<p>Esta l\u00ednea de c\u00f3digo inicializa el objeto SoftwareSerial, que se utilizar\u00e1 para comunicarse con el m\u00f3dulo DFPlayer Mini. Configuramos los pines RX y TX del modulo a los pines 5 y 3.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a>b.&nbsp;&nbsp; La inicializaci\u00f3n de las variables (setup)<\/a><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"883\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-34.png\" alt=\"\" class=\"wp-image-7331\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-34.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-34-300x300.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-34-150x150.png 150w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-34-768x765.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-34-80x80.png 80w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-34-320x320.png 320w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><figcaption class=\"wp-element-caption\">La inicializaci\u00f3n de las variables (setup)<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Como podemos observar, desde la l\u00ednea 33 hasta la 37 se inicializan los servomotores, mientras que de la l\u00ednea 39 a la 42 se establece como modo de entrada para los interruptores. Tambi\u00e9n se configuran los pines de los LED en las l\u00edneas comprendidas entre 44 y 47. A continuaci\u00f3n, desde la l\u00ednea 49 a las 53 se establecen en posiciones determinadas los servomotores. Los tres primeros, que estar\u00e1n encargados de los interruptores, a 178\u00b0 mientras que el cuarto se posiciona en 120\u00b0, el cual se encargar\u00e1 de la tapa de la caja.<\/p>\n\n\n\n<p>A partir de la l\u00ednea 61 hasta las 65 ser\u00e1 la comprobaci\u00f3n de errores del m\u00f3dulo DFPlayer, donde comprueba si se pudo inicializar el m\u00f3dulo. En la l\u00ednea 67 se encarga del nivel del volumen del m\u00f3dulo y por lo tanto de la salida de los altavoces.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a>c.&nbsp;&nbsp; El comportamiento continuo del programa (loop)<\/a><\/h2>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"242\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-35.png\" alt=\"\" class=\"wp-image-7332\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-35.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-35-300x82.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-35-768x210.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><figcaption class=\"wp-element-caption\">Loop &#8211; Condicional para comprobar si se ha activado alg\u00fan interruptor antes de abrir la caja<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Iniciando con la primera parte del void loop() observamos como las tres primeras l\u00edneas leen el estado de los interruptores. A continuaci\u00f3n, el condicional comprueba el estado de todos los interruptores y en el caso de que hubiera alguno encendido, empieza el programa. Al iniciar el programa, se inicia el contador de tiempo, se reproduce un audio preestablecido para ese momento y tras un tiempo de espera de un segundo y medio, se abre la caja con el servomotor 4.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"318\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-36.png\" alt=\"\" class=\"wp-image-7333\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-36.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-36-300x108.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-36-768x276.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><figcaption class=\"wp-element-caption\">Loop &#8211; Bucle que comprueba si hay alg\u00fan interruptor activo<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>En este bucle while se comprueba si hubiera alg\u00fan interruptor activo y en ese caso se encender\u00edan los LED de forma secuencial de cada color.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"549\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-37.png\" alt=\"\" class=\"wp-image-7334\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-37.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-37-300x186.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-37-768x476.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><figcaption class=\"wp-element-caption\">Loop &#8211; Condicionales para activar el servomotor correspondiente dependiendo de que interruptor se pulse<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>En esta zona, se activan los servomotores dependiendo de interruptor activado correspondiente a cada servomotor, es decir, si se activa el interruptor 1 entonces se mueve el servomotor 1, si se activa el interruptor 2 entonces se mueve el servomotor 2 y si se activa el interruptor 3 entonces se mueve el servomotor 3. Con esas tres \u00faltimas l\u00edneas, se lee el estado de los interruptores.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"545\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-38.png\" alt=\"\" class=\"wp-image-7335\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-38.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-38-300x185.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-38-768x472.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><figcaption class=\"wp-element-caption\">Loop &#8211; Continuaci\u00f3n de la secuencia de los LED<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>&nbsp;A continuaci\u00f3n, en este condicional, contin\u00faa con el cambio de color\/LED como ya se hab\u00eda comentado anteriormente en el primer while.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"273\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-39.png\" alt=\"\" class=\"wp-image-7336\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-39.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-39-300x92.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-39-768x237.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><figcaption class=\"wp-element-caption\">Loop &#8211; Comprobaci\u00f3n de que los interruptores esten apagados<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Para finalizar con la parte del void loop(), se trata de la comprobaci\u00f3n de que los estados de los interruptores est\u00e9n a 0, que el tiempo pasado sea mayor o igual al tiempo de estera y que se ha reiniciado el contador.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><a>d.&nbsp;&nbsp; Funciones\/Subprogramas adicionales<\/a><\/h2>\n\n\n\n<p>En esta \u00faltima parte solo quedar\u00eda explicar las cuatro funciones adicionales utilizadas para poder completar este proyecto.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"653\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-40.png\" alt=\"\" class=\"wp-image-7338\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-40.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-40-300x221.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-40-768x566.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><figcaption class=\"wp-element-caption\">Funciones\/Subprogramas adicionales &#8211; accionServo(Servo &amp;servo) y cerrarCaja(Servo &amp;servo)<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Empezaremos con estas dos funciones void: accionServo(Servo &amp;servo) y cerrarCaja(Servo &amp;servo). La funci\u00f3n accionServo se encarga tanto del movimiento de los brazos de dentro de la caja como de los sonidos por cada movimiento. La funci\u00f3n cerrarCaja se encarga de, como su nombre indica, de cerrar la caja dependiendo del n\u00famero aleatorio que aparezca.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"886\" height=\"375\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-41.png\" alt=\"\" class=\"wp-image-7339\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-41.png 886w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-41-300x127.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-41-768x325.png 768w\" sizes=\"auto, (max-width: 886px) 100vw, 886px\" \/><figcaption class=\"wp-element-caption\">Funciones\/Subprogramas adicionales &#8211; inactividad(Servo &amp;servo) y lento(Servo &amp;servo)<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Para terminar con las dos \u00faltimas funciones. La funci\u00f3n void inactividad(Servo &amp;servo) se encarga del tiempo en el que no se haya pulsado ning\u00fan interruptor en alg\u00fan tiempo y realiza una comprobaci\u00f3n. La funci\u00f3n void lento(Servo &amp;servo) se encarga de la velocidad del cerrado de la tapa para que no de un gran choque contra la caja, como ya hab\u00edamos comentado en el apartado de problemas encontrados.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>5. PROBLEMAS OBSERVADOS<\/a><\/h1>\n\n\n\n<p>En este apartado explicaremos los distintos problemas que nos han ido surgiendo y las diferentes soluciones que hemos ido encontrando para el correcto funcionamiento del proyecto<\/p>\n\n\n\n<p>Problema con el servo para abrir la caja. Se tuvieron dos problemas principales con este caso. El primero ocurri\u00f3 al darnos cuenta de que el servomotor no tenia suficiente fuerza para poder levantar la tapa de madera, por lo que se compr\u00f3 un servomotor m\u00e1s potente. Esto nos llev\u00f3 al segundo problema, el cual consist\u00eda en el que, si bien ahora si ten\u00eda fuerza para abrir la caja, generaba una serie de espasmos que imped\u00edan el correcto funcionamiento del programa. Estos espasmos eran creados por p\u00e9rdidas de potencia en los servomotores. Por lo que terminamos cambiando la tapa a una de cart\u00f3n donde hab\u00eda una gran diferencia de peso frente a la de madera y esta estuviera sujetada con una cuerda para que no saliera disparada cuando se abr\u00eda la caja.<\/p>\n\n\n\n<p>Problema al cerrar la caja, ya que daba un gran choque entre la tapa y la caja. Esto fue solucionado gracias a un subprograma lento, es decir, un bucle que recorriese cada grado metiendo un tiempo de espera (delay) para que fuese&nbsp;m\u00e1s&nbsp;lento. Otro problema con la caja surgi\u00f3 ya que tras cierto tiempo no se cerraba la caja (que es una de las funciones que deb\u00eda tener el programa), el cual fue solucionado al implementar una variable que detecte que est\u00e1 dentro del bucle de juego y a partir de que no se usen ning\u00fan interruptor y que al pasar el tiempo&nbsp;designado&nbsp;se parara.<\/p>\n\n\n\n<p>Problemas con los brazos (servomotores). Al tratarse de un brazo giratorio que tenia que golpear un interruptor, no ten\u00eda ni que pasarse de fuerza ni quedarse corto. Por ello, tras prueba y error, se consigui\u00f3 obtener los \u00e1ngulos exactos para los servomotores para que pulsaran correctamente los interruptores.<\/p>\n\n\n\n<p>Problema con el m\u00f3dulo DFPlayer. Aqu\u00ed surgi\u00f3 tanto un problema con el software y otro con el hardware. El problema con el software fue que, aunque los audios\/sonidos se guardaran de la forma necesaria, al implementarla en la programaci\u00f3n, los nombres estaban totalmente cambiados sin posibilidad de probarlos m\u00e1s que a trav\u00e9s de prueba y error. El otro problema mencionado relacionado con el hardware fue que, tras tantos unos de sacar y meter la microSD en el m\u00f3dulo, para poder corregir el problema anteriormente comentado de los audios\/sonidos, se termin\u00f3 doblando y dejando de hacer contacto el m\u00f3dulo con la microSD, el cual fue arreglado mec\u00e1nicamente al doblarlo f\u00edsicamente hacia el otro lado con una palanca. De todos modos, nos oblig\u00f3 a comprar uno nuevo en el caso de que esa medida no durara lo suficiente.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>6. DISE\u00d1O FINAL<\/a><\/h1>\n\n\n\n<p>A continuaci\u00f3n, se mostrar\u00e1n las im\u00e1genes del dise\u00f1o tras haber realizado todas las decoraciones para sea un producto final listo para la venta al p\u00fablico:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"448\" height=\"598\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-42.png\" alt=\"\" class=\"wp-image-7344\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-42.png 448w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-42-225x300.png 225w\" sizes=\"auto, (max-width: 448px) 100vw, 448px\" \/><figcaption class=\"wp-element-caption\">Vista de la caja abierta y los mu\u00f1ecos mostr\u00e1ndose<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"511\" height=\"681\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-43.png\" alt=\"\" class=\"wp-image-7345\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-43.png 511w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-43-225x300.png 225w\" sizes=\"auto, (max-width: 511px) 100vw, 511px\" \/><figcaption class=\"wp-element-caption\">Vista de la caja abierta y los mu\u00f1ecos ocultos<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"504\" height=\"673\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-44.png\" alt=\"\" class=\"wp-image-7346\" style=\"width:940px\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-44.png 504w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/image-44-225x300.png 225w\" sizes=\"auto, (max-width: 504px) 100vw, 504px\" \/><figcaption class=\"wp-element-caption\">Vista de la caja cerrada &#8211; Vista frontal<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-large-font-size\"><a>7. VIDEO DEMOSTRATIVO<\/a><\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/2023-12-16-15-31-18.mp4\"><\/video><figcaption class=\"wp-element-caption\">Video demostrativo de todas las funciones de la Caja M\u00e1gica<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><a>8. CONCLUSIONES<\/a><\/h1>\n\n\n\n<p>Tras innumerables pruebas y errores de distintos proyectos para ver cual era el que m\u00e1s nos convenc\u00eda, llegamos a la conclusi\u00f3n que esta \u201cCaja m\u00e1gica\u201d era perfecta para generar inter\u00e9s y aceptaci\u00f3n del profesor y los dem\u00e1s visitantes, tanto como para generarnos a nosotros mismos una gran motivaci\u00f3n de seguir adelante. \u00bfPero esto significa que fue muy f\u00e1cil de realizar? Ojal\u00e1 fuera todo tan bonito en la realidad. No, fue bastante complejo el conseguir terminar el c\u00f3digo correctamente, ya que fue bastante sorprendente que tras casi haber terminado el c\u00f3digo y que funcionara como deb\u00eda, al d\u00eda siguiente dej\u00f3 de funcionar sin nosotros tener idea del porqu\u00e9. \u00bfPero esto nos detuvo? No, vimos de este problema una nueva esperanza para realizar el c\u00f3digo de nuevo implementado nuevas y mejores ideas funcionales.<\/p>\n\n\n\n<p>Desde nuestro punto de vista, es un proyecto bastante original que ha quedado bastante bien. Por razones obvias no va a ganar ning\u00fan premio de tecnolog\u00eda ya que, m\u00e1s que un avance revolucionario, es un entretenimiento (o juguete) que puedes tener en tu casa para entretenerte o distraerte de una forma amena. Ahora que nos estamos acerc\u00e1ndonos a la Navidad, ser\u00eda un regalo perfecto para un capricho.<\/p>\n\n\n\n<p>Eso s\u00ed, esto anteriormente dicho es desde nuestro punto de vista, por lo que siempre es m\u00e1s c\u00f3modo el encontrar fallas y cr\u00edticas en los trabajos de los dem\u00e1s antes que el de uno mismo. Por ello, las fallas y cr\u00edticas observadas en este proyecto que no han sido nombradas por nosotros mismos se lo dejaremos al sentido del gusto de la persona que lo este leyendo. Ante todo, si has llegado a leer hasta esta parte del proyecto es que te ha gustado.<\/p>\n\n\n\n<p>Muchas gracias por su atenci\u00f3n a lo largo de este proyecto.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p class=\"has-large-font-size\"><a>9. C\u00d3DIGO COMPLETO<\/a><\/p>\n\n\n\n<p>A continuaci\u00f3n, situar\u00e9 el c\u00f3digo completo en el caso de que lo quisieras probar por vuestra cuenta:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;Servo.h&gt;                        \/\/ Biblioteca para contralar servomotores\n#include &lt;SoftwareSerial.h&gt;               \/\/ Biblioteca para comunicacion serial\n#include &lt;DFRobotDFPlayerMini.h&gt;          \/\/ Biblioteca para contralar el DFPlater Mini\n\nServo servo1;\nServo servo2;\nServo servo3;\nServo servo4;\n\nint interruptorPin1 = 13;                 \/\/ Pin del primer interruptor \nint interruptorPin2 = 12;                 \/\/ Pin del segundo interruptor\nint interruptorPin3 = 2;                  \/\/ Pin del tercer interruptor\n\nint servoPin1 = 11;                       \/\/ Pin del primer servo\nint servoPin2 = 10;                       \/\/ Pin del segundo servo\nint servoPin3 = 9;                        \/\/ Pin del tercer servo\nint servoPin4 = 6;                        \/\/ Pin del cuarto servo\n\nconst int ledPin1=8;                      \/\/Pin del led verde\nconst int ledPin2=7;                      \/\/Pin del led azul\nconst int ledPin3=4;                      \/\/Pin del led rojo\n\nunsigned long tiempoInicio = 0;           \/\/ Variable para almacenar el tiempo de inicio\nconst unsigned long tiempoEspera = 3000;  \/\/ Tiempo de espera en milisegundos (5 segundos)\nbool resetearContador= false;             \/\/ Boolean para saber donde entrar\n\nint estadoLed;                            \/\/Variable del estado del led      \n\nSoftwareSerial mySerial(5, 3);            \/\/ RX, TX para el m\u00f3dulo DFPlayer Mini\nDFRobotDFPlayerMini myDFPlayer;\n\nvoid setup() {\n  \/\/ Concecsi\u00f3n de los servomotores con los pines correspondientes\n  servo1.attach(servoPin1);\n  servo2.attach(servoPin2);\n  servo3.attach(servoPin3);\n  servo4.attach(servoPin4);\n\n  \/\/ Configuraci\u00f3n de los pines de los interruptores\n  pinMode(interruptorPin1, INPUT_PULLUP);\n  pinMode(interruptorPin2, INPUT_PULLUP);\n  pinMode(interruptorPin3, INPUT_PULLUP);\n\n  \/\/ Configuraci\u00f3n de los pines de los LEDS como salida\n  pinMode(ledPin1, OUTPUT);\n  pinMode(ledPin2, OUTPUT);\n  pinMode(ledPin3, OUTPUT);\n\n  \/\/ Configuraci\u00f3n de la posici\u00f3n inicial de los servomotores\n  servo1.write(170);\n  servo2.write(170);\n  servo3.write(170);\n  servo4.write(90);\n\n  Serial.begin(9600);\n  Serial.println(\"Iniciando el programa...\");\n\n  \/\/ Inicializa el m\u00f3dulo DFPlayer Mini\n  mySerial.begin(9600);\n\n  \/\/  Verificaci\u00f3n de iniciar el m\u00f3dulo DFPlayer Mini\n  if (!myDFPlayer.begin(mySerial)) {\n    Serial.println((\"No se pudo iniciar el m\u00f3dulo DFPlayer Mini.\"));\n    while (true); \/\/ Bucle infinito si no se inicia el m\u00f3dulo DFPlayer Mini\n  }\n\n  myDFPlayer.volume(30); \/\/ Ajusta el volumen (0-30)\n}\n\nvoid loop() {\n  \/\/ Lee el estado de los interruptores\n  int interruptorEstado1 = digitalRead(interruptorPin1);\n  int interruptorEstado2 = digitalRead(interruptorPin2);\n  int interruptorEstado3 = digitalRead(interruptorPin3);\n\n  if ((interruptorEstado1 == 1 || interruptorEstado2 == 1 || interruptorEstado3 == 1) &amp;&amp; !resetearContador) { \/\/Comprobar que se a tocado algun interruptor para que se abra la caja\n\n      tiempoInicio = millis(); \/\/ Inicia el contador de tiempo para saber cuando cerrar la caja\n      Serial.println(\"Inicio contador\");\n      Serial.println(tiempoInicio);\n\n      myDFPlayer.play(1); \/\/ Reproduce archivo de audio\n      delay(300);\n      servo4.write(180);  \/\/ Abre la caja\n      resetearContador=true;\n\n      estadoLed=0;    \/\/ Posici\u00f3n inicial del LED\n\n      delay(1200);        \/\/ Tiempo de espera para que se abra la caja\n  }\n\n  while (interruptorEstado1 == 1 || interruptorEstado2 == 1 || interruptorEstado3 == 1) { \/\/Bucle donde compurba si hay algun interruptor activo\n    \/\/ Cambio de las luces LED dentro de la caja\n    switch (estadoLed) { \n      case 0: \/\/ Verde\n        digitalWrite(ledPin1, HIGH);\n        digitalWrite(ledPin2, LOW);\n        digitalWrite(ledPin3, LOW);\n        estadoLed = 1;\n        break;\n      case 1: \/\/Azul\n        digitalWrite(ledPin1, LOW);\n        digitalWrite(ledPin2, HIGH);\n        digitalWrite(ledPin3, LOW);\n        estadoLed = 2;\n        break;\n      case 2: \/\/ Rojo\n        digitalWrite(ledPin1, LOW);\n        digitalWrite(ledPin2, LOW);\n        digitalWrite(ledPin3, HIGH);\n        estadoLed = 0;\n        break;\n    }\n\n    \/\/ Acciona el servo configurado con el interruptor\n    if (interruptorEstado1 == 1) {\n      Serial.println(\"Tocado interruptor 1\");\n      accionServo(servo1);\n    }\n    if (interruptorEstado2 == 1) {\n      Serial.println(\"Tocado interruptor 2\");                                                                                  \n      accionServo(servo2);\n    }\n    if (interruptorEstado3 == 1) {\n      Serial.println(\"Tocado interruptor 3\");\n      accionServo(servo3);\n    }\n\n    \/\/ Lee el estado de los interruptores\n    interruptorEstado1 = digitalRead(interruptorPin1);\n    interruptorEstado2 = digitalRead(interruptorPin2);\n    interruptorEstado3 = digitalRead(interruptorPin3);\n  }\n\n  \/\/ Seguir con el cambio de color de los LEDS cuando se esta comprobando el tiempo de espera\n  if(resetearContador){\n    switch (estadoLed) {\n      case 0:\n        digitalWrite(ledPin1, HIGH);\n        digitalWrite(ledPin2, LOW);\n        digitalWrite(ledPin3, LOW);\n        estadoLed = 1;\n        delay(500);\n        break;\n      case 1:\n        digitalWrite(ledPin1, LOW);\n        digitalWrite(ledPin2, HIGH);\n        digitalWrite(ledPin3, LOW);\n        estadoLed = 2;\n        delay(500);\n        break;\n      case 2:\n        digitalWrite(ledPin1, LOW);\n        digitalWrite(ledPin2, LOW);\n        digitalWrite(ledPin3, HIGH);\n        estadoLed = 0;\n        delay(500);\n        break;\n    }\n  }\n  \n  \/\/ Comprobaci\u00f3n que los estados de los interruptores esten a 0, que el tiempo pasado sea mayor o igual al tiempo de estera y que se ha reseteado el contador\n  if((interruptorEstado1 == 0 || interruptorEstado2 == 0 || interruptorEstado3 == 0) &amp;&amp; (millis()-tiempoInicio&gt;=tiempoEspera) &amp;&amp; (resetearContador)){\n    Serial.println(\"cerrar\");\n\n    \/\/ Apagar los LEDS\n    digitalWrite(ledPin1, LOW);\n    digitalWrite(ledPin2, LOW);\n    digitalWrite(ledPin3, LOW);\n\n    cerrarCaja(servo4);     \/\/ Cerrar caja\n    resetearContador=false; \/\/Volver al estado original para que se puede volver a iniciar \n\n    tiempoInicio=millis();  \/\/Para reiniciar el tiempo para el tema de inactividad\n  }\n  \n  if((interruptorEstado1 == 0 || interruptorEstado2 == 0 || interruptorEstado3 == 0) &amp;&amp; (millis()-tiempoInicio&gt;=10000) &amp;&amp; (!resetearContador)){ \/\/Funcion para inactividad\n    inactividad(servo4);   \/\/Acci\u00f3n de inactividad\n\n    tiempoInicio=millis(); \/\/Reiniciar el tiempo para el tema de inactividad\n  }\n}\n\nvoid accionServo(Servo &amp;servo) { \/\/Funcion para el funcionamiento de los brazos\n  myDFPlayer.play(4); \/\/ Reproducir sonido\n  delay(300);\n  servo.write(0); \/\/ Movimiento del servo\n  delay(700);       \/\/ Tiempo para la acci\u00f3n del servo\n  servo.write(170); \/\/ Volver al estado original\n\n  tiempoInicio=millis(); \/\/Reiniciar tiempo para el tema cerrar caja\n}\n\nvoid cerrarCaja(Servo &amp;servo){ \/\/Funcion para que despu\u00e9s de cerrar la caja se abra de nuevo en forma de amenaza\n  int numeroAleatorio = random(100); \/\/ Genera un n\u00famero aleatorio entre 0 y 99 \n\n  if (numeroAleatorio &lt; 60) { \/\/ 60% de que se cierre normal la caja\n    delay(300);\n    myDFPlayer.play(1);\n    lento(servo4); \n    \n  }else{                      \/\/ 40% para que haga una acci\u00f3n distinta al cerrar la caja\n    Serial.println(\"Amenazar\");\n\n    \/\/ Se cierra la caja despu\u00e9s de 2 segundo se vuelve a abrir\n    delay(300);\n    lento(servo4);\n    myDFPlayer.play(1);\n    digitalWrite(ledPin3,HIGH);\n    delay(2000);\n\n    servo.write(180);\n    delay(700);\n\n    myDFPlayer.play(3);\n    \n    delay(2000);\n    digitalWrite(ledPin3,LOW);\n    lento(servo4);  \n  }\n}\n\nvoid inactividad(Servo &amp;servo){ \/\/Funci\u00f3n para que despues de 10 segundos de inactividad algunas veces se revise el exterior\n  int numeroAleatorio = random(5);\n\n  if (numeroAleatorio &lt; 3) {  \/\/Para que pase algunas veces\n    Serial.println(\"Inactividad\");\n\n    servo.write(180);\n    delay(500);\n    myDFPlayer.play(2);\n    \n\n    delay(3000);\n    lento(servo4);\n  }\n}\n\nvoid lento(Servo &amp;servo){ \/\/Funci\u00f3n para que al cerrar la caja sea de forma lenta\n  Serial.println(\"lento\");\n  for(int i=180; i&gt;=90;i--){\n    servo.write(i);\n    delay(10);\n  }\n}<\/code><\/pre>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Autores: \u00d3scar Fuente Fern\u00e1ndez y Antonio Herman Boeriu \u00cdNDICE 1. INTRODUCCI\u00d3N El nombre de Caja M\u00e1gica es un nombre idealista para que atrajera el mayor inter\u00e9s posible, porque si lo llamara \u201ccaja in\u00fatil\u201d perder\u00eda&#46;&#46;&#46;<\/p>\n","protected":false},"author":187,"featured_media":7612,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[8,16],"class_list":["post-7611","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-proyectos","tag-arduino","tag-urjc"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Caja M\u00e1gica - 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\/caja-magica\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Caja M\u00e1gica - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Autores: \u00d3scar Fuente Fern\u00e1ndez y Antonio Herman Boeriu \u00cdNDICE 1. INTRODUCCI\u00d3N El nombre de Caja M\u00e1gica es un nombre idealista para que atrajera el mayor inter\u00e9s posible, porque si lo llamara \u201ccaja in\u00fatil\u201d perder\u00eda&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2023-12-16T19:19:04+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-12-19T19:25:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/Captura-de-pantalla-2023-12-16-163339-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"382\" \/>\n\t<meta property=\"og:image:height\" content=\"556\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"DSE_2023_24_G06\" \/>\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_G06\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"18 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\\\/caja-magica\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/\"},\"author\":{\"name\":\"DSE_2023_24_G06\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/350cc8789bcdff4f1aa904469802d9a2\"},\"headline\":\"Caja M\u00e1gica\",\"datePublished\":\"2023-12-16T19:19:04+00:00\",\"dateModified\":\"2023-12-19T19:25:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/\"},\"wordCount\":2696,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/Captura-de-pantalla-2023-12-16-163339-1.png\",\"keywords\":[\"Arduino\",\"urjc\"],\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/\",\"name\":\"Caja M\u00e1gica - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/Captura-de-pantalla-2023-12-16-163339-1.png\",\"datePublished\":\"2023-12-16T19:19:04+00:00\",\"dateModified\":\"2023-12-19T19:25:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/Captura-de-pantalla-2023-12-16-163339-1.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2023\\\/12\\\/Captura-de-pantalla-2023-12-16-163339-1.png\",\"width\":382,\"height\":556},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/caja-magica\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Caja M\u00e1gica\"}]},{\"@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\\\/350cc8789bcdff4f1aa904469802d9a2\",\"name\":\"DSE_2023_24_G06\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4b546dd0202c86aae851f8afa5289391dc09c8da2536945c13be22f663e7b7a9?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4b546dd0202c86aae851f8afa5289391dc09c8da2536945c13be22f663e7b7a9?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/4b546dd0202c86aae851f8afa5289391dc09c8da2536945c13be22f663e7b7a9?s=96&d=mm&r=g\",\"caption\":\"DSE_2023_24_G06\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/dse202324g06\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Caja M\u00e1gica - 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\/caja-magica\/","og_locale":"es_ES","og_type":"article","og_title":"Caja M\u00e1gica - Proyectos con Arduino.","og_description":"Autores: \u00d3scar Fuente Fern\u00e1ndez y Antonio Herman Boeriu \u00cdNDICE 1. INTRODUCCI\u00d3N El nombre de Caja M\u00e1gica es un nombre idealista para que atrajera el mayor inter\u00e9s posible, porque si lo llamara \u201ccaja in\u00fatil\u201d perder\u00eda&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2023-12-16T19:19:04+00:00","article_modified_time":"2023-12-19T19:25:41+00:00","og_image":[{"width":382,"height":556,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/Captura-de-pantalla-2023-12-16-163339-1.png","type":"image\/png"}],"author":"DSE_2023_24_G06","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"DSE_2023_24_G06","Tiempo de lectura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/"},"author":{"name":"DSE_2023_24_G06","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/350cc8789bcdff4f1aa904469802d9a2"},"headline":"Caja M\u00e1gica","datePublished":"2023-12-16T19:19:04+00:00","dateModified":"2023-12-19T19:25:41+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/"},"wordCount":2696,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/Captura-de-pantalla-2023-12-16-163339-1.png","keywords":["Arduino","urjc"],"articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/","name":"Caja M\u00e1gica - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/Captura-de-pantalla-2023-12-16-163339-1.png","datePublished":"2023-12-16T19:19:04+00:00","dateModified":"2023-12-19T19:25:41+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/Captura-de-pantalla-2023-12-16-163339-1.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2023\/12\/Captura-de-pantalla-2023-12-16-163339-1.png","width":382,"height":556},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/caja-magica\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Caja M\u00e1gica"}]},{"@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\/350cc8789bcdff4f1aa904469802d9a2","name":"DSE_2023_24_G06","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/4b546dd0202c86aae851f8afa5289391dc09c8da2536945c13be22f663e7b7a9?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/4b546dd0202c86aae851f8afa5289391dc09c8da2536945c13be22f663e7b7a9?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b546dd0202c86aae851f8afa5289391dc09c8da2536945c13be22f663e7b7a9?s=96&d=mm&r=g","caption":"DSE_2023_24_G06"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/dse202324g06\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/7611","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\/187"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=7611"}],"version-history":[{"count":1,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/7611\/revisions"}],"predecessor-version":[{"id":7613,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/7611\/revisions\/7613"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media\/7612"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=7611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=7611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=7611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}