{"id":9270,"date":"2024-12-19T20:36:58","date_gmt":"2024-12-19T19:36:58","guid":{"rendered":"https:\/\/blogs.etsii.urjc.es\/dseytr\/?p=9270"},"modified":"2024-12-20T18:22:32","modified_gmt":"2024-12-20T17:22:32","slug":"maquina-tragaperras-suertemaster4000","status":"publish","type":"post","link":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/","title":{"rendered":"M\u00e1quina tragaperras &#8211; SUERTEMASTER4000"},"content":{"rendered":"\n<p><strong>Dise\u00f1o de Sistemas Empotrados: Grupo 8<\/strong><\/p>\n\n\n\n<p>M\u00e1quina tragaperras &#8211; SUERTEMASTER4000<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893-1024x576.png\" alt=\"\" class=\"wp-image-9379\" srcset=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893-1024x576.png 1024w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893-300x169.png 300w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893-768x432.png 768w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893-1536x864.png 1536w, https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893.png 1919w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><strong>Hecho por:<\/strong><\/p>\n\n\n\n<p><strong>Eduardo Blasco Almarza, Andr\u00e9s Garc\u00eda Arquero, Ra\u00fal Jim\u00e9nez Exp\u00f3sito<\/strong><\/p>\n\n\n\n<p><strong>\u00cdndice<\/strong><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.8hfc36wfeckz\"><strong>Informaci\u00f3n sobre el proyecto:<\/strong><strong> <\/strong><strong>3<\/strong><\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.oig7uxpk4ndg\"><strong>Planificaci\u00f3n e Implementaci\u00f3n:<\/strong><strong> <\/strong><strong>4<\/strong><\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.3sak31r96l78\">Materiales Usados y Costes: 4<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.pjf4atwvwmb8\">HERRAMIENTAS Y MATERIALES DE MONTAJE 4<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.wg9iymuveog\">Reparto de Tareas: 5<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.yw37hs1es7i2\">Pasos Dados: 6<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.uxrs1icve2cp\">Fase Inicial: 6<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.2ryg7rcbet25\">Fase de Desarrollo: 7<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.cf4rp021cj6j\">Fase de Implementaci\u00f3n y Montaje: 9<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.medrolynq8aq\"><strong>C\u00f3digo<\/strong><strong> <\/strong><strong>16<\/strong><\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.qz09b1ky6pmi\">Codificaci\u00f3n de la m\u00fasica: 16<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.6wdi6a4w3pmw\">Clase Led: 17<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.ttchcunr7u6i\">Control de la pantalla LCD: 17<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.wzz13s4a586a\">C\u00f3digo principal en la placa Arduino Mega 2560: 17<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.kkhgfnsqqrjd\">Comunicaci\u00f3n entre Arduinos: 17<\/a><\/p>\n\n\n\n<p><a href=\"https:\/\/docs.google.com\/document\/d\/1MTcKse07829x3FIREfNWkYhUY3CZ_rRcMHdeonyAsZg\/edit?tab=t.0#heading=h.ig4gbigdh07i\"><strong>Problemas y Soluciones Encontradas<\/strong><strong> <\/strong><strong>18<\/strong><\/a><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>FUNCIONAMIENTO: <\/strong><\/h1>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"478\" style=\"aspect-ratio: 848 \/ 478;\" width=\"848\" controls src=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/Video-de-WhatsApp-2024-12-19-a-las-20.39.57_f97f5c06.mp4\"><\/video><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Informaci\u00f3n sobre el proyecto:<\/strong><\/h1>\n\n\n\n<p><\/p>\n\n\n\n<p>El dispositivo empotrado que se dispuso a crear para esta asignatura se basa en una m\u00e1quina tragaperras funcional y port\u00e1til que, tras conectarse v\u00eda usb a corriente para obtener alimentaci\u00f3n, pudiera recibir si se tira de una palanca mediante un sensor de distancia \u201cecho\u201d que le env\u00eda a uno de los dos arduinos utilizados de forma interconectada que empiece la secuencia de tiro representada en el \u201cliquid crystal display\u201d (que est\u00e1 conectado a un potenci\u00f3metro para ajustarse). Esta secuencia de tiro est\u00e1 programada para permitir con una probabilidad aleatoria del 25% el uso de entre 3 a 5 avances mediante botones que se encuentran en la parte delantera de la m\u00e1quina si el resultado de la tirada no da ning\u00fan premio y que permiten avanzar cada barril de la pantalla. Adem\u00e1s, si se da el caso en el que una tirada resulta en parejas, seg\u00fan una probabilidad se dar\u00e1 la oportunidad de girar otra vez el barril que no es parte de esta pareja.&nbsp;<\/p>\n\n\n\n<p>Si cualquiera de estas tiradas dan lugar a una victoria, se devolver\u00e1 esa informaci\u00f3n mediante el uso de la pantalla donde se ven los barriles y uno de los dos altavoces, que toca diferentes melod\u00edas a lo largo de cada uno de los estados de la m\u00e1quina (en este caso tocando una melod\u00eda de victoria) mientras que el otro \u201cbuzzer\u201d hace ruidos espec\u00edficos cuando los barriles paran de forma simult\u00e1nea a la m\u00fasica.<\/p>\n\n\n\n<p>Por \u00faltimo, el uso de leds de diferentes colores se plante\u00f3 para dar una mejor experiencia mediante el uso de colores llamativos que cambian entre estados de parpadeo, apagarse o encenderse dependiendo del estado del cilindro al que acompa\u00f1an.&nbsp;<\/p>\n\n\n\n<p>Para poder mantener la m\u00e1quina cerrada se a\u00f1adi\u00f3 un cierre mediante candado en el lateral del dispositivo y adem\u00e1s, para poder unir los dos arduinos en un solo usb se utiliz\u00f3 un hub de usb. De esta manera tras la ejecuci\u00f3n de una tirada, ya haya dado lugar a una derrota, al tiro de avances, a poder volver a tirar o a una victoria, se puede volver a tirar a la m\u00e1quina, creando la experiencia que se busca de m\u00e1quina tragaperras.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><\/h1>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Planificaci\u00f3n e Implementaci\u00f3n:<\/strong><\/h1>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Materiales Usados y Costes:<\/strong><\/h2>\n\n\n\n<p><strong>COMPONENTES ELECTR\u00d3NICOS Y DE ARDUINO<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Material<\/strong><\/td><td><strong>Precio<\/strong><\/td><\/tr><tr><td>Cables Extra Macho-Hembra<\/td><td>3\u20ac<\/td><\/tr><tr><td>Kit extra arduino MEGA<\/td><td>0\u20ac<\/td><\/tr><tr><td><strong>Total:<\/strong><\/td><td><strong>3\u20ac<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">HERRAMIENTAS Y MATERIALES DE MONTAJE<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Material<\/strong><\/td><td><strong>Precio<\/strong><\/td><\/tr><tr><td>Alicates<\/td><td>3\u20ac<\/td><\/tr><tr><td>Alambre x1m<\/td><td>1\u20ac<\/td><\/tr><tr><td>Pistola de pegamento y silicona<\/td><td>6\u20ac<\/td><\/tr><tr><td>Tubo de pl\u00e1stico<\/td><td>1\u20ac<\/td><\/tr><tr><td>Caja de cart\u00f3n x2<\/td><td>0\u20ac<\/td><\/tr><tr><td>Elementos decorativos<\/td><td>1.5\u20ac<\/td><\/tr><tr><td>Sierra<\/td><td>2.99\u20ac<\/td><\/tr><tr><td>Cutter<\/td><td>2.99\u20ac<\/td><\/tr><tr><td>Bridas x50<\/td><td>1.20\u20ac<\/td><\/tr><tr><td><strong>Total:<\/strong><\/td><td><strong>19.68\u20ac<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>Total:<\/strong><\/td><td><strong>22.68\u20ac<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Reparto de Tareas:<\/strong><\/h2>\n\n\n\n<p>Debido a la falta de disponibilidad de los miembros del grupo para juntarse e ir desarrollando la pr\u00e1ctica, cada uno ha ido participando en todos los aspectos del dise\u00f1o de la m\u00e1quina tragaperras; aunque para no solapar el trabajo de unos con el de otros se ha concluido en la siguiente divisi\u00f3n:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td rowspan=\"2\"><strong>Eduardo Almarza Blasco<\/strong><\/td><td><strong>Tarea principal: Cableado del sistema<\/strong><\/td><\/tr><tr><td><strong>Tareas secundarias:<\/strong><strong>Montaje de la m\u00e1quina y C\u00f3digo<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td rowspan=\"2\"><strong>Andr\u00e9s Garc\u00eda Arquero<\/strong><\/td><td><strong>Tarea principal: Dise\u00f1o y Montaje del sistema<\/strong><\/td><\/tr><tr><td><strong>Tareas secundarias:<\/strong><strong>Cableado de la m\u00e1quina y C\u00f3digo<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td rowspan=\"2\"><strong>Ra\u00fal Jim\u00e9nez Exp\u00f3sito<\/strong><\/td><td><strong>Tarea principal: C\u00f3digo<\/strong><\/td><\/tr><tr><td><strong>Tareas secundarias:<\/strong><strong>Montaje de la m\u00e1quina<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Pasos Dados:<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Fase Inicial:<\/strong><\/h3>\n\n\n\n<p>En un primer momento, se consider\u00f3 el dise\u00f1o de la m\u00e1quina tragaperras el cual ten\u00eda m\u00e1s funcionalidades que el resultado final; pero tuvieron que ser descartadas debido a la falta de tiempo y a que algunas de ellas pod\u00edan ser emuladas por otros mecanismos.<\/p>\n\n\n\n<p>En el concepto inicial la m\u00e1quina tragaperras contaba con:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><img decoding=\"async\" width=\"19.2px\" height=\"19.2px\" src=\"https:\/\/blogs.etsii.urjc.es\/21496126-0249-4253-b52b-0dc9dc473554\" alt=\"marcada\">Avances si no sale nada y volver a tirar si hay pareja<\/li>\n\n\n\n<li><img decoding=\"async\" width=\"19.2px\" height=\"19.2px\" src=\"https:\/\/blogs.etsii.urjc.es\/a53649c2-4127-4bfe-8fd8-be76d24af9ad\" alt=\"desmarcada\">3 motores para controlar 3 tambores f\u00edsicos de la tragaperras<\/li>\n\n\n\n<li><img decoding=\"async\" width=\"19.2px\" height=\"19.2px\" src=\"https:\/\/blogs.etsii.urjc.es\/589a8e4d-bb7a-417d-af0e-e6d6c7f8622b\" alt=\"marcada\">Palanca para tirar de la tragaperras<\/li>\n\n\n\n<li><img decoding=\"async\" width=\"19.2px\" height=\"19.2px\" src=\"https:\/\/blogs.etsii.urjc.es\/aaa99ffe-2986-4010-918e-1373f0d6225b\" alt=\"marcada\">Leds y Buzzer para dar ambientaci\u00f3n<\/li>\n\n\n\n<li><img decoding=\"async\" width=\"19.2px\" height=\"19.2px\" src=\"https:\/\/blogs.etsii.urjc.es\/b3f569ee-917d-4283-84cc-771f146feb83\" alt=\"desmarcada\">Sistema de monedas y cr\u00e9ditos<\/li>\n\n\n\n<li><img decoding=\"async\" width=\"19.2px\" height=\"19.2px\" src=\"https:\/\/blogs.etsii.urjc.es\/40c41341-03e2-47dc-b9d9-d0773ddbe961\" alt=\"marcada\">Pantalla LCD para mostrar mensajes<\/li>\n<\/ul>\n\n\n\n<p>[Los recuadros con un tick significa qu\u00e9 propiedades se han logrado mantener en el dise\u00f1o final]<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXfhSk-rg9cjZkqK5kzQxqtH9QlXmvC9-KVb_qrDXkiWL8GH3zvDxp7oqI0ee6aW-3IDweM_qNfNZ4kukgwjzNhe_7-3Y8N63oTSOSJRPyvCGXczO2YVgC2Ck0-Of6kx-MFBbtA0Bw?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<p>Adem\u00e1s, para organizar mejor el c\u00f3digo se hizo un esquema con el comportamiento que deb\u00eda tener la m\u00e1quina:<\/p>\n\n\n\n<p>Una vez hecho esto se fueron haciendo pruebas para entender mejor c\u00f3mo controlar e implementar los distintos componentes que se van a utilizar tales como Leds, Buzzers, y Motores:<\/p>\n\n\n\n<p>Para los Leds y Buzzers las pruebas fueron sencillas en las que solo se utiliz\u00f3 una<\/p>\n\n\n\n<p>Arduino y se desarroll\u00f3 un c\u00f3digo muy sencillo para cada uno de ellos; y especialmente, parte del c\u00f3digo realizado para las pruebas de los Buzzer ser\u00eda reutilizado en el c\u00f3digo final debido a su genericidad y facilidad en el momento de tocar melod\u00edas.<\/p>\n\n\n\n<p>La prueba de los motores en cambio fueron algo m\u00e1s complejas tanto su cableado<\/p>\n\n\n\n<p>como la creaci\u00f3n de un c\u00f3digo para controlarlos. Afortunadamente, durante estas pruebas nos dimos cuenta de algunas limitaciones en la funcionalidad de los motores, de forma que finalmente se decidi\u00f3 por no usarlos y usar la mitad inferior de la pantallas LCD 16&#215;2 que dispon\u00edamos para mostrar las figuras de los tambores de la tragaperras en vez de utilizar unas ruedas f\u00edsicas.<\/p>\n\n\n\n<p>Para el sistema de monedas y cr\u00e9ditos se pens\u00f3 en el uso de detectores de<\/p>\n\n\n\n<p>distancia con ultrasonidos o infrarrojos, aunque nunca se lleg\u00f3 a desarrollar del todo ya que requerir\u00eda un desarrollo extenso para una propiedad que se consider\u00f3 como secundaria por lo que se decidi\u00f3 descartarla sumado a la falta de tiempo y material para implementarla.<\/p>\n\n\n\n<p>Entonces con los componentes electr\u00f3nicos para el sistema ya decididos, se comenz\u00f3 a desarrollar el c\u00f3digo inicial de la m\u00e1quina tragaperras.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Fase de Desarrollo:<\/strong><\/h3>\n\n\n\n<p>Durante esta fase, el objetivo fue emular el comportamiento de la m\u00e1quina tragaperras descrito por el diagrama de flujo anterior.<\/p>\n\n\n\n<p>En un comienzo se escribi\u00f3 lo principal en un mismo archivo de c\u00f3digo de Arduino pero sin embargo pronto se llegaron a dos problemas como la falta de pines o la implementaci\u00f3n de cu\u00e1nto tiempo se tocan las notas en un buzzer (problemas que explicaremos c\u00f3mo se abordaron en el apartado \u2018Problemas y Soluciones Encontradas\u2019 con m\u00e1s detalle; lo que llev\u00f3 al uso de una Arduino Mega 2560 junto con otra Arduino UNO de forma que se desarrollar\u00edan dos archivos de c\u00f3digo.<\/p>\n\n\n\n<p>En la Arduino Mega 2560: Se escribi\u00f3 un c\u00f3digo el cu\u00e1l se encargar\u00eda de detectar los inputs que un jugador pueda hacer, la aleatorizaci\u00f3n de los resultados y su comprobaci\u00f3n para cambiar a un estado determinado, hacer algunos sonidos cortos que no afectan demasiado a la duraci\u00f3n de ejecuci\u00f3n de una iteraci\u00f3n del loop, controlar y actualizar el display LCD, y mandar instrucciones a la Arduino UNO<\/p>\n\n\n\n<p>En la Arduino UNO: El c\u00f3digo escrito se encarga de leer y procesar las instrucciones que le manda la Arduino Mega 2560 y gestionar procesos m\u00e1s avanzados de luces Led y la m\u00fasica (esto \u00faltimo introduce delays que eran imposible de utilizar a la vez que se estaban girando los tambores de la tragaperras)<\/p>\n\n\n\n<p>Veremos adem\u00e1s una explicaci\u00f3n m\u00e1s en profundidad del c\u00f3digo final en el apartado \u2018C\u00f3digo\u2019.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXfOYi9Cv1a57SceW164IBQDX6PaeHoLjK4CUydtV3_ebO7vKEHvdRLHGERlP_wTgQjEkY1AjmI8EDXf1B1_diE18HcuMLvdajDW6keIdz2bbNv4Y0Q63XQME-OrXeNZr2xZRC0qSg?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<p>A la vez que se iba desarrollando el c\u00f3digo para ambas Arduinos, se empez\u00f3 con el cableado la m\u00e1quina aunque de momento no se dio importancia al montaje ni al aspecto visual; lo fundamental era comprobar de que el c\u00f3digo funcionaba bien y si las conexiones utilizadas eran las correctas.<\/p>\n\n\n\n<p>Como se puede ver en este prototipo inicial, el sistema parec\u00eda una mara\u00f1a de cables y botones sin sentido alguno a la vez de que su disposici\u00f3n en las protoboards no eran las m\u00e1s \u00f3ptimas en usabilidad ni reducci\u00f3n de espacio utilizado, pero esto nos fue suficiente para ir probando diferentes ideas y encontrar bugs en el c\u00f3digo.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\"><strong>Fase de Implementaci\u00f3n y Montaje:<\/strong><\/h3>\n\n\n\n<p>En este punto, ya solo faltaba ensamblar todas las piezas dentro de una caja para que todo el sistema quedase contenido, manejable y vistoso. Esto supon\u00eda dos grandes retos principales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Recablear todo el sistema, encontrando espacio para cada componente dentro de la caja y haciendo que los leds, botones de avance y LCD no estuviesen en una board.<\/li>\n\n\n\n<li>Sustituir el bot\u00f3n de \u201cjugar\u201d por una palanca en el lateral de la caja, teniendo esta adem\u00e1s que incluir un sistema de retorno autom\u00e1tico para que fuese funcional.<\/li>\n<\/ul>\n\n\n\n<p>Empezamos precisamente por este segundo punto al considerar que tras montar la palanca cierto espacio de la caja se ver\u00eda ocupado y tendr\u00edamos que tenerlo en cuenta a la hora de volver a cablear.<\/p>\n\n\n\n<p>Empezamos por utilizar un resorte bastante grueso para asegurar que la palanca volv\u00eda a su posici\u00f3n original tras accionarla. A continuaci\u00f3n procedimos a colocarle al extremo de la palanca una solapa de cart\u00f3n que, al bajarla, tapaba un sensor de ultrasonidos que accionaba el juego.&nbsp;<\/p>\n\n\n\n<p>El siguiente paso fue tomar nota de c\u00f3mo estaban conectados todos los componentes del prototipo y desmontarlo por completo para volver a montarlo dentro de la caja, ya con las ubicaciones definitivas de cada componente. Es en este punto es donde hubo que comprar cables extra, para poder conectar a una distancia mayor los componentes que hasta ahora iban clavados en la breadboard, como la pantalla LCD, los leds o los botones. Tambi\u00e9n hubo que sustituir los tres leds por nueve, dise\u00f1ando un nuevo cableado que permitiese conectar cada grupo de tres con un solo pin de arduino.<\/p>\n\n\n\n<p>Todos los componentes que antes se divid\u00edan en dos breadboards y una half-breadboard pasaron a estar conectados en solo una breadboard, con una half-breadboard en la parte exterior de la m\u00e1quina donde est\u00e1n los tres botones de avance.<\/p>\n\n\n\n<p>El cableado definitivo de la m\u00e1quina puede verse en este esquema:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXeDyG7dU69jBOZjApvI160ziEyH62eEKSh3rrCZOxkdroAq-MT9YX9U7yJVbJul_RCn6tQ6bz-gHfeib3f5YP3oTNrdr5Z-Ze8jouwHeA5xrDK0LB_FZFAhOP6y-GVmHoVTigWS?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<p>Como se puede ver el sistema est\u00e1 pr\u00e1cticamente en su totalidad construido sobre una breadboard. La mitad superior de esta corresponde a los componentes manejados por arduino MEGA, mientras que la inferior corresponde a los conectados a UNO. Adem\u00e1s de ello hay algunos componentes aislados como la pantalla LCD, el detector de ultrasonido, los leds y el altavoz (representado en el esquema como un buzzer).&nbsp;<\/p>\n\n\n\n<p>Para poder entenderlo mejor, se ir\u00e1n desglosando sus diferentes partes:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Como ya se ha mencionado, la m\u00e1quina utiliza dos arduinos que se comunican entre s\u00ed mediante 4 pines de comunicaci\u00f3n digitales. Estos son 3-4-5-6 de UNO y 24-26-28-30 de MEGA.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXerWzPLESdyS19f3nEW_lDYwF3n--L9PwqbPIF64JBVVJUYETmB5wDqSOpOJ7p6YdL0xf_93_MB4S30QYuZ-w9lpnWREdEbEe6pkexmka-Qkw7wvHG6Rk73KqYv8z2ZYX_2W6d4?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li>La pantalla LCD cuenta con varios puertos de conexi\u00f3n:<\/li>\n<\/ol>\n\n\n\n<p>-Tierra (VGG) y corriente (VCC)<\/p>\n\n\n\n<p>-V0, conectado al pin central de un potenci\u00f3metro, que se usa para regular el voltaje y por tanto el contraste de la pantalla<\/p>\n\n\n\n<p>-RW (read-write), conectado a tierra, pues nunca se lee de la pantalla en nuestro caso<\/p>\n\n\n\n<p>-RS, conectado al pin 52 de MEGA, de donde recibe instrucciones<\/p>\n\n\n\n<p>-E (enable) conectado al pin 51 de MEGA<\/p>\n\n\n\n<p>-D4-D5-D6-D7, conectados a 42,43,44 y 15 de MEGA, para escribir en los registros<\/p>\n\n\n\n<p>-A y K conectadas a tierra y 5V respectivamente, que alimentan el led de la retroiluminaci\u00f3n de la pantalla.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcKUv22qPoE3Xx0cE6lq-v-rPBomivQtrJEKM0dym8DQ03M4mLwQWUrf91sSRWFPSJCAFPETh1x1JrWEkAC0iiYleWi0xHbjpxxnXxFgxU7SR8sCWKfpRwDhUyh0GeDjWQmov457w?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li>Un buzzer, conectado al pin 10 PWM de arduino MEGA y a tierra, pasando por una resistencia de 220 ohmios.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcorN_BlwafzRmTypNlkOmSFJbNOXcSq8RmEB3kw_9T4K26gi6D_HL-8IWww5B0J9NgYUBnF1bPSpXgZh9cWR7t1RsT27cLxGpGuCRb1pSyorWbZuz1Z7zchtc6427gU87vxuFzSw?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li>El&nbsp; sensor de ultrasonido, conectado en TRIGGER al pin 2 PWM de MEGA y en ECHO al pin 3, adem\u00e1s de a 5V y tierra.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXd1qPvDNu233uCDiDkfNAe1Ok_WJFU_G5UjbUv8W3KLN1pWTnVaIvPrGcjjgJVwrs_vef9PuM9JzBkDYsP27C7-5q4H_4AUWwUfBKpiCWLQHVcmLTSrkUwAAAF_-7wDGr-gNpPIhg?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li>Los botones de avances, instalados en su propia half-breadboard externa, conectados a los 5V de la otra breadboard y a tierra. Utilizan los pines digitales 23, 25 y 27 de MEGA respectivamente.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXd_k78AjM-hkGCJPo35VuL_XcjAAAVsuQ3UMkSEONabiyHE6F1oY-dq56j1Vm2h4GoBQeAuBB7XkE_DLjyIOzTO8Ww6GbX4-vMh2AN85ob-d_Ur4pji-3nfZ0mhJwjMfdtcSmBdYA?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<ol start=\"6\" class=\"wp-block-list\">\n<li>Los nueve LED, conectados en grupos de tres. Los tres leds rojos est\u00e1n conectados al pin 8 de UNO, los verdes al 9 y los azules al 10. Adem\u00e1s cada uno tiene su toma de tierra independiente pasando por una resistencia de 100 ohmios.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXd7FROiokpsXDRV1i90XF_4ftZiPI4MnnMiUHuaVTmpYSch5JoNCYjJvFXi-1kzawsCjsTe_qQW-dIzQC8pfo18BeY61hjBXISvhjitZ0LMo3ftOBdIH7C53gBB5eJusYZ4e2DRqA?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<ol start=\"7\" class=\"wp-block-list\">\n<li>El altavoz, conectado de la misma manera que el buzzer, al pin 11 PWM de UNO.<\/li>\n<\/ol>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXebZ5F-qn2e5-wV4c6uDWfEO6aZRvF_I1Wspn881sc8967Rc48_XaXIuBRx3NMm9MWQvvPLjRhGZJvmUmNctWGXo200bAqsEYt4PuO5jmiERnOWx0ntQTFhPD0pcvPjrCnF_CyYZA?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<p>Todos estos componentes se situaron dentro de la caja y se aseguraron con silicona caliente teniendo mucho cuidado para no da\u00f1ar la electr\u00f3nica. Adem\u00e1s se ordenaron los cables usando bridas y se limit\u00f3 su movimiento lo m\u00e1ximo posible con el uso de cinta americana. Los LED se situaron clavados en la parte superior y conectados mediante cables macho-hembra, as\u00ed como el potenci\u00f3metro de la pantalla, que sobresal\u00eda de la parte superior para poder regular el contraste en todo momento. Tambi\u00e9n se hizo un agujero en la parte posterior de la caja donde se hizo un agujero para aumentar la resonancia del altavoz, y se cerr\u00f3 la caja con un candado para asegurarla.<\/p>\n\n\n\n<p>Por \u00faltimo mencionar el uso de un adaptador multipuerto USB para conectar las dos arduino mediante un solo cable que sal\u00eda de la caja. Esto facilitaba el uso de la m\u00e1quina pues bastaba con conectarla a un \u00fanico puerto USB para que funcionase.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>C\u00f3digo<\/strong><\/h1>\n\n\n\n<p>En este apartado se explicar\u00e1 con detalle el funcionamiento del c\u00f3digo escrito tanto para la Arduino Mega 2560 y la Arduino UNO sin detenerse demasiado en la implementaci\u00f3n exacta de alguna de las funciones o los procesos de inicializaci\u00f3n.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Codificaci\u00f3n de la m\u00fasica:<\/strong><\/h2>\n\n\n\n<p>Empezaremos primero con una explicaci\u00f3n de la Codificaci\u00f3n de la m\u00fasica la cu\u00e1l es la misma para ambas Arduinos:<\/p>\n\n\n\n<p>Para poder tocar m\u00fasica o notas musicales en tanto la Arduino Mega 2560 como en Arduino UNO lo primero fue decidir a qu\u00e9 pines van cada uno de los buzzers.<\/p>\n\n\n\n<p>En el caso del Arduino Mega 2560 es el pin 10 y en Arduino UNO es el pin 11. Aqu\u00ed tenemos como se defini\u00f3 la variable pin del buzzer en la placa Arduino UNO:<img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcMD9B223DZI8e2-EpmCwzo1rpEt-VN_SR-6KWi3yNf63cRdP2xSK3bcdb2jT2HV4EJ6001MyL1iHUFsZ37WUFECojMtAKX1t466yRdoRPUGRhPqWYIZTJeT7WE_FH7pDBKkuKt?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"463.99999999999994\" height=\"1153.0785971026185\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcr04OihnJ-3X8QLz-QoRVyohl5XpPIZd2fnx9oA9_DGeEthVynhIWpajnazaoZDwPCQkgm79otBFrPQlGMnef0hHrdryolyJmdowDbwpkn-lIVWOw6e9zGM2XGg7VbOcCjdIvM?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"274.9282296650718\" height=\"681.0182149362478\"><\/p>\n\n\n\n<p>Luego se crearon diferentes variables de tipo int con diferentes valores que representan la frecuencia de diferentes notas musicales.<\/p>\n\n\n\n<p>Para representar el silencio, ya que el buzzer reproduce de forma infinita la \u00faltima nota que se le ha pasado, hemos utilizado una frecuencia muy alta fuera del espectro auditivo humano, en este caso, 20000.<\/p>\n\n\n\n<p>En el c\u00f3digo no se han llegado a utilizar todas las notas introducidas por lo que se puede considerar como un malgasto de memoria pero este conjunto de variables se hizo con la intenci\u00f3n de poder representar diferentes canciones si fuera necesario aunque en este proyecto perfectamente se pueden eliminar las que se consideren innecesarias.<\/p>\n\n\n\n<p>Despu\u00e9s se cre\u00f3 la funci\u00f3n&nbsp; void note(int bz, int freq, float dur)<\/p>\n\n\n\n<p>que sirve para tocar en el buzzer especificado una nota durante un cierto tiempo.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcr04OihnJ-3X8QLz-QoRVyohl5XpPIZd2fnx9oA9_DGeEthVynhIWpajnazaoZDwPCQkgm79otBFrPQlGMnef0hHrdryolyJmdowDbwpkn-lIVWOw6e9zGM2XGg7VbOcCjdIvM?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<p>tone: se encarga de que el buzzer toque la nota especificada.<\/p>\n\n\n\n<p>Se utiliza un&nbsp; delay para mantener al buzzer tocando esa misma nota.<\/p>\n\n\n\n<p>Todas las canciones que se utilizaron en la tragaperras se tratan de funciones que contienen llamadas a esta funci\u00f3n&nbsp; note .&nbsp;<\/p>\n\n\n\n<p>Por ejemplo:<img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcr04OihnJ-3X8QLz-QoRVyohl5XpPIZd2fnx9oA9_DGeEthVynhIWpajnazaoZDwPCQkgm79otBFrPQlGMnef0hHrdryolyJmdowDbwpkn-lIVWOw6e9zGM2XGg7VbOcCjdIvM?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"354.00000000000006\" height=\"865.5686368871416\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Clase Led:<\/strong><\/h2>\n\n\n\n<p>Esta secci\u00f3n del c\u00f3digo se encuentra en el archivo de c\u00f3digo para la Arduino UNO ya que es la encargada de encender, apagar y parpadear las luces Led.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXdWPm_TtbmTcen5vbjV38m1Jhd_7QsatdwyCDftjjsOgMePomrjiZ4qkTIe8ZIK9Cv5IKmPc_BmVWzqCRVbne2mV4q5FJoc4c2Ka2KJ2DIEgh22FMh7octix-ppBTtlrRhd_9Rh?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<p>Para tener un mejor control de lo que puede hacer un led y debido a que se van a tener varios, se decidi\u00f3 emplear en el c\u00f3digo una clase led:<\/p>\n\n\n\n<p>Esta clase cuenta con las variables p\u00fablicas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>pin: El pin asignado al led<\/li>\n\n\n\n<li>state: Determina en qu\u00e9 estado se encuentra en led:\n<ul class=\"wp-block-list\">\n<li>0: Apagado<\/li>\n\n\n\n<li>1: Encendido<\/li>\n\n\n\n<li>2: Parpadeando<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Sus variables privadas son previousMillis e interval de tipo long que se encargan de que el led si se encuentra en el estado de parpadeo lo haga cada 125 milisegundos.<\/p>\n\n\n\n<p>Como m\u00e9todos p\u00fablicos tiene:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>void SetState(int s): Se encarga de cambiar el estado del led<\/li>\n\n\n\n<li>void Update(): En funci\u00f3n del estado del led realiza las operaciones necesarias<\/li>\n<\/ul>\n\n\n\n<p>Y sus m\u00e9todos privados son:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>void SetLight(int voltage): Que escribe en el pin asociado al led el HIGH o LOW<\/li>\n\n\n\n<li>void BlinkLight(): Se encarga de controlar el parpadeo del led. Como peculiaridad, para evitar retrasos del parpadeo junto con la m\u00fasica o el parpadeo de otros leds, se ha empleado el uso de&nbsp; milis() para temporizar los parpadeos evitando el uso de delay .<\/li>\n<\/ul>\n\n\n\n<p>Despu\u00e9s en el c\u00f3digo se crean las siguientes variables de la clase Led:<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXezpPICWtCugekb6j3cbslgHStvhCpGx3RAF2et4o4JRl4LH_uxzeO26cSLPsLCXK0xIxc93sNay60wMZ4-x23DRkckDgy_xVzH2n_IEdAq8aCaEcRD8TYgEMRH2K0d3OPvM6KVkA?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"248\" height=\"67\"><\/p>\n\n\n\n<p>Las variables ledR, ledG y ledB son los pines asociados a los pines los cuales deven ser inicializados como pines de salida en setup .<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXdj-ejWQun63_2ZkNQN1HnJaCZekgOy9B3E2qERWkxC1_6-7o0YsL6xeRfh2ZXdSN_eLBsGgarvDeW0IG2DmBOdja2m5NX8V8k51VcXdDYoWwuh7cZISIyrVHeZvDpqxwkhYiOYTA?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<p>Como \u00faltimo de esta clase, por cada iteraci\u00f3n en&nbsp; loop se tiene que llamar la funci\u00f3n de&nbsp; void Update() de cada variable led.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Control de la pantalla LCD:<\/strong><\/h2>\n\n\n\n<p>Esta secci\u00f3n del c\u00f3digo se encuentra en el c\u00f3digo de la Arduino Mega 2560.<\/p>\n\n\n\n<p>Para la implementaci\u00f3n de la pantalla LCD en el c\u00f3digo fue preciso utilizar la librer\u00eda LiquidCrystal.h que nos facilitaba el control de lo que mostraba la pantalla LCD; y se definieron constantes del tama\u00f1o de nuestra pantalla.<img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXdO9V0ma4l2LvMDISK_przJ2FCSnX79AFZY-gHOKQRJ6tprNBfqpRI5zZjhh8xvw-KwlkXXLFOivxcShGrGbnSXFV-N1a2O8JogW49qjfSVkyDHLBjf6GBqBo1J8Y6MclPmVn4EXA?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"625.5936073059361\" height=\"690.9884898757916\"><\/p>\n\n\n\n<p>Esta librer\u00eda proporcionaba la inicializaci\u00f3n del lcd al que solo hab\u00eda que pasarle los pines que iban a ser utilizados para controlar algunas de sus caracter\u00edsticas como la escritura de caracteres, la posici\u00f3n del cursor para escribir, el desactivar o activar la pantalla, \u2026<img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXdO9V0ma4l2LvMDISK_przJ2FCSnX79AFZY-gHOKQRJ6tprNBfqpRI5zZjhh8xvw-KwlkXXLFOivxcShGrGbnSXFV-N1a2O8JogW49qjfSVkyDHLBjf6GBqBo1J8Y6MclPmVn4EXA?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"583\" height=\"638.8024639086524\"><\/p>\n\n\n\n<p>Luego se definieron 3 funciones globales:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>void PrintTopText(String s): Escribe directamente desde el principio toda la l\u00ednea string que se le pase \u00fanicamente en la parte superior.<img loading=\"lazy\" decoding=\"async\" width=\"277\" height=\"341\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXd3lkrxaHtUhLwASrpYzqlPmxXicM-R5EwgE_z_FQqNuAEEWVoR80G8gnMvf6Z39xewSS_Iorb9qDBeoP66PTqP1dNs24t06exb5TyFwMUuDs3pumHtoEZ4Bc8uDLvpmoN1GCBc?key=mfR_QWHTMaRH8aT9t3daIAMC\"><\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>void ClearTopText(): Borra todos los caracteres de la parte superior empezando desde el primero.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li>void ChangeTopText(String s): Emplea&nbsp; ClearTopText() y PrintTopText(String s) para reemplazar una l\u00ednea de texto de la parte superior por otra.<\/li>\n<\/ul>\n\n\n\n<p>Estas funciones ser\u00e1n siendo llamadas a lo largo de la ejecuci\u00f3n del c\u00f3digo completo de la placa Arduino Mega 2560<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Para la creaci\u00f3n de caracteres customizados se ha empleado la ayuda de la p\u00e1gina externa <a href=\"https:\/\/deepbluembedded.com\/lcd-custom-character-generator\/\">LCD Custom Character Generator &#8211; C Code \/ Arduino \u2013 DeepBlue<\/a><\/h2>\n\n\n\n<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcPU3MOPCh-bJQ1fibrAGyNluSxRCdjShc2wN5tWb_oufhNcDHLusYF5CdsYcnunysS4NEkzwmFmwpRM4j96IMuHoOB5eJdS6HDdyaOs7adpgQmeUR3FjEWApA6in-cF8ZoMoBs1Q?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"411\" height=\"338\"><br>Esta p\u00e1gina nos permit\u00eda dibujar el car\u00e1cter a mostrar y lo traduc\u00eda a un array de enteros de 8 bits.<\/p>\n\n\n\n<p>Entonces obtuvimos las siguientes variables que representan diferentes caracteres:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXdArtxr86Ey9_TN-1kSdzCnlUcUKiXsnozxcFw3zgvl8Ah6hfV8hMxFu2Os0YemEozOIOhL_RaCH7IZfd4l5pVqVAZyJGFWk5yuPihfHdxHe9A5veL4pk_-GN54OHFXUjh6B0lPtQ?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<p>Y estos son inicializados en el setup junto con el tama\u00f1o de la pantalla LCD:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXeqUytaXp1DaY6vMt5a1BVK8y0Hu7CiB7JawdCh2-VqDiAw_Yi5lEjsZn7UvZUE3pzm2uEOaVRCUivu7zEc6HIPoOtKtxHymalGTHHh7u6_R9GnufOJhLQwAUFLF5uMtqf_dxW8Lg?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Comunicaci\u00f3n entre Arduinos:<\/strong><\/h2>\n\n\n\n<p>La comunicaci\u00f3n entre las dos placas Arduino se realiza mediante el paso de instrucciones desde Arduino Mega 2560 a Arduino UNO de 4 bits cada una.<\/p>\n\n\n\n<p>Estos bits son transmitidos desde 4 pines de salida de la Arduino Mega 2560 escribiendo en ellos la instrucci\u00f3n pedida que a su vez se encuentran conectados a 4 pines definidos como entrada en la Arduino UNO mediante cables macho-macho.<\/p>\n\n\n\n<p>En Arduino Mega 2560: En Arduino UNO<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcu99TkKZaZt1uLXnR-xvf9hi4_JwjsPrdm1xZ_CxFjDV_1idNSWMAwN3B2wVOCtQiHmssNN9WTbvdCadDkzYTPKUAlZ6cNRe66jxXB0N1LY0lH-CDnjSQTLSs1IeAmrt95Pvs0HQ?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"154\" height=\"83\"><\/p>\n\n\n\n<p>Inicializaci\u00f3n en &nbsp; void setup():<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXeUlFc2b79UHjjwHlB1M6zG76bnrrkaXrwahjM1TM6cwV7ZIQL9uoIkg1Cem98UKKi1nvFrxVqLupgknraNDVicatKLo1oYhjbs-DhhLCeRdf0PLSgGBj8RjEGZawgIeoii23PnlA?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"162\" height=\"81\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXd8kZy7HzB4O7hD-uy6AYcADYmYOFG1hkmsI7DKZdpOboarze1jd2taXSpCQX3yVzM8UClCAXrK7KwHtTtQFEkCAsbkAb-nVG2Uo7npdFMrO3ftAgWVoi5GuKVCE-mywRMBzpQdzQ?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"172\" height=\"73\"><\/p>\n\n\n\n<p>Para el paso de mensajes, se traduce de decimal a binario o viceversa mediante el uso de las funciones:<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXePDzs6VkVBDRnqYs_ofXzpCiMJebe-KPt2cf5r2jBPN0S8wkO9a9leiBrAR_Dzqqkosq9Y9ZovjSe-pNpe2aOIQzTBYY6jN2H3MW2DXlbirNmdUTyv12FUTHxfl5xPlvdO7vPcAA?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"184\" height=\"70\"><\/p>\n\n\n\n<p>En Arduino Mega 2560: En Arduino UNO<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXc_oQD74V5fAqNFMJbDEthjhuOM5uvr07FFL1z8Pwoml2YIcy-1UiDNYEmOzqgrO_vuTxY1l-r7YPkFC_JNSeyqsqBl3n9ZCFlrWPVbY0CDwsdE0EFmnRuadkgg-AX-0c_N6Vwv1w?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"184\" height=\"233\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXc5qther_aj3jLtUOPO9eTYD6_13M-YHqe5xsVibQLZdB3JSLKGGjNhkeiLfwTIOM7_sGI5ghQb7b1MSCZ-rBiOSR339pYZ1-mZjtS2GEYfHeXTD2Az3HNf0JUCww2Jd24swewePg?key=mfR_QWHTMaRH8aT9t3daIAMC\" width=\"191\" height=\"209\"><\/p>\n\n\n\n<p>void SendCommand(int command): Es llamado en diferentes momentos del c\u00f3digo de la Arduino Mega 2560. Traduce de decimal a binario.<\/p>\n\n\n\n<p>void DecodeCommand(int b3, int b2, int b1, int b0): Es llamado en cada iteraci\u00f3n de&nbsp; loop . Traduce de binario a decimal y decodifica la instrucci\u00f3n.<\/p>\n\n\n\n<p>Debido a que las se\u00f1ales que se escriben en un pin se mantienen, es necesario que la Arduino Mega 2560 env\u00ede al poco tiempo de enviar la instrucci\u00f3n deseada la instrucci\u00f3n No Operation (Instrucci\u00f3n 0).<\/p>\n\n\n\n<p>Tabla de Instrucciones en Decimal:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><tbody><tr><td><strong>0<\/strong><\/td><td>Nada<\/td><\/tr><tr><td><strong>1<\/strong><\/td><td>Apagar todos los leds<\/td><\/tr><tr><td><strong>2<\/strong><\/td><td>Encender todos los leds<\/td><\/tr><tr><td><strong>3<\/strong><\/td><td>Parpadear todos los leds<\/td><\/tr><tr><td><strong>4<\/strong><\/td><td>Led1: EncendidoLed2 y Led3: Parpadeo<\/td><\/tr><tr><td><strong>5<\/strong><\/td><td>Led1 y Led2: EncendidoLed3: Parpadeo<\/td><\/tr><tr><td><strong>6<\/strong><\/td><td>Led1 y Led3: EncendidoLed2: Parpadeo<\/td><\/tr><tr><td><strong>7<\/strong><\/td><td>Led1: ParpadeoLed2 y Led3: Encendido<\/td><\/tr><tr><td><strong>8<\/strong><\/td><td>Tocar M\u00fasica de Inicio<\/td><\/tr><tr><td><strong>9<\/strong><\/td><td>Tocar Pitidos al Girar<\/td><\/tr><tr><td><strong>11<\/strong><\/td><td>Tocar M\u00fasica de Ganar<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>C\u00f3digo principal en la placa Arduino Mega 2560:<\/strong><\/h2>\n\n\n\n<p>Ya hemos visto algunas de las funciones m\u00e1s importantes en el c\u00f3digo de la Arduino Mega 2560 pero a\u00fan nos queda por explicar c\u00f3mo ha sido implementado el funcionamiento de la tragaperras al completo.<\/p>\n\n\n\n<p>Este funcionamiento se ha logrado gracias al uso de inputs como un M\u00f3dulo Echo que detecta si la distancia que hay entre una pieza de la palanca que activa la m\u00e1quina y el propio M\u00f3dulo Echo es menor que 3.05 cm.<\/p>\n\n\n\n<p>Si es as\u00ed y la m\u00e1quina se encuentra en el estado Idle, se dar\u00e1 comienzo con la generaci\u00f3n aleatoria de resultados mediante la llamada a la funci\u00f3n&nbsp; StartSpinning(-1)y, para controlar que el jugador no cometa un error si vuelve&nbsp; a tirar de la palanca se activa un bool a true para evitar que se tire otra vez.<\/p>\n\n\n\n<p>Una vez que se terminen de generar los resultados, se pone a false el bool de control y se pasa a la comprobaci\u00f3n de los resultados con la funci\u00f3n CheckResults(true).<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXcKPrP5_fC_IRP8yagIzsQyBuSPWozEdPkN7ytJBiaZSHw1OZRAjBofhTYTS64cRDjaW1ziVjqr4BSKql5XRXRtsrYcyng_gEOwF7TmyrKGTIpddzWeYOr1QrUdDg7ku_vWkH7Kdw?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>void StartSpinning(int slot): Esta funci\u00f3n recibe un int como par\u00e1metro el cual si es -1 significa que generar\u00e1 resultados para cada uno de los 3 tambores de la m\u00e1quina tragaperras, mientras que si es 1, 2 o 3, tan solo generar\u00e1 un nuevo resultado para el respectivo tambor.<\/li>\n<\/ul>\n\n\n\n<p>Para randomizar un resultado se hace un proceso similar tanto si se van a gritar todos los tambores o solo uno:<\/p>\n\n\n\n<p>Se calcula un n\u00famero de vueltas en total que se van a hacer y se divide entre 3. Tambi\u00e9n se obtienen 2 offsets para darle un poco m\u00e1s de aleatoriedad.<\/p>\n\n\n\n<p>Entonces en un for se itera desde 0 hasta la \u00faltima vuelta y a medida de que se van completando un tercio m\u00e1s un offset se van parando los tambores. Si a\u00fan no se ha alcanzado el respectivo tercio de un tambor, se genera un n\u00famero entre 0 y 7 el cual a su vez corresponde con alguno de los caracteres personalizados.<\/p>\n\n\n\n<p>A lo largo de toda esta funci\u00f3n se ir\u00e1n mandando diversas instrucciones a la Arduino UNO para ir cambiando el estado de las luces o se tocar\u00e1n sonidos cortos en el buzzer asignado a la Arduino Mega 2560.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>void CheckResults(bool allowHelp): Es la funci\u00f3n m\u00e1s importante de toda la m\u00e1quina tragaperras ya que se encarga de estimar el resultado final u otorgar ayuda al jugador en funci\u00f3n de los resultados.<\/li>\n<\/ul>\n\n\n\n<p>Utiliza un argumento de tipo bool para saber si es la primera vez que se llama a la funci\u00f3n CheckResults, en cuyo caso se permiten las ayudas de tirar un tambor otra vez o avances, o si no lo ha sido y por tanto si el jugador no ha conseguido ganar pierde autom\u00e1ticamente.<\/p>\n\n\n\n<p>Para conocer los resultados que ha conseguido el jugador se sigue una l\u00f3gica de bools por pareja de tambores, es decir, se comprueban los pares de los tambores 1 y 2; 1 y 3; y 2 y 3.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXdn4VS0YFiTLFbC_7zBrFpOORp2hc4J-LddTPGdFBp8xWHfaBBrH6kh9YpuXlk-BOSLkHPUZKHXO4s_ZVmxdahsf8KOJ6X5otyUhwXWs7tANGtJxDNLK-x7sqZBXgQw2iBJH_Q_SQ?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<p>A partir de estos pares se consiguen los valores para las variables de control win, onePair y nothing que determinan el resultado del jugador.<\/p>\n\n\n\n<p>Entonces, si win es true se pasa a un estado de victoria, se manda una instrucci\u00f3n a la Arduino UNO para que ponga a parpadear todas las luces y otro despu\u00e9s para que toque la m\u00fasica de victoria.<\/p>\n\n\n\n<p>Sin embargo, si el jugador no ha ganado se pasa a comprobar si tiene una pareja o nada:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><img decoding=\"async\" width=\"22.399999999999995px\" height=\"22.399999999999995px\" src=\"https:\/\/blogs.etsii.urjc.es\/881922eb-278e-47a8-a694-dd2e44957c0e\" alt=\"desmarcada\"><strong>Tiene una pareja:<\/strong> Se genera un n\u00famero aleatorio del 0 al 99. Si es menor o igual que 60 y se permiten ayudas, entonces se obtiene qu\u00e9 tambor no es igual a los otros dos y se entra en un bucle while del que el c\u00f3digo no sale hasta que el jugador tire de la palanca y la m\u00e1quina no haya parado de calcular resultados; y si el n\u00famero resulta ser mayor que 60, se pasa al estado de derrota.<\/li>\n<\/ul>\n\n\n\n<ul class=\"wp-block-list\">\n<li><img decoding=\"async\" width=\"22.399999999999995px\" height=\"22.399999999999995px\" src=\"https:\/\/blogs.etsii.urjc.es\/dcfa29fc-2dd6-4d88-9385-534b023e5cab\" alt=\"desmarcada\"><strong>No tiene nada: <\/strong>Se genera un n\u00famero aleatorio del 0 al 99. Si es menor o igual que 25 y se permiten ayudas entonces se pasa al estado de avances, otorgando al jugador 3 o 4 avances; y hasta que estos avances no los agote el jugador presionando alguno de los 3 botones de abajo (que mueven cada uno la posici\u00f3n de un tambor en 1 asegur\u00e1ndose el c\u00f3digo de volver al valor 0 mediante m\u00f3dulo de 8) no se sale de un bucle while.<br>Entonces, si el jugador consigue ganar usando estos avances se pasa al estado de victoria, pero si no lo consigue o bien el n\u00famero generado es mayor que 25 se pasa al estado de derrota.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>C\u00f3digo principal en la placa Arduino UNO:<\/strong><\/h2>\n\n\n\n<p>De forma similar al apartado anterior, ya se han mencionado algunas de las funciones o, en este caso, clases, que se utilizan en el c\u00f3digo de esta Arduino UNO; siendo estas funciones de apoyo.<\/p>\n\n\n\n<p>No obstante, esta Arduino al ser utilizada como apoyo y para que la Arduino Mega 2560 que es la principal no se quede atrasada por el uso de funciones delays seguidas por la m\u00fasica, su funcionalidad esencial se encuentra en el loop:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh7-rt.googleusercontent.com\/docsz\/AD_4nXf1y4nrQc2AJ5NexOBETooyuqNN67yXM7IGw6zVuE1f-y95CevCf6Kyvm5hqqWiZ3HQ4BZ90bqdaagwRK6_A62YkZPch2jIJfGeZKqdn0m96wNtGwHFeaM1u7Z8_ejjOmk8-Dk8?key=mfR_QWHTMaRH8aT9t3daIAMC\" alt=\"\" \/><\/figure>\n\n\n\n<p>Como se puede ver, al principio de cada iteraci\u00f3n del loop se leen los pines de entrada de las instrucciones para posteriormente codificar de binario a decimal y ejecutar la instrucci\u00f3n indicada.<\/p>\n\n\n\n<p>Y finalmente, se actualiza el estado las luces Led, fundamental si se encuentran parpadeando<\/p>\n\n\n\n<h1 class=\"wp-block-heading\"><strong>Problemas y Soluciones Encontradas<\/strong><\/h1>\n\n\n\n<p>Las primeras complicaciones vinieron con el c\u00f3digo. El software no es extremadamente complejo pero s\u00ed requiri\u00f3 varias librer\u00edas externas y mecanismos con los que no est\u00e1bamos familiarizados. A pesar de ello, conseguimos el funcionamiento de la tragaperras en su forma m\u00e1s b\u00e1sica r\u00e1pidamente.<\/p>\n\n\n\n<p>La complicaci\u00f3n m\u00e1s grande fue en cuanto a a\u00f1adir los leds y buzzers con m\u00fasica y sonido complementarios. Nos dimos cuenta de que esas dos tareas inclu\u00edan delays en el c\u00f3digo que imped\u00edan que funcionase correctamente de manera paralela. Fue aqu\u00ed donde dise\u00f1amos el sistema con dos arduinos, lo que permiti\u00f3 hacer que se pudiese jugar a la tragaperras mientras suena m\u00fasica y parpadean las luces.<\/p>\n\n\n\n<p>Las siguientes complicaciones vinieron con el dise\u00f1o f\u00edsico del proyecto final. Como se hab\u00eda desarrollado todo como prototipo usando breadboards y cables sueltos, no se pens\u00f3 en el c\u00f3mo meterlo en la caja hasta el final. Esto provoc\u00f3 numerosos problemas log\u00edsticos y de cableado que requirieron de mucha precisi\u00f3n y paciencia para resolverse. Adem\u00e1s, nuestra idea principal era hacer que el lado no visible de la palanca (el que est\u00e1 por dentro de la caja) presionase un bot\u00f3n ubicado en la breadboard, comenzando as\u00ed el juego. No tardamos en darnos cuenta de que eso iba a ser imposible porque los botones de arduino, adem\u00e1s de ser peque\u00f1os, necesitan ser presionados con bastante fuerza. Finalmente nos decantamos por colocarle al extremo de la palanca una solapa de cart\u00f3n que, al bajarla, tapaba un sensor de ultrasonidos que accionaba el juego. Esto tambi\u00e9n caus\u00f3 problemas, pues el detector era muy sensible y hubo que reajustar la posici\u00f3n de reposo de la palanca.<\/p>\n\n\n\n<p>Finalmente el \u00faltimo problema encontrado fue el de ubicar la breadboard externa y decorarla para conseguir unos botones est\u00e9ticos pero funcionales y con un buen feedback. Al final se consigui\u00f3, tapando la totalidad de la board con cart\u00f3n y a\u00f1adiendo unos tubos de cart\u00f3n que presionaban el bot\u00f3n desde fuera.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dise\u00f1o de Sistemas Empotrados: Grupo 8 M\u00e1quina tragaperras &#8211; SUERTEMASTER4000 Hecho por: Eduardo Blasco Almarza, Andr\u00e9s Garc\u00eda Arquero, Ra\u00fal Jim\u00e9nez Exp\u00f3sito \u00cdndice Informaci\u00f3n sobre el proyecto: 3 Planificaci\u00f3n e Implementaci\u00f3n: 4 Materiales Usados y&#46;&#46;&#46;<\/p>\n","protected":false},"author":241,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-9270","post","type-post","status-publish","format-standard","hentry","category-proyectos"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>M\u00e1quina tragaperras - SUERTEMASTER4000 - 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\/maquina-tragaperras-suertemaster4000\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"M\u00e1quina tragaperras - SUERTEMASTER4000 - Proyectos con Arduino.\" \/>\n<meta property=\"og:description\" content=\"Dise\u00f1o de Sistemas Empotrados: Grupo 8 M\u00e1quina tragaperras &#8211; SUERTEMASTER4000 Hecho por: Eduardo Blasco Almarza, Andr\u00e9s Garc\u00eda Arquero, Ra\u00fal Jim\u00e9nez Exp\u00f3sito \u00cdndice Informaci\u00f3n sobre el proyecto: 3 Planificaci\u00f3n e Implementaci\u00f3n: 4 Materiales Usados y&#046;&#046;&#046;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/\" \/>\n<meta property=\"og:site_name\" content=\"Proyectos con Arduino.\" \/>\n<meta property=\"article:published_time\" content=\"2024-12-19T19:36:58+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-12-20T17:22:32+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1919\" \/>\n\t<meta property=\"og:image:height\" content=\"1079\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"dse2425g08\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"dse2425g08\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"23 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\\\/maquina-tragaperras-suertemaster4000\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/\"},\"author\":{\"name\":\"dse2425g08\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#\\\/schema\\\/person\\\/1de7aabc864ceee9921593a89f276830\"},\"headline\":\"M\u00e1quina tragaperras &#8211; SUERTEMASTER4000\",\"datePublished\":\"2024-12-19T19:36:58+00:00\",\"dateModified\":\"2024-12-20T17:22:32+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/\"},\"wordCount\":4694,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/12\\\/imagen_2024-12-20_182203893-1024x576.png\",\"articleSection\":[\"Proyectos\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/\",\"name\":\"M\u00e1quina tragaperras - SUERTEMASTER4000 - Proyectos con Arduino.\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/12\\\/imagen_2024-12-20_182203893-1024x576.png\",\"datePublished\":\"2024-12-19T19:36:58+00:00\",\"dateModified\":\"2024-12-20T17:22:32+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/#primaryimage\",\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/12\\\/imagen_2024-12-20_182203893.png\",\"contentUrl\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/wp-content\\\/uploads\\\/sites\\\/8\\\/2024\\\/12\\\/imagen_2024-12-20_182203893.png\",\"width\":1919,\"height\":1079},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/maquina-tragaperras-suertemaster4000\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"M\u00e1quina tragaperras &#8211; SUERTEMASTER4000\"}]},{\"@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\\\/1de7aabc864ceee9921593a89f276830\",\"name\":\"dse2425g08\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3a0305deb606f1042006aead2084f02f44e190515aa3a199e0eaaa491374a1fd?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3a0305deb606f1042006aead2084f02f44e190515aa3a199e0eaaa491374a1fd?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/3a0305deb606f1042006aead2084f02f44e190515aa3a199e0eaaa491374a1fd?s=96&d=mm&r=g\",\"caption\":\"dse2425g08\"},\"url\":\"https:\\\/\\\/blogs.etsii.urjc.es\\\/dseytr\\\/author\\\/dse2425g08\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"M\u00e1quina tragaperras - SUERTEMASTER4000 - 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\/maquina-tragaperras-suertemaster4000\/","og_locale":"es_ES","og_type":"article","og_title":"M\u00e1quina tragaperras - SUERTEMASTER4000 - Proyectos con Arduino.","og_description":"Dise\u00f1o de Sistemas Empotrados: Grupo 8 M\u00e1quina tragaperras &#8211; SUERTEMASTER4000 Hecho por: Eduardo Blasco Almarza, Andr\u00e9s Garc\u00eda Arquero, Ra\u00fal Jim\u00e9nez Exp\u00f3sito \u00cdndice Informaci\u00f3n sobre el proyecto: 3 Planificaci\u00f3n e Implementaci\u00f3n: 4 Materiales Usados y&#46;&#46;&#46;","og_url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/","og_site_name":"Proyectos con Arduino.","article_published_time":"2024-12-19T19:36:58+00:00","article_modified_time":"2024-12-20T17:22:32+00:00","og_image":[{"width":1919,"height":1079,"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893.png","type":"image\/png"}],"author":"dse2425g08","twitter_card":"summary_large_image","twitter_misc":{"Escrito por":"dse2425g08","Tiempo de lectura":"23 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/#article","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/"},"author":{"name":"dse2425g08","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#\/schema\/person\/1de7aabc864ceee9921593a89f276830"},"headline":"M\u00e1quina tragaperras &#8211; SUERTEMASTER4000","datePublished":"2024-12-19T19:36:58+00:00","dateModified":"2024-12-20T17:22:32+00:00","mainEntityOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/"},"wordCount":4694,"commentCount":0,"publisher":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#organization"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893-1024x576.png","articleSection":["Proyectos"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/","name":"M\u00e1quina tragaperras - SUERTEMASTER4000 - Proyectos con Arduino.","isPartOf":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/#primaryimage"},"image":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893-1024x576.png","datePublished":"2024-12-19T19:36:58+00:00","dateModified":"2024-12-20T17:22:32+00:00","breadcrumb":{"@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/#primaryimage","url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893.png","contentUrl":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-content\/uploads\/sites\/8\/2024\/12\/imagen_2024-12-20_182203893.png","width":1919,"height":1079},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.etsii.urjc.es\/dseytr\/maquina-tragaperras-suertemaster4000\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/blogs.etsii.urjc.es\/dseytr\/"},{"@type":"ListItem","position":2,"name":"M\u00e1quina tragaperras &#8211; SUERTEMASTER4000"}]},{"@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\/1de7aabc864ceee9921593a89f276830","name":"dse2425g08","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/secure.gravatar.com\/avatar\/3a0305deb606f1042006aead2084f02f44e190515aa3a199e0eaaa491374a1fd?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/3a0305deb606f1042006aead2084f02f44e190515aa3a199e0eaaa491374a1fd?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3a0305deb606f1042006aead2084f02f44e190515aa3a199e0eaaa491374a1fd?s=96&d=mm&r=g","caption":"dse2425g08"},"url":"https:\/\/blogs.etsii.urjc.es\/dseytr\/author\/dse2425g08\/"}]}},"_links":{"self":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9270","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\/241"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/comments?post=9270"}],"version-history":[{"count":4,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9270\/revisions"}],"predecessor-version":[{"id":9380,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/posts\/9270\/revisions\/9380"}],"wp:attachment":[{"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/media?parent=9270"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/categories?post=9270"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.etsii.urjc.es\/dseytr\/wp-json\/wp\/v2\/tags?post=9270"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}