{"id":8846,"date":"2024-05-08T22:53:52","date_gmt":"2024-05-08T20:53:52","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=8846"},"modified":"2024-05-08T22:53:54","modified_gmt":"2024-05-08T20:53:54","slug":"tablero-de-ajedrez-con-inteligencia-artificial-integrada","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/","title":{"rendered":"Tablero de Ajedrez con Inteligencia Artificial Integrada"},"content":{"rendered":"\n<p>Les presentamos nuestro proyecto de ajedrez con inteligencia artificial integrada. En este trabajo, hemos combinado la esencia del ajedrez con las capacidades de la inteligencia artificial todo ello representado mediante una matriz de leds<\/p>\n\n\n\n<p>Nuestro equipo, compuesto por Lucia, Beltran, \u00c1ngel y Javier, se ha dedicado a dise\u00f1ar y desarrollar un tablero de ajedrez, este proceso ha sido un reto que ha conllevado varios problemas a los que les hemos encontrado soluciones as\u00ed como dificultades de las que hemos aprendido y superado llegando hasta llegar a nuestra meta.<\/p>\n\n\n\n<p>Para facilitar la interacci\u00f3n con el juego, hemos creado un display, que, junto a unos botones, permiten manejar las posiciones de manera intuitiva y fluida. Adem\u00e1s, hemos implementado una matriz LED 16&#215;16 que refleja las casillas de origen y destino de la IA, brindando una experiencia visual envolvente y din\u00e1mica.<\/p>\n\n\n\n<p>Como hemos mencionado anteriormente, con este proyecto buscamos una soluci\u00f3n para esas personas a las que les encanta el ajedrez, pero ya sea por disponibilidad o cualquier otra raz\u00f3n, no les es posible encontrar un adversario con el que jugar. Con este ajedrez podr\u00e1n disfrutar de una buena partida siempre que quieran<\/p>\n\n\n\n<p><strong>MAQUETA<\/strong><\/p>\n\n\n\n<p>Comenzando con lo m\u00e1s visual de nuestro proyecto, hablaremos de la maqueta:<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/np5GD5aDA_kQ82x49pd12l23JsvLg25oGjm-v-iodMRWozSvMQsQ4etGjdu-WNH5Xgz54opcMnSd15n6y1fYCO7C1RndsAfROXRJikKBZXI3Xq2dvbMbXCmTwE9uWOwqAY8tew_ndkGTJe_9-XpS1sU\" width=\"406\" height=\"406\"><\/p>\n\n\n\n<p>Podemos apreciar que nuestro ajedrez se compone en primer lugar de una caja que alberga los circuitos, el display, el Arduino y sobre la cual se sit\u00faa nuestro tablero. Esta caja, fundamental para el funcionamiento y la est\u00e9tica del proyecto, la elaboramos detalladamente utilizando contrachapado con medidas por lado de 19,8 cm x 10 cm. Para su construcci\u00f3n, nos hemos valido de herramientas simples pero efectivas: un c\u00fater para establecer las medidas con precisi\u00f3n, el adhesivo \u00abNo m\u00e1s clavos\u00bb para asegurar una uni\u00f3n s\u00f3lida y duradera, y peque\u00f1os tacos de madera para brindar estabilidad y robustez a la estructura.<\/p>\n\n\n\n<p>Una vez completada la construcci\u00f3n de la caja, con la ayuda de unos peque\u00f1os topes de madera, hemos logrado una base s\u00f3lida sobre la cual introducir todos los componentes electr\u00f3nicos necesarios, incluyendo el circuito, el display, los botones y el Arduino. Estrat\u00e9gicamente, hemos realizado un hueco en la pared frontal de la caja para permitir la salida del display y los botones, dando lugar as\u00ed a un acceso c\u00f3modo y pr\u00e1ctico durante el juego.<\/p>\n\n\n\n<p>Como toque final y para proporcionar una apariencia elegante y funcional al ajedrez, hemos optado por utilizar metacrilato seccionado en casillas como tapa, sobre la cual hemos colocado bordes de madera donde hemos marcado las letras y n\u00fameros correspondientes. Este dise\u00f1o no solo a\u00f1ade un elemento est\u00e9tico al conjunto, sino que tambi\u00e9n facilita la identificaci\u00f3n de las casillas durante el juego.<\/p>\n\n\n\n<p>En resumen, mediante este proceso de dise\u00f1o y fabricaci\u00f3n, hemos logrado crear un ajedrez que no solo cumple con los requisitos funcionales y t\u00e9cnicos, sino que tambi\u00e9n destaca por su comodidad, est\u00e9tica y practicidad en cada partida.<\/p>\n\n\n\n<p><strong>BOTONES Y DISPLAY<\/strong><\/p>\n\n\n\n<p>A continuaci\u00f3n, vamos a detallar de la forma m\u00e1s breve posible el c\u00f3digo empleado en nuestro proyecto. Para facilitar la explicaci\u00f3n dividiremos el c\u00f3digo en tres partes, teniendo en cuenta el hardware que manejan, m\u00e1s el setup; sin embargo, habr\u00e1 funciones que empleen elementos correspondientes a m\u00e1s de una parte:<\/p>\n\n\n\n<p>1.&nbsp; &nbsp; &nbsp; <strong><em>Setup<\/em><\/strong><em>:<\/em> En primer lugar, hay que incluir librer\u00edas y definir los pines y las variables globales que emplearemos en nuestro programa. Como podemos observar a simple vista, hay una gran cantidad de variables y datos definidos; la mayor\u00eda de los cuales pertenecen a la IA empleada como oponente de nuestro ajedrez. Procederemos a explicar s\u00f3lo los elementos m\u00e1s relevantes.<\/p>\n\n\n\n<p><strong>Librer\u00edas<\/strong>: Empleamos LiquidCrystal para el manejo del display y Adafruit_NeoPixel para el manejo de la matriz LED.<\/p>\n\n\n\n<p><strong>Variables<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>IA:<em> <\/em>La variable que nosotros hemos introducido para poder manejar la IA a trav\u00e9s de nuestro hardware es <em>inputString<\/em>, un String donde se almacenar\u00e1 el movimiento a realizar y que adem\u00e1s emplearemos como herramienta de control para saber si se deben de seguir introduciendo datos para finalizar el movimiento, o si por el contrario este ya est\u00e1 completo. Adem\u00e1s, tambi\u00e9n emplearemos <em>lastM<\/em> y <em>lastH<\/em> que representan el \u00faltimo movimiento realizado por la IA y el humano, respectivamente.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>LCD: Objeto para poder manejar e inicializar el display, de 16 columnas por 2 filas.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Matriz: Objeto para poder manejar e inicializar la matriz LED de 16&#215;16.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Botones: Aqu\u00ed hemos creado 3 variables globales de tipo entero, as\u00ed como una de tipo char. Las variables de tipo entero consisten en <em>posici\u00f3n,<\/em> para llevar la cuenta de la \u00faltima posici\u00f3n de inputString rellenada y que adem\u00e1s nos indica la posici\u00f3n del cursor en el display; <em>d\u00edgito,<\/em> para poder guardar en inputString los d\u00edgitos del movimiento a realizar; y <em>contador<\/em>, variable la cual incrementar\u00e1 seg\u00fan se vayan pulsando los botones y que representar\u00e1 el d\u00edgito o caracter a introducir. La variable tipo char es <em>letra,<\/em> an\u00e1loga a la variable <em>d\u00edgito<\/em>.<\/li>\n<\/ul>\n\n\n\n<p><strong>Pines<\/strong>: Reservamos los pines digitales 2, 4 y 7 para los botones, los pines digitales 8, 9, 10, 11, 12 y 13 para el display y el pin digital 0 para la matriz LED.<br><br><\/p>\n\n\n\n<p class=\"has-text-align-left\"><em>2.<\/em>\u00a0 \u00a0 \u00a0 <strong><em>Botones y display<\/em><\/strong><em>:<\/em> En esta secci\u00f3n encontramos una funci\u00f3n principal, <em>read_movement().<\/em> Esta funci\u00f3n detecta la pulsaci\u00f3n de los botones y realiza la acci\u00f3n pertinente a dicho bot\u00f3n pulsado. Adem\u00e1s se encuentra en el programa principal (loop()) y se ejecuta en bucle mientras <em>inputString<\/em> no est\u00e9 completo.<em> <br><\/em>Cada bot\u00f3n, a los que llamaremos <em>bot\u00f3n1<\/em>, <em>bot\u00f3n4<\/em> y <em>bot\u00f3nSig<\/em>, tiene una o m\u00e1s acciones posibles, que ser\u00e1n visibles en el display, y se decidir\u00e1 cual ejecutar seg\u00fan el estado de <em>inputString <\/em>(recordemos que controlamos su estado a trav\u00e9s de la variable <em>posici\u00f3n<\/em>).<\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" width=\"201\" height=\"44\" src=\"https:\/\/lh7-us.googleusercontent.com\/TjI02okipsP0hg7qxZoSgfnjCtxRjq4kZefGU4TBs3Q-dZxuw1oOkpsGguCPuaAERsB3DYvzXaHJRrwdCHQ1bMaTD_CHAgjUnSoKy_PyB6SaUiT4wWiRrTrHMHprHg241zyskMvX2wm1AKfCtn_nTtE\"><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>En primer lugar, <strong>bot\u00f3n1<\/strong><strong> <\/strong>tiene 3 posibles acciones: si la variable <em>posici\u00f3n<\/em> es par, representa que se desea introducir una letra para realizar el movimiento, por lo que cada pulsaci\u00f3n de dicho bot\u00f3n iterar\u00e1 de una en una de manera ascendente las letras de \u2018a\u2019 a \u2018h\u2019. Despu\u00e9s de llegar a \u2018h\u2019 y seguir iterando, se volver\u00e1 al inicio \u2018a\u2019, lo cual ser\u00e1 controlado mediante la funci\u00f3n <em>topeDigito()<\/em>.<\/li>\n<\/ul>\n\n\n\n<p><br>De igual manera, si <em>posici\u00f3n<\/em> es impar se realizar\u00e1 el mismo procedimiento, pero con los n\u00fameros del 1 al 8.<br>Por \u00faltimo, el caso especial donde <em>posici\u00f3n<\/em> es igual a 4, el cual representa que se han introducido todos los datos necesarios para realizar el movimiento. Si se desea confirmar el movimiento introducido (en caso de haber cometido un error) se pulsar\u00e1 este bot\u00f3n y el movimiento quedar\u00e1 aceptado, a la espera de comprobar si es v\u00e1lido. En este caso especial se termina de completar <em>inputString<\/em> por lo que se cumple la funci\u00f3n que finaliza el bucle donde se encontraba <em>read_movement().<\/em><\/p>\n\n\n\n<p class=\"has-text-align-center\"><img loading=\"lazy\" decoding=\"async\" width=\"201\" height=\"207\" src=\"https:\/\/lh7-us.googleusercontent.com\/772l7wFyr58JuIyS1hZQirc4mw4qlwIu2ZeElRkgJ-ktK-sMxfHrHo_bKup0b5qFO8nhq5Uy1UhaUtq_cRFIEDlvkC9yAhoTzyvRWMfNRq06UCG2MC-VrPGhXMJmLPJ5EhAl04KcwaPiMFLvh2wihko\"><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>An\u00e1logamente, <strong>bot\u00f3n4 <\/strong>tiene 3 posibles acciones an\u00e1logas a <em>bot\u00f3n1<\/em>, con la diferencia que se itera de 4 en 4 en vez de 1 en 1, controlado por la funci\u00f3n <em>topeDigito4().<\/em><br><br><img loading=\"lazy\" decoding=\"async\" width=\"154\" height=\"184\" src=\"https:\/\/lh7-us.googleusercontent.com\/ueI2bXf1IG08RESaOb7nDQkmEl8WDnl_XpJ-J4ejj3z3r-EzYkpEBfww9R4jC7yMoWK5hSCHn8SdkUKFvBY4ybeuT-AogXXKxsiLliiD40p7yZC3L6vvGBm7GXQ-IqkHvD3C4PdQFZ1l67FNB1POTac\">        <img loading=\"lazy\" decoding=\"async\" width=\"229\" height=\"206\" src=\"https:\/\/lh7-us.googleusercontent.com\/6z42fAX1gsPzMCwpkX46W9-oOEBaie3wmTREuKeNUyJZISaFNP30Ae_d7qmQ4PGP_wtDx-kdMN_JTuJUTKkuktpwnhj2WQmpVLxkEE4wLK0KAP791SXojz-n5EWomth0SI3Qou--h5AP_2-WeHwQm5E\"><\/li>\n<\/ul>\n\n\n\n<p>Para el caso donde <em>posici\u00f3n <\/em>es igual a 4, si se desea rechazar el movimiento (pues se ha introducido el movimiento con alguna errata) se pulsar\u00e1 este bot\u00f3n, lo cual provocar\u00e1 que <em>inputString <\/em>sea borrado y <em>posici\u00f3n<\/em> vuelva a 0, mediante la llamada a la funci\u00f3n <em>anulado(), <\/em>y por tanto no se finalice el bucle de donde se encuentra <em>read_movement()<\/em>.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Por \u00faltimo, <strong>bot\u00f3nSig<\/strong><strong> <\/strong>tiene 1 funci\u00f3n: mientras <em>posici\u00f3n <\/em>sea distinto de 4, es decir, no se hayan introducido a\u00fan todos los datos necesarios, cada vez que se pulse este bot\u00f3n servir\u00e1 como confirmaci\u00f3n de que el elemento del movimiento que est\u00e1bamos introduciendo actualmente, sea d\u00edgito o letra, es correcto, se almacenar\u00e1 en <em>inputString<\/em> y pasaremos a introducir el siguiente elemento del movimiento. Para ello mediante <em>topePosici\u00f3n()<\/em> incrementamos en 1 el valor de la posici\u00f3n. Adem\u00e1s, al igual que antes, si <em>posici\u00f3n <\/em>es par significa que se est\u00e1 introduciendo una letra y si es impar, una cifra.\u00a0<\/li>\n<\/ul>\n\n\n\n<p>Para finalizar, las funciones hay tres funciones que emplean la l\u00f3gica de los botones y otra que adem\u00e1s mezcla dicha l\u00f3gica con la de la matriz LED y la IA; sin embargo no se activan al pulsar dichos botones. Son <em>invalid()<\/em>, se activa cuando un movimiento confirmado por el humano no es correcto; <em>win(),<\/em> cuando el humano gana la partida; y <em>lose(),<\/em> cuando el humano pierde la partida. Las tres condiciones muestran por el display informaci\u00f3n relevante.<\/p>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" width=\"229\" height=\"212\" src=\"https:\/\/lh7-us.googleusercontent.com\/Z9bf-ZOwE2KwPXFiiDkFCRK-0q9bWpeYasF6Q-txOJHyrlCPxLi9nawRIhq6edGDhw6di9Wze5tdNm3mMqzgZtrlwep8myF8rlKIMg8QoFUPDy7ycgBU9K301MvlO52P4TNW3mr61qtg1B5cK6uneEw\">.         <img loading=\"lazy\" decoding=\"async\" width=\"318\" height=\"226\" src=\"https:\/\/lh7-us.googleusercontent.com\/zF-G5An4Ze60yWzYnWUsbgZ0wSwTq879psGoZtnk7xapxYHsuRiN53gQwH93uIsap5EqQhON85KaBdwgD3lyIeBocjDHGtOCbov8PL5942UuabNd0CvTH4cB3Yg6FbcOpEeWJ4sRZyki3yKAzfqmLOY\"><\/p>\n\n\n\n<p>Sin embargo, no hemos indicado en ning\u00fan momento alguna funci\u00f3n que se encargue \u00fanicamente de la l\u00f3gica del display. Esto se debe a que no hay ninguna, todas las acciones que realiza el display, las cuales son mostrar por pantalla la informaci\u00f3n relacionada con el movimiento, est\u00e1n embebidas en las funciones mencionadas anteriormente.<br>La gesti\u00f3n de la posici\u00f3n del cursor del display se realiza mediante la variable <em>posici\u00f3n<\/em>, y una vez introducida la posici\u00f3n del cursor se procede a imprimir el mensaje deseado mediante la funci\u00f3n predefinida LCD.write().<\/p>\n\n\n\n<p><strong>INTELIGENCIA ARTIFICIAL INTEGRADA<\/strong><\/p>\n\n\n\n<p>Para el proyecto, hemos implementado un m\u00f3dulo de ajedrez que incorpora inteligencia artificial (IA) para enfrentarse al usuario en las partidas de ajedrez. Este m\u00f3dulo central de nuestra aplicaci\u00f3n se basa en un c\u00f3digo fuente obtenido de internet, que ha sido adaptado y modificado para cumplir con nuestros requisitos espec\u00edficos.\u00a0<\/p>\n\n\n\n<p>La inteligencia artificial que hemos adoptado y modificado es conocida como \u00abArduino UNO MicroMax Chess\u00bb, originalmente desarrollada por Diego Cueva. Esta versi\u00f3n est\u00e1 basada en \u00abMicro-Max\u00bb, versi\u00f3n 4.8, una creaci\u00f3n de H.G. Muller. \u00abMicro-Max\u00bb que es el programa y la inteligencia artificial de ajedrez m\u00e1s compacto disponible, compuesta por menos de 2000 caracteres y apenas 133 l\u00edneas de c\u00f3digo. A pesar de su tama\u00f1o reducido, es capaz de ejecutar completamente el juego de ajedrez, respetando todas las reglas establecidas por la Federaci\u00f3n Internacional de Ajedrez (FIDE).<\/p>\n\n\n\n<p>La elecci\u00f3n de \u00abMicro-Max\u00bb para nuestro proyecto no fue casual, ya que su tama\u00f1o extremadamente compacto lo hace ideal para la memoria limitada de nuestra placa Arduino. Sin embargo, este tama\u00f1o tambi\u00e9n presenta desaf\u00edos, principalmente debido a la abstracci\u00f3n y condensaci\u00f3n del c\u00f3digo. Por ejemplo, el nombre de todas las funciones y variables se limita a un solo car\u00e1cter, lo que dificulta la tarea de entender y modificar el c\u00f3digo sin una documentaci\u00f3n detallada y una comprensi\u00f3n profunda de sus mec\u00e1nicas internas.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/74fbYh4DLcvHkcZ-fiybIMunSFypJh3wbD-uNBprUxHnG-y_v9m1JgPz2KCtxeDmYJBkgIeT6nfXNsr0tkHZwrpvS4m9fVqHkz4P_YRdHSKfcAwTuzj1Rg8xajH09t689ds7ja_R9b5qkDE7mBD92p8\" alt=\"\" \/><\/figure>\n\n\n\n<p>Las principales adaptaciones que hemos tenido que implementar en el c\u00f3digo incluyen la integraci\u00f3n de la captura de movimientos a trav\u00e9s de botones f\u00edsicos, la implementaci\u00f3n de animaciones mediante LEDs para una interacci\u00f3n m\u00e1s visual, as\u00ed como la representaci\u00f3n de informaci\u00f3n y movimientos en un display conectado a nuestra unidad central. Hemos tenido que sustituir la manera en que ten\u00eda el m\u00f3dulo de hacer la tareas de recibir movimiento por una llamada a nuestra propia funci\u00f3n, que recogiera la entrada por los botones y mostrase la informaci\u00f3n necesaria por la pantalla display. Despu\u00e9s de cada movimiento hecho por la inteligencia artificial hemos a\u00f1adido la llamada a otra funci\u00f3n que imprimiera en la pantalla display y en la matriz LED el movimiento realizado. Adem\u00e1s, hemos localizado los puntos del c\u00f3digo en los que se identificaba que se hab\u00eda realizado un movimiento inv\u00e1lido, se hab\u00eda ganado o se hab\u00eda perdido la partida, e insertado la llamada a las funciones que mostrasen la animaci\u00f3n pertinente a cada una de ellas.<\/p>\n\n\n\n<p><strong>MATRIZ DE LEDS<\/strong><\/p>\n\n\n\n<p>Para la gesti\u00f3n de la placa de los leds hemos utilizado diferentes funciones.<br>Para empezar y como introducci\u00f3n, part\u00edamos de una placa de leds de 16 x 16 por lo que cada casilla equivale a 4 leds (lo planteamos as\u00ed para que fuera m\u00e1s visual, ya que utilizando s\u00f3lo un LED por casilla el tablero ser\u00eda demasiado peque\u00f1o).<br><br>En principio, la placa de LEDS podemos dividir en dos grandes procesos.<br><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>El encendido y apagado de la casilla origen y destino: los movimientos de la IA se transfieren encendiendo al mismo tiempo tanto la casilla donde est\u00e1 la pieza que quiere mover; como la casilla a la que quiere mover dicha pieza.<br>Las casillas se quedar\u00e1n encendidas hasta el siguiente movimiento.<\/li>\n<\/ul>\n\n\n\n<p>LIGHTCASILLA(char, int, int, int, int) es la funci\u00f3n que implementamos para llevar a cabo esta acci\u00f3n.<\/p>\n\n\n\n<p>Dado que son pocas l\u00edneas de c\u00f3digo, podemos incluir la misma funci\u00f3n para desarrollar mejor su explicaci\u00f3n y comprensi\u00f3n.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-us.googleusercontent.com\/EZrTe78MSvAtDoC96mZvX61KEBEUqNFz3gxMix95z9UCzqWMdzjbcskBnSUFndZuv0t8m3ueew2COkrFgBuR_4GyYV5tbiYzdfjepOIqiZCYNqaRhHyDBsOZ88dg6FTbraKjrzbXhanqTrZl11ScL3c\" alt=\"\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Animaciones Varias. Estas animaciones ocurren en situaciones concretas y las hemos implementado para que el mensaje que quer\u00edamos transmitir fuera m\u00e1s visual.\n<ul class=\"wp-block-list\">\n<li>WINANIMATION(): una vez se ha terminado la partida, y el resultado ha sido \u201cganador\u201d aparecer\u00e1 una animaci\u00f3n en la que aparecer\u00e1n las letras secuencialmente de WIN, en color verde.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>LOSEANIMATION():\u00a0 una vez se ha terminado la partida, y el resultado ha sido \u201cperdedor\u201d aparecer\u00e1 una animaci\u00f3n en la que aparecer\u00e1n las letras secuencialmente de LOSE, en color rojo.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>INVALIDANIMATION(): est\u00e1 animaci\u00f3n se implementa cuando se realiza un movimiento no v\u00e1lido, es decir, que no est\u00e1 permitido.<br>Esta animaci\u00f3n, es muy simple, ya que lo \u00fanico que muestra es una X en rojo por todo el tablero.<\/li>\n<\/ul>\n\n\n\n<p>NOTA: para todas las funciones mencionadas anteriormente para las diferentes animaciones, hemos implementado una funci\u00f3n auxiliar APAGARTODO(), que llamamos continuamente ya sea a la hora de mostrar las letras de ganar o perder; o cuando se inicia el siguiente movimiento tr\u00e1s el movimiento de la IA.<\/p>\n\n\n\n<p><strong>V\u00cdDEO EXPLICATIVO<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<div class=\"video-container\"><iframe loading=\"lazy\" title=\"Tablero de Ajedrez con Inteligencia Artificial Integrada\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/WKAH6i8BEk4?feature=oembed&#038;wmode=opaque\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe><\/div>\n<\/div><\/figure>\n\n\n\n<p><strong>ENLACE AL C\u00d3DIGO<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/github.com\/beltrixhb2\/ArduinoChessBoardAI\">https:\/\/github.com\/beltrixhb2\/ArduinoChessBoardAI<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les presentamos nuestro proyecto de ajedrez con inteligencia artificial integrada. En este trabajo, hemos combinado la esencia del ajedrez con las capacidades de la inteligencia artificial todo ello representado mediante una matriz de leds&#46;&#46;&#46;<\/p>\n","protected":false},"author":234,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-8846","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>Tablero de Ajedrez con Inteligencia Artificial Integrada - 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\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Tablero de Ajedrez con Inteligencia Artificial Integrada - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Les presentamos nuestro proyecto de ajedrez con inteligencia artificial integrada. En este trabajo, hemos combinado la esencia del ajedrez con las capacidades de la inteligencia artificial todo ello representado mediante una matriz de leds&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2024-05-08T20:53:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-05-08T20:53:54+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/lh7-us.googleusercontent.com\/np5GD5aDA_kQ82x49pd12l23JsvLg25oGjm-v-iodMRWozSvMQsQ4etGjdu-WNH5Xgz54opcMnSd15n6y1fYCO7C1RndsAfROXRJikKBZXI3Xq2dvbMbXCmTwE9uWOwqAY8tew_ndkGTJe_9-XpS1sU\" \/>\n<meta name=\"author\" content=\"dsemo2324g03\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"dsemo2324g03\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 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\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/\"},\"author\":{\"name\":\"dsemo2324g03\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/ade5ae088c1cd1fadc1bc6278929f754\"},\"headline\":\"Tablero de Ajedrez con Inteligencia Artificial Integrada\",\"datePublished\":\"2024-05-08T20:53:52+00:00\",\"dateModified\":\"2024-05-08T20:53:54+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/\"},\"wordCount\":2351,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/lh7-us.googleusercontent.com\\\/np5GD5aDA_kQ82x49pd12l23JsvLg25oGjm-v-iodMRWozSvMQsQ4etGjdu-WNH5Xgz54opcMnSd15n6y1fYCO7C1RndsAfROXRJikKBZXI3Xq2dvbMbXCmTwE9uWOwqAY8tew_ndkGTJe_9-XpS1sU\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/\",\"name\":\"Tablero de Ajedrez con Inteligencia Artificial Integrada - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/lh7-us.googleusercontent.com\\\/np5GD5aDA_kQ82x49pd12l23JsvLg25oGjm-v-iodMRWozSvMQsQ4etGjdu-WNH5Xgz54opcMnSd15n6y1fYCO7C1RndsAfROXRJikKBZXI3Xq2dvbMbXCmTwE9uWOwqAY8tew_ndkGTJe_9-XpS1sU\",\"datePublished\":\"2024-05-08T20:53:52+00:00\",\"dateModified\":\"2024-05-08T20:53:54+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/#primaryimage\",\"url\":\"https:\\\/\\\/lh7-us.googleusercontent.com\\\/np5GD5aDA_kQ82x49pd12l23JsvLg25oGjm-v-iodMRWozSvMQsQ4etGjdu-WNH5Xgz54opcMnSd15n6y1fYCO7C1RndsAfROXRJikKBZXI3Xq2dvbMbXCmTwE9uWOwqAY8tew_ndkGTJe_9-XpS1sU\",\"contentUrl\":\"https:\\\/\\\/lh7-us.googleusercontent.com\\\/np5GD5aDA_kQ82x49pd12l23JsvLg25oGjm-v-iodMRWozSvMQsQ4etGjdu-WNH5Xgz54opcMnSd15n6y1fYCO7C1RndsAfROXRJikKBZXI3Xq2dvbMbXCmTwE9uWOwqAY8tew_ndkGTJe_9-XpS1sU\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Tablero de Ajedrez con Inteligencia Artificial Integrada\"}]},{\"@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\\\/ade5ae088c1cd1fadc1bc6278929f754\",\"name\":\"dsemo2324g03\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c7653dffcb0605463c5e0f66cbea886391ddef24c618a01a68d91350bbbb500?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c7653dffcb0605463c5e0f66cbea886391ddef24c618a01a68d91350bbbb500?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8c7653dffcb0605463c5e0f66cbea886391ddef24c618a01a68d91350bbbb500?s=96&d=mm&r=g\",\"caption\":\"dsemo2324g03\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/dsemo2324g03\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Tablero de Ajedrez con Inteligencia Artificial Integrada - 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\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/","og_locale":"es_ES","og_type":"article","og_title":"Tablero de Ajedrez con Inteligencia Artificial Integrada - Proyectos con Arduino.","og_description":"Les presentamos nuestro proyecto de ajedrez con inteligencia artificial integrada. En este trabajo, hemos combinado la esencia del ajedrez con las capacidades de la inteligencia artificial todo ello representado mediante una matriz de leds&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2024-05-08T20:53:52+00:00","article_modified_time":"2024-05-08T20:53:54+00:00","og_image":[{"url":"https:\/\/lh7-us.googleusercontent.com\/np5GD5aDA_kQ82x49pd12l23JsvLg25oGjm-v-iodMRWozSvMQsQ4etGjdu-WNH5Xgz54opcMnSd15n6y1fYCO7C1RndsAfROXRJikKBZXI3Xq2dvbMbXCmTwE9uWOwqAY8tew_ndkGTJe_9-XpS1sU","type":"","width":"","height":""}],"author":"dsemo2324g03","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"dsemo2324g03","Tiempo de lectura":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/"},"author":{"name":"dsemo2324g03","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/ade5ae088c1cd1fadc1bc6278929f754"},"headline":"Tablero de Ajedrez con Inteligencia Artificial Integrada","datePublished":"2024-05-08T20:53:52+00:00","dateModified":"2024-05-08T20:53:54+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/"},"wordCount":2351,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/#primaryimage"},"thumbnailUrl":"https:\/\/lh7-us.googleusercontent.com\/np5GD5aDA_kQ82x49pd12l23JsvLg25oGjm-v-iodMRWozSvMQsQ4etGjdu-WNH5Xgz54opcMnSd15n6y1fYCO7C1RndsAfROXRJikKBZXI3Xq2dvbMbXCmTwE9uWOwqAY8tew_ndkGTJe_9-XpS1sU","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/","name":"Tablero de Ajedrez con Inteligencia Artificial Integrada - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/#primaryimage"},"thumbnailUrl":"https:\/\/lh7-us.googleusercontent.com\/np5GD5aDA_kQ82x49pd12l23JsvLg25oGjm-v-iodMRWozSvMQsQ4etGjdu-WNH5Xgz54opcMnSd15n6y1fYCO7C1RndsAfROXRJikKBZXI3Xq2dvbMbXCmTwE9uWOwqAY8tew_ndkGTJe_9-XpS1sU","datePublished":"2024-05-08T20:53:52+00:00","dateModified":"2024-05-08T20:53:54+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/#primaryimage","url":"https:\/\/lh7-us.googleusercontent.com\/np5GD5aDA_kQ82x49pd12l23JsvLg25oGjm-v-iodMRWozSvMQsQ4etGjdu-WNH5Xgz54opcMnSd15n6y1fYCO7C1RndsAfROXRJikKBZXI3Xq2dvbMbXCmTwE9uWOwqAY8tew_ndkGTJe_9-XpS1sU","contentUrl":"https:\/\/lh7-us.googleusercontent.com\/np5GD5aDA_kQ82x49pd12l23JsvLg25oGjm-v-iodMRWozSvMQsQ4etGjdu-WNH5Xgz54opcMnSd15n6y1fYCO7C1RndsAfROXRJikKBZXI3Xq2dvbMbXCmTwE9uWOwqAY8tew_ndkGTJe_9-XpS1sU"},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/tablero-de-ajedrez-con-inteligencia-artificial-integrada\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"Tablero de Ajedrez con Inteligencia Artificial Integrada"}]},{"@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\/ade5ae088c1cd1fadc1bc6278929f754","name":"dsemo2324g03","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/8c7653dffcb0605463c5e0f66cbea886391ddef24c618a01a68d91350bbbb500?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8c7653dffcb0605463c5e0f66cbea886391ddef24c618a01a68d91350bbbb500?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8c7653dffcb0605463c5e0f66cbea886391ddef24c618a01a68d91350bbbb500?s=96&d=mm&r=g","caption":"dsemo2324g03"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/dsemo2324g03\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/8846","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\/234"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=8846"}],"version-history":[{"count":1,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/8846\/revisions"}],"predecessor-version":[{"id":8850,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/8846\/revisions\/8850"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=8846"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=8846"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=8846"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}