{"id":10129,"date":"2026-05-06T12:23:49","date_gmt":"2026-05-06T10:23:49","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=10129"},"modified":"2026-05-06T12:23:49","modified_gmt":"2026-05-06T10:23:49","slug":"sistema-de-desactivacion-de-bomba-grupo-03","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/","title":{"rendered":"Sistema de desactivaci\u00f3n de bomba &#8211; Grupo 03"},"content":{"rendered":"\n<p>Grupo 03: Ra\u00fal Luaces Salamanca, Jon\u00e1s Huertes Ram\u00edrez, Mengying Xia Ruan, Daniel Quijano Alonso<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-768x1024.jpeg\" alt=\"\" class=\"wp-image-10197\" style=\"aspect-ratio:0.7500094507239254;width:571px;height:auto\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-768x1024.jpeg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-225x300.jpeg 225w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-1152x1536.jpeg 1152w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52.jpeg 1536w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">1. \u00cdndice<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#descripcion\">Descripci\u00f3n y objetivos<\/a><\/li>\n\n\n\n<li><a href=\"#hw\">Hardware<\/a><\/li>\n\n\n\n<li><a href=\"#costes\">Costes del material<\/a><\/li>\n\n\n\n<li><a href=\"#sw\">Software<\/a><\/li>\n\n\n\n<li><a href=\"#reparto\">Reparto de trabajo<\/a><\/li>\n\n\n\n<li><a href=\"#problemas\">Problemas y resoluciones <\/a><\/li>\n\n\n\n<li><a href=\"#funcionamiento\">Funcionamiento<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"descripcion\">2. Descripci\u00f3n y objetivos<\/h2>\n\n\n\n<p>El proyecto consiste en el desarrollo de un sistema interactivo que simula una bomba que debe ser desactivada en un tiempo limitado mediante la superaci\u00f3n de diferentes minijuegos.<\/p>\n\n\n\n<p>El objetivo principal es integrar diferentes componentes hardware, como teclado, pantalla LCD, LEDs, botones, potenci\u00f3metro y sistema de audio, junto con la programaci\u00f3n en Arduino que permita gestionar el flujo del juego de forma organizada.<\/p>\n\n\n\n<p>Para ello, hemos dise\u00f1ado  minijuegos que ponen a prueba habilidades como el c\u00e1lculo, la memoria o la precisi\u00f3n, combinando distintas formas de interacci\u00f3n con el usuario. Adem\u00e1s, se ha trabajado en la coordinaci\u00f3n entre hardware y software para garantizar un funcionamiento fluido y una experiencia din\u00e1mica<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"hw\">3. Hardware<\/h2>\n\n\n\n<p>En esta secci\u00f3n se muestran varias im\u00e1genes del montaje f\u00edsico del proyecto, donde se puede ver c\u00f3mo est\u00e1n distribuidos los distintos componentes dentro del sistema. La idea ha sido organizar todo de forma clara y funcional, conectando los diferentes m\u00f3dulos a una placa principal que act\u00faa como controlador.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-04-28-at-18.54.21-1-768x1024.jpeg\" alt=\"\" class=\"wp-image-10257\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-04-28-at-18.54.21-1-768x1024.jpeg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-04-28-at-18.54.21-1-225x300.jpeg 225w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-04-28-at-18.54.21-1-1152x1536.jpeg 1152w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-04-28-at-18.54.21-1.jpeg 1536w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><\/figure>\n\n\n\n<p>Entre los elementos m\u00e1s importantes se encuentran el Arduino, las protoboards utilizadas para el montaje, las resistencias y el cableado, adem\u00e1s de los distintos dispositivos del proyecto: la pantalla LCD, el teclado, los botones con LEDs del minijuego de Simon, el potenci\u00f3metro y el sistema de audio con altavoz.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"10260\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-1-2-1024x768.jpeg\" alt=\"\" class=\"wp-image-10260\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-1-2-1024x768.jpeg 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-1-2-300x225.jpeg 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-1-2-768x576.jpeg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-1-2-1536x1152.jpeg 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-1-2.jpeg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" data-id=\"10261\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-4-1024x768.jpeg\" alt=\"\" class=\"wp-image-10261\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-4-1024x768.jpeg 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-4-300x225.jpeg 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-4-768x576.jpeg 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-4-1536x1152.jpeg 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-4.jpeg 2048w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n<\/figure>\n\n\n\n<p>Estas im\u00e1genes ayudan a entender mejor c\u00f3mo est\u00e1 construido el sistema en la pr\u00e1ctica y c\u00f3mo se han conectado todos los componentes para que funcionen de forma conjunta.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"costes\">4. Costes del material<\/h2>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Componentes<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Origen del producto<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Precio<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">M\u00f3dulo&nbsp;microSD MP3 WTV020<\/td><td class=\"has-text-align-center\" data-align=\"center\">Compra externa<\/td><td class=\"has-text-align-center\" data-align=\"center\">8.00\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Multiplexor<\/td><td class=\"has-text-align-center\" data-align=\"center\">Compra externa<\/td><td class=\"has-text-align-center\" data-align=\"center\">1.12\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Dos protoboards<\/td><td class=\"has-text-align-center\" data-align=\"center\">Compra externa<\/td><td class=\"has-text-align-center\" data-align=\"center\">4.25\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Altavoz&nbsp;extraplano&nbsp;Fonestar&nbsp;Mylar<\/td><td class=\"has-text-align-center\" data-align=\"center\">Compra externa<\/td><td class=\"has-text-align-center\" data-align=\"center\">8.00\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Pantalla LCD I2C 20&#215;4<\/td><td class=\"has-text-align-center\" data-align=\"center\">Compra externa<\/td><td class=\"has-text-align-center\" data-align=\"center\">7.99\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Teclado&nbsp;Matricial&nbsp;Membrana 4&#215;4<\/td><td class=\"has-text-align-center\" data-align=\"center\">Compra externa<\/td><td class=\"has-text-align-center\" data-align=\"center\">2.00\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Set de cables <\/td><td class=\"has-text-align-center\" data-align=\"center\">Compra externa<\/td><td class=\"has-text-align-center\" data-align=\"center\">8.10\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Potenci\u00f3metro<\/td><td class=\"has-text-align-center\" data-align=\"center\">Compra externa<\/td><td class=\"has-text-align-center\" data-align=\"center\">0.40\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Starter Kit Elegoo<\/td><td class=\"has-text-align-center\" data-align=\"center\">Material de la asignatura<\/td><td class=\"has-text-align-center\" data-align=\"center\">0.00\u20ac<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Total<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>40.77\u20ac<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"sw\">5. Software<\/h2>\n\n\n\n<p>En la parte del software hemos estructurado el proyecto en varios archivos independientes, con el objetivo de mantener el c\u00f3digo organizado, f\u00e1cil de entender y modular. De esta forma, cada bloque se encarga de una parte concreta del funcionamiento del sistema, lo que facilita tanto el desarrollo como las pruebas.<\/p>\n\n\n\n<p>El archivo principal,\u00bb bomba_desactivar.ino\u00bb, act\u00faa como n\u00facleo del programa. En \u00e9l se controla el flujo general del juego, el sistema de estados (men\u00fa, minijuegos, victoria o explosi\u00f3n), el temporizador global y la l\u00f3gica que decide qu\u00e9 m\u00f3dulo se ejecuta en cada momento.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;LiquidCrystal_I2C.h&gt;\n#include &lt;Keypad.h&gt;\n\n\/\/ Pantalla LCD compartida\nLiquidCrystal_I2C lcd(0x27, 20, 4);\n\n\/\/ Teclado\nextern Keypad teclado;\n\n\/\/ ESTADOS DEL JUEGO\nenum Estado {\n  MENU,\n  JUEGO_MATES,\n  JUEGO_SIMON,\n  JUEGO_PACMAN,\n  JUEGO_POT,\n  BOMBA_EXPLOTA,\n  GANASTE\n};\n\nEstado estadoActual = MENU;\n\n\/\/ NIVEL Y TIEMPO\nint nivel = 1;\n\nconst unsigned long TIEMPOS_NIVEL&#091;4] = {\n  180000,\n  150000,\n  120000,\n   90000\n};\n\nunsigned long tiempoInicio   = 0;\nunsigned long duracionTotal  = 180000;\nunsigned long tiempoRestante = 0;\n\n\/\/ TIC-TAC DE LA BOMBA\nunsigned long ultimoTickBomba = 0;\nint intervaloTickBomba = 1000;\n\n\/\/ PROGRESO\nbool matesSuperado    = false;\nbool simonSuperado    = false;\nbool pacmanSuperado   = false;\nbool potSuperado      = false;\n\n\/\/ MEN\u00da\nint menuCursor = 0;\n\n\/\/ setup()\nvoid setup() {\n  Serial.begin(9600);\n  lcd.init();\n  lcd.backlight();\n\n  setupTeclado();\n  setupSimon();\n  setupPacman();\n  setupPotAudio();\n\n  mostrarMenu();\n}\n\n\/\/ loop()\nvoid loop() {\n\n  if (estadoActual != MENU &amp;&amp;\n      estadoActual != BOMBA_EXPLOTA &amp;&amp;\n      estadoActual != GANASTE) {\n\n    tiempoRestante = duracionTotal - (millis() - tiempoInicio);\n\n    if ((long)tiempoRestante &lt;= 0) {\n      cambiarEstado(BOMBA_EXPLOTA);\n      return;\n    }\n    mostrarTiempo();\n    actualizarTickBomba();\n  }\n\n  switch (estadoActual) {\n    case MENU:          loopMenu();       break;\n    case JUEGO_MATES:   loopTeclado();    break;\n    case JUEGO_SIMON:   loopSimon();      break;\n    case JUEGO_PACMAN:  loopPacman();     break;\n    case JUEGO_POT:     loopPotAudio();   break;\n    case BOMBA_EXPLOTA: loopBomba();      break;\n    case GANASTE:       loopGanaste();    break;\n  }\n}\n\n\/\/ MEN\u00da\nvoid mostrarMenu() {\n  lcd.clear();\n  lcd.setCursor(0, 0); lcd.print(\"== DESACTIVA BOMBA==\");\n  lcd.setCursor(0, 1); lcd.print(\"2=arriba 8=abajo    \");\n  lcd.setCursor(0, 2); lcd.print(\"# para empezar      \");\n  actualizarCursorMenu();\n}\n\nvoid actualizarCursorMenu() {\n  const char* etiquetas&#091;4] = {\n    \"Nivel 1 - Facil    \",\n    \"Nivel 2 - Medio    \",\n    \"Nivel 3 - Dificil  \",\n    \"Nivel 4 - Extremo  \"\n  };\n  lcd.setCursor(0, 3);\n  lcd.print(\"&gt;\");\n  lcd.print(etiquetas&#091;menuCursor]);\n}\n\nvoid loopMenu() {\n  char tecla = teclado.getKey();\n  if (!tecla) return;\n\n  if (tecla == '2') {\n    menuCursor = (menuCursor - 1 + 4) % 4;\n    actualizarCursorMenu();\n  } else if (tecla == '8') {\n    menuCursor = (menuCursor + 1) % 4;\n    actualizarCursorMenu();\n  } else if (tecla == '#') {\n    nivel = menuCursor + 1;\n    duracionTotal = TIEMPOS_NIVEL&#091;menuCursor];\n    tiempoInicio  = millis();\n\n    matesSuperado   = false;\n    simonSuperado   = false;\n    pacmanSuperado  = false;\n    potSuperado     = false;\n\n    ultimoTickBomba    = millis();\n    intervaloTickBomba = 1000;\n\n    cambiarEstado(JUEGO_MATES);\n  }\n}\n\n\/\/ TIC-TAC ACELERADO\nvoid actualizarTickBomba() {\n  long segRestantes = (long)tiempoRestante \/ 1000;\n\n  if (segRestantes &gt; 15) {\n    intervaloTickBomba = 1000;\n  } else if (segRestantes &gt; 10) {\n    intervaloTickBomba = map(segRestantes, 15, 10, 1000, 500);\n  } else {\n    if (segRestantes &lt; 0) segRestantes = 0;\n    intervaloTickBomba = map(segRestantes, 10, 0, 500, 450);\n  }\n\n  if (intervaloTickBomba &lt; 100) intervaloTickBomba = 100;\n\n  if (millis() - ultimoTickBomba &gt;= (unsigned long)intervaloTickBomba) {\n    ultimoTickBomba = millis();\n    reproducirTick();\n  }\n}\n\n\/\/ CAMBIAR DE ESTADO\nvoid cambiarEstado(Estado nuevoEstado) {\n  estadoActual = nuevoEstado;\n  lcd.clear();\n\n  switch (nuevoEstado) {\n    case JUEGO_MATES:   iniciarTeclado();   break;\n    case JUEGO_SIMON:   iniciarSimon();     break;\n    case JUEGO_PACMAN:  iniciarPacman();    break;\n    case JUEGO_POT:     iniciarPotAudio();  break;\n    case BOMBA_EXPLOTA: iniciarExplosion(); break;\n    case GANASTE:       iniciarGanaste();   break;\n    default: break;\n  }\n}\n\n\/\/ TEMPORIZADOR\nvoid mostrarTiempo() {\n  int segundos = tiempoRestante \/ 1000;\n  int min = segundos \/ 60;\n  int seg = segundos % 60;\n\n  lcd.setCursor(13, 0);\n\n  if (min &lt; 10) lcd.print(\"0\");\n  lcd.print(min);\n  lcd.print(\":\");\n\n  if (seg &lt; 10) lcd.print(\"0\");\n  lcd.print(seg);\n}\n\n\/\/ PANTALLAS FINALES\nvoid iniciarExplosion() {\n  reproducirExplosion();\n  lcd.clear();\n  lcd.setCursor(3, 0); lcd.print(\"*** BOOM ***\");\n  lcd.setCursor(2, 1); lcd.print(\"La bomba exploto!\");\n  lcd.setCursor(0, 3); lcd.print(\"# para volver menu\");\n}\n\nvoid loopBomba() {\n  char tecla = teclado.getKey();\n  if (tecla == '#') {\n    menuCursor = 0;\n    cambiarEstado(MENU);\n    mostrarMenu();\n  }\n}\n\nvoid iniciarGanaste() {\n  reproducirExito();\n  lcd.clear();\n  lcd.setCursor(1, 0); lcd.print(\"** BOMBA DESACT! **\");\n  lcd.setCursor(3, 1); lcd.print(\"Felicidades!!!\");\n  lcd.setCursor(0, 2); lcd.print(\"Nivel \");\n  lcd.print(nivel);\n  lcd.print(\" completado!\");\n  lcd.setCursor(0, 3); lcd.print(\"# para volver menu\");\n}\n\nvoid loopGanaste() {\n  char tecla = teclado.getKey();\n  if (tecla == '#') {\n    menuCursor = 0;\n    cambiarEstado(MENU);\n    mostrarMenu();\n  }\n}\n\n<\/code><\/pre>\n\n\n\n<p>A partir de aqu\u00ed, el comportamiento del sistema se divide en los distintos minijuegos. El archivo \u00abmodulo_teclado.ino\u00bb implementa el juego de matem\u00e1ticas. Este m\u00f3dulo se encarga de generar las operaciones, leer la entrada del jugador y comprobar si la respuesta es correcta.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;Keypad.h&gt;\n\n\/\/ --- CONFIG TECLADO ---\nconst byte FILAS = 4;\nconst byte COLS  = 4;\n\nchar teclas&#091;FILAS]&#091;COLS] = {\n  {'1','2','3','A'},\n  {'4','5','6','B'},\n  {'7','8','9','C'},\n  {'*','0','#','D'}\n};\n\nbyte pinesFilas&#091;FILAS] = {A0, 2, 3, 4};\nbyte pinesCols&#091;COLS]   = {5, 6, 7, 8};\n\nKeypad teclado = Keypad(makeKeymap(teclas), pinesFilas, pinesCols, FILAS, COLS);\n\n\/\/ --- VARIABLES JUEGO ---\nint    numA = 0, numB = 0, numC = 0;\nchar   opA = '+', opB = '+';\nint    respuestaCorrecta = 0;\nString respuestaUsuario  = \"\";\nbool   negativo = false;\n\nvoid setupTeclado() {}\n\nvoid iniciarTeclado() {\n  respuestaUsuario = \"\";\n  negativo = false;\n  generarOperacion();\n  mostrarOperacionEnLCD();\n}\n\nvoid loopTeclado() {\n  char tecla = teclado.getKey();\n  if (!tecla) return;\n\n  if (tecla &gt;= '0' &amp;&amp; tecla &lt;= '9') {\n    if (respuestaUsuario.length() &lt; 5) {\n      respuestaUsuario += tecla;\n      actualizarRespuesta();\n    }\n\n  } else if (tecla == 'A') {\n    if (nivel &gt;= 3 &amp;&amp; respuestaUsuario.length() == 0) {\n      negativo = !negativo;\n      actualizarRespuesta();\n    }\n\n  } else if (tecla == '*') {\n    if (respuestaUsuario.length() &gt; 0) {\n      respuestaUsuario.remove(respuestaUsuario.length() - 1);\n    } else if (negativo) {\n      negativo = false;\n    }\n    actualizarRespuesta();\n\n  } else if (tecla == '#') {\n    if (respuestaUsuario.length() == 0 &amp;&amp; !negativo) {\n      return;\n    }\n    \n    int respuesta = respuestaUsuario.toInt();\n    if (negativo) respuesta = -respuesta;\n\n    if (respuesta == respuestaCorrecta) {\n      lcd.setCursor(0, 3);\n      lcd.print(\"OK!                 \");\n      efectoNivelCompletado();\n      matesSuperado = true;\n      cambiarEstado(JUEGO_SIMON);\n\n    } else {\n      lcd.setCursor(0, 3);\n      lcd.print(\"MAL! Era:\");\n      lcd.print(respuestaCorrecta);\n      delay(2000);\n      cambiarEstado(BOMBA_EXPLOTA);\n    }\n  }\n}\n\n\/\/ --- GENERAR OPERACION ---\nvoid generarOperacion() {\n  switch (nivel) {\n    case 1:\n      numA = random(1, 11);\n      numB = random(1, 11);\n      opA  = '+';\n      respuestaCorrecta = numA + numB;\n      break;\n\n    case 2:\n      numA = random(1, 21);\n      numB = random(1, 21);\n      opA  = (random(2) == 0) ? '+' : '-';\n      if (opA == '-' &amp;&amp; numB &gt; numA) {\n        int tmp = numA; numA = numB; numB = tmp;\n      }\n      respuestaCorrecta = (opA == '+') ? numA + numB : numA - numB;\n      break;\n\n    case 3:\n      numA = random(1, 21);\n      numB = random(1, 21);\n      opA  = (random(2) == 0) ? '*' : '-';\n      respuestaCorrecta = (opA == '*') ? numA * numB : numA - numB;\n      break;\n\n    case 4:\n      numA = random(1, 16);\n      numB = random(1, 16);\n      numC = random(1, 16);\n      {\n        char ops&#091;3] = {'+', '-', '*'};\n        opA = ops&#091;random(3)];\n        opB = ops&#091;random(3)];\n        int parcial;\n        if      (opA == '+') parcial = numA + numB;\n        else if (opA == '-') parcial = numA - numB;\n        else                 parcial = numA * numB;\n        if      (opB == '+') respuestaCorrecta = parcial + numC;\n        else if (opB == '-') respuestaCorrecta = parcial - numC;\n        else                 respuestaCorrecta = parcial * numC;\n      }\n      break;\n  }\n}\n\n\/\/ --- LCD ---\nvoid mostrarOperacionEnLCD() {\n  lcd.clear();\n  lcd.setCursor(0, 0);\n  lcd.print(\"MATES\");\n\n  lcd.setCursor(0, 1);\n  if (nivel &lt; 4) {\n    lcd.print(numA);\n    lcd.print(opA);\n    lcd.print(numB);\n    lcd.print(\"=?\");\n  } else {\n    lcd.print(numA);\n    lcd.print(opA);\n    lcd.print(numB);\n    lcd.print(opB);\n    lcd.print(numC);\n    lcd.print(\"=?\");\n  }\n\n  lcd.setCursor(0, 2);\n  lcd.print(\"R:\");\n\n  lcd.setCursor(0, 3);\n  if (nivel &gt;= 3) {\n    lcd.print(\"A=+\/- *=del #=ok\");\n  } else {\n    lcd.print(\"*=del #=ok\");\n  }\n}\n\nvoid actualizarRespuesta() {\n  lcd.setCursor(2, 2);\n  lcd.print(\"          \");\n  lcd.setCursor(2, 2);\n  if (negativo) lcd.print(\"-\");\n  lcd.print(respuestaUsuario);\n}\n<\/code><\/pre>\n\n\n\n<p>M\u00e1s adelante, el \u00bb modulo_simon_pacman.ino\u00bb incluye dos minijuegos: Simon dice, donde el jugador debe repetir una secuencia de luces en orden, y un Pac-Man simplificado, en el que controla un personaje en una cuadr\u00edcula para recoger objetivos.<\/p>\n\n\n\n<p>Ambos juegos est\u00e1n gestionados con el sistema de multiplexado de LEDs y botones, adaptando la dificultad seg\u00fan el nivel.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\/\/ --- Pines del multiplexor ---\n#define MUX_S0   12\n#define MUX_S1   13\n#define MUX_S2   A3\n#define MUX_SIG  A2\n\n\/\/ --- Canales multiplexor ---\n#define BTN_ROJO      0\n#define BTN_VERDE     1\n#define BTN_AZUL      2\n#define BTN_AMARILLO  3\n#define LED_ROJO      4\n#define LED_VERDE     5\n#define LED_AZUL      6\n#define LED_AMARILLO  7\n\n\/\/ --- FUNCIONES MULTIPLEXOR ---\nvoid muxSeleccionar(int canal) {\n  digitalWrite(MUX_S0, (canal &gt;&gt; 0) &amp; 1);\n  digitalWrite(MUX_S1, (canal &gt;&gt; 1) &amp; 1);\n  digitalWrite(MUX_S2, (canal &gt;&gt; 2) &amp; 1);\n}\n\nvoid encenderLed(int canal) {\n  pinMode(MUX_SIG, OUTPUT);\n  muxSeleccionar(canal);\n  digitalWrite(MUX_SIG, HIGH);\n}\n\nvoid apagarLed(int canal) {\n  pinMode(MUX_SIG, OUTPUT);\n  muxSeleccionar(canal);\n  digitalWrite(MUX_SIG, LOW);\n}\n\nvoid apagarTodosLeds() {\n  for (int i = LED_ROJO; i &lt;= LED_AMARILLO; i++) apagarLed(i);\n}\n\nvoid encenderTodosLeds() {\n  for (int i = LED_ROJO; i &lt;= LED_AMARILLO; i++) encenderLed(i);\n}\n\nvoid efectoNivelCompletado() {\n  encenderTodosLeds();\n  reproducirNivelCompletado();\n  delay(900);\n  apagarTodosLeds();\n}\n\nbool leerBoton(int canal) {\n  pinMode(MUX_SIG, INPUT);\n  muxSeleccionar(canal);\n  delayMicroseconds(10);\n  return digitalRead(MUX_SIG) == HIGH;\n}\n\nint leerBotonNoBloquear() {\n  for (int i = 0; i &lt; 4; i++) {\n    if (leerBoton(i)) {\n      delay(50);\n      while (leerBoton(i));\n      return i;\n    }\n  }\n  return -1;\n}\n\n\/\/ --- SIMON SAYS ---\n#define SIMON_MAX 10\nint  simonSecuencia&#091;SIMON_MAX];\nint  simonLongitud  = 3;\nint  simonPaso      = 0;\nint  simonVelocidad = 600;\n\nconst char c0&#091;] PROGMEM = \"ROJO\";\nconst char c1&#091;] PROGMEM = \"VERD\";\nconst char c2&#091;] PROGMEM = \"AZUL\";\nconst char c3&#091;] PROGMEM = \"AMAR\";\nconst char* const colores&#091;] PROGMEM = {c0, c1, c2, c3};\n\nvoid setupSimon() {\n  pinMode(MUX_S0, OUTPUT);\n  pinMode(MUX_S1, OUTPUT);\n  pinMode(MUX_S2, OUTPUT);\n  apagarTodosLeds();\n}\n\nvoid iniciarSimon() {\n  switch (nivel) {\n    case 1: simonLongitud = 3; simonVelocidad = 700; break;\n    case 2: simonLongitud = 4; simonVelocidad = 500; break;\n    case 3: simonLongitud = 5; simonVelocidad = 350; break;\n    case 4: simonLongitud = 6; simonVelocidad = 200; break;\n  }\n  simonPaso = 0;\n\n  for (int i = 0; i &lt; simonLongitud; i++) {\n    simonSecuencia&#091;i] = random(0, 4);\n  }\n\n  lcd.clear();\n  lcd.setCursor(0, 0); lcd.print(\"== SIMON SAYS ==\");\n  lcd.setCursor(0, 1); lcd.print(\"Seq: \");\n  lcd.print(simonLongitud);\n  lcd.print(\" colores\");\n  lcd.setCursor(0, 2); lcd.print(\"Observa...\");\n  delay(1500);\n\n  mostrarSecuenciaSimon();\n  mostrarTurnoJugador();\n}\n\nvoid loopSimon() {\n  int boton = leerBotonNoBloquear();\n  if (boton == -1) return;\n\n  encenderLed(boton + LED_ROJO);\n  delay(200);\n  apagarLed(boton + LED_ROJO);\n\n  if (boton == simonSecuencia&#091;simonPaso]) {\n    simonPaso++;\n    if (simonPaso &gt;= simonLongitud) {\n      lcd.setCursor(0, 3); lcd.print(\"Correcto!!!         \");\n      efectoNivelCompletado();\n      delay(600);\n      simonSuperado = true;\n      cambiarEstado(JUEGO_PACMAN);\n    } else {\n      lcd.setCursor(0, 3);\n      lcd.print(\"Paso \");\n      lcd.print(simonPaso);\n      lcd.print(\"\/\");\n      lcd.print(simonLongitud);\n      lcd.print(\" OK!   \");\n    }\n  } else {\n    apagarTodosLeds();\n    lcd.setCursor(0, 3); lcd.print(\"Error! Repite...    \");\n    delay(1500);\n    simonPaso = 0;\n    mostrarSecuenciaSimon();\n    mostrarTurnoJugador();\n  }\n}\n\nvoid mostrarSecuenciaSimon() {\n  for (int i = 0; i &lt; simonLongitud; i++) {\n    int led = simonSecuencia&#091;i] + LED_ROJO;\n    encenderLed(led);\n\n    lcd.setCursor(0, 3);\n    lcd.print(\"&gt;&gt; \");\n\n    char buffer&#091;5];\n    strcpy_P(buffer, (char*)pgm_read_word(&amp;(colores&#091;simonSecuencia&#091;i]])));\n    lcd.print(buffer);\n    lcd.print(\"        \");\n\n    delay(simonVelocidad);\n    apagarLed(led);\n    delay(150);\n  }\n}\n\nvoid mostrarTurnoJugador() {\n  lcd.clear();\n  lcd.setCursor(0, 0); lcd.print(\"== SIMON SAYS ==\");\n  lcd.setCursor(0, 1); lcd.print(\"Tu turno!\");\n  lcd.setCursor(0, 2); lcd.print(\"Repite secuencia\");\n  lcd.setCursor(0, 3); lcd.print(\"Paso 0\/\");\n  lcd.print(simonLongitud);\n}\n\n\/\/ --- PACMAN ---\n#define GRID_COLS   20\n#define GRID_FILAS   3\n\n#define CHR_PAC_R   0\n#define CHR_PAC_L   1\n#define CHR_PAC_U   2\n#define CHR_PAC_D   3\n#define CHR_GHOST   4\n\nbyte pacmanRight&#091;8] = {\n  0b01110,\n  0b10111,\n  0b11100,\n  0b11000,\n  0b11100,\n  0b11111,\n  0b01110,\n  0b00000\n};\nbyte pacmanLeft&#091;8] = {\n  0b01110,\n  0b11101,\n  0b00111,\n  0b00011,\n  0b00111,\n  0b11111,\n  0b01110,\n  0b00000\n};\nbyte pacmanUp&#091;8] = {\n  0b01010,\n  0b11011,\n  0b11011,\n  0b11111,\n  0b10111,\n  0b11111,\n  0b01110,\n  0b00000\n};\nbyte pacmanDown&#091;8] = {\n  0b01110,\n  0b11111,\n  0b10111,\n  0b11111,\n  0b11011,\n  0b11011,\n  0b01010,\n  0b00000\n};\nbyte fantasma&#091;8] = {\n  0b01110,\n  0b11111,\n  0b10101,\n  0b11111,\n  0b11111,\n  0b11111,\n  0b10101,\n  0b00000\n};\n\nint pacX, pacY;\nint pacDirX = 1;\nint pacDirY = 0;\n\nint comidasObjetivo = 4;\nint comidasComidas  = 0;\nint foodX = 10, foodY = 1;\n\nunsigned long pacUltimoMov = 0;\nint  pacVelocidad = 400;\n\nvoid setupPacman() {}\n\nvoid iniciarPacman() {\n  switch (nivel) {\n    case 1: comidasObjetivo = 4;  pacVelocidad = 500; break;\n    case 2: comidasObjetivo = 6;  pacVelocidad = 400; break;\n    case 3: comidasObjetivo = 8;  pacVelocidad = 300; break;\n    case 4: comidasObjetivo = 10; pacVelocidad = 220; break;\n  }\n\n  lcd.createChar(CHR_PAC_R, pacmanRight);\n  lcd.createChar(CHR_PAC_L, pacmanLeft);\n  lcd.createChar(CHR_PAC_U, pacmanUp);\n  lcd.createChar(CHR_PAC_D, pacmanDown);\n  lcd.createChar(CHR_GHOST, fantasma);\n\n  lcd.clear();\n  lcd.setCursor(7, 0); lcd.print(\"PACMAN\");\n  lcd.setCursor(0, 1); lcd.print(\"Comete los fantasmas\");\n  lcd.setCursor(0, 2); lcd.print(\"Botones = mover\");\n  lcd.setCursor(0, 3); lcd.print(\"Empezando...\");\n  delay(1500);\n\n  pacX = GRID_COLS \/ 2;\n  pacY = 1;\n  pacDirX = 1;\n  pacDirY = 0;\n  comidasComidas = 0;\n\n  pacUltimoMov = millis();\n  generarComida();\n  dibujarPacman();\n}\n\nvoid loopPacman() {\n  if (leerBoton(BTN_ROJO))      { pacDirX = 0;  pacDirY = -1; }\n  if (leerBoton(BTN_VERDE))     { pacDirX = 0;  pacDirY =  1; }\n  if (leerBoton(BTN_AZUL))      { pacDirX = -1; pacDirY =  0; }\n  if (leerBoton(BTN_AMARILLO))  { pacDirX = 1;  pacDirY =  0; }\n\n  if (millis() - pacUltimoMov &lt; (unsigned long)pacVelocidad) return;\n  pacUltimoMov = millis();\n\n  int nuevoX = pacX + pacDirX;\n  int nuevoY = pacY + pacDirY;\n\n  if (nuevoX &lt; 0) nuevoX = GRID_COLS - 1;\n  if (nuevoX &gt;= GRID_COLS) nuevoX = 0;\n  if (nuevoY &lt; 0) nuevoY = GRID_FILAS - 1;\n  if (nuevoY &gt;= GRID_FILAS) nuevoY = 0;\n\n  pacX = nuevoX;\n  pacY = nuevoY;\n\n  if (pacX == foodX &amp;&amp; pacY == foodY) {\n    comidasComidas++;\n    generarComida();\n\n    if (comidasComidas &gt;= comidasObjetivo) {\n      lcd.clear();\n      lcd.setCursor(0, 0); lcd.print(\"PACMAN \");\n      lcd.print(comidasComidas);\n      lcd.print(\"\/\");\n      lcd.print(comidasObjetivo);\n      lcd.setCursor(3, 1); lcd.print(\"GANASTE!\");\n      efectoNivelCompletado();\n      delay(600);\n      pacmanSuperado = true;\n      cambiarEstado(JUEGO_POT);\n      return;\n    }\n  }\n\n  dibujarPacman();\n}\n\nvoid generarComida() {\n  do {\n    foodX = random(0, GRID_COLS);\n    foodY = random(0, GRID_FILAS);\n  } while (foodX == pacX &amp;&amp; foodY == pacY);\n}\n\nbyte pacmanCharActual() {\n  if (pacDirX ==  1) return CHR_PAC_R;\n  if (pacDirX == -1) return CHR_PAC_L;\n  if (pacDirY == -1) return CHR_PAC_U;\n  if (pacDirY ==  1) return CHR_PAC_D;\n  return CHR_PAC_R;\n}\n\nvoid dibujarPacman() {\n  lcd.clear();\n\n  lcd.setCursor(0, 0);\n  lcd.print(\"PAC \");\n  lcd.print(comidasComidas);\n  lcd.print(\"\/\");\n  lcd.print(comidasObjetivo);\n\n  lcd.setCursor(foodX, foodY + 1);\n  lcd.write(byte(CHR_GHOST));\n\n  lcd.setCursor(pacX, pacY + 1);\n  lcd.write(pacmanCharActual());\n}\n<\/code><\/pre>\n\n\n\n<p>Por otro lado, en modulo_pot_audio.ino se implementa el minijuego del potenci\u00f3metro, donde el objetivo es ajustar un valor anal\u00f3gico hasta alcanzar un objetivo concreto dentro de un margen de error. Adem\u00e1s, este m\u00f3dulo tambi\u00e9n integra la parte de audio relacionada con el DFPlayer.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;SoftwareSerial.h&gt;\n#include &lt;DFRobotDFPlayerMini.h&gt;\n\n#define PIN_POT   A1\n\n#define DFPLAYER_RX  10\n#define DFPLAYER_TX  11\n\nSoftwareSerial dfSerial(DFPLAYER_RX, DFPLAYER_TX);\nDFRobotDFPlayerMini myDFPlayer;\n\n\/\/ Variables del minijuego\nint  valorObjetivo     = 0;\nint  margenAcierto     = 30;\nint  valorActual       = 0;\nint  ultimoValorActual = -1;\nunsigned long potUltimaLectura = 0;\n\n\/\/ Setup e inicio\nvoid setupPotAudio() {\n  dfSerial.begin(9600);\n\n  if (!myDFPlayer.begin(dfSerial)) {\n    \/\/ No bloquear si falla\n  } else {\n    myDFPlayer.volume(25);\n  }\n\n  delay(500);\n}\n\nvoid iniciarPotAudio() {\n  switch (nivel) {\n    case 1: margenAcierto = 30;  valorObjetivo = random(200, 801); break;\n    case 2: margenAcierto = 20;  valorObjetivo = random(150, 851); break;\n    case 3: margenAcierto = 12;  valorObjetivo = random(100, 924); break;\n    case 4: margenAcierto = 8;   valorObjetivo = random(100, 924); break;\n  }\n\n  ultimoValorActual = -1;\n  potUltimaLectura  = millis();\n\n  lcd.clear();\n  lcd.setCursor(0, 0); lcd.print(\"POT\");\n  lcd.setCursor(0, 1); lcd.print(\"Meta:\");\n  lcd.print(valorObjetivo);\n  lcd.print(\" +\/-\");\n  lcd.print(margenAcierto);\n  delay(1500);\n  lcd.clear();\n  mostrarPantallaPot();\n}\n\n\/\/ Loop\nvoid loopPotAudio() {\n  if (millis() - potUltimaLectura &lt; 80) return;\n  potUltimaLectura = millis();\n\n  valorActual = analogRead(PIN_POT);\n\n  if (abs(valorActual - ultimoValorActual) &lt; 3) return;\n  ultimoValorActual = valorActual;\n\n  int diferencia = abs(valorActual - valorObjetivo);\n\n  actualizarBarraPot();\n\n  lcd.setCursor(0, 3);\n  if (diferencia &lt;= margenAcierto) {\n    lcd.print(\"!! ZONA OK !!       \");\n  } else if (diferencia &lt; margenAcierto * 2) {\n    lcd.print(\"Muy cerca!          \");\n  } else if (diferencia &lt; margenAcierto * 4) {\n    lcd.print(\"Cerca...            \");\n  } else if (valorActual &lt; valorObjetivo) {\n    lcd.print(\"Gira derecha &gt;&gt;     \");\n  } else {\n    lcd.print(\"&lt;&lt; Gira izquierda   \");\n  }\n\n  if (diferencia &lt;= margenAcierto) {\n    delay(600);\n    valorActual = analogRead(PIN_POT);\n    if (abs(valorActual - valorObjetivo) &lt;= margenAcierto) {\n      lcd.setCursor(0, 3); lcd.print(\"Perfecto!! Ganaste! \");\n      efectoNivelCompletado();\n      delay(600);\n      potSuperado = true;\n      cambiarEstado(GANASTE);\n    }\n  }\n}\n\n\/\/ Pantalla\nvoid mostrarPantallaPot() {\n  lcd.setCursor(0, 0); lcd.print(\"POT\");\n  lcd.setCursor(0, 1); lcd.print(\"Meta:\");\n  lcd.print(valorObjetivo);\n  lcd.print(\" Ahora:\");\n}\n\nvoid actualizarBarraPot() {\n  lcd.setCursor(0, 1);\n  lcd.print(\"Meta:\");\n  lcd.print(valorObjetivo);\n  lcd.print(\" Ahr:\");\n  lcd.print(valorActual);\n  lcd.print(\"   \");\n\n  int posObj    = map(valorObjetivo, 0, 1023, 0, 19);\n  int posActual = map(valorActual,   0, 1023, 0, 19);\n\n  lcd.setCursor(0, 2);\n  for (int i = 0; i &lt; 20; i++) {\n    if (i == posObj &amp;&amp; i == posActual) {\n      lcd.print(\"*\");\n    } else if (i == posObj) {\n      lcd.print(\"X\");\n    } else if (i == posActual) {\n      lcd.print(\"|\");\n    } else if (i &gt; min(posObj, posActual) &amp;&amp; i &lt; max(posObj, posActual)) {\n      lcd.print(\".\");\n    } else {\n      lcd.print(\"-\");\n    }\n  }\n}\n\n\/\/ AUDIO \u2014 DFPLAYER MINI\nvoid reproducirExplosion() {\n  myDFPlayer.playMp3Folder(1);\n}\n\nvoid reproducirExito() {\n  myDFPlayer.playMp3Folder(2);\n}\n\nvoid reproducirNivelCompletado() {\n  myDFPlayer.playMp3Folder(3);\n}\n\nvoid reproducirTick() {\n  myDFPlayer.playMp3Folder(4);\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"reparto\">6. Reparto del trabajo<\/h2>\n\n\n\n<p>Para llevar a cabo el proyecto, hemos dividido el trabajo entre los miembros del grupo de forma equilibrada, principalmente en los minijuegos, intentando que todos particip\u00e1ramos tanto en la parte de hardware como en la de software. Adem\u00e1s, tambi\u00e9n hemos colaborado en la integraci\u00f3n del sistema y en la resoluci\u00f3n de los problemas que fueron surgiendo durante el desarrollo.<\/p>\n\n\n\n<p>Un aspecto importante de nuestra forma de trabajar fue la toma de decisiones en grupo. Siempre que aparec\u00eda un problema t\u00e9cnico, ya fuera en el c\u00f3digo o en el montaje del hardware, no lo resolv\u00eda una sola persona. Nos par\u00e1bamos los tres a analizar la situaci\u00f3n y buscar juntos la mejor soluci\u00f3n, lo que nos permiti\u00f3 avanzar de forma m\u00e1s segura y evitar errores.<\/p>\n\n\n\n<p>A continuaci\u00f3n, se muestra el reparto de tareas que hemos seguido a lo largo del proyecto:<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\"><strong>Tarea a realizar<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Miembro encargado<\/strong><\/td><td class=\"has-text-align-center\" data-align=\"center\"><strong>Descripci\u00f3n<\/strong><\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Dise\u00f1o general del sistema y organizaci\u00f3n<\/td><td class=\"has-text-align-center\" data-align=\"center\">Todos<\/td><td class=\"has-text-align-center\" data-align=\"center\">Definici\u00f3n conjunta de la idea del proyecto, estructura del juego y funcionamiento global.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Desarrollo del men\u00fa principal y control del sistema<\/td><td class=\"has-text-align-center\" data-align=\"center\">Todos<\/td><td class=\"has-text-align-center\" data-align=\"center\">Implementaci\u00f3n y ajuste del sistema de navegaci\u00f3n entre estados y niveles.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Integraci\u00f3n del audio con el altavoz y DFPlayer<\/td><td class=\"has-text-align-center\" data-align=\"center\">Todos<\/td><td class=\"has-text-align-center\" data-align=\"center\">Configuraci\u00f3n y pruebas de sonido (tic-tac, explosi\u00f3n, victoria&#8230;).<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Minijuego 1 (C\u00e1lculo matem\u00e1tico)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Ra\u00fal Luaces<\/td><td class=\"has-text-align-center\" data-align=\"center\">Resoluci\u00f3n de operaciones matem\u00e1ticas generadas aleatoriamente mediante teclado<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Minijuego 2 (Sim\u00f3n dice con LEDs y botones)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Daniel Quijano<\/td><td class=\"has-text-align-center\" data-align=\"center\">Repetici\u00f3n de una secuencia luminosa aleatoria pulsando los botones en el orden correcto.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Minijuego 3 (Simulaci\u00f3n de Pac-Man)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Mengying Xia<\/td><td class=\"has-text-align-center\" data-align=\"center\">Control de Pac-Man en una cuadr\u00edcula para comer fantasmas y avanzar en el juego.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Minijuego 4 (Regulaci\u00f3n de potenci\u00f3metro)<\/td><td class=\"has-text-align-center\" data-align=\"center\">Jon\u00e1s Huertes<\/td><td class=\"has-text-align-center\" data-align=\"center\">Ajuste de un valor mediante potenci\u00f3metro hasta alcanzar un objetivo dentro de un margen de tolerancia.<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">Montaje del HW<\/td><td class=\"has-text-align-center\" data-align=\"center\">Todos<\/td><td class=\"has-text-align-center\" data-align=\"center\">Montaje del circuito, conexiones y distribuci\u00f3n de componentes en protoboard y estructura f\u00edsica.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"problemas\">7. Problemas y resoluciones<\/h2>\n\n\n\n<p>Durante el desarrollo del proyecto nos fuimos encontrando con varios problemas, tanto en la parte de hardware como en la de software.<\/p>\n\n\n\n<p>Muchos de ellos ten\u00edan que ver con la conexi\u00f3n de los componentes, el uso de los pines o la organizaci\u00f3n del c\u00f3digo, y en algunos casos nos obligaron a replantear partes del dise\u00f1o.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pantalla mas peque\u00f1a de lo necesario: <\/strong>Inicialmente utilizamos una pantalla LCD 16&#215;2, pero resultaba limitada para mostrar toda la informaci\u00f3n del sistema, especialmente los men\u00fas y algunos minijuegos. Adem\u00e1s, requer\u00eda un n\u00famero elevado de conexiones y ocupaba varios pines del Arduino, por lo que decidimos sustituirla por una pantalla LCD 20&#215;4 con comunicaci\u00f3n I2C, lo que permiti\u00f3 reducir el cableado, liberar pines y disponer de m\u00e1s espacio para representar correctamente la informaci\u00f3n del juego.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Pantalla defectuosa:<\/strong> Al solicitar la nueva pantalla LCD 20&#215;4, la unidad que recibimos ten\u00eda un problema de fabricaci\u00f3n, ya que dos de sus pines estaban soldados entre s\u00ed. intentamos solucionarlo desoldando la conexi\u00f3n, pero segu\u00eda sin funcionar correctamente. Finalmente, optamos por comprar una nueva unidad.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Falta de pines: <\/strong>A medida que fuimos a\u00f1adiendo componentes, nos encontramos con que no dispon\u00edamos de suficientes pines en el Arduino para conectar todo lo que quer\u00edamos. Para solucionarlo, decidimos incorporar un multiplexor. Gracias a esto pudimos ampliar el n\u00famero de conexiones disponibles y continuar con el desarrollo sin tener que eliminar componentes.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Espacio insuficiente en protoboard:<\/strong> Al montar el circuito, nos dimos cuenta que una sola protoboard no era suficiente para organizar todos los componentes de forma clara, ya que el cableado se volv\u00eda confuso y no cab\u00eda todo correctamente. Para solucionarlo, decidimos utilizar una segunda protoboard y conectarlas entre s\u00ed, lo que nos permiti\u00f3 distribuir mejor los componentes y trabajar de forma m\u00e1s ordenada.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Problema con el joystick y los pines:<\/strong> Inicialmente quer\u00edamos utilizar un joystick para controlar el movimiento del personaje en el minijuego de PacMan. Sin embargo, debido a la falta de pines disponibles, incluso tras incorporar el multiplexor, no fue posible integrarlo en el sistema. Como alternativa, decidimos utilizar los cuatro botones del Simon Says para simular las direcciones de movimiento, lo que permiti\u00f3 mantener la funcionalidad del juego sin necesidad de a\u00f1adir m\u00e1s hardware.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Cinta conductora no deseada:<\/strong> Para mejorar la est\u00e9tica del montaje utilizamos una cinta adhesiva met\u00e1lica, similar al papel de aluminio. Sin embargo, no tuvimos en cuenta que este material era conductor, lo que provocaba contactos no deseados entre algunos componentes. Esto generaba fallos en el circuito, por lo que tuvimos que eliminarla y remplazarla por un material aislante adecuado.<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"funcionamiento\">8. Funcionamiento<\/h2>\n\n\n\n<p>A continuaci\u00f3n se muestra una prueba del sistema en el nivel de dificultad m\u00e1s bajo. En este modo, los minijuegos presentan condiciones m\u00e1s accesibles, permitiendo observar de forma clara el funcionamiento general del sistema, la interacci\u00f3n con el usuario y la transici\u00f3n entre los distintos m\u00f3dulos.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"464\" style=\"aspect-ratio: 832 \/ 464;\" width=\"832\" controls src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Video-2026-04-28-at-18.54.19.mp4\"><\/video><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>Y por otra parte, en el siguiente v\u00eddeo se muestra qu\u00e9 ocurre cuando el jugador no consigue completar los minijuegos a tiempo en el nivel de mayor dificultad. Debido a la reducci\u00f3n del tiempo y al aumento de la complejidad, el sistema finaliza con la explosi\u00f3n de la bomba.<\/p>\n\n\n\n<p>Esta prueba permite comprobar el comportamiento del temporizador, el incremento de la tensi\u00f3n (tic-tac) y la respuesta final del sistema en caso de fallo.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"464\" style=\"aspect-ratio: 832 \/ 464;\" width=\"832\" controls src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Video-2026-04-28-at-18.54.01.mp4\"><\/video><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Grupo 03: Ra\u00fal Luaces Salamanca, Jon\u00e1s Huertes Ram\u00edrez, Mengying Xia Ruan, Daniel Quijano Alonso 1. \u00cdndice 2. Descripci\u00f3n y objetivos El proyecto consiste en el desarrollo de un sistema interactivo que simula una bomba&#46;&#46;&#46;<\/p>\n","protected":false},"author":345,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-10129","post","type-post","status-publish","format-standard","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Sistema de desactivaci\u00f3n de bomba - Grupo 03 - 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\/sistema-de-desactivacion-de-bomba-grupo-03\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Sistema de desactivaci\u00f3n de bomba - Grupo 03 - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Grupo 03: Ra\u00fal Luaces Salamanca, Jon\u00e1s Huertes Ram\u00edrez, Mengying Xia Ruan, Daniel Quijano Alonso 1. \u00cdndice 2. Descripci\u00f3n y objetivos El proyecto consiste en el desarrollo de un sistema interactivo que simula una bomba&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2026-05-06T10:23:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52.jpeg\" \/>\n\t<meta property=\"og:image:width\" content=\"1536\" \/>\n\t<meta property=\"og:image:height\" content=\"2048\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"seytrmo2526g03\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"seytrmo2526g03\" \/>\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\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/\"},\"author\":{\"name\":\"seytrmo2526g03\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/ca2077d02402b79659b850c4473ac01f\"},\"headline\":\"Sistema de desactivaci\u00f3n de bomba &#8211; Grupo 03\",\"datePublished\":\"2026-05-06T10:23:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/\"},\"wordCount\":1553,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/WhatsApp-Image-2026-05-05-at-09.40.52-768x1024.jpeg\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/\",\"name\":\"Sistema de desactivaci\u00f3n de bomba - Grupo 03 - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/WhatsApp-Image-2026-05-05-at-09.40.52-768x1024.jpeg\",\"datePublished\":\"2026-05-06T10:23:49+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/WhatsApp-Image-2026-05-05-at-09.40.52.jpeg\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2026\\\/05\\\/WhatsApp-Image-2026-05-05-at-09.40.52.jpeg\",\"width\":1536,\"height\":2048},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/sistema-de-desactivacion-de-bomba-grupo-03\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Sistema de desactivaci\u00f3n de bomba &#8211; Grupo 03\"}]},{\"@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\\\/ca2077d02402b79659b850c4473ac01f\",\"name\":\"seytrmo2526g03\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cf2f0ceab97496c1e3ac15b5d8284813314e5ece85381d8c8e58af1b30d6f344?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cf2f0ceab97496c1e3ac15b5d8284813314e5ece85381d8c8e58af1b30d6f344?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/cf2f0ceab97496c1e3ac15b5d8284813314e5ece85381d8c8e58af1b30d6f344?s=96&d=mm&r=g\",\"caption\":\"seytrmo2526g03\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/seytrmo2526g03\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Sistema de desactivaci\u00f3n de bomba - Grupo 03 - 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\/sistema-de-desactivacion-de-bomba-grupo-03\/","og_locale":"es_ES","og_type":"article","og_title":"Sistema de desactivaci\u00f3n de bomba - Grupo 03 - Proyectos con Arduino.","og_description":"Grupo 03: Ra\u00fal Luaces Salamanca, Jon\u00e1s Huertes Ram\u00edrez, Mengying Xia Ruan, Daniel Quijano Alonso 1. \u00cdndice 2. Descripci\u00f3n y objetivos El proyecto consiste en el desarrollo de un sistema interactivo que simula una bomba&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2026-05-06T10:23:49+00:00","og_image":[{"width":1536,"height":2048,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52.jpeg","type":"image\/jpeg"}],"author":"seytrmo2526g03","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"seytrmo2526g03","Tiempo de lectura":"18 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/"},"author":{"name":"seytrmo2526g03","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/ca2077d02402b79659b850c4473ac01f"},"headline":"Sistema de desactivaci\u00f3n de bomba &#8211; Grupo 03","datePublished":"2026-05-06T10:23:49+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/"},"wordCount":1553,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-768x1024.jpeg","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/","name":"Sistema de desactivaci\u00f3n de bomba - Grupo 03 - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52-768x1024.jpeg","datePublished":"2026-05-06T10:23:49+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52.jpeg","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2026\/05\/WhatsApp-Image-2026-05-05-at-09.40.52.jpeg","width":1536,"height":2048},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/sistema-de-desactivacion-de-bomba-grupo-03\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Sistema de desactivaci\u00f3n de bomba &#8211; Grupo 03"}]},{"@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\/ca2077d02402b79659b850c4473ac01f","name":"seytrmo2526g03","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/cf2f0ceab97496c1e3ac15b5d8284813314e5ece85381d8c8e58af1b30d6f344?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/cf2f0ceab97496c1e3ac15b5d8284813314e5ece85381d8c8e58af1b30d6f344?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/cf2f0ceab97496c1e3ac15b5d8284813314e5ece85381d8c8e58af1b30d6f344?s=96&d=mm&r=g","caption":"seytrmo2526g03"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/seytrmo2526g03\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/10129","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\/345"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=10129"}],"version-history":[{"count":15,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/10129\/revisions"}],"predecessor-version":[{"id":10308,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/10129\/revisions\/10308"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=10129"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=10129"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=10129"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}