scieee AI-readable full text Open interactive document viewer

Diseño y fabricación de un controlador de videojuegos con interfaz USB y forma de arma

González González, Óscar

Abstract

Grado en Ingeniería de Tecnologías de Telecomunicación

Full text

Diseño y fabricación de un controlador de videojuegos con interfaz USB y forma de arma Universidad de Valladolid Escuela Técnica Superior de Ingenieros de Telecomunicación Grado en Ingeniería de Tecnologías de Telecomunicación Desarrollado por: Oscar González González Bajo la tutela de: Jesús M. Hernández Mangas 2 de Septiembre de 2021 Universidad de Valladolid 1 RESUMEN. A lo largo de este documento se mostrarán las diferentes fases relativas a la planificación, elaboración y desarrollo de un producto final, específicamente de un controlador diseñado para su utilización en videojuegos. Para ello se tendrán en cuenta diversos factores como objetivos, procesos técnicos de desarrollo a nivel de software y hardware, diseño y costes, tanto a nivel económico como en términos de personal humano. Con la finalidad de dilucidar los pasos llevados a cabo durante el desarrollo del controlador basado en un arma, concretamente una pistola, se expondrán las distintas decisiones tomadas durante su elaboración en base a diferentes criterios, y se especificará la elección de diversos parámetros a nivel técnico. ABSTRACT. Throughout this document the different phases related to the planning, elaboration and development of a final product, specifically a controller designed to be used in video games, will be described. For this purpose, several factors will be taken into account, such as objectives, technical development processes at software and hardware level, design and costs, both in economic terms and in terms of human resources. In order to elucidate the steps carried out during the development of the controller based on a weapon, specifically a pistol, the different decisions taken during its development based on different criteria will be presented, and the choice of various parameters at the technical level will be specified. PALABRAS CLAVE. Producto, microcontrolador, circuito, figura, hoja de datos, sistema, desarrollo. KEY WORDS. Product, microcontroller, circuit, figure, datasheet, system, development. Universidad de Valladolid 2 ÍNDICE 1. INTRODUCCIÓN Y OBJETIVOS ................................................................................................. 5 2. ESTUDIO GENERAL DEL SISTEMA .......................................................................................... 7 2.1 Operating System (OS) ...................................................................................................................... 7 2.2 HID .................................................................................................................................................... 8 2.3 USB ................................................................................................................................................... 8 2.4 Microcontrolador ............................................................................................................................... 9 2.5 Actuadores ......................................................................................................................................... 9 2.6 Alimentación ..................................................................................................................................... 9 2.7 Entrada Usuario ............................................................................................................................... 10 2.8 Sensores ........................................................................................................................................... 10 3. HARDWARE .................................................................................................................................. 12 3.1 Búsqueda de componentes ............................................................................................................... 12 3.1.1 Sensaciones del usuario ........................................................................................................... 12 3.1.1.2 Interruptores de final de carrera: ...................................................................................... 15 Estudio teórico ......................................................................................................................... 15 Implementación práctica ......................................................................................................... 16 3.1.1.3 LED .................................................................................................................................. 17 Estudio teórico ......................................................................................................................... 17 Implementación práctica ......................................................................................................... 18 3.1.1.4 Electroimán ...................................................................................................................... 20 Estudio teórico ......................................................................................................................... 20 Implementación práctica ......................................................................................................... 21 3.1.1.5 Motor descompensado...................................................................................................... 22 Estudio teórico ......................................................................................................................... 22 Implementación práctica ......................................................................................................... 22 3.1.2 Sensores ................................................................................................................................... 24 Estudio teórico ......................................................................................................................... 24 Implementación práctica ......................................................................................................... 26 3.1.3 Microcontrolador ..................................................................................................................... 27 Estudio teórico ......................................................................................................................... 27 Implementación práctica ......................................................................................................... 31 3.2 Desarrollo electrónico esquemático ................................................................................................. 31 3.2.1 Análisis general de alimentación y conexiones ........................................................................ 32 3.2.1.1 Alimentación .................................................................................................................... 32 3.2.1.3 Conexiones ....................................................................................................................... 35 LED ......................................................................................................................................... 36 Interruptores ............................................................................................................................ 36 Universidad de Valladolid 3 Display LED ............................................................................................................................ 36 Botones .................................................................................................................................... 37 Motores ................................................................................................................................... 37 Sensores ................................................................................................................................... 39 3.2.2 Implementación del desarrollo electrónico esquemático ......................................................... 40 3.2.2.1 Configuración de las conexiones principales del microcontrolador ................................. 42 Entradas Digitales.................................................................................................................... 42 Funciones alternativas de los puertos ...................................................................................... 43 Conexiones USB ..................................................................................................................... 44 3.2.2.2 Conexiones con sensores .................................................................................................. 46 3.2.2.3 Conexiones con motores .................................................................................................. 51 Resistencia ............................................................................................................................... 51 Diodo ....................................................................................................................................... 52 Transistor ................................................................................................................................. 54 Regulador de tensión ............................................................................................................... 57 3.2.2.4 Conexión con diodos LED ............................................................................................... 59 3.2.2.5 Conexión con display ....................................................................................................... 60 3.2.2.6 Conexión con interruptores y botones .............................................................................. 61 3.2.2.7 Otras conexiones y conectores ......................................................................................... 61 Bootloader ............................................................................................................................... 61 ISP ........................................................................................................................................... 61 Conectores ............................................................................................................................... 62 3.2.2.8 Implementación final........................................................................................................ 62 3.3 Diseño de la PCB ............................................................................................................................. 64 3.4 Análisis de potencia ......................................................................................................................... 66 3.4.1 Conjunto de sensores MEMS ................................................................................................... 66 3.4.2 Motor vibrador ......................................................................................................................... 67 3.4.2.1 Regulador de tensión ........................................................................................................ 67 3.4.2.2 Transistor 2N7002 ............................................................................................................ 68 3.4.3 Motor solenoide ....................................................................................................................... 69 3.4.2.2 Transistor NDS331N ........................................................................................................ 69 3.4.4 Microcontrolador ..................................................................................................................... 70 3.4.4.1 Salidas de datos ................................................................................................................ 71 3.4.4.2 Entradas de datos de interruptores y botones ................................................................... 71 3.4.4.3 Salidas hacia diodos ......................................................................................................... 71 3.4.4.4 Salidas PWM para los motores ........................................................................................ 72 3.4.4.5 Otras consideraciones ....................................................................................................... 72 3.4.5 Cómputo global y conclusiones ............................................................................................... 72 3.5 Obtención de materiales .................................................................................................................. 74 3.5.1 BOM ........................................................................................................................................ 74 Universidad de Valladolid 4 3.5.2 Adquisición de PCB ................................................................................................................. 77 3.6 Montaje de componentes ................................................................................................................. 79 4. SOFTWARE.................................................................................................................................... 81 4.1 Instalación del gestor de arranque ................................................................................................... 81 4.2 Bibliotecas empleadas .................................................................................................................. 83 4.2.1 AbsMouse.h ............................................................................................................................. 83 4.2.2 Keyboard.h ............................................................................................................................... 86 4.2.3 MPU9250.h .............................................................................................................................. 86 4.2.4 SevenSeg.h ............................................................................................................................... 88 4.2.5 SoftwareReset.h ....................................................................................................................... 89 4.3 Desarrollo teórico del código implementado ................................................................................... 89 4.3.1 Estructura general del código fuente ........................................................................................ 89 4.3.1.1 Setup................................................................................................................................. 90 4.3.1.2 Loop ................................................................................................................................. 90 4.3.2 Desarrollo del algoritmo de posicionamiento .......................................................................... 91 4.3.2.1 Fundamentos matemáticos ............................................................................................... 92 5. DISEÑO DE LA CARCASA .......................................................................................................... 96 5.1 Desarrollo del diseño tridimensional ............................................................................................... 97 5.2 Configuraciones de impresión ....................................................................................................... 104 5.3 Postprocesado ................................................................................................................................ 107 6. COSTES HUMANOS ................................................................................................................... 109 7. IMPLEMENTACIÓN FINAL ..................................................................................................... 112 SIGLAS. .................................................................................................................................................. 114 REFERENCIAS. .................................................................................................................................... 116 ANEXO ................................................................................................................................................... 121 1.Obtención de materiales ................................................................................................................... 121 2. Código implementado ...................................................................................................................... 128 3. Manual de usuario ........................................................................................................................... 141 Universidad de Valladolid 5 1. INTRODUCCIÓN Y OBJETIVOS Este proyecto tiene como fin llevar a cabo el estudio, desarrollo e implementación de un dispositivo apuntador, con el propósito de su empleo en entornos recreativos. Para desempeñar esta labor se tratarán de establecer unos objetivos que servirán como bases del proyecto planteado, además de describir algunas de las nociones generales necesarias para poder realizar los diferentes apartados que conforman el grueso del proyecto. Se citan a continuación los objetivos: • Analizar las distintas fases en la realización de un producto electrónico, así como la forma de ponerlas en práctica. • Adquirir conocimientos en cuanto a procesos de desarrollo electrónico. • Ser capaz de utilizar herramientas Computer Assisted Design (CAD) con el fin de realizar esquemas de circuitos, consiguiendo agilizar el desarrollo del producto. • Exponer con claridad los criterios empleados a la hora de tomar decisiones sobre los elementos que formarán parte del proyecto. • Conocer y mitigar los posibles efectos negativos que puedan surgir durante la realización electrónica, tales como efectos térmicos de los componentes, distribución de los mismos, definición del cableado, coste energético, etc. • Conseguir información acerca de la obtención de un circuito impreso con el fin de obtener su implementación física. • Gestión software del hardware creado desde su detección hasta su programación de más alto nivel. • Alcanzar el propósito final de realización de un producto desde cero, documentando el proceso llevado a cabo y los pasos seguidos durante su desarrollo. Si tratamos de realizar una descripción del proyecto más exhaustiva tendremos que complementar los anteriores objetivos con una definición que goce de un mayor grado de especificidad. En primer lugar, el dispositivo apuntador será concebido como un control externo que permitirá su utilización en modos de juego de primera persona, orientados a disparos o shooters. Para ello el producto tendrá que contar con una serie de elementos que permitan al usuario reconocer que está utilizando algo similar a una herramienta de disparo, en Universidad de Valladolid 6 nuestro caso utilizaremos un concepto básico de partida centrándonos en el desarrollo de un dispositivo que cuente con las características de una pistola. Para conseguir adaptar la implementación del producto a tal fin, el dispositivo contará con diversos elementos que faciliten su reconocimiento, como una cubierta plástica que se asemeje a tal objeto de la vida real. Pero también con otros elementos que puedan llegar a producir unas respuestas sensoriales semejantes. En el caso de este último objetivo, se emplearán útiles electrónicos variados, como actuadores y sensores. A mayores de estos componentes electrónicos, será necesario un microcontrolador que los gestione y realice un control sobre los momentos de activación de estos, además de encargarse de la definición de sus comportamientos ante diversas situaciones. Universidad de Valladolid 7 2. ESTUDIO GENERAL DEL SISTEMA Una vez citados estos objetivos, hemos de centrarnos en cómo será la puesta en marcha del proyecto. Inicialmente tendrá que plantearse de manera esquemática y conceptual cuáles serán los módulos necesarios para alcanzar los objetivos. En la Figura 1 se muestra un esquema representativo sobre los fundamentos de la electrónica y la interfaz de comunicaciones del proyecto. Figura 1. Esquema conceptual del controlador. En cuanto al estudio del sistema, pasaremos a establecer una serie de especificidades sobre los distintos elementos modulares mostrados en el esquema de la Figura 1. Así como explicar el porqué de los distintos módulos empleados y los criterios que nos han llevado a elegirlos. 2.1 Operating System (OS) La finalidad que se persigue con este proyecto es que nuestro dispositivo sea capaz de utilizarse en todo tipo de sistemas operativos o en su defecto en el mayor número posible. Debido a esta premisa, nuestro dispositivo tendrá que ser compatible con Human Interface Devices (HID). Universidad de Valladolid 8 2.2 HID La idea detrás de estas siglas no es más que el hecho de comprender la necesidad de un dispositivo que traduzca la información que los seres humanos aportamos a los ordenadores y otros aparatos electrónicos. El concepto es muy básico, pero tiene como fin una estandarización, mediante la cual diferentes fabricantes de dispositivos puedan compatibilizar sus productos con una amplia gama de sistemas. Cuando nos referimos al concepto de HID, en realidad estamos hablando de la clase Universal Serial Bus (USB) HID y es que la clase USB HID surge con el objetivo de proporcionar a los fabricantes de HID la información necesaria para crear dispositivos compatibles con USB. Además, se fundamenta en las premisas de: ser lo más compacto posible para ahorrar espacio de datos en el dispositivo, permitir que la aplicación de software omita información desconocida, ser extensible y robusto y ser autodescriptivo para permitir aplicaciones de software genéricas [1]. Se puede obtener más información sobre la definición de HID en [2]. Con la certeza de utilización de HID, debido a su uso masivo y a las facilidades que aporta, nos vemos directamente expuestos a USB. 2.3 USB Es un estándar que define las comunicaciones en un Bus de datos, así como los cables empleados, los conectores y los protocolos. Fue creado por un grupo de empresas del sector tecnológico que vieron la necesidad de unificar el proceso de conexión de periféricos [3]. Además, como su propio nombre indica, transmite datos en serie. Actualmente se ha convertido, casi de forma completa, en el estándar de facto en lo referente a las conexiones de periféricos. USB posee un cableado con cuatro pines diferentes, de los cuales dos son de datos y otros dos de alimentación, esto último puede verse reflejado en el diagrama de la Figura 1. Es importante hacer hincapié en sus cuatro cables de conexión, ya que será necesario hacer una toma de decisión en cuanto a la comunicación con USB y determinar si la alimentación del sistema vendrá únicamente proporcionada por el conector USB o si, por el contrario, será necesario dotar al conjunto de una alimentación independiente a mayores. Universidad de Valladolid 15 Cabe destacar que, durante el estudio teórico de cada componente, se ha realizado la búsqueda de elementos que contasen con características tangibles capaces de justificar sus implementaciones a nivel técnico. Como consecuencia, los elementos teóricos elegidos durante la búsqueda de componentes cuentan con hojas de datos o datasheet rigurosos y detallados. Por el contrario, a la hora de intentar acceder a estos elementos específicos en el mercado global, ha sido prácticamente imposible encontrar los modelos concretos. Debido a este motivo, se ha recurrido a componentes similares, que en muchas ocasiones no contaban con información detallada sobre sus características electrónicas, pero que ofrecían facilidad de adquisición y disminuían los costes considerablemente, además de ajustarse a los tiempos fijados durante el desarrollo del producto. A continuación, se aportará una discusión detallada sobre el proceso de selección de los elementos principales del circuito, en relación con el estudio general del sistema. Aquellos componentes que poseen una utilización más generalizada como botones y conmutadores quedarán fuera del siguiente punto, así como otros elementos electrónicos que serán presentados durante las siguientes secciones. En esta discusión se aportarán tanto los argumentos teóricos planteados como la implementación final de los mismos. Esta variación se debe a distintos aspectos, desde motivos económicos o tiempos de envío elevados, hasta cese de fabricación o falta de stock de diversos componentes. Como consecuencia, en algunos de los casos no ha sido posible encontrar hojas técnicas de datos que relaten las características específicas de los elementos implementados y se han elegido en función de las descripciones aportadas por los distintos vendedores que proporcionan los productos. 3.1.1.2 Interruptores de final de carrera: Estudio teórico Los interruptores de final de carrera que utilicemos deberán ser de un tamaño relativamente pequeño, con el fin de no sobredimensionar la carcasa del producto. Para nuestra aplicación se ha determinado que necesitará contar con un cabezal de rodillo en el caso del gatillo, dado que este elemento se accionará un número muy elevado de veces y podría provocar fatiga en el dedo en caso de necesitar ejercer demasiada presión para accionarlo. Por el contrario, la corredera se empleará con menor frecuencia y podrá contar con un interruptor algo más rígido, de esta manera se aportará mayor realismo a la Universidad de Valladolid 16 corredera. Ambos interruptores deberán tener una durabilidad mecánicamente elevada, como consecuencia al reiterado accionamiento de los mismos. Es por esto que se han elegido los interruptores de final de carrera DG13-B1RA[5]. En el caso del gatillo contará con un cabezal auxiliar de rodillo que provocará que sea necesaria menos fuerza para activarlo y de esta manera se obtenga un accionamiento temprano del interruptor. En el caso de la corredera no se incorporará ningún cabezal obligando a moverla de manera completa para accionar el interruptor. Sus dimensiones son pequeñas “Very small size (only 12.8 x 5.8 x 6.5 mm)” [5] y podrán encajar fácilmente en nuestro diseño, además soportan altos valores de tensión y corriente “the breaking capacity ranges from small switching currents and voltages to low-voltage applications up to 3 A 125 V AC”[5] previniéndonos de quemar el interruptor en caso de una mala conexión de diseño. También poseen tres patillas Single Pole Double Throw (SPTD) aunque solo utilicemos dos de ellas, la tercera patilla nos podría servir para implementaciones futuras, mejorando la escalabilidad del producto. Este componente cuenta además con una vida mecánica alta “depending on the model > 1.000.000 actuations”[5]. Implementación práctica A la hora de adquirir este elemento se han encontrado problemas de disponibilidad y se ha obtenido una alternativa viable de cara a su implementación final. El modelo elegido ha sido el modelo T403 de la empresa GTIWUNG. La principal característica en la que dista el nuevo componente del interruptor de carrera anteriormente documentado, es su tamaño, poseyendo unas medidas de 21 x 24.1 x 6.4mm [6] frente a los 12.8 x 5.8 x 6.5mm (sin tener en cuenta patillas ni palancas). En relación con el planteamiento teórico anterior, podemos establecer múltiples similitudes. En este caso, nos encontramos nuevamente frente a un interruptor SPDT [6], el cual cuenta con una mayor tolerancia frente a altos valores de tensión y corriente, siendo estos de 5A y 125V-250V [6]. Respecto a sus dimensiones, podemos observar que estas superan el tamaño del componente estudiado, sin embargo, estos incrementos no serán muy significativos y podrán adaptarse en el desarrollo de la carcasa del producto sin producir graves problemas de diseño. De cara a su durabilidad, no encontramos valores proporcionados en la página del vendedor, aunque en contraposición se aportan algunas características del Universidad de Valladolid 17 componente como protección contra sobrecargas y calentamiento, según se observa en la Figura 2. 3.1.1.3 LED Estudio teórico Para la selección de este componente deberemos tener en cuenta que estamos buscando un diodo emisor de luz que goce de una luminancia elevada, tratando así de imitar de una manera más fidedigna los destellos provocados por la pólvora. A mayores, el color emitido por el LED tendrá que ser similar al de una explosión, por esto se ha elegido un color ámbar. Como consecuencia, tras examinar su hoja de datos [7], se ha determinado que un buen candidato para desempeñar este papel sería el LED “Super Bright Amber Yellow LED RF-WW05C3AYP4-N2”. En la hoja de datos se aprecia que este diodo puede ser un buen candidato, debido a que soporta un máximo de 5V en polarización inversa y una corriente de hasta 100mA a temperatura ambiente. También se muestra cómo los destellos del LED podrán ser de alta frecuencia ya que en [7] se cita “Peak Forward Current ( ≦ 1/10 Duty Cycle, 0.1ms Pulse Wide)” lo que significa que podríamos activar el diodo con un tren de pulsos de una frecuencia de hasta 10000Hz a la corriente máxima si en el ciclo de Figura 2. Características y dimensiones aportadas por el vendedor del componente T403 de la empresa GTIWUNG. [6] Universidad de Valladolid 18 trabajo no supera el 10% del ancho de pulso total, de esta manera no sobrecalentaremos el diodo, en nuestro caso estos son valores que cumplirán con creces nuestras necesidades. En lo referente a la intensidad lumínica, es de 13.8 cd para una fotocorriente de 20mA, un valor algo bajo, sin embargo, se podrá utilizar en combinación con más LED idénticos, aumentando así estos valores. Bien es cierto que estos son los valores típicos y podrían conseguirse magnitudes mayores. Si realizamos los cálculos en lúmenes para hacernos una mejor idea del valor de intensidad luminosa a nivel comercial, observamos que, los lúmenes percibidos por el observador serían: Φv(lm)= Iv(cd)∗ Ω(sr)= 13.8∗( 2π(1 − cos(25º/2)) )=2.055324 lm 1 El hecho de que estos valores no sean altos reside principalmente en su pequeño tamaño, también hay que tener en cuenta que buscamos simular este efecto, pero una intensidad lumínica demasiado elevada provocaría reflejos en la pantalla en la que se utilizase el dispositivo apuntador, empeorando la visión del puntero en esta. En cuanto al color, este se asemeja bastante al de un disparo real, si consultamos las gráficas de la intensidad de emisión relativa en función de la longitud de onda, nos damos cuenta de que emite con un valor más elevado los colores correspondientes con las longitudes de onda entre 520-650nm correspondiendo con un amarillo un poco anaranjado. Finalmente hablaremos de la directividad. Este diodo es bastante directivo “Viewing Angle / Deg 25°” [7], por lo que para crear la sensación de la explosión necesitaremos colocar varios de estos elementos formando un semicírculo con el fin ensanchar el ancho de haz global. Implementación práctica De cara a la obtención del modelo LED expuesto anteriormente, su adquisición no se ha realizado por motivos económicos. Este tipo de elementos electrónicos se corresponde de manera directa con un consumo masivo en el que los compradores no suelen presentar grandes exigencias específicas. A la hora de adquirir este componente se podría haber optado por emplear el componente expuesto durante el desarrollo teórico, sin embargo, el precio provocaría que nuestro producto tuviera un incremento en los costes de 1 Dado que no se cuenta con una distancia fija de referencia respecto al observador, se ha supuesto para este cálculo que el área es igual al radio al cuadrado 𝑎𝑙𝑡𝑢𝑟𝑎 𝑟𝑎𝑑𝑖𝑜 =1 2𝜋𝑃𝑜𝑟 𝑡𝑎𝑛𝑡𝑜 ⇒ Ω=2𝜋(1−𝑐𝑜𝑠𝜃)𝑠𝑟 Universidad de Valladolid 19 producción como consecuencia de forzar unas características no demasiado notables en la experiencia final del usuario. Es por esto que se ha optado por utilizar un LED genérico que poseyera un brillo elevado, en este caso del vendedor KY WIN ROBOT [8]. En la Figura 3 puede observarse un resumen con las principales características aportadas por el vendedor del producto. La utilización de este componente permite ver algunas carencias frente al elemento teórico. La principal carencia será la intensidad luminosa, es decir, la potencia luminosa emitida por el LED en una dirección dada. En este caso, para una corriente de 20mA podremos obtener un máximo de 1800mcd [8], es decir 1.8cd, lo cual disminuye en un orden de magnitud las características del componente estudiado con anterioridad, sin embargo, como el ángulo es superior (el LED posee una directividad menor), el flujo Figura 3. Principales características aportadas por el vendedor del componente 5mm Straw Hat LED.[8] Universidad de Valladolid 20 luminoso será mayor. Suponiendo que el ángulo proporcionado por el vendedor se expresa en grados sexagesimales: Φv(lm)= Iv(cd)∗ Ω(sr)= 1.8∗( 2π(1 − cos(120º/2)) )=5.654866 lm De esta forma estaremos consiguiendo un resultado óptimo para nuestro producto y es que podremos, a costa de sacrificar la intensidad luminosa en un punto específico, abarcar un ángulo de 360 grados en lo relativo a la iluminación. Dicho ángulo simulará el destello producido por la pólvora. Dado que no es muy directivo, bastarán 3 LED con un ancho de haz de 120º para cubrir la totalidad del destello circular. Además, estaremos disminuyendo el consumo, dado que este diodo emisor de luz trabaja a la misma intensidad que el mostrado anteriormente, pero únicamente cuenta con un voltaje de polarización en inversa de 3V[8]. Como argumentos finales a favor, citar que el tamaño de la cúpula del LED en este caso es incluso inferior [8] a la del LED color ámbar seleccionado durante la búsqueda teórica. Además, este nuevo LED puede solicitarse en color naranja[8], aportando mayor realismo al efecto del destello de la explosión. 3.1.1.4 Electroimán Estudio teórico En el caso del motor solenoide, nos centraremos en su durabilidad y en la fuerza que genera, dado que tendrá que ser capaz de mover la corredera. Este motor [9] funciona con un voltaje en continua de 5V soportando hasta 5.5W. En cuanto a su vida útil soporta hasta 300 000 ciclos, con un ciclo de trabajo de 1/4 para ciclos de 4 segundos, lo cual, quizás sea algo ínfimo ya que el producto accionará el motor solenoide cada vez que se active el gatillo y este último se presionará con mucha frecuencia. Además, habrá que tener en cuenta el modo de disparo automático que se quiere implementar, el cual será aún más agresivo. A pesar de esto, puede ser un punto de partida desde el que comenzar a modelar nuestro sistema. En cuanto a la fuerza de atracción nos encontramos que es capaz de mover 80 gramos, valor aceptable ya que la impresión en tres dimensiones de piezas plásticas generalmente no superará esta magnitud, pero todo depende de las dimensiones del producto. Otro punto más negativo es que el recorrido del solenoide es de únicamente 3mm y se haría Universidad de Valladolid 21 insuficiente contar con un retroceso de este valor, sin embargo, sería posible añadir al montaje de la carcasa piezas plásticas mecánicas que solventaran este problema. Finalmente, sus dimensiones son adecuadas para implementarlas en un diseño compacto y funcional. El motor elegido es el ZH0-0420S-05A4.5 de la empresa SHENZHEN ZONHEN ELECTRIC APPLIANCES Co. , Ltd. En el caso de los motores solenoides, dado que se producen en masa y generalmente vienen producidos desde china, es una tarea difícil el encontrar fichas técnicas de especificaciones, por lo que este componente, a pesar de poseer algunas carencias, puede ser un buen punto de partida. Implementación práctica A la hora de realizar la compra del motor solenoide empleado durante la búsqueda teórica no hemos sido capaces de encontrar un modelo que se adecuara a las condiciones requeridas de coste temporal y económico. Es por esto, que se ha seleccionado un nuevo modelo, el cual incorpora algunas características que mejorarán la experiencia de usuario. Se trata del motor solenoide HS-0730B producido por la empresa Heschen [10]. La empresa no aporta ningún documento en el que figuren sus características, sin embargo, arroja luz sobre algunas propiedades del solenoide, estas pueden observarse en la Figura 4. Tal y como se muestra en la anterior figura, el motor solenoide posee unas características similares al utilizado durante la búsqueda de componentes, compartiendo con el solenoide ZHO-0420S-05A4.5 su fuerza y corriente de operación. Figura 4. Características del motor solenoide HS-0730B aportadas por el fabricante.[10] Universidad de Valladolid 22 En cuanto al voltaje, este solenoide trabajará a un voltaje de 6V, aunque podrá ser utilizado a 5V con la misma intensidad. Al no existir una hoja de datos que lo respalde podremos intuir que quizás disminuya la fuerza generada por el motor, pero no de manera significativa (Se ha verificado de manera experimental que el electroimán permite su actuación a un voltaje de 4.5V y 1A). En cuanto a las dimensiones, es cierto que es bastante superior al anterior motor solenoide, sin embargo, podría ajustarse sin problema en el diseño tridimensional. Como ventaja citar que, este nuevo componente posee un desplazamiento de 1mm, lo que provocará un retroceso mayor en la corredera, aportando un realismo superior al producto. 3.1.1.5 Motor descompensado Estudio teórico Para el motor vibrador se ha seleccionado el modelo B1034.FL45-00-015 de la empresa ZHEJIANG YUESUI ELECTRON STOCK CO., LTD. Principalmente ha sido seleccionado por su ínfimo tamaño, y es que únicamente ocupa 1cm, además de esto posee una estructura circular o de moneda que facilitará su integración dentro de la placa. En lo referente a sus características electrónicas funciona entre 2.3-3.6 V de tensión en continua y soporta una corriente máxima de 60mA. Estos valores son bastante pequeños y no repercutirán de manera muy significativa en el consumo. A pesar de esto, este motor consigue alcanzar las 13000rpm. Otra de las características notables de este motor vibrador es que no posee un calentamiento elevado, tal y como se refleja en su hoja de datos [11]. Implementación práctica En el caso de este componente se ha tenido que recurrir a un motor vibrador genérico que se asemejará en dimensiones, aunque modificará su funcionamiento respecto al motor vibrador elegido durante la búsqueda de componentes. En este caso, nos encontramos con un motor sin núcleo, pensado principalmente para productos cómo cepillos de dientes. En la Figura 5 se muestran las dimensiones del motor seleccionado. Universidad de Valladolid 23 Figura 5. Dimensiones del motor vibrador aportadas por el vendedor.[12] Si comparamos las características de este producto con el motor vibrador B1034.FL45- 00-015, podremos apreciar que cuenta con características similares. En primer lugar, aunque el formato de forma “de moneda” o redondo cambia, el tamaño sigue siendo reducido. Tal y como figura en su hoja de datos [11], el motor B1034.FL45- 00-015 cuenta con un tamaño de diámetro de 10mm y un grosor de 3.4mm, tamaño similar el nuevo motor elegido según se puede observar en la Figura 5. Teniendo en cuenta que el rango de voltaje de funcionamiento de B1034.FL45-00-015 abarca un intervalo de 2.3-3.6V en continua, los circuitos diseñados serán equivalentes para este nuevo caso, ya que serán implementados para un voltaje de funcionamiento de 3-3.3V. En cuanto a la corriente necesaria para el funcionamiento del nuevo dispositivo, según indica el vendedor [12], se recomiendan unos valores de voltaje y tensión de 3V y 180mA, mientras que en B1034.FL45-00-015 el valor de corriente de funcionamiento propuesto era de 60mA. A pesar de suponer el doble de intensidad no ocasionará dificultades a la hora de desarrollar el producto, estas cuestiones se discutirán en posteriores apartados de este documento relativos a la alimentación y consumo de potencia. Hemos de añadir que, al tratarse de un motor sin núcleo, obtendremos una respuesta de mayor aceleración en un periodo de tiempo inferior, consiguiendo un arranque y parada más cortos al simular la sensación de inestabilidad tras el disparo. Esto se debe a que los motores sin núcleo poseen una masa menor y según la segunda ley de Newton al disminuir la masa, obtendremos una aceleración mayor. Universidad de Valladolid 24 3.1.2 Sensores Estudio teórico Los sensores serán los que aporten los datos físicos al sistema. Recordemos que necesitamos traducir un movimiento en tres dimensiones a una pantalla de dos dimensiones, esto provocará que desde un inicio descartemos la dimensión de la profundidad. El lugar del puntero en pantalla vendrá definido por una línea recta imaginaria que saldrá del cañón de la pistola hasta su intersección con la pantalla. En caso de salirse de los márgenes, el apuntador se quedará en el borde de estos. Dado que hemos descartado la dimensión de la profundidad, las únicas dos acciones que podremos llevar a cabo con la pistola en el espacio tridimensional serán: - La rotación del apuntador en dos ejes. - El desplazamiento en direcciones coplanarias, tomando como referencia un plano ortogonal al suelo. Tendremos que ser capaces de discriminar y cuantificar esos movimientos, por lo que, para ello, emplearemos un giroscopio y un acelerómetro. En el caso del primer tipo de movimiento se empleará un sensor giróscopo o giroscopio. Este giroscopio nos permitirá conocer la aceleración angular, de forma que podremos calcular el ángulo de giro que se está efectuando. En cuanto al segundo desplazamiento utilizaremos un acelerómetro, este permitirá conocer la aceleración en el espacio tridimensional. Así, al combinar ambos movimientos podremos determinar una dirección. El giróscopo es necesario, ya que mide la velocidad angular en caso de que se gire el arma, pero el acelerómetro también, ya que si no se realiza ningún tipo de giro necesitaremos cuantificar el movimiento coplanar a la pantalla. Con estos dos valores podremos determinar un módulo y una dirección en el espacio, los cuales nos permitirán representar en dos dimensiones la localización del puntero, teóricamente: 𝜔=𝑑𝜃 𝑑𝑡 𝑎=𝑑𝑣 𝑑𝑡 𝑣=∆𝑠 ∆𝑡 Calcularemos el módulo según: 𝑣(𝑡)=∫𝑎(𝑡) 𝑑𝑡 ∆𝑠=∫𝑣(𝑡) 𝑑𝑡 𝑡1 𝑡0 Universidad de Valladolid 31 del gestor de arranque o bootloader y ampliarán el catálogo de bibliotecas software disponibles. Implementación práctica De cara a la incorporación de este microcontrolador en la PCB se recurrirá a su inclusión en crudo, es decir, a pesar de que existen integrados de Arduino desarrollados con este microcontrolador que agilizarían el diseño electrónico, se empleará este componente por separado con el fin de optimizar al máximo la utilización de los pines de este. Además, esto aportará un mayor grado de libertad a la hora de tomar decisiones de diseño electrónico. De esta forma obtendremos un diseño específico ajustado a las necesidades electrónicas del producto, pero podremos aprovechar sus facilidades software a la hora de utilizar sus controladores o drivers, así como la compatibilidad con distintos elementos que aporta su amplia comunidad en lo referente al desarrollo de bibliotecas. En concreto, el modelo de microcontrolador elegido ha sido el ATmega32U4-AUR. En la Figura 7 se muestra una imagen de su anuncio de venta [19], donde puede apreciarse el patillaje del integrado que facilitará la tarea de soldado. Las cuestiones relativas a su elección serán tratadas durante el desarrollo electrónico esquemático. Figura 7. Anuncio de venta ATmega32U4-AUR, vista preliminar.[19] 3.2 Desarrollo electrónico esquemático Tras haber esclarecido los componentes principales que formarán parte del circuito, se pasará a tratar las cuestiones técnicas de forma específica en pos de obtener un diseño Universidad de Valladolid 32 electrónico esquemático. Para ello se discutirá, en términos generales, la configuración de las conexiones, así como la alimentación del circuito. Posteriormente se tratará de realizar un diseño esquemático teniendo en cuenta los parámetros técnicos de cada uno de los componentes del circuito. Seguidamente se comprobará la viabilidad del diseño realizado con un análisis de potencia, para concluir con la realización de un esquema relativo al posicionamiento de componentes en la PCB, siendo este el diseño de la placa de circuito impreso. 3.2.1 Análisis general de alimentación y conexiones Inicialmente se discutirán algunos aspectos generales, referentes al conexionado global del circuito. Para ello se realizará una primera toma de contacto, donde se expondrán de manera esquemática las propuestas iniciales de la creación del conjunto electrónico. 3.2.1.1 Alimentación En lo referente a la alimentación, trataremos de concluir cómo será la configuración empleada con la finalidad de determinar las fuentes de corriente y tensión de nuestra PCB. La propuesta inicial respecto a la alimentación, se basa en la premisa de compatibilidad y sencillez. Expuesta esta idea, se ha tomado la decisión de emplear de forma directa la alimentación de un puerto USB para todo el conjunto electrónico. De esta forma podremos maximizar la compatibilidad, dado que USB se ha convertido en un protocolo de uso masivo, tanto de cara al campo computacional como en otra electrónica de consumo tal que televisiones o transformadores de smartphones. El propósito es utilizar la alimentación del puerto USB 2.0, de modo que se facilitará la compatibilidad con nuevas versiones del protocolo como USB 3.2 e inferiores. Es necesario señalar que en este apartado únicamente se expondrán de forma general los aspectos relacionados con la alimentación, sin embargo, se discutirá en la sección 3.4 de análisis de potencia, las consecuencias de emplear unas u otras versiones del protocolo USB. De esta manera podremos prescindir de muchos otros elementos que aumentarían el coste y la complejidad del sistema. A pesar de esto, nos encontramos en una fase temprana del Universidad de Valladolid 33 desarrollo y podría haber modificaciones futuras que tratasen de mejorar la calidad del producto de cara a nuevas versiones del mismo. Dado que el principal elemento de nuestro diseño electrónico será el microcontrolador, nos centraremos en estudiar la viabilidad de realizar una implementación mediante alimentación a través de un puerto USB en este elemento. En la Figura 8 pueden apreciarse los distintos modos de funcionamiento que se aportan en su hoja de datos [15] dependiendo de la tensión de alimentación aplicada al microcontrolador. Figura 8. Operating Modes versus Frequency and Power-supply. [15] En nuestro caso nos centraremos en el modo de 5V, de manera que el microcontrolador nos permitirá utilizar la máxima frecuencia de trabajo y facilitará la compatibilidad USB. Para ello realizaremos las conexiones típicas que se establecen en su datasheet para una alimentación a través del bus de alimentación de conexiones USB. El esquema de conexiones elegido viene definido en el documento de características del microcontrolador [15] y puede apreciarse en la Figura 9. Universidad de Valladolid 34 Figura 9. Typical Bus Powered Application with 5V I/O. [15] Si observamos la Figura 9 veremos cómo el voltaje de alimentación del conector USB está conectado con: el pad USB que actúa como entrada al regulador de tensión interno USB (UVCC), la tensión de alimentación analógica (AVCC) y el voltaje en corriente continua (VCC). También puede verse cómo los pines XTAL2 y XTAL1 están conectados a un oscilador de cristal con dos condensadores a tierra; “Pins XTAL1 and XTAL2 are input and output, respectively, of an inverting amplifier which can be configured for use as an On-chip Oscillator” [15]. Esto se debe a que es necesario incorporar un oscilador externo, ya que el integrado únicamente contará con un oscilador interno de 8MHz. Como consecuencia, para poder aprovechar la frecuencia de trabajo del modo de 5V será necesario introducir un oscilador de cristal de cuarzo externo o un resonador cerámico. En el caso de introducir un cristal con una frecuencia de trabajo de 16MHz los valores recomendados de los condensadores serán de 22pF para ambos. Finalmente hay que comentar que, será necesario introducir un condensador de 1µF en el pin UCAP para un funcionamiento correcto del regulador de voltaje interno, el cual nos permitirá tener salidas de 3.3V para su empleo en USB. Como aclaración final a la configuración de los pines de salida para el modo de 5V y la alimentación a través del bus de entrada USB se adjunta un diagrama de bloques para esta distribución, el cual puede apreciarse en la Figura 10. Universidad de Valladolid 35 Figura 10. USB controller Block Diagram Overview. [15] 3.2.1.3 Conexiones Tras fijar la alimentación del dispositivo principal, será necesario tomar partida en lo referente a la alimentación de los componentes secundarios, así como sus conexiones para interactuar con el resto del circuito. En principio, los componentes externos vendrán alimentados por los pines de salida del microcontrolador, a excepción de los motores. En este apartado pasarán a describirse los procedimientos empleados para la conexión de los distintos componentes externos que compondrán el conjunto del sistema. En las características de corriente continua o Direct Current (DC) del microcontrolador se especifica que las salidas de alto voltaje podrán contar con un mínimo de 4.2V (para su lectura como valor de tensión en alta) siempre que la tensión de alimentación en continua VCC sea de 5V y la salida en modo de alta intensidad sea de 10mA [15]. Según figura en la hoja de datos del microcontrolador “each I/O port can source more than the test conditions (20mA at VCC = 5V)” [15]. Aunque se especifica que la suma de todas las salidas de alta intensidad (IOH) en ciertos puertos no deberían exceder los 100mA, por lo que si conectamos muchos de estos pines como salida será necesario tener en cuenta que quizás no se alcance el amperaje deseado. Estas cuestiones relacionadas Universidad de Valladolid 36 con la potencia serán tratadas en secciones posteriores de este documento. Dicho esto, pasaremos a estudiar la configuración para los distintos componentes del producto final. LED Para los LED podremos utilizar cualquiera de los pines de salida digitales del microcontrolador con el fin de controlar el LED y a la vez alimentarlo. Recordemos que el voltaje en directa es 𝑉𝐹~1.8𝑉 y que los valores típicos de intensidad luminosa venían dados para fotocorrientes de 20mA, por lo que la salida de los pines digitales será suficiente como para cumplir este objetivo. Aunque se hará necesario incluir resistencias para limitar la corriente salida a un máximo de 20mA. Hay que destacar, que según se expuso en la sección de búsqueda de componentes, se incorporarán tres diodos emisores de luz, con la finalidad de poder abarcar un ancho de haz equivalente a una emisión de luz cuasi isotrópica. Interruptores En el caso de los interruptores de final de carrera no será necesario ningún tipo de alimentación, ya que únicamente funcionarán estableciendo una conexión entre los pines de tierra y los pines de lectura digital del microcontrolador. Para ello se configurarán los pines de lectura del microcontrolador en el modo pull up. De esta forma se podrá detectar cuando han sido pulsado los mismos, dado que si la tensión de entrada en ese pin corresponde con la tensión de referencia de tierra significará que el interruptor ha sido accionado. En el caso contrario el pin tendrá una tensión que vendrá determinada por el voltaje que cae en el modo de configuración pull up (correspondiente con un valor de tensión que se leerá como tensión en alta). Como valor añadido a la búsqueda de componentes, se incorporará un interruptor genérico que permitirá seleccionar el modo de operación, pasando de un modo de disparo básico, al modo de disparo automático. Display LED Como adición al conjunto de elementos expuestos durante la búsqueda de componentes se incorpora un display LED de 2 dígitos que permitirá seleccionar al usuario múltiples configuraciones y parámetros, visualizando los cambios efectuados en dicha pantalla. Para poder llevar a cabo la incorporación del selector de balas de la recámara será Universidad de Valladolid 37 necesario que el usuario reciba una realimentación sobre el estado actual de la capacidad de balas del cargador. Para ello se implementará un display LED de 2 dígitos, que permitirá seleccionar el tamaño del cargador. En nuestro caso, emplearemos un display de ánodo común con el fin de intentar reducir el consumo del dispositivo, permitiéndonos operar con ceros lógicos para su activación o entradas en baja, las cuales necesitarán una menor potencia para desempeñar la misma función. Botones Hasta ahora estos elementos no se habían nombrado en el transcurso del documento, sin embargo, se hace necesario incluirlos en este punto, dado que tratamos de aportar un mayor grado de detalle en la construcción de las conexiones. Durante la búsqueda de opciones de compra de los componentes se originó la idea de poder incluir diversos botones en la construcción del producto. De esta manera sería más fácil adaptar y compatibilizar la integración de la pistola en diversos videojuegos. La necesidad inicial de incorporación de botones ha venido marcada por la incorporación del selector de balas del cargador y por el hecho de que estos productos suelen venderse en lotes que incorporan varios botones a un bajo coste. Con todo esto se ha determinado que sería interesante incorporar botones en el perfil anterior de la carcasa. La incorporación de estos botones no tendría otra función que aportar compatibilidad, de manera que se pudiera jugar con ella en juegos que precisaran otras acciones como saltar o agacharse, sin tener que emplear otro control adicional. En lo referente a sus conexiones se procederá de una manera idéntica a la expuesta para los interruptores de final de carrera. Motores En el caso de la configuración de conexiones de los motores necesitaremos utilizar un pin del microcontrolador que pueda actuar como pin digital y proporcione estos valores de tensión y corriente, pero que además cuente con la posibilidad de generar un tren de pulsos modulado con PWM con el fin de implementar el disparo automático. Según lo especificado en la hoja de datos del microcontrolador no será posible proporcionar la intensidad máxima de salida en los pines digitales o PWM requerida por Universidad de Valladolid 38 los motores, como consecuencia será necesario emplear algún tipo de configuración electrónica a mayores. La utilización de motores a nivel electrónico es similar al empleo de bobinas, dado que ambos elementos se basan en inducción magnética para producir movimientos físicos. Como consecuencia, se hará indispensable la incorporación de circuitos de seguridad que permitan garantizar que no se producen corrientes indeseadas, las cuales podrían dañar otras partes del circuito y que permitan, a su vez, aportar la potencia necesaria para la actuación de estos elementos. Una de las opciones podría ser la representada en la Figura 11. En esta, puede apreciarse que se ha incorporado un diodo entre la tensión de alimentación del solenoide y el resto de componentes. La inclusión del diodo permitiría evitar que la tensión generada por el solenoide cuando este deja de actuarse volviera hacia el interior del microcontrolador. Por otro lado, se ha situado un transistor MOSFET de tipo N, el cual actuará como un interruptor conectando el solenoide con tierra cuando la señal llegue por el pin correspondiente del microcontrolador. Figura 11. Implementación para control de motor De esta forma, cuando la señal proveniente del microcontrolador esté desactivada, el transistor no permitirá el paso de corriente entre drenador y fuente. Por el contrario, cuando la señal del pin del microcontrolador esté activada, el transistor pasará a la zona de saturación y, a efectos prácticos, será como tener activado el motor. Esta podría ser una manera práctica de conectar los motores, ya que podríamos conectar la alimentación de los motores directamente a la fuente de alimentación externa USB. Esta configuración circuital será tratada durante el desarrollo esquemático de forma más exhaustiva. Universidad de Valladolid 39 Cabe destacar que el motor vibrador poseía una tensión de alimentación en continua de 2.3-3.6V. El microcontrolador seleccionado no posee salidas de ese rango de voltaje y solo cuenta con un regulador de tensión interno para las salidas USB, con lo cual será necesario incorporar un regulador de tensión con entrada a 5V y salida a 3.3V. Sensores En cuanto a los sensores nos encontraremos en el mismo caso que en el del motor vibrador. La tensión de alimentación de los sensores integrados será de 2.4-3.6V, sin embargo, el circuito integrado empleado ya incorpora un regulador de tensión y podremos conectarlo directamente a 5V. A mayores, será necesario establecer las conexiones del protocolo SPI utilizado. Tras haber establecido los componentes principales del sistema, se muestra en la Figura 12 un esquema conceptual que engloba el resumen de conexiones discutidas durante este apartado. Figura 12. Esquema conceptual de carácter general con las conexiones del circuito. Universidad de Valladolid 40 Entre estos elementos se obvian algunos de los componentes que conforman la posible implementación final como conectores, osciladores, condensadores y resistencias, que serán analizados en los siguientes apartados del proyecto. 3.2.2 Implementación del desarrollo electrónico esquemático La realización de los esquemáticos se ha llevado a cabo con el programa Proteus [20] en su versión 8.9, que es la que facilita una mejor compatibilidad con las bibliotecas de componentes externas de SamacSys [21]. Permitiendo la inclusión de estos desde la propia interfaz del programa y evitando el empleo de programas externos como puede ser la herramienta escrita en Python, Library Loader [22]. Una vez establecido un primer contacto con el programa Proteus 8.9 y esclarecido el empleo de bibliotecas externas con el fin de llevar a cabo la realización de los esquemáticos del proyecto, pasaremos a ver cómo se han implementado las distintas conexiones del conjunto de elementos electrónicos. A lo largo de esta sección se tratarán las conexiones desde el punto de vista de sus interacciones frente al microcontrolador, dado que será este el encargado de controlar el funcionamiento global del circuito. Así mismo, se aportarán detalles técnicos específicos de cada una de las secciones asociadas con los componentes principales y los elementos electrónicos que los conforman. También se arrojará luz sobre la configuración de las distintas huellas asociadas a los componentes, así como aquellas que se han creado de manera específica en el programa Proteus 8.9. En primer lugar, se tratará de esclarecer el modelo concreto de microcontrolador, una vez definido el componente genérico con anterioridad. Específicamente se llevará a cabo la implementación de su modelo ATmega32U4-AU o ATmega32U4-MU ya que son los que nos permitirán emplear cristales de cuarzo externos en lugar de cavidades resonantes Resistance-Capacitor (RC). Tal y como se define en su hoja de datos, se muestran las variaciones de sus distintos modelos en la Figura 13. Universidad de Valladolid 47 observar una imagen ampliada del conjunto integrado adquirido, en la que se visualizan de manera más detallada los componentes del mismo. Tal y como se muestra en la imagen de la Figura 19, nos encontramos ante una implementación que además de añadir el conjunto de sensores MEMS, aporta un regulador de tensión, condensadores y resistencias. En la figura anterior podemos apreciar a primera vista cómo el regulador de tensión se encuentra conectado directamente con el pin VCC y con la entrada de habilitación del regulador, además en este punto cuenta con un condensador. A la salida del mismo poseemos una de las patillas (bypass) sin conectar. En cuanto a la otra, que es la salida, está conectada en paralelo con dos condensadores, uno mostrado en claro, y otro correspondiente con el condensador nombrado como “106C110N2” que es un condensador electrolítico de tántalo, de ahí su gran tamaño. La utilización de condensadores de este tipo a la salida de los reguladores de tensión no suele ser muy habitual, debido al gran tamaño que ocupan en el circuito, sin embargo, sí que suele ser recomendada por los fabricantes como consecuencia de su baja Equivalent Series Resistance (ESR) que mejorará la respuesta transitoria del circuito, acelerando el Figura 20. Tabla resumen acerca de las funcionalidades de los pines del sensor MPU-9250.[13] Universidad de Valladolid 48 amortiguamiento de la señal. Esta hipótesis podrá comprobarse cuando tratemos de esclarecer la implementación del regulador de tensión del motor vibrador. Dejando atrás la configuración del regulador de tensión, nos centraremos en las conexiones del módulo MPU-9250. En la Figura 20 se resumen las funcionalidades de cada uno de sus pines de salida. Como podemos observar en la figura anterior, los pines NC no estarán conectados al circuito interno que implementa los tres sensores, por esto se dejarán sin conectar. Acto seguido nos centraremos en los pines RESV, los cuales están reservados a funciones específicas. Uno de ellos irá conectado con la toma inicial de alimentación, el segundo pin RESV se dejará con la misma configuración que los pines NC (pin 19) y finalmente el último pin RESV irá conectado a la toma de tierra del circuito (pin 20). En lo referente a la alimentación, se empleará la misma entrada (salida del regulador de voltaje) tanto para la fuente de alimentación digital del conjunto MEMS (VDDIO), como para la general (VDD). Ambos estarán conectados con el pin RESV (pin 1). En lo relativo a las entradas con conexiones a tensiones de alimentación, se indica en la hoja de datos que para un funcionamiento correcto se deberían incluir los condensadores mostrados en la Figura 21. Figura 21. Condensadores propuestos en la hoja de datos del conjunto de sensores MEMS. [13] Siguiendo con las conexiones de los pines del conjunto de sensores, nos centraremos ahora en los pines AUX_DA y AUX_CL. Estas conexiones están orientadas a I2C, por el contrario, nosotros utilizaremos el protocolo SPI debido a sus características full-duplex y a sus altas tasas de transferencia. Es cierto que sería posible implementar conexiones mediante I2C (TWI) ya que, a pesar de que en la hoja de datos del microcontrolador no figure su compatibilidad de forma explícita, el integrado ATmega32u4 posee los pines SDA y SCL que permitirían la compatibilidad de comunicación con los sensores mediante I2C (TWI). Como en nuestro proyecto desconocemos aún la tasa de transferencia necesaria para la comunicación con Universidad de Valladolid 49 el sensor y en vista a desarrollar un producto escalable, nos decantaremos por el empleo del protocolo SPI. El único inconveniente de SPI sería su falta de control de flujo y la necesidad de utilizar cuatro de los pines del microcontrolador en vez de dos, sin embargo, esto no será un problema de cara a la implementación del producto. Dicho esto, los pines AUX_DA y AUX_CL quedarán sin utilizar. El pin FSYNC tampoco se empleará, por lo que quedará también sin conectar. En la hoja de datos no se especifica mucho sobre este pin, sin embargo, parece que podría emplearse para guardar las mediciones de los sensores en registros y esto, en nuestro caso, no será necesario, ya que emplearemos las mediciones de los sensores en tiempo real. Siguiendo con el estudio del patillaje del MPU-9250 nos centraremos en el pin INT. Este pin se podrá utilizar para gestionar interrupciones. Según se muestra en su hoja de datos se podrán gestionar 4 tipos de interrupciones "Items that can trigger an interrupt are (1) Clock generator locked to new reference oscillator (used when switching clock sources); (2) new data is available to be read (from the FIFO and Data registers); (3) accelerometer event interrupts; and (4) the MPU-9250 did not receive an acknowledge from an auxiliary sensor on the secondary I2C bus. The interrupt status can be read from the Interrupt Status register." [13]. Dado que nosotros trabajaremos con un sistema en tiempo real y nuestro producto deberá funcionar de manera instantánea al conectarse, no emplearemos ninguna de las posibles interrupciones que se pueden implementar. Por este motivo el pin INT quedará sin conectar. Finalmente, solo nos quedarán por conectar los 4 pines correspondientes con las conexiones SPI. El pin nCS servirá para seleccionar el chip activo de la conexión SPI, dado que este protocolo permite múltiples conexiones con distintos chips. Según se cita en su hoja de datos "The CS lines of the non-selected slave devices are held high, causing their SDO lines to remain in a high-impedance (high-z) state so that they do not interfere with any active devices." [13], con lo cual, se podrá implementar esta conexión a pesar de contar únicamente con un dispositivo SPI conectado. Esta decisión viene propiciada principalmente con aspectos software, que serán expuestos el en anexo, junto al resto de código del programa. El pin SCL irá conectado a la comunicación serie de la señal de reloj del microcontrolador (SCLK). Y en cuanto a los pines SDI, entrada de datos al sensor y SDO, salida de datos del sensor, se conectarán respectivamente a los pines MOSI y MISO del microcontrolador. Universidad de Valladolid 50 Una vez estudiada la configuración del integrado adquirido, las recomendaciones de conexión del fabricante y las conexiones que se aportarán desde nuestro circuito con este integrado, se aporta en la Figura 22 un diseño esquemático proporcionado por un vendedor que pone a nuestro disposición el mismo producto adquirido. Figura 22. Diseño esquemático aportado por un vendedor independiente sobre la PCB que incorpora el conjunto de sensores MPU-9250. Como podemos observar, no se incorpora el condensador VDDIO recomendado por el fabricante y se añaden algunas resistencias a mayores. Sin embargo, la configuración circuital del conjunto integrado es correcta. De cara a nuestro diseño únicamente se emplearán los pines VCC, GND, SCL, SDA, ADO y NCS de la PCB adquirida. A la hora de incorporar este componente a nuestro diseño esquemático ha sido necesario crear un nuevo diseño desde cero, dado que no se han encontrado bibliotecas que contengan la huella y modelo de este elemento. Es por esto que, se ha creado un elemento definido en el diseño esquemático global como U2 al que se le ha asignado una huella CON10_1x10_HDR_2663. Esta huella se basa principalmente en un conector de 10 pines de un tamaño algo inferior al que posee este integrado, pero que nos facilitará una huella más pequeña y permitirá el desarrollo de una PCB de menor tamaño, con el objetivo de que nuestro producto no posea grandes dimensiones. Universidad de Valladolid 51 3.2.2.3 Conexiones con motores A la hora de realizar las conexiones con los diferentes motores de nuestro circuito será necesario incorporar una circuitería extra que nos permita proteger el conjunto de componentes, así como aportar fiabilidad al sistema global. Por lo que, en los siguientes apartados, se tratará de argumentar la elección de los componentes del circuito de adaptación de los motores, así como las aportaciones al mismo y las mejoras incorporadas. Resistencia En primer lugar, se aportarán algunas de las bases teóricas en relación a la resistencia con la que contará esta etapa circuital. Se empleará una resistencia que actuará con una configuración pull-down. Esto significa que, por defecto, nuestro transistor estará en el estado apagado, y esta resistencia facilitará la labor. Con el fin de comprender mejor el funcionamiento, se muestra en la siguiente figura un ejemplo práctico. Si el interruptor mostrado en la Figura 23 está desactivado, conseguiremos que la corriente de la salida de este, idealmente cero, circule por la resistencia dado que no tiene otro lugar por donde “escapar”. Sin embargo, al activar el interruptor, la corriente fluirá a través del recorrido entre la fuente de alimentación y el pin de entrada, puesto que en el camino hacia la toma de tierra se encontrará una resistencia que se opondrá al paso de corriente. Figura 23. Aclaración visual sobre la utilización de resistencias en configuración pull-down. Universidad de Valladolid 52 Diodo Además de incluir esta resistencia, será necesario incorporar un diodo posicionado electrónicamente en paralelo con el motor a modo de seguridad. Si concebimos de forma electrónicamente pura el motor, veremos que está formado principalmente por un bobinado que será el que produzca una fuerza electromagnética, la cual, interactuando con los imanes situados en el interior de la cavidad del motor permitirá efectuar el giro deseado en este, accionando el motor. Como consecuencia, podemos decir que, a ojos del circuito electrónico, el motor se comportará como una bobina. Las bobinas, debido a sus propiedades, actuarán evitando cambios bruscos de corriente. Si el transistor se apaga rápidamente, cosa que sucederá, dado que accionaremos el motor con un pulso PWM de frecuencia elevada en algunos casos, entonces, la corriente que aún se encontraría circulando a través de la bobina del motor por un tiempo, fluirá a través del diodo y los valores de corriente terminarán disipándose sin derivar hacia otras partes de la circuitería. En el caso en el que decidiésemos no incorporar el diodo, la corriente almacenada en el bobinado no tendría por donde salir, lo que desembocaría en altos valores de tensión en la patilla del drenador que formará parte del circuito de acondicionamiento y como consecuencia, probablemente llegaría a quemar el transistor. En cuanto a la selección del diodo, tendremos que recalcar en un inicio las principales características de este componente. La Figura 24, obtenida de algunas enseñanzas aprendidas durante la carrera [25], trata de mostrar las características teóricas de corriente y voltaje en un diodo, así como sus regiones de funcionamiento. Figura 24. Curva característica I-V de un diodo de Si de pequeña señal a 300ºK. [25] Universidad de Valladolid 53 El diodo actuará permitiendo el paso de la corriente cuando entre sus polos se supere la tensión umbral y oponiéndose al paso de esta, idealmente 0A, cuando se encuentre en la región de polarización inversa. Sin embargo, habrá que tener cuidado de que el voltaje en las bornas del componente no supere la región de ruptura inversa, dado que en esta región de funcionamiento el diodo volverá a permitir el paso de corriente. Deberemos tener en cuenta diversos parámetros a la hora de elegir el componente. Inicialmente, y por las características expuestas en su hoja de datos [26], las cuales se muestran en la Figura 25, se ha seleccionado el diodo 1N914. Figura 25. Principales características del diodo 1N914. [26] Como podemos observar, su tensión de ruptura no será un problema dado que comienza a partir de los 100V y nunca llegaremos a estos valores en nuestra configuración circuital. Además, la corriente en inversa posee unos valores muy bajos que podrán considerarse a efectos prácticos como un diodo ideal. A lo anterior se suma que, su tensión en directa máxima, será de 1V. A partir de estos valores comenzará a permitir el paso de corriente, evitando que la corriente que pueda fluir a través motor, cuando el transistor no esté accionado, consiga disiparse. También debemos de resaltar que el valor de 1V no será suficiente como para quemar el transistor. Finalmente, en lo referente al diodo, nos centraremos en su tiempo de recuperación en inversa. La idea será accionar el motor solenoide con un puso PWM, para el modo automático de disparo, que irá directamente al transistor. Por lo que, los accionamientos se producirán mediante cambios bruscos. Si nos fijamos en la hoja de datos del Universidad de Valladolid 54 microcontrolador empleado, se especifican las frecuencias de los pulsos PWM generados, estos pueden apreciarse en la siguiente figura. Teniendo en cuenta que la frecuencia de la señal de reloj será de 16MHz, la frecuencia máxima configurable para un pulso PWM será: 𝑓𝑂𝐶𝑛𝑥𝑃𝑊𝑀=𝑓𝑐𝑙𝑘_𝐼/𝑂 𝑁∗256=16𝑀𝐻𝑧 256 =62.5𝐾𝐻𝑧 Por lo que a esta frecuencia necesitaríamos un tiempo de recuperación de: 𝑇𝑅𝑅=1 𝑓𝑂𝐶𝑛𝑥𝑃𝑊𝑀=1 62.5𝐾𝐻𝑧=16𝜇𝑠 Esto sucedería si la señal proviniese directamente del pin PWM asociado y teniendo en cuenta que utilizásemos la frecuencia máxima, cosa que no sucederá. Sin embargo, vemos que el tiempo de recuperación del diodo, tal y como se muestra en la Figura 26, es inferior al tiempo de recuperación requerido en el peor de los casos, siendo este de 4ns. Transistor Será necesario incorporar un transistor, ya que, esto nos permitirá controlar el motor con el tren de pulsos PWM de una manera eficaz, además, de esta forma podremos incorporar, si fuese necesario en nuevas versiones del producto, fuentes de alimentación externa de altos valores de voltaje. De este modo, la electrónica incorporada nos permitiría accionar los motores con pequeños valores de tensión provenientes de los pines del microcontrolador, pero empleando fuentes de alimentación de valores elevados para los mismos. A la hora de emplear el transistor debemos recordar algunas de sus características generales con el fin de realizar su implementación como “interruptor”. La Figura 27, proveniente de [27], retrata alguna de las propiedades teóricas básicas de un transistor de efecto de campo. Figura 26. Frecuencia de oscilación de los pulsos PWM generados en el microcontrolador. [15] Universidad de Valladolid 55 Para conseguir que el transistor actúe como un interruptor tendremos que realizar la configuración electrónica de nuestro circuito de forma que esta permita al transistor actuar en las regiones de corte y saturación. Para situar el transistor en la región de saturación, será necesario que el voltaje drenador fuente sea mayor que el voltaje puerta fuente menos el voltaje umbral en un transistor de canal N. Mientras que para situarnos en la región de corte será necesario que el voltaje entre drenador y fuente sea mayor que el voltaje umbral. Teniendo en cuenta las ecuaciones, deberá cumplirse 𝑉𝐺𝑆≥𝑉𝑇𝐻 ,𝑉𝐷𝑆≥𝑉𝐺𝑆−𝑉𝑇𝐻 para la región de saturación y 𝑉𝐷𝑆≥𝑉𝑇𝐻 para la de corte. Con el fin de verificar el funcionamiento del circuito se ha diseñado un pequeño modelo esquemático que ayuda a aclarar la idea, permitiendo ejecutar una simulación. Para este esquemático se ha empleado el transistor lógico de canal N 2N7002 [28]. Dado que algunos de los componentes empleados en los esquemáticos del programa Proteus no poseen sus propios modelos, se emplearán para este pequeño ejemplo, modelos genéricos que permitan ejecutar la simulación del circuito. Continuando con el desarrollo y argumentación del circuito teórico-práctico, se muestra en la Figura 28 una captura de la simulación del esquemático implementado mediante el programa Proteus. Figura 27. Curva característica de un transistor MOSFET de canal N. [27] Universidad de Valladolid 56 Destacar que, se ha empleado un transistor MOSFET de acumulación de canal N. Se ha tomado esta decisión dado que los MOSFET de acumulación tienen una línea discontinua que conecta fuente y drenador, que indica que el canal no existe para polarización de puerta nula, y por lo tanto será necesario polarizar la puerta para que el canal se forme y permita el paso de los electrones. En este caso emplearemos un MOSFET conocido como “lógico”, este nombre viene dado debido a que puede activarse la circulación de electrones entre drenador y fuente con un voltaje inferior a 5 voltios, o en otras palabras que 5𝑉≥𝑉𝑇𝐻 . Contando con que la salida del pin PWM de nuestro controlador será de 5V, oscilando entre 0 y 5V (Unipolar), se ha incorporado una fuente de alimentación de 5V, que aportará energía al circuito, y al regulador de voltaje de 3.3V de salida. También se ha incorporado una resistencia de pull-down de 10KOhm que ayudará a mantener la salida del pin PWM del microcontrolador a cero voltios cuando se desactive el MOSFET. En el caso de no incluirse, habría una tensión puerta fuente que podría activar el transistor según se muestra en la Figura 29. No será necesario incluir ningún diodo Zener a mayores con el fin de mejorar la respuesta frecuencial del transistor, dado que este en su propia construcción ya incluye uno entre drenador y fuente. Figura 28. Simulación del circuito de adaptación para conexión con motor realizada con Proteus 8.9 Universidad de Valladolid 63 Universidad de Valladolid 64 3.3 Diseño de la PCB Una vez definido el diseño esquemático, con las respectivas huellas de los distintos componentes, se ha procedido a realizar el diseño de la PCB. Para ello se ha continuado utilizando el programa Proteus 8.9. Con el objetivo de reducir al máximo la superficie de la PCB se ha elaborado el rutado de conexiones en un marco de trabajo de 5 x 5cm. Inicialmente se ha dado pie al establecimiento de los criterios de diseño, con el fin de evitar posibles desajustes en las medidas, para ello se han establecido las reglas de diseño mostradas en la Figura 36. Tras esto, se ha procedido a incorporar los agujeros de la placa, los cuales servirán para ajustar parte de la PCB en la carcasa plástica. Se han definido de un tamaño de 3mm de diámetro con la finalidad de poder pasar a través de los mismos tornillería de tipo M3. Posteriormente se han generado planos de tierra en la capa inferior mediante la herramienta power plane generator con el objetivo de mitigar las ElectroMagnetic Interference (EMI) y evitar bucles de puesta a tierra que provoquen que las “descargas” a tierra no se realicen de manera uniforme. Tras haber definido los márgenes e incorporado los componentes en función del espacio disponible (después de una primera iteración con el diseño de la carcasa que se expondrá en la sección 5), se ha procedido a emplear la herramienta auto-router del programa. Una vez realizada la iteración con esta herramienta, debido a las pequeñas dimensiones requeridas para la PCB no se han podido establecer todas las conexiones y algunas de ellas han tenido que implementarse de forma manual. Después de haber incorporado todas el rutado de los path, se ha procedido a engrosar aquellas pistas que fueran a ser cursadas por altos valores de intensidad, a modo de seguridad. Para ello, se han engrosado estas pistas a un valor de T20 y se ha aumentado Figura 36. Reglas de diseño fijadas durante la elaboración del diseño de la PCB Universidad de Valladolid 65 el tamaño de las vías a un valor V40. Las rutas en las que se han implementado estas modificaciones han sido las pistas VUSB y GND que se dirigían hacia los motores, dado que serán estos los elementos que mayor potencia consuman en todo el circuito. Llevadas a la práctica estas modificaciones, se ha procedido a corregir los errores de diseño relativos al incumplimiento de distancias entre elementos como consecuencia del engrosamiento de las pistas y vías. Finalmente se han incorporado una serigrafía personalizada en la cara superior y se han ajustado las serigrafías de los distintos componentes con la finalidad de que fueran visibles, evitando así huecos de vías, orificios de la PCB y otros elementos. El resultado final tras el diseño de la PCB puede visualizarse en la Figura 37. Figura 37. Implementación final del diseño de la PCB Universidad de Valladolid 66 3.4 Análisis de potencia Con el fin de tratar de establecer una fuente de alimentación que satisfaga todas nuestras necesidades, así como comprender si la composición de nuestro circuito es viable desde el punto de vista del consumo de potencia. Se realizará un análisis de potencia sobre los elementos activos del circuito. Nuestro producto ha sido concebido para ser alimentado a través de un conector mini USB, con lo cual, el conjunto de nuestro circuito vendrá alimentado a través de conectores USB en principio procedentes de un equipo que generalmente será un ordenador. A lo largo de este documento y según lo expuesto en [16] y [33], trataremos de determinar cuál será una alimentación suficiente para el conjunto de componentes de nuestro integrado. 3.4.1 Conjunto de sensores MEMS En la PCB integrada que incorpora el sensor MPU-9250 se encuentra un regulador de tensión incorporado que nos permitirá conectar directamente nuestra fuente de alimentación USB a la PCB del MPU-9250, a pesar de que su voltaje de funcionamiento deberá encontrarse entre 2.4-3.6V según se refleja en su hoja de datos. Consultando las características eléctricas del mismo, encontramos la siguiente tabla mostrada en la Figura 38, en la que se visualizan los valores requeridos por los sensores MEMS en condiciones de una alimentación a 2.5V y una temperatura de 25ºC. Figura 38. Características eléctricas del conjunto de sensores MEMS MPU-9250.[13] Universidad de Valladolid 67 Dado que el vendedor del conjunto integrado no incorpora características de consumo de potencia sobre el regulador de voltaje incorporado, únicamente tendremos en cuenta el consumo de potencia del integrado MPU-9250. Como podemos observar, en el modo de funcionamiento con los tres sensores, sin emplear el Digital Motion Processor (DMP) es de 3.7mA. En el caso de no emplear el magnetómetro y continuar sin utilizar el DPM el consumo será de 3.4mA. En la práctica, suponiendo que el conversor de voltaje incorporado aporta una salida de 2.5V al integrado MPU-9250, determinaremos que el consumo de potencia de este elemento será de 5V*3.7mA=18,5mW. Aunque la utilización del magnetómetro aún no ha sido fijada, nos trataremos de situar en las condiciones más extremas. En principio no emplearemos el DMP dado que nuestro microcontrolador debería de ser capaz de gestionar la información sin mayores problemas. 3.4.2 Motor vibrador En las especificaciones aportadas por el vendedor del motor, se nos muestra como los valores recomendados de funcionamiento son de 3V – 180mA (540mW). Dado que la alimentación del circuito estará fijada a 5V será necesario comprobar si el regulador de tensión es capaz de aportarnos esos valores. 3.4.2.1 Regulador de tensión En la hoja de datos de nuestro regulador de tensión se indican cómo, para conseguir obtener una corriente de 500mA de salida, será necesaria una caída de voltaje mínima (𝑉𝐼𝑁−𝑉𝑂𝑈𝑇) de 350mV. Nosotros cumpliremos de sobra esos requisitos, ya que la caída de tensión entre la entrada y la salida del regulador será de 5𝑉−3.3𝑉=1.7𝑉 superando así los límites fijados y permitiéndonos alcanzar los 180mA demandados por el motor vibrador. La potencia recomendada por el vendedor del motor vibrador será de 3V∗180mA= 𝟓𝟒𝟎𝐦𝐖. Sin embargo, tendremos que tener en cuenta las consideraciones térmicas a la hora de llevar a la práctica estos valores. Según se nos indica en la hoja de datos del regulador MIC5219-3.3BM5 perteneciente a la serie de productos MIC5219 del fabricante, será necesario contar con las consideraciones térmicas del componente. En su Universidad de Valladolid 68 hoja de datos se muestra la expresión matemática que nos permitirá calcular la potencia disipada en el regulador de tensión. 𝑃𝐷=(𝑉𝐼𝑁−𝑉𝑂𝑈𝑇)𝐼𝑂𝑈𝑇+𝑉𝐼𝑁𝐼𝐺𝑁𝐷=(5𝑉−3.3𝑉)180𝑚𝐴+5𝑉3𝑚𝐴=321𝑚𝑊 Se ha tomado como valor de 𝐼𝐺𝑁𝐷 3mA debido a que para una tensión de habilitación del regulador superior a 3V (la nuestra será de 5V) y una corriente de salida de 150mA los valores máximos de 𝐼𝐺𝑁𝐷 serán de 3mA, con lo cual podremos tantear que para 180mA de corriente de salida se aproximará al valor máximo experimentado para 150mA. En el peor de los casos, tomando una corriente de salida de 500mA el valor de 𝑃𝐷=366𝑚𝑊. En la hoja de datos de este componente también se refleja cómo realizar el cálculo para la disipación de potencia máxima del elemento. 𝑃𝐷(𝑚𝑎𝑥)=(𝑇𝐽(𝑚𝑎𝑥)−𝑇𝐴) 𝜃𝐽𝐴 =(125º𝐶−25º𝐶) 220º𝐶/𝑊 ≈455𝑚𝑊 Donde 𝑇𝐽(𝑚𝑎𝑥) es la temperatura máxima de la unión antes de que el componente se queme, 𝑇𝐴 es la temperatura ambiente establecida en 25ºC y 𝜃𝐽𝐴 es la disipación recomendada en función de la huella del componente, para nuestro ejemplo, al poseer una huella SOT-23-5 será de 220ºC/W. Por lo tanto, no superaremos la potencia máxima disipable y podremos emplear el componente con seguridad. Hemos de indicar que, a pesar de que en las características eléctricas del dispositivo se especifica que los valores numéricos están diseñados para un 𝑉𝐼𝑁=𝑉𝑂𝑈𝑇+1𝑉 nosotros tenemos una 𝑉𝐼𝑁=𝑉𝑂𝑈𝑇+1.7𝑉, sin embargo, situándonos en las peores condiciones, donde 𝐼𝑂𝑈𝑇=500𝑚𝐴 superaríamos la potencia máxima, pero este efecto no será notable, dado que el motor vibrador no se activará todo el rato. Finalmente hay que aclarar que, a pesar de que el motor debería trabajar a 3V y estamos empleando un regulador de tensión con un voltaje de salida de 3.3V la implementación circuital del transistor acabará originando que sobre el motor haya una caída de ≈3𝑉 según se mostró en la simulación del circuito de acondicionamiento del motor. 3.4.2.2 Transistor 2N7002 Tras haber comprobado el regulador de tensión, será necesario verificar si el transistor será capaz de disipar la potencia entregada al motor, para ello se volverán a realizar los cálculos anteriores modificando los valores. En la hoja de datos del transistor 2N7002 se Universidad de Valladolid 69 muestra que la resistencia térmica es de 625ºK/W=625-273.15=351.85ºC/W y su temperatura máxima de disipación es de 150ºC, con lo cual obtenemos: 𝑃𝐷(𝑚𝑎𝑥)=(𝑇𝐽(𝑚𝑎𝑥)−𝑇𝐴) 𝜃𝐽𝐴 =(150º𝐶−25º𝐶) 351.85º𝐶/𝑊 ≈355𝑚𝑊 En principio podríamos pensar que se supera la potencia máxima de disipación, sin embargo, durante la simulación mostrada en la Figura 23 veíamos cómo únicamente caían 0.19V en el transistor, con lo cual, suponiendo que a través de este elemento circulan los 180mA del motor vibrador únicamente recaerá sobre este una potencia de 0.19V*180mA=34.2mW, a pesar de esto, la corriente máxima de drenador según su hoja de datos será de 115mA. 3.4.3 Motor solenoide En la información proporcionada por el vendedor del componente se especifica que sus características I-V deberán ser de 6V-1A. Nos encontramos ante valores elevados para este componente, a pesar de que nuestro circuito trabajará a 5V no ha sido posible encontrar ninguna variante a 5V que posea un recorrido de 1cm, por lo que trataremos de emplear este componente, aunque no sea el más adecuado para la situación. La carencia de ese voltaje originará posiblemente una pérdida de fuerza en el movimiento del solenoide, sin embargo, esto no será un problema dado que la pieza plástica de la corredera tendrá un peso ínfimo. El consumo de potencia de este componente se verá reflejado en la práctica según 5𝑉∗ 1𝐴=𝟓𝑾, será pues, el componente que tenga un mayor consumo eléctrico en nuestra configuración electrónica, aunque será necesario realizar pruebas físicas para determinar cómo varía el componente al establecer los valores recomendados en otros inferiores. Tendremos que verificar si el transistor empleado en el circuito de adaptación es capaz de disipar toda la potencia entregada. 3.4.2.2 Transistor NDS331N En su hoja de datos se muestra cómo su resistencia térmica a temperatura ambiente es de 250ºC/W y su valor máximo de temperatura es de 150ºC con lo cual obtenemos: Universidad de Valladolid 70 𝑃𝐷(𝑚𝑎𝑥)=(𝑇𝐽(𝑚𝑎𝑥)−𝑇𝐴) 𝜃𝐽𝐴 =(150º𝐶−25º𝐶) 250º𝐶/𝑊 =500𝑚𝑊 Este valor supera los 5W, sin embargo, al igual que en el caso del transistor del motor solenoide, sobre este elemento únicamente caerá una pequeña parte de los 5V provenientes de la alimentación USB, esto, sumado a que el motor solenoide no será actuado todo el rato será suficiente como para disipar la potencia que caiga sobre este elemento. En el caso del modo de funcionamiento automático la potencia media será incluso menor, dado que el solenoide se actuará con un tren de pulsos. 3.4.4 Microcontrolador Nuestro microcontrolador será el encargado de distribuir la potencia por el resto del circuito, a diversos componentes, es por esto que será necesario comprender cuánta potencia podrá aportar a los distintos elementos del circuito. A la hora de cuantificar el consumo del microcontrolador nos centraremos inicialmente en el consumo de procesamiento de este. En su hoja de datos se muestra la gráfica aportada en la Figura 39 en la que se observa la relación entre el consumo de potencia y la frecuencia en condiciones de temperatura ambiente. Tal y como podemos observar, para una frecuencia de 16Mhz trabajando a 5V tendremos un consumo de corriente de 13mA aproximadamente, con lo que su potencia máxima, sin contar los periféricos será de 5V*13mA=65mW. Figura 38. Relación entre consumo de potencia y frecuencia de trabajo ATmega32u4. [15] Universidad de Valladolid 71 En cuanto a los periféricos trataremos de analizar los distintos elementos que emplearán las salidas del microcontrolador. 3.4.4.1 Salidas de datos Tal y cómo se refleja en su hoja de datos, se ha mostrado con anterioridad, en la Figura 33 de la sección 3.2.2.4 cuáles serán los valores de las salidas de datos del microcontrolador. Como podemos observar, las salidas de datos configuradas en alta tendrán un valor máximo de 4.2V y 10mA, mientras que las salidas configuradas en baja tendrán un valor de 0.7V y 10mA. Es difícil cuantificar cual será el consumo de los pines de datos, dado que no estarán enviando información todo el tiempo, además de enviar datos en alta y baja. Con lo cual supondremos para el análisis de potencia que poseen una impedancia de salida ≈ 0 y una impedancia de entrada ≈ ∞, es por esto que su consumo no será tenido en cuenta, dado que únicamente consumirán potencia durante las transiciones. 3.4.4.2 Entradas de datos de interruptores y botones En lo referente a las entradas de datos provenientes de los interruptores y botones, no generarán consumo de potencia significativo, dado que están conectadas a la toma de tierra y serán configuradas en el estado pull-up. 3.4.4.3 Salidas hacia diodos En cuanto a las salidas de datos destinadas a diodos, estos serán configurados como activos en alta en el caso de los diodos de la corredera y activos en baja para el display de dos dígitos de ánodo común. En lo referente al display LED no podremos realizar cálculos de potencia, dado que el vendedor da un rango de tensión de alimentación entre 5V y 24V sin especificar la corriente necesaria. En cuanto a los LED incorporados en la corredera el vendedor detalla como para una máxima luminosidad deberemos emplear un voltaje de trabajo entre los 3.2 y los 3.4 Universidad de Valladolid 72 voltios. Si tenemos en cuenta que la corriente máxima aportada por los pines es de 10mA, obtendremos una potencia de 33mW por cada LED, siendo en total 99mW. 3.4.4.4 Salidas PWM para los motores En cuanto a los pulsos PWM que permitirán habilitar los transistores MOSFET tipo N activando así los motores, emplearemos una métrica similar a los pines de salidas de datos realizando la media entre el voltaje en alta y en baja. Si suponemos que empleamos un ciclo de trabajo del 50% tendremos que la media del voltaje empleado será de (4.2+0.7)/2=2.45V suponiendo que la salida de corriente continúe siendo de 10mA tendremos un consumo de 2.45V*10mA*2pines=49mW. Al ser inferior a la salida de los pines en alta para activación de los motores de forma continua, se despreciará esta potencia en el cómputo total. 3.4.4.5 Otras consideraciones Es cierto que en nuestro estudio de potencia no se están incluyendo de forma íntegra todos los consumos, sin embargo, se obviarán el resto de elementos no citados durante este análisis, dado que se han realizado los cálculos máximos en situaciones de estrés y frente a estos valores podrían despreciarse otras consideraciones menores. 3.4.5 Cómputo global y conclusiones Con el fin de realizar un estudio aproximado del consumo total se aportará en la siguiente tabla un resumen sobre el consumo de los componentes. Sensores 9.25mW Motor vibrador 540mW Motor solenoide 5W Microcontrolador 65mW Periféricos microcontrolador 99mW (LED) Potencia total necesaria 5.71W Amperaje total necesario 5.71W/5V=1.142A Según se cita en [33] “The VBUS Current Handling Capability field (B6…5) Shall indicate whether the cable is capable of carrying default current (500mA USB2, 900mA USB3.2 x1, 1.5A USB3.2 x2)”, por tanto, como conclusiones a los resultados obtenidos Universidad de Valladolid 79 Una vez generados los ficheros gerber y agrupados en un archivo comprimido en formato “.ZIP”, se ha realizado la solicitud de fabricación en PCBWay. Tras la verificación de los ficheros por parte de la empresa, se ha dado el visto bueno a la información aportada y el pedido se ha aceptado para su fabricación. En la sección 1 del anexo que incorpora este documento se incluirán algunos detalles sobre las características de la PCB seleccionadas en PCBWay, con el fin de no sobrecargar la parte principal del documento. 3.6 Montaje de componentes Tras haber recibido todos los elementos físicos que formarán parte del circuito, así como las PCB, se ha procedido a la implementación física del hardware. A la hora de abarcar esta tarea se ha recurrido principalmente a la utilización de un estañador funcionando a 400ºC. Además, se ha tratado de llevar a cabo una construcción lo más precisa posible empleando para ello un microscopio. Con el objetivo de facilitar la tarea, también se ha hecho uso de flux, permitiendo así evitar la oxidación del estaño en contacto con el aire y mejorando la calidad de las soldaduras. Inicialmente ha sido necesario realizar la fragmentación de la PCB recibida mediante una cizalla, obteniendo así dos partes diferenciadas que permitirán redistribuir de forma sencilla el circuito desarrollado en el interior de la carcasa plástica. En la Figura 43 se muestra una imagen comparativa entre el estado inicial y final de las PCB tras la incorporación de sus distintos elementos. Figura 43. Comparativa tras realización del montaje de componentes en la PCB. Universidad de Valladolid 80 Finalmente, puede observarse una fotografía a tamaño completo de todos los componentes del circuito tras el montaje en la siguiente figura. Figura 44. Circuito electrónico completo tras el montaje de sus componentes. Universidad de Valladolid 81 4. SOFTWARE A lo largo de esta sección se tratarán los temas relacionados con la implementación del código fuente en el microcontrolador utilizado, así como los fundamentos matemáticos teóricos en los que se basa el código. Además, se explicarán los pasos llevados a cabo a la hora de preparar el entorno de trabajo. 4.1 Instalación del gestor de arranque Una vez realizada la implementación circuital completa, será necesario dotar a nuestro conjunto electrónico de un gestor de arranque que permita su iteración a través del puerto mini USB incorporado. El gestor de arranque, o bootloader, permitirá que el microcontrolador de nuestro circuito sea reconocible durante su puesta en marcha. Para aclarar la necesidad de la instalación de un gestor de arranque deberemos esclarecer las partes de código que incorpora nuestro microcontrolador. El microcontrolador Atmega32u4 adquirido, cuenta con un firmware de fábrica, el cual se encarga de las tareas básicas de funcionamiento del mismo, tales como comprobación del reloj, gestión básica del consumo eléctrico, etc [15]. Este firmware es además modificable. En cuanto al bootloader por defecto, proveniente del microcontrolador adquirido, nos encontramos con que tras haber realizado el montaje y conectar mediante USB nuestra placa, no era detectada, lo que nos da a entender que el bootloader preinstalado no cuenta con las funcionalidades USB. Por el contrario, según se cita en su hoja de datos “The Onchip ISP Flash allows the program memory to be reprogrammed in-system through an SPI serial interface, by a conventional nonvolatile memory programmer, or by an Onchip Boot program running on the AVR core.”[15]. Esto nos permitirá modificar el bootloader existente mediante la conexión SPI. A la hora de realizar la instalación de un nuevo bootloader se ha procedido a emplear el conector ICSP que se adelantaba en el apartado de ISP correspondiente con la sección 3.2.2.7 de este documento. Dado que nuestro circuito no era reconocible mediante USB, se ha recurrido a emplear un programador USBasp. El programador USBasp consiste en un circuito integrado que cuenta con un microcontrolador Atmel AVR (perteneciente a la misma familia de microcontroladores que el empleado en nuestro circuito), así como un conector ISP y Universidad de Valladolid 82 otros elementos pasivos necesarios como condensadores y resistencias. Su principal característica es que contiene un firmware preinstalado de fábrica compatible con los drivers USB, por lo que será reconocido por nuestro ordenador. En la Figura 45 se muestra una imagen del programador USBasp adquirido para la instalación del bootloader. Tras haber conectado el programador USBasp, se han realizado las conexiones ICSP entre el programador y nuestro circuito, siguiendo el esquema de conexiones expuesto en la Figura 35 perteneciente a la sección 3.2.2.7 de este documento. Finalmente, siguiendo la guía proporcionada por Arduino para la instalación del bootloader [32], se ha seleccionado “USBasp” como programador y se ha procedido a “quemar” el bootloader correspondiente con el circuito integrado Arduino Micro, el cual incorpora el mismo microcontrolador empleado en nuestro circuito. Tras haber realizado la instalación del bootloader, nuestro circuito ha sido reconocido por el equipo informático como un Arduino Micro, mediante el conector USB, lo cual nos permite emplear las bibliotecas disponibles para Arduino, así como su IDE. La utilización del bootloader Arduino facilitará el desarrollo del software permitiendo emplear distintas bibliotecas aportadas por la comunidad, que de otra manera, sería necesario desarrollar desde cero. Figura 45. Programador USBasp empleado en la instalación del bootloader Universidad de Valladolid 83 4.2 Bibliotecas empleadas A lo largo de este apartado pasarán a describirse las bibliotecas empleadas provenientes del conjunto de bibliotecas compatibles con Arduino. Para ello, se expondrá la argumentación relativa a la decisión de incorporar algunas de ellas, además de esclarecer de forma básica el funcionamiento de las mismas. 4.2.1 AbsMouse.h Inicialmente nos centraremos en la implementación del movimiento del ratón. Durante el estudio general del sistema de este documento se discutió la necesidad de implementar un microcontrolador que fuera compatible con USB HID, en este punto podrá dilucidarse la validez de la conclusión anteriormente aportada. En un momento inicial se recurrió a la biblioteca nativa “Mouse.h” que Arduino presenta en su propia documentación [35]. Sin embargo, esta decisión quedo descartada tras comprobar que el posicionamiento relativo del cursor aportado por esta biblioteca no era viable. Tal y cómo se cita en la descripción de su funcionamiento “When updating the cursor position, it is always relative to the cursor’s previous location.”[35]. La utilización de un posicionamiento relativo del cursor aportaba una amplia compatibilidad, por el contrario, presentaba grandes retos debido a los desajustes subyacentes en la configuración del mouse de cara a distintos sistemas operativos. A la hora de descartar la biblioteca nativa proporcionada por Arduino se han tenido en cuenta los siguientes inconvenientes: • La mayoría de sistemas operativos presentan una aceleración en el cursor que se encarga de determinar la posición, esta aceleración suele estar preconfigurada por defecto. El problema en su implementación, reside en que la distancia recorrida por el puntero depende de la velocidad a la que se realice el movimiento e.g. si se realiza un movimiento horizontal de 1cm en un ratón convencional, el cursor se moverá distancias diferentes dependiendo de la velocidad a la que se recorra ese centímetro. Universidad de Valladolid 84 Esta característica producía que los movimientos en pantalla no fueran precisos de cara a nuestro dispositivo apuntador, con lo cual recaería en tarea del usuario deshabilitar esta opción en el O.S. y la forma de proceder en cada sistema varía de forma amplia. En la Figura 46 se muestra cómo la opción de aceleración (denominada en Windows 10 como “Mejora la precisión del puntero”) viene marcada por defecto. A la hora de realizar la implementación con la biblioteca “Mouse.h” las funciones aportadas para el movimiento, en este caso “Mouse.move()” producían que a mayor desplazamiento en pantalla se recorriera una mayor distancia, es decir, la suma de varios desplazamientos en pantalla no era equivalente a un desplazamiento de igual magnitud. • El segundo inconveniente de utilizar posicionamiento relativo reside en determinar el centro de la pantalla. A la hora de realizar la calibración de nuestro producto será necesario partir desde algún punto, típicamente el centro de la pantalla, sin embargo, es complejo determinar el centro de una pantalla rectangular mediante posicionamiento relativo, dado que no conocemos la posición desde la que se parte. Durante la implementación del algoritmo de posicionamiento se consiguió de forma exitosa colocar el cursor en el centro de la pantalla, a pesar de esto, la idea quedó descartada, debido a que si quisiéramos implementar este proceso en una pantalla con una resolución distinta el algoritmo no sería válido. • Como argumento final, citar que, la biblioteca “Mouse.h” en sus funciones destinadas al movimiento, únicamente incorpora 8 bit en sus parámetros, permitiendo movimientos máximos de entre -127 y 127. Este rango es insuficiente a la hora de realizar cambios bruscos en pantallas donde la resolución sea superior a 255x255 píxeles. Figura 46. Aceleración del mouse latente en el O.S. Windows 10. Universidad de Valladolid 85 Como consecuencia de estos inconvenientes, se ha recurrido a un posicionamiento absoluto que, a pesar de poseer un desarrollo de programación con mayor complejidad y gozar de una menor compatibilidad con aplicaciones y dispositivos, presentaba una mayor precisión en el movimiento. Además de necesitar un posicionamiento relativo en el dispositivo señalador, se hacía necesaria la utilización de más bit en los parámetros destinados a determinar el valor del movimiento. Para poder modificar estos valores sería necesario modificar el descriptor USB, más concretamente, modificar el fichero de código “Mouse.cpp” en el que se definen las características de funcionamiento para así poder incorporar un posicionamiento absoluto y más bit en los parámetros de las funciones encargadas del movimiento. Por suerte, debido a la amplia comunidad con la que cuenta Arduino ha sido posible encontrar una biblioteca que incorporaba las modificaciones buscadas, esta biblioteca se denomina “AbsMouse.h” y es una aportación independiente de uno de los usuarios de Arduino. Su implementación puede consultarse en el repositorio de código GitHub [36]. Consultando el código fuente del descriptor USB HID para el mouse, nos encontramos con que se incorporan 16 bit para el posicionamiento del cursor en pantalla en los ejes x e y tal y cómo se muestra en la Figura 47, quedando reservados 15 de ellos para el desplazamiento (valores de 0 a 32767). En esta figura puede apreciarse cómo se incorpora a mayores un posicionamiento absoluto. Otras características de interés que incorpora esta biblioteca, se observan en la Figura 48, donde se muestran los métodos “init” y “move”, los cuales permiten inicializar la biblioteca estableciendo la resolución de la pantalla y se calculan de forma automática los valores máximos del movimiento en función de la resolución. Figura 47. Código fuente del fichero "AbsMouse.cpp" relativo a la utilización de 16 bits en el posicionamiento y a un posicionamiento absoluto. [36] Universidad de Valladolid 86 Esta biblioteca nos permitirá paliar los problemas hallados en el código nativo proporcionado por Arduino, además de incorporar otros métodos alternativos para los botones del ratón tales como “press” o “release”. 4.2.2 Keyboard.h Las bibliotecas nativas de Arduino presentan la posibilidad de incorporar pulsaciones de teclado. De manera que emplearemos esta biblioteca con la finalidad de que los botones sean reconocidos por los distintos sistemas operativos como si se tratase de teclas de un teclado convencional. En la referencia de funciones de Arduino se especifican los distintos métodos disponibles para esta biblioteca[37]. 4.2.3 MPU9250.h A la hora de realizar la programación relativa al sensor MEMS incorporado, se ha recurrido a la biblioteca “MPU9250.h” concebida para sistemas de vuelo eficaces. La decisión que ha llevado a elegir esta biblioteca se fundamenta en su amplia utilización, su documentación avanzada, las posibilidades de modificación y su compatibilidad con el protocolo SPI. Figura 48. Código fuente del fichero "AbsMouse.cpp" relativo a los métodos de inicialización y movimiento del cursor. [36] Universidad de Valladolid 87 Además de esto, la biblioteca “MPU9250.h” se fundamenta en otras bibliotecas orientadas a IMU (Inertial Measurement Unit) con un recorrido de desarrollo que goza de gran solidez y cuenta con datos que se ajustan a los parámetros de interés que caracterizaremos en nuestros sensores, tal y como se muestra en la Figura 49. Según se cita en la descripción de la biblioteca “This driver conforms to the IMU interface” [38]. También hemos de añadir que su elección ha venido determinada por haber sido desarrollada de manera específica para nuestro conjunto de sensores “This library communicates with InvenSense MPU-9250 and MPU-9255 Inertial Measurement Units (IMUs).”[38]. En la definición de la biblioteca “imu” [39] pueden consultarse con mayor detalle las clases, métodos y atributos empleados. Siguiendo con la argumentación acerca de la utilización de la biblioteca “MPU9250.h”, hemos de explicar que, además de facilitar la utilización de los datos de interés, permite configurar los rangos de escala completos de los sensores ya sea del acelerómetro, giroscopio y magnetómetro, así como otras configuraciones importantes tales que el ancho de banda. Figura 49. Campos de datos pertenecientes a la estructura ImuData que recoge los datos del sensor.[39] Universidad de Valladolid 88 Continuando con las características de esta biblioteca, cabe destacar que uno de los factores determinantes ha sido la compatibilidad con SPI, la cual muchas otras no implementan de una forma estable. En la Figura 50 se muestra la compatibilidad con la clase SPI que permite iniciar de forma sencilla la comunicación mediante este protocolo a través del pin de selección de chip. Finalizando con las características principales de esta biblioteca, las cuales aumentan el interés de elección de la misma, se muestra en la Figura 51 cómo se implementa la lectura y transformación de los datos a unidades métricas con las que podemos trabajar provenientes de la lectura de los sensores, dotándonos con salidas de datos en 𝑚 𝑠2 para el acelerómetro, 𝑟𝑎𝑑 𝑠 para el giroscopio y 𝜇𝑇 en el caso de los datos del magnetómetro. 4.2.4 SevenSeg.h A la hora de realizar la configuración del display LED de siete segmentos, se ha procedido a utilizar la biblioteca “SevenSeg.h”[40] por ser una de las bibliotecas mejor documentadas en cuanto a su funcionamiento y ser compatible con displays de siete segmentos y dos dígitos que cuenten con conexiones compartidas entre sus LED. De esta forma nos estaremos ahorrando la programación desde cero sobre los ciclos de reloj empleados en mostrar diferentes “carácteres” para cada uno de los dígitos, engañando al ojo humano. Además de ser una biblioteca de sencilla implementación, cuenta con la posibilidad de escribir caracteres alfanuméricos y permite una programación de bajo nivel si fuese necesario. Figura 50. Objeto MPU9250, entrada al bus SPI y pin de selección de chip del fichero MPU9250.cpp Figura 51. Lectura y conversión de los datos en unidades de ingeniería del fichero MPU9250.cpp Universidad de Valladolid 95 En la anterior línea de código se expone la idea matemática principal del funcionamiento. Habiendo transformado los radianes máximos calculados teóricamente, se establece, en un inicio, el estado de los rad/s en el centro de la pantalla. A esa posición en rad/s se le restan los rad/s captados por el sensor (el signo menos proviene de la orientación del eje según las bibliotecas). Una vez obtenida la diferencia se realiza una cuantificación en función de la resolución y los rad/s máximos calculados, quedando la siguiente expresión: 𝑃í𝑥𝑒𝑙ℎ𝑜𝑟𝑖𝑧𝑜𝑛𝑡𝑎𝑙=(𝑟𝑎𝑑/𝑠𝑟𝑒𝑓𝑒𝑟𝑒𝑛𝑐𝑖𝑎_𝑎𝑐𝑡𝑢𝑎𝑙𝑒𝑠−𝑟𝑎𝑑/𝑠𝑣𝑎𝑟𝑖𝑎𝑐𝑖ó𝑛_𝑠𝑒𝑛𝑠𝑜𝑟) ∗( 𝑟𝑒𝑠𝑜𝑙𝑢𝑐𝑖ó𝑛ℎ𝑜𝑟𝑖𝑧𝑜𝑛𝑡𝑎𝑙 𝑟𝑎𝑑/𝑠𝑟𝑒𝑓𝑒𝑟𝑒𝑚𝑐𝑖𝑎_𝑚á𝑥𝑖𝑚𝑜𝑠) La anterior expresión podría haberse concebido de una forma más intuitiva transformando los rad/s del sensor directamente a radianes. Esta opción ha sido descartada con el fin de reducir la carga computacional en cada lectura del sensor y trabajar con valores fijos. La expresión alternativa sería: 𝑃í𝑥𝑒𝑙ℎ𝑜𝑟𝑖𝑧𝑜𝑛𝑡𝑎𝑙=(𝑟𝑎𝑑𝑟𝑒𝑓𝑒𝑟𝑒𝑛𝑐𝑖𝑎_𝑎𝑐𝑡𝑢𝑎𝑙𝑒𝑠 −(𝑟𝑎𝑑/𝑠𝑣𝑎𝑟𝑖𝑎𝑐𝑖ó𝑛_𝑠𝑒𝑛𝑠𝑜𝑟∗𝑇𝑖𝑒𝑚𝑝𝑜 𝑑𝑒𝑙 𝑏𝑢𝑐𝑙𝑒 𝑒𝑛 𝑐𝑜𝑛𝑠𝑢𝑙𝑡𝑎𝑟 𝑠𝑒𝑛𝑠𝑜𝑟)) ∗(𝑟𝑒𝑠𝑜𝑙𝑢𝑐𝑖ó𝑛ℎ𝑜𝑟𝑖𝑧𝑜𝑛𝑡𝑎𝑙 𝑟𝑎𝑑𝑟𝑒𝑓𝑒𝑟𝑒𝑚𝑐𝑖𝑎_𝑚á𝑥𝑖𝑚𝑜𝑠) AbsMouse.move((((angRad_state[0]- IMU.getGyroY_rads())*(resolucion[0]/angRad[0]))),mouse_y_be fore); Universidad de Valladolid 96 5. DISEÑO DE LA CARCASA A la hora de proceder con el diseño de la carcasa del producto, se ha partido de un diseño que ya poseía la parte externa creada. De manera, que no se ha desperdiciado demasiado tiempo en la realización de la estética exterior, pudiendo así asignar un mayor trabajo en la parte interna, que será la que determinará las funcionalidades del arma y permitirá implementar los componentes seleccionados según sus limitaciones físicas. Inicialmente se buscó un diseño atractivo. Como la finalidad del proyecto es realizar un dispositivo electrónico que sea capaz de emular al máximo posible las sensaciones reales de empuñar un arma, se trató de encontrar un diseño basado en un arma real. Al querer utilizarse en entornos recreativos, el diseño del arma debería de ser un tanto icónico y vistoso. Por lo que se decidió implementar como aspecto exterior el diseño de la pistola Colt 1911. Esta pistola fue creada en 1911 [43] y es por esto, que cuenta con una historia relativamente larga. Como aliciente, su longeva edad le ha permitido intervenir en múltiples series, películas y videojuegos, constatando así su atractivo icónico y aportando un valor añadido al producto final. Algunos de estos ejemplos pueden ser su utilización en películas como “Indiana Jones y el Reino de la Calavera de Cristal”, “La Momia”, incluso en películas más recientes como “Wonder Woman” [44]. Además, en el grueso de la industria del videojuego ha sido empleada en diversos títulos a lo largo de los años e.g. “Call of Duty” y sus múltiples versiones, “Battlefield” o “FarCry”, entre otros muchos. Esta pistola cuenta con seguidores acérrimos que disfrutarían utilizándola en un videojuego, un claro ejemplo de esto puede verse en vídeos como [45] donde algún fan del arma ha decidido realizar una comparación de la misma en su paso por los videojuegos. Expuesta la propuesta de diseño exterior, en la que se ha tratado de aportar cierto valor añadido al producto, se pasará a describir el desarrollo planteado durante el diseño de la carcasa. Universidad de Valladolid 97 5.1 Desarrollo del diseño tridimensional Al tener definido el concepto de diseño, únicamente era necesario encontrar un desarrollo lo suficientemente avanzado cómo para poder partir de él. Buscando por la red se encontró un buen diseño que permitiría llevar a cabo la realización de un prototipo de carcasa interior, partiendo de piezas con cierto grado de realismo. Por lo que, se decidió utilizar el diseño que se muestra en las Figuras 54 y 55. Este diseño fue elegido por presentar un tamaño proporcional a la realidad y mostrar un despiece que facilitaría la edición tridimensional. Figura 55. Diseño de partida, forma exterior.[46] Figura 54. Diseño de partida, forma interior. [46] Universidad de Valladolid 98 El diseño proviene de la página web Thingiverse, una plataforma donde la comunidad de usuarios aporta diseños tridimensionales orientados a impresión. En concreto, se ha empleado un réplica a tamaño proporcional de la pistola Colt 1911 [46]. Tras haber encontrado un diseño que podría adaptarse a las necesidades del proyecto, se realizó un bosquejo a papel y boli, con el fin de dilucidar si esta opción sería válida por su tamaño. El diseño inicial a escala puede observarse en la Figura 56. También se comprobó si sería ergonómicamente viable, o si la proporcionalidad respecto a una mano sería la adecuada. En principio no se realizaron recortes, aunque puede apreciarse una imagen en perspectiva respecto al tamaño de una mano en la Figura 57. Figura 56. Bosquejo inicial del diseño a tamaño real. Figura 57. Vista en perspectiva del bosquejo frente a una mano. Universidad de Valladolid 99 Después de haber comprobado que el diseño podría ser manipulable y que las dimensiones en tamaño real eran las esperadas, se dio paso a la edición del diseño en tres dimensiones. Para ello se utilizó la herramienta online Tinkercad[47]. En los inicios, la edición tridimensional se centró en eliminar las partes internas que no serían útiles, como el cañón interno de la corredera, así como a intentar aprovechar la mayor parte del interior del diseño, pero sin restar cualidades de resistencia a la carcasa. Una vez se había “limpiado” el diseño inicial para poder empezar a operar con él, comenzaron a incorporarse partes que permitían encajar las piezas. Esto fue necesario, dado que el diseño venía pensado para pegar las piezas unas con otras mediante superficies lisas, sin embargo, nosotros necesitaremos encajar las piezas con disposiciones mecánicas. Una de las primeras aportaciones fue la incorporación de railes tanto en la base como en la corredera de la pistola, para así poder encajar las piezas de una forma sólida, facilitando el deslizamiento de la corredera. La implementación de este mecanismo puede observarse en la Figura 58. Tras haber realizado el sistema de guías pasaron a incorporarse otras partes del diseño interior. Principalmente se vació el espacio asignado al cargador y se introdujeron los espacios relativos al gatillo. Este último puede apreciarse en la Figura 59. En la Figura 60 se muestra una imagen de la pieza del gatillo que se acoplará en el espacio habilitado mostrado en la Figura 59. Figura 58. Muestra del sistema de acoplamiento de la carcasa mediante guías. Universidad de Valladolid 100 El funcionamiento del gatillo se basaría en una pieza suelta, de forma que al encajar ambas partes simétricas de la base de la pistola este quedara sujeto, pero pudiendo desplazarse a lo largo de los raíles marcados. El gatillo posee dos salientes, el saliente inferior posee una mitad cilíndrica y una última parte con forma de prisma, esta forma ha sido concebida así con el fin de incorporar un muelle que permita al gatillo volver a su lugar de origen tras ser accionado. Este muelle no se desplazará de su posición gracias a que se ha creado una guía que impedirá movimientos descontrolados. Por otra parte, el saliente superior mostrado en la Figura 60, ha sido concebido con el fin de accionar un interruptor de final de carrera con rodillo y por esto posee una superficie inclinada en su punta, permitiendo así que el rodillo del interruptor se desplace sin problemas a lo largo de esta. Figura 5959. Posicionamiento y railes para la incorporación del gatillo. Figura 60. Pieza tridimensional del gatillo. Universidad de Valladolid 101 Una vez expuestos estos cambios, pasaremos a comentar las modificaciones llevadas a cabo en la corredera. Según se muestra en la Figura 61, en la corredera se han incorporado dos topes. El posicionado en la parte superior izquierda de la anterior figura servirá para impedir que la corredera pueda desplazarse hacia adelante, además de contar con un sistema similar al del gatillo con el que poder incorporar un muelle. Dado que la base de la pistola en la parte que encaja con la corredera cuenta también con otro saliente, se impedirá a mayores que la corredera rebase la parte posterior del arma cuando se trate de accionar el interruptor de recarga. Finalmente, con el propósito de verificar si el diseño había sido acertado y el conjunto de componentes podían incorporarse dentro de este, se realizaron los diseños a escala de los componentes. En la Figura 62 puede observarse el diseño de los componentes realizado mediante la herramienta Tinkercad. Figura 60. Sección de la base con corredera acoplada. Universidad de Valladolid 102 De izquierda a derecha se citan los componentes: interruptores de final de carrera, circuitos integrados, motor solenoide, botones, motor vibrador, display LED y conector mini USB a USB 3.0. Cabe destacar que se ha prescindido de algunos elementos que cuentan con conexiones en la PCB, siendo estos los diodos LED y el interruptor de modo automático. La decisión de eliminar estos elementos ha venido propiciada principalmente por una cuestión estética. Y es que, sería necesario realizar perforaciones en la corredera para poder incorporar estos elementos. Dichas perforaciones empeorarían de forma sustancial el aspecto final del producto, haciéndolo menos atractivo. A pesar de esto, la PCB cuenta con estas conexiones incorporadas y se podrían añadir en futuras implementaciones de la carcasa. Continuando con la explicación del diseño, se pasará a explicar una modificación llevada a cabo que dista de las explicaciones aportadas en el resto del proyecto. Esta modificación se basa en la interacción del solenoide con la corredera. Tras haber llevado a la práctica múltiples realizaciones, se ha verificado que el motor solenoide era capaz de desplazar el peso de la corredera. Por el contrario, a la hora de realizar el montaje completo, el motor era incapaz de mover la corredera debido a las fuerzas originadas por el rozamiento de la corredera en la pieza de la base y el muelle incorporado para el retroceso. Como consecuencia, se ha recurrido a realizar una perforación en la corredera e incluir una pieza móvil. De este modo, cuando se accione el gatillo, la corredera no se moverá y como contraprestación, el movimiento del solenoide irá dirigido a una pieza móvil en la Figura 61. Diseño tridimensional de componentes. Universidad de Valladolid 103 que se incorporará el martillo del arma. En las Figuras 63 y 64 se aporta una explicación gráfica sobre el funcionamiento anteriormente descrito. Figura 62. Descripción gráfica del accionamiento del motor solenoide. Figura 63. Vista tridimensional sobre la incorporación de la pieza móvil del martillo. Universidad de Valladolid 104 Como conclusión a esta sección del documento, se aporta una vista de la sección del diseño en la que se incorporan todos los componentes. Esta vista puede apreciarse en la Figura 65. Los elementos mostrados en color púrpura corresponden a los muelles que permitirán devolver a su posición inicial las piezas móviles. 5.2 Configuraciones de impresión Tras haber realizado el diseño tridimensional, surge como condición necesaria aclarar algunas dudas sobre cómo se llevará a cabo el proceso de fabricación, cuáles serán los materiales empleados, cómo se realizarán los soportes para el diseño tridimensional, etc. Esta sección pretende mostrar la experiencia llevada a cabo en relación a los procesos de impresión tridimensional y tiene como objetivo dar a conocer la dificultad y profundidad de una materia hasta ahora desconocida. Para ello se tratará de proporcionar una perspectiva de futuro que permitirá tener en cuenta diversos factores a la hora de planificar de manera global nuevas iteraciones del proyecto. Figura 64. Diseño global de la carcasa con sus componentes principales. Universidad de Valladolid 111 Finalmente, a fin de facilitar la visualización de los apartados y los tiempos empleados, se aporta un listado en forma textual en la Figura 73. NOMBRE INICIO FIN Especificación del proyecto 15/2/21 19/2/21 Definición de objetivos 15/2/21 17/2/21 Estudio sistema 17/2/21 19/2/21 Diseño electrónico y captura esquemática 22/2/21 16/4/21 Búsqueda de componentes 22/2/21 9/3/21 Posicionado de componentes 22/3/21 26/3/21 Creación de nuevos componentes 24/3/21 26/3/21 Control de cambios 12/4/21 16/4/21 Rutado de conexiones 13/4/21 16/4/21 Análisis disipación de potencia 29/3/21 2/4/21 Generación de listado de materiales (BOM) 5/4/21 16/4/21 Diseño de la placa de circuito impreso 19/4/21 30/4/21 Creación de huellas de nuevos componentes 19/4/21 19/4/21 Posicionado de componentes 20/4/21 20/4/21 Definición de borde y zonas de conectores 21/4/21 21/4/21 Rutado de conexiones 22/4/21 29/4/21 Planos de disipación térmica 26/4/21 26/4/21 Planos de masa y otros 27/4/21 27/4/21 Generación de ficheros para el fabricante (gerber) 30/4/21 30/4/21 Fabricación de la placa de circuito impreso 3/5/21 27/5/21 Envío al fabricante 3/5/21 3/5/21 Recepción y revisión 12/5/21 13/5/21 Montaje de componentes 18/5/21 27/5/21 Realización Firmware. Simulación y depuración. 19/5/21 20/5/21 Control de elementos hardware: drivers 19/5/21 19/5/21 Verificación 20/5/21 20/5/21 Verificación hardware 24/5/21 22/6/21 Verificación inicial 24/5/21 25/5/21 Verificación firmware 25/5/21 25/5/21 Resolución de problemas 9/6/21 22/6/21 Desarrollo software 15/4/21 16/7/21 Planteamiento general del código 15/4/21 28/4/21 Creación del algoritmo principal 29/4/21 7/7/21 Adición de menús y características 5/7/21 16/7/21 Fabricación de la carcasa plástica 8/3/21 20/8/21 Desarrollo del diseño tridimensional 8/3/21 19/3/21 Impresión y postprocesado 9/8/21 20/8/21 Documentación 15/2/21 13/8/21 Realización informe 15/2/21 13/8/21 Figura 73. Listado generado con GanttProject sobre el flujo temporal del proyecto. Universidad de Valladolid 112 7. IMPLEMENTACIÓN FINAL Una vez realizado el montaje de componentes y la impresión de la carcasa, se ha procedido con la incorporación del circuito en el interior de esta. En las siguientes figuras se refleja el resultado físico final del producto, así como la incorporación de la circuitería en el mismo. Figura 74. Sección del producto final tras incorporar el circuito electrónico a la carcasa. Universidad de Valladolid 113 Figura 75. Producto final tras la incorporación del circuito y su ensamblado. Universidad de Valladolid 114 SIGLAS. Computer Assisted Design (CAD) Operating System (OS) Human Interface Devices (HID) Universal Serial Bus (USB) Light-Emitting Diode (LED) Single Pole Double Throw (SPTD) Multi-Chip Module (MCM) Quad-Flat No-Leads (QFN) Microelectromechanical Systems (MEMS) Analog to Digital Converter (ADC) Inter-Integrated Circuit (I2C) Serial Peripheral Interface (SPI) Frames Per Second (FPS) Dot Per Inch (DPI) Printed Circuit Board (PCB) Pulse-Width Modulation (PWM) In-System Programming (ISP) Serial Clock (SCLK) Master Output Slave Input (MOSI) Master Input Slave Output (MISO) Select (SS) Serial Data (SDA) Two Wire Interface (TWI) Integrated Development Environment (IDE) Direct Current (DC) Universidad de Valladolid 115 Resistance-Capacitor (RC) Thin Quad Flat Package (TQFP) Electrical Computer Aided Design (ECAD) Entrada/Salida (E/S) Signal to Noise Ratio (SNR) Equivalent Series Resistance (ESR) In-Circuit Serial Programming (ICSP) ElectroMagnetic Interference (EMI) Digital Motion Processor (DMP) Bill Of Materials (BOM) Inertial Measurement Unit (IMU) WatchDog Timer (WDT) High Definition (HD) Full HD (FHD) Quad HD (QHD) UltraWide (UW) Ultra HD (UHD) Ácido poliláctico (PLA) STereoLithography (STL) Universidad de Valladolid 116 REFERENCIAS. [1] “Human Interface Devices (HID) Information | USB-IF.” https://www.usb.org/hid (accessed Jun. 23, 2021). [2] Mike Bergman et al., “Device Class Definition for Human Interface Devices (HID), Firmware Specification Version 1.11,” 2001. Accessed: Jun. 23, 2021. [Online]. Available: https://www.usb.org/sites/default/files/documents/hid1_11.pdf. [3] “About USB-IF | USB-IF.” https://www.usb.org/about (accessed Jun. 23, 2021). [4] J. Sebastiá M Sebastiá, M, “Las Leyes de Newton de la mecánica: Una revisión histórica y sus implicaciones en los textos de enseñanza,” 2013, Accessed: Jun. 24, 2021. [Online]. Available: https://core.ac.uk/download/pdf/71022947.pdf. [5] “snap switches DG sub-sub- miniature switch.” . [6] “GTIWUNG Interruptor de Rodillo .” https://www.amazon.es/GTIWUNG- Interruptor-enrutador-Impresora-125V- 250/dp/B08LD68FYQ/ref=sr_1_6?__mk_es_ES=ÅMÅŽÕÑ&dchild=1&keywor ds=interruptor+final+carrera&qid=1616608477&sr=8-6 (accessed Jul. 06, 2021). [7] “Data Sheet for 5mm Super Bright Amber Yellow LED 5C3 Series Class : P Part No : RFWW05C3AYP4-N2 Data Sheet For 5mm Super Bright Amber Yellow LED – Class : P.” . [8] “5mm Straw Hat LED.” https://es.aliexpress.com/item/4000896062123.html?spm=a2g0s.8937460.0.0.336 c2e0eftuvwS (accessed Jul. 06, 2021). [9] L. SHENZHEN ZONHEN ELECTRIC APPLIANCES Co., “SPECIFICATION PART NO.: ZH0-0420S-05A4.5.” . [10] “solenoid electromagnet HS-0730B DC6V 5N 10mm stroke push pull frame – Heschen.” https://heschen.com/es/products/hs-0730b-dc-6v (accessed Jul. 06, 2021). [11] L. ZHEJIANG YUESUI ELECTRON STOCK CO., “Coin Type Vibration Motor B1034.Fl45-00-015.” 2016, [Online]. Available: https://cdn.sparkfun.com/datasheets/Robotics/B1034.FL45-00-015.pdf. Universidad de Valladolid 117 [12] “Micro Motor Sin Núcleo NdFeB 615.” https://es.aliexpress.com/item/1005001297087992.html?spm=a2g0o.detail.10000 13.3.5106b462hjFgRj&gpsid=pcDetailBottomMoreThisSeller&scm=1007.13339.169870.0&scm_id=1007.1 3339.169870.0&scm-url=1007.13339.169870.0&pvid=f98db6b5-2355-4426- 9322-ba26597dcd88&_t=gps-id:pcDetailBottomMoreThisSeller,scmurl:1007.13339.169870.0,pvid:f98db6b5-2355-4426-9322- ba26597dcd88,tpp_buckets:668%230%23131923%2339_668%230%23131923% 2339_668%23888%233325%2312_668%23888%233325%2312_668%232846% 238108%231977_668%235811%2327174%2320_668%232717%237563%2358 1_668%231000022185%231000066059%230_668%233468%2315617%23825_ 668%232846%238108%231977_668%235811%2327174%2320_668%232717% 237563%23581_668%233164%239976%23811_668%233468%2315617%2382 5 (accessed Jul. 06, 2021). [13] InvenSense Inc., “MPU-9250 Product Specification Revision 1.1.” 1745 Technology Drive, San Jose, CA 95110 U.S.A., 2016, [Online]. Available: www.invensense.com. [14] “MPU 9250 9 axis.” https://es.aliexpress.com/item/4000093478742.html?spm=a2g0o.cart.0.0.55993c 005pIlfx&mp=1 (accessed Jul. 06, 2021). [15] ATMEL, “ATmega16U4 / ATmega32U4.” 2016, [Online]. Available: https://ww1.microchip.com/downloads/en/DeviceDoc/Atmel-7766-8-bit-AVR- ATmega16U4-32U4_Datasheet.pdf. [16] Compaq et al., “Universal Serial Bus Specification,” Group, 2000, [Online]. Available: https://www.usb.org/document-library/usb-20-specification%0A%0A. [17] Microchip, “What is TWI? How to Configure the TWI for I2C Communication,” Microchip Technol. Inc., 2018, [Online]. Available: http://ww1.microchip.com/downloads/en/DeviceDoc/90003181A.pdf. [18] Arduino, “What is Arduino? | Arduino.” https://www.arduino.cc/en/Guide/Introduction (accessed Jul. 01, 2021). [19] “ATMEGA32U4-AUR .” https://es.aliexpress.com/item/32916694199.html?spm=a2g0s.8937460.0.0.2bbd2 Universidad de Valladolid 118 e0esBeger (accessed Jul. 06, 2021). [20] LabCenter, “PCB Design and Circuit Simulator Software - Proteus.” https://www.labcenter.com/ (accessed Jul. 08, 2021). [21] SamacSys Ltd, “SamacSys - Electronic Component CAD Models – Symbols | Footprints | 3D Models.” https://www.samacsys.com/ (accessed Jul. 08, 2021). [22] SamacSys Ltd, “Proteus - SamacSys - Configuring Library Loader for Proteus 8.8 or later.” https://www.samacsys.com/proteus/ (accessed Jul. 08, 2021). [23] SamacSys Ltd, “Component Search Engine: Free Symbols, footprints, & 3D models.” https://componentsearchengine.com/ (accessed Jul. 08, 2021). [24] Atmel, “AVR042 : AVR hardware design considerations,” Appl. Note, 2015, [Online]. Available: http://ww1.microchip.com/downloads/en/appnotes/atmel- 2521-avr-hardware-design-considerations_applicationnote_avr042.pdf. [25] M. A. Cebrián, E. T. S. I. de Telecomunicación, and U. de Valladolid, “Fundamentos de Electrónica Tema 2: el diodo,” 2017. [26] ONSemiconductor, “1N91x, 1N4x48, FDLL914, FDLL4x48 Small Signal Diode,” 2002, [Online]. Available: www.onsemi.com. [27] M. A. Cebrián, E. T. S. I. de Telecomunicación, and U. de Valladolid, “Fundamentos de Electrónica Tema 4: Transistores de Efecto de Campo,” 2017. [28] V. L. P. Semiconductor, “2N7002 N-Channel Enhancement Mode Field Effect Transistor.pdf.” . [29] ONSemiconductor, “NDS331N N-Channel Logic Level Enhancement Mode Field Effect Transistor,” 2017. [30] MICREL, “MIC5219 500mA-Peak Output LDO Regulator,” p. 283, 1386, [Online]. Available: www.micrel.com. [31] “Pantalla LED de 1/2/3/4/5 Bit .” https://es.aliexpress.com/item/4000939769059.html?spm=a2g0s.8937460.0.0.15d e2e0eUS7rLY (accessed Jul. 09, 2021). [32] Arduino, “Arduino as ISP and Arduino Bootloaders | Arduino.” https://www.arduino.cc/en/Tutorial/BuiltInExamples/ArduinoISP (accessed Jul. 09, 2021). Universidad de Valladolid 119 [33] U. S. B. Power and D. Specification, “Universal Serial Bus Power Delivery Specification Revision: 3.1 Version :1.1 Release date : Juñy 2021,” 2021, [Online]. Available: https://www.usb.org/document-library/usb-power-delivery. [34] PCBWay, “Fabricación de PCB - Servicio completo para prototipos de PCB personalizados.” https://www.pcbway.es/ (accessed Jul. 19, 2021). [35] Arduino, “Mouse - Arduino Reference.” https://www.arduino.cc/reference/en/language/functions/usb/mouse/ (accessed Aug. 16, 2021). [36] jonathanedgecombe (GitHub user), “absmouse/AbsMouse.cpp at master · jonathanedgecombe/absmouse · GitHub.” https://github.com/jonathanedgecombe/absmouse/blob/master/src/AbsMouse.cpp (accessed Aug. 16, 2021). [37] Arduino, “Keyboard - Arduino Reference.” https://www.arduino.cc/reference/en/language/functions/usb/keyboard/ (accessed Aug. 16, 2021). [38] bolderflight (GitHub user), “GitHub - bolderflight/mpu9250: MPU-9250 sensor driver.” https://github.com/bolderflight/MPU9250 (accessed Aug. 16, 2021). [39] bolderflight (GitHub user), “GitHub - bolderflight/imu: Defines a common interface for BFS IMU sensors.” https://github.com/bolderflight/imu (accessed Aug. 16, 2021). [40] sigvaldm (GitHub user), “GitHub - sigvaldm/SevenSeg: Arduino 7-segment display library.” https://github.com/sigvaldm/SevenSeg (accessed Aug. 16, 2021). [41] S. Marholm, “Arduino SevenSeg 1.2.1,” pp. 1–21, 2017, [Online]. Available: https://raw.githubusercontent.com/sigvaldm/SevenSeg/master/extras/SevenSeg.p df. [42] Giuseppe Masino - qub1750ul (GitHub user), “GitHub - qub1750ul/Arduino_SoftwareReset: Arduino library that allows to reset an arduino board from the sketch.” https://github.com/qub1750ul/Arduino_SoftwareReset (accessed Aug. 16, 2021). [43] “History of Colt 45 - HISTORY.” https://www.history.com/topics/industrial- Universidad de Valladolid 120 revolution/history-of-colt-45-video (accessed Aug. 18, 2021). [44] “M1911 pistol series - Internet Movie Firearms Database - Guns in Movies, TV and Video Games.” http://www.imfdb.org/wiki/M1911_pistol_series#Film (accessed Aug. 18, 2021). [45] “Colt M1911 - Comparison in 60 Different Games - YouTube.” https://www.youtube.com/watch?v=WV8mAIsg1wE (accessed Aug. 18, 2021). [46] Martin Smith - gustofusion (Thingiverse user), “Colt 1911 Replica Prop - Thingiverse.” https://www.thingiverse.com/thing:3535584 (accessed Aug. 19, 2021). [47] Autodesk, “Tinkercad | Crea diseños digitales 3D con CAD en línea.” https://www.tinkercad.com/ (accessed Aug. 19, 2021). [48] Ultimaker, “Ultimaker Cura: software de impresión 3D potente y fácil de usar .” https://ultimaker.com/es/software/ultimaker-cura (accessed Aug. 19, 2021). [49] GanttProject, “GanttProject - Free Project Management Application.” https://www.ganttproject.biz/ (accessed Aug. 21, 2021). Universidad de Valladolid 127 Universidad de Valladolid 128 2. Código implementado #include <AbsMouse.h>//Similar a Mouse.h pero con posicionamiento absoluto y 16 bit #include <Keyboard.h>//Permitirá que los botones pulsados se reciban como teclas del teclado alfanumérico #include "MPU9250.h"//Biblioteca para calibrado y lectura de sensores #include <SevenSeg.h>//Biblioteca para seleccionar el display #include <SoftwareReset.h>//Reinicio por software //Macros en las que se definen los pines físicos #define CORREDERA 23 #define BOTON1 0 #define BOTON2 2 #define BOTON3 3 #define GATILLO 22 #define RETROCESO 10 #define VIBRACION 5 #define DISPA 7 #define DISPB 21 #define DISPC 20 #define DISPD 19 #define DISPE 18 #define DISPF 9 #define DISPG 8 #define DIGIT1 12 #define DIGIT2 4 #define DISPDP 6 //Variables propias de la parte electrónica, ACTUADORES, BOTONES Y TEMPORIZADORES bool corredera=true;//Los valores booleanos actuarán para poder detectar cuando un botón se pulsa y se levanta de nuevo bool boton1=true; bool boton2=true; bool boton3=true; bool gatillo=true; unsigned char cargador=0; unsigned char balas=10;//Balas por defecto unsigned long timer_engine;//se declara la variable que guardará el tiempo de ejecución cada vez que se active el gatillo para los motores bool modo_auto=0;//se declara la variable que guardará el tiempo de ejecución para generar un tren de pulsos de modo similar a PWM unsigned long timer_auto=4294967295;//Valor máximo inicial para que la primera vez funcione sí o sí el modo automático //Se inicializan los puertos del DISPLAY SevenSeg disp(DISPA,DISPB,DISPC,DISPD,DISPE,DISPF,DISPG); //A B C D E F G const int numOfDigits=2;//Pines que seleccionan los dígitos int digitPins[numOfDigits]={DIGIT1,DIGIT2};//Vector de dígitos //Variables relativas al POSICIONAMIENTO int resolucion[2]={3440,1440};//Vector que indicará la resolución del programa (por defecto Ultra Wide) Universidad de Valladolid 129 int mouse_x_before=resolucion[0]/2;//Posición inicial del mouse, dado que emplearemos posicionamiento absoluto int mouse_y_before=resolucion[1]/2; //Cálculos precisión Giroscopios Z e Y (encargados de determinar la posición) int pulgadas=32;//Por defecto las pulgadas son 32 int distancia=40;//por defecto la distancia son 40cm #define PUL2CM 2.54 //una pulgada son 2.54cm unsigned int relasp[2]={0,0};//se define la relación de aspecto float dimensiones[2]={0,0};//se define el vector de anchura/altura de la pantalla float angRad[2]={0,0};//se define el vector de la apertura angular para giroscopios, radianes (anchura/altura) float angRad_state[2]={0,0};//Guardaremos el valor acumulado de los ángulos en radianes (evitando salir de los márgenes) //Inicialización biblioteca MPU9250, se instancia un objeto de la clase, empleando el protocolo SPI y seleccionando el pin 17 como pin de SS (Set System) MPU9250 IMU(SPI,17); int status; void setup() { //Se establece la configuración de los pines de los botones en modo pull-up, el de los motores en forma de salida pinMode(CORREDERA,INPUT_PULLUP); pinMode(BOTON1,INPUT_PULLUP); pinMode(BOTON2,INPUT_PULLUP); pinMode(BOTON3,INPUT_PULLUP); pinMode(GATILLO,INPUT_PULLUP); pinMode(BOTON3,INPUT_PULLUP); pinMode(RETROCESO,OUTPUT); pinMode(VIBRACION,OUTPUT); //Se inicializan los valores del display mediante el objeto disp disp.setDigitPins(numOfDigits, digitPins); disp.setCommonAnode(); //Indicamos que funciona como activa en baja, podría hacerse con "setActivePinState (int segActive, int digActive)"; //Variables de los menús bool inicio=true;//Variable para el inicio común bool men_av=false;//variable para el menú avanzado //Variables del menú avanzado unsigned char men_sel=0; bool men_sel_fix=false; unsigned char submen_sel=0; bool submen_sel_fix=false; //MENÚ INICIAL --> SELECCIÓN TAMAÑO DEL CARGADOR while (inicio==true) { disp.clearDisp();//Modo menú selección cargador o menú rápido (--) disp.changeDigit(0); disp.writeDigit('-'); disp.changeDigit(1); disp.writeDigit('-'); Universidad de Valladolid 130 disp.clearDisp(); while (digitalRead(BOTON1)==LOW&&inicio==true){ //Las combinaciones de botones permitirán seleccionar el tamaño del cargador y fijarlo cargando el dispositivo mediante la corredera disp.write(balas); if (digitalRead(GATILLO)==LOW && gatillo == false){//Gatillo para añadir balas gatillo = true; if(balas<99){ balas = balas+1; } } if (digitalRead(GATILLO)==HIGH && gatillo == true){ gatillo = false; } if (digitalRead(BOTON3)==LOW && boton3 == false){//Botón 3 para eliminar balas boton3 = true; if(balas>1){ balas = balas-1; } } if (digitalRead(BOTON3)==HIGH && boton3 == true){ boton3 = false; } if (digitalRead(BOTON2)==LOW && boton2 == false){//Botón 2 para saltos grandes en munición (de 10 en 10) boton2 = true; if(balas<10){ balas = 10; } else if (balas<20){ balas = 20; } else if (balas<30){ balas = 30; } else if (balas<40){ balas = 40; } else if (balas<50){ balas = 50; } else if (balas<60){ balas = 60; } else if (balas<70){ balas = 70; } else if (balas<80){ balas = 80; } else if (balas<90){ balas = 90; } else{ Universidad de Valladolid 131 balas=1; } } if (digitalRead(BOTON2)==HIGH && boton2 == true){ boton2 = false; } if (digitalRead(CORREDERA)==LOW && corredera == false){//Corredera para fijar las balas del cargador corredera = true; disp.writeDigit('N'); cargador=balas; inicio=false; } if (digitalRead(CORREDERA)==HIGH && corredera == true){ corredera = false; } } if(digitalRead(BOTON2)==LOW && digitalRead(BOTON3)==LOW){//Si se pulsan los botones 2 y 3 simultáneamente se entra al menú avanzado men_av=true; } //MENÚ AVANZADO while(men_av==true){ submen_sel=0; submen_sel_fix=false; disp.clearDisp();//Modo menú avanzado (AX) disp.changeDigit(0); disp.writeDigit('A'); disp.changeDigit(1); disp.writeDigit(men_sel); disp.clearDisp(); if(digitalRead(BOTON3)==LOW && boton3==false){ boton3=true; men_av=false; } if (digitalRead(BOTON3)==HIGH && boton3 == true){ boton3 = false; } if(digitalRead(BOTON1)==LOW && boton1==false){ boton1=true; men_sel++; if(men_sel>3){ men_sel=0; } } if (digitalRead(BOTON1)==HIGH && boton1 == true){ boton1 = false; } if(digitalRead(GATILLO)==LOW && gatillo == false){ gatillo=true; men_sel_fix=true; } if (digitalRead(GATILLO)==HIGH && gatillo == true){ gatillo = false; Universidad de Valladolid 132 } if(men_sel_fix==true){ switch(men_sel){ case 0://Seleccion de resolución while(submen_sel_fix==false){ disp.clearDisp();//Modo submenú resolución disp.changeDigit(0); disp.writeDigit('R');//Resolución disp.changeDigit(1); switch(submen_sel){ case 0: disp.writeDigit('H');//"HD" 1366x768(16:9) break; case 1: disp.writeDigit('F');//FHD 1920x1080 (16:9) break; case 2: disp.writeDigit('Q');//QHD 2K 2560x1440(16:9) break; case 3: disp.writeDigit('Y');//UltraWide 3440x1440 (21:9) break; default: disp.writeDigit('U');//UHD "4K" 3840x2160 (16:9) } disp.clearDisp(); if(digitalRead(BOTON1)==LOW && boton1 == false){//Botón 1 cambia de opción boton1=true; submen_sel++; if(submen_sel>5){ submen_sel=0; } } if (digitalRead(BOTON1)==HIGH && boton1 == true){ boton1 = false; } if(digitalRead(GATILLO)==LOW && gatillo == false){//Gatillo selecciona la opción gatillo=true; switch(submen_sel){ case 0://"HD" 1366x768(16:9) resolucion[0]=1366;//Vector que indicará la resolución del programa resolucion[1]=768; break; case 1://FHD 1920x1080 (16:9) resolucion[0]=1920; resolucion[1]=1080; break; case 2://QHD 2K 2560x1440(16:9) resolucion[0]=2560; resolucion[1]=1440; break; case 3://UltraWide 3440x1440 (21:9) resolucion[0]=3440; resolucion[1]=1440; break; default://UHD "4K" 3840x2160 (21:9) resolucion[0]=3840; resolucion[1]=2160; Universidad de Valladolid 133 } mouse_x_before=resolucion[0]/2;//Posición inicial del mouse, dado que emplearemos posicionamiento absoluto mouse_y_before=resolucion[1]/2; submen_sel_fix=true; men_sel_fix=false; } if (digitalRead(GATILLO)==HIGH && gatillo == true){ gatillo = false; } if(digitalRead(BOTON3)==LOW && boton3==false){//Si deseamos salir sin cambios boton3=true; submen_sel_fix=true; men_sel_fix=false; } if (digitalRead(BOTON3)==HIGH && boton3 == true){ boton3 = false; } } break; case 1://Selección de pulgadas submen_sel=1; while(submen_sel_fix==false){ if(submen_sel<10){ disp.clearDisp();//Modo submenú pulgadas disp.changeDigit(0); disp.writeDigit('P');//Pulgadas disp.changeDigit(1); disp.writeDigit(submen_sel); } else{ disp.write(submen_sel); } disp.clearDisp(); if(digitalRead(BOTON1)==LOW && boton1 == false){//Cambiar entre opciones boton1=true; submen_sel++; if(submen_sel>99){ //Máximo de 99 pulgadas submen_sel=1; } } if (digitalRead(BOTON1)==HIGH && boton1 == true){ boton1 = false; } if(digitalRead(BOTON2)==LOW){//Incrementa el valor de forma rápida submen_sel++; if(submen_sel>99){ submen_sel=1; } } if(digitalRead(GATILLO)==LOW && gatillo == false){ //Selecciona la opción gatillo=true; pulgadas=submen_sel; submen_sel_fix=true; men_sel_fix=false; Universidad de Valladolid 134 } if (digitalRead(GATILLO)==HIGH && gatillo == true){ gatillo = false; } if(digitalRead(BOTON3)==LOW && boton3==false){//Si deseamos salir sin cambios boton3=true; submen_sel_fix=true; men_sel_fix=false; } if (digitalRead(BOTON3)==HIGH && boton3 == true){ boton3 = false; } } break; case 2://Distancia a la que se situará el jugador submen_sel=1; while(submen_sel_fix==false){ disp.clearDisp();//Modo submenú distancia en cm disp.changeDigit(0); disp.writeDigit('D');//Distancia disp.changeDigit(1); disp.writeDigit(submen_sel);// indicará 1 para 10cm, 2 para 20cm... (Por defecto 40cm) disp.clearDisp(); if(digitalRead(BOTON1)==LOW && boton1 == false){//El botón 1 cambia entre las opciones boton1 = true; submen_sel++; if(submen_sel>9){ submen_sel=1; } } if (digitalRead(BOTON1)==HIGH && boton1 == true){ boton1 = false; } if(digitalRead(GATILLO)==LOW && gatillo == false){//El gatillo selecciona la opción deseada gatillo=true; distancia=submen_sel*10; submen_sel_fix=true; men_sel_fix=false; } if (digitalRead(GATILLO)==HIGH && gatillo == true){ gatillo = false; } if(digitalRead(BOTON3)==LOW && boton3==false){//Si deseamos salir sin cambios boton3=true; submen_sel_fix=true; men_sel_fix=false; } if (digitalRead(BOTON3)==HIGH && boton3 == true){ boton3 = false; } } break; case 3://Disparo automático Universidad de Valladolid 135 submen_sel=0; while(submen_sel_fix==false){ disp.clearDisp();//Modo submenú disparo automático disp.changeDigit(0); disp.writeDigit('-');//Ráfaga disp.changeDigit(1); disp.writeDigit(submen_sel); disp.clearDisp(); if(digitalRead(BOTON1)==LOW && boton1 == false){//Alterna entre las opciones sí o no boton1 = true; submen_sel++; if(submen_sel>1){ submen_sel=0; } } if (digitalRead(BOTON1)==HIGH && boton1 == true){ boton1 = false; } if(digitalRead(GATILLO)==LOW && gatillo == false){//Selecciona la opción gatillo=true; modo_auto=submen_sel; submen_sel_fix=true; men_sel_fix=false; } if (digitalRead(GATILLO)==HIGH && gatillo == true){ gatillo = false; } if(digitalRead(BOTON3)==LOW && boton3==false){//Si deseamos salir sin cambios boton3=true; submen_sel_fix=true; men_sel_fix=false; } if (digitalRead(BOTON3)==HIGH && boton3 == true){ boton3 = false; } } }//FIN switch() submenú }//FIN Inicio submenú }//Fin menú avanzado }//Fin menú selección cargador o menú rápido AbsMouse.init(resolucion[0], resolucion[1]);//Se inicializa la resolución llamando a la biblioteca AbsMouse e iniciando así su funcionamiento //POSICIONAMIENTO //Se realizan los cálculos de optimización del posicionamiento, en función de los valores seleccionados por el usuario //Calculo de ángulo en radianes respecto posición en pantalla //inicialmente se calcula la relación de aspecto solo habrá 2--> 21:9 y 16:9 (viene ya recogido en la variable relasp) if((resolucion[0]/resolucion[1])>=2){ Universidad de Valladolid 136 relasp[0]=21; relasp[1]=9; } else{ relasp[0]=16; relasp[1]=9; } //Se aplica Pitágoras para conocer el tamaño de la pantalla float lado; lado=sqrt(pow((pulgadas*PUL2CM),2)/((pow(relasp[0],2))+(pow(relasp[1], 2)))); dimensiones[0]=relasp[0]*lado;//anchura dimensiones[1]=relasp[1]*lado;//altura //Una vez tenemos las dimensiones de la pantalla será necesario calcular el ángulo máximo de barrido respecto al usuario //para ello volveremos a aplicar Pitágoras en función de la distancia de separación de usuario //Angulo de barrido horizontal float h; h=sqrt(pow((dimensiones[0]/2),2)+(pow(distancia,2))); angRad[0]=2*(asin((dimensiones[0]/2)/h));//Asin ya da el resultado en radianes //Angulo de barrido vertical h=sqrt(pow((dimensiones[1]/2),2)+(pow(distancia,2))); angRad[1]=2*(asin((dimensiones[1]/2)/h)); //Ahora ya poseemos los datos del ángulo máximo que podrá barrer el usuario. //Se ha observado que el sensor se lee aproximadamente cada 13ms ***********de media, con lo cual será necesario dividir los rad/s entre los milisegundos que tarda en leerse para obtener los radianes //Ahora realizaremos una cuantificación de los píxeles de la pantalla a los valores intermedios de los ángulos en radianes //para cada iteración del bucle map(value, fromLow, fromHigh, toLow, toHigh) se empleará algo similar a esta función pero implementado manualmente angRad[0]=angRad[0]*(1000/11);//tarda 11ms ES NECESARIO AJUSTARLO EN FUNCIÓN DEL TIEMPO DE EJECUCIÓN DEL CÓDIGO DEL BUCLE, PARA PASARLO A RAD (o *1/0.013) angRad[1]=angRad[1]*(1000/11); angRad_state[0]=(angRad[0]/2); angRad_state[1]=(angRad[1]/2); //FINALMENTE ESPERAMOS A UNA PRESIÓN DEL GATILLO, EN LA CUAL SE COLOCA EL CURSOR EN EL CENTRO DE LA PANTALLA Y POSTERIORMENTE SE INICIA LA COMUNICACIÓN CON LA BIBLIOTECA MPU9250 CALIBRANDO ASÍ LOS SENSORES while(digitalRead(GATILLO)==HIGH){ AbsMouse.move(resolucion[0]/2,resolucion[1]/2); disp.clearDisp();//Modo calibración, será importante mantener la postura apuntando al centro de la pantalla mientras se calibra el mando(CA) disp.changeDigit(0); disp.writeDigit('C'); Universidad de Valladolid 143 Universidad de Valladolid 144 Universidad de Valladolid 145 Universidad de Valladolid 146 Universidad de Valladolid 147 Universidad de Valladolid 148 Universidad de Valladolid 149