Full text
Proyecto Fin de Carrera Ingeniería de Telecomunicación Formato de Publicación de la Escuela Técnica Superior de Ingeniería Autor: F. Javier Payán Somet Tutor: Juan José Murillo Fuentes Dep. Teoría de la Señal y Comunicaciones Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2013 Trabajo Fin de Grado en Ingeniería Aeroespacial Desarrollo e implementación de un panel EFIS para un simulador de vuelo de Airbus A320 basado en Flightgear Autor: Pablo G. Crassous Torres Tutor: Francisco Rafael Gavilán Jiménez Dpto. Ingeniería Aeroespacial Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2024
Trabajo Fin de Grado en Ingeniería Aeroespacial Desarrollo e implementación de un panel EFIS para un simulador de vuelo de Airbus A320 basado en Flightgear Autor: Pablo G. Crassous Torres Tutor: Francisco Rafael Gavilán Jiménez Profesor Contratado Doctor Dpto. Ingeniería Aeroespacial Escuela Técnica Superior de Ingeniería Universidad de Sevilla Sevilla, 2024
Trabajo Fin de Grado: Desarrollo e implementación de un panel EFIS para un simulador de vuelo de Airbus A320 basado en Flightgear Autor: Pablo G. Crassous Torres Tutor: Francisco Rafael Gavilán Jiménez El tribunal nombrado para juzgar el trabajo arriba indicado, compuesto por los siguientes profesores: Presidente: Vocal/es: Secretario: acuerdan otorgarle la calificación de: El Secretario del Tribunal Fecha:
Resumen E l departamento de Ingeniería Aeroespacial de la Escuela Técnica Superior de Ingeniería de Sevilla cuenta con una sala de laboratorios donde se encuentran varios simuladores de vuelos usados en las prácticas de sus asignaturas. Estos simuladores proporcionan una potente herramienta de aprendizaje que complementa a las clases teóricas acerca de sistemas de aviónica, planificación de rutas y ayudas a la navegación. Por ello, dentro del departamento se promueven una serie de trabajos de fin de grado o máster centrados en el desarrollo e implementación de distintas partes de un simulador de Airbus A320, más actualizado y con mayores prestaciones que los usados actualmente para la enseñanza. Este trabajo pretende documentar el proceso de diseño e implementación de un nuevo panel del simulador en desarrollo, ampliando las funciones disponibles y permitiendo una mejor experiencia a los usuarios. El proceso de diseño emplea diversos programas obtenidos gracias a la Universidad de Sevilla para realizar el diseño de piezas a ordenador y el diseño de las placas de circuito impreso. Este trabajo abarca distintas áreas de conocimiento, como pueden ser la electrónica digital o las tecnologías de fabricación. El panel desarrollado en este trabajo es el correspondiente al EFIS (sistema electrónico de instrumentos de vuelo), que permite controlar las pantallas primarias de vuelo y navegación usadas por el piloto para obtener información crítica para el buen desempeño del vuelo. La conclusión de este proyecto de fin de grado no supone el final de la línea de trabajo centrada en este simulador, sino una contribución a su desarrollo que todavía cuenta con una gran cantidad de posibles mejoras y trabajos futuros. I
Abstract T he Department of Aerospace Engineering at the ETSI in Seville has a laboratory room equipped with several flight simulators used in the practical training of its courses. These simulators provide a powerful learning tool that complements theoretical classes on avionics systems, route planning and navigation aids. Therefore, the department promotes a series of undergraduate or master’s final year projects focused on the development and implementation of different parts of an Airbus A320 simulator, which is more up-to-date and offers better performance than those currently used for teaching. This project aims to document the design and implementation process of a new panel for the simulator under development, expanding the available functions and providing a better experience for the users. The design process is possible thanks to various software tools provided by the University of Seville that help to create computer-based designs of parts and printed circuit boards. This work covers different areas of knowledge, such as digital electronics and manufacturing technologies. The panel developed in this project corresponds to the EFIS (Electronic Flight Instrument System), which allows the control of primary flight and navigation displays used by the pilot to obtain critical information for the successful performance of the flight. The conclusion of this undergraduate thesis does not mark the end of the work focused on this simulator, but rather a contribution to its development, which still has a significant number of potential improvements and future work opportunities. III
Notación Acrónimos PCB Placa de circuito impreso (Printed Circuit Board) LCD Pantalla de cristal líquido (Liquid-Crystal Display) EFIS Sistema electrónico de instrumentos de vuelo (Electronic Flight Instrument System) AP Autopiloto MCDU Unidad Visual y de Control Multifunción (Multi-Function Control and Display Unit) PDF Pantalla principal de vuelo (Primary Flight Display) ND Pantalla de navegación (Navigation Display) SMD Dispositivos de montaje superficial (Surface-Mount Device) PLA Ácido politáctico APU Unidad de Potencia Auxiliar (Auxiliary Power Unit) ECAM Monitor eletrónico centralizado de la aeronave (Electronic Centralized Aircraft Monitor) UDP Protocolo de datagramas de usuario (User Datagram Protocol) TCP Protocolo de transmisión de datos (Transmission Control Protocol) XI
1 Introducción L os simuladores de vuelo son una realidad dentro de la industria aeroespacial, sirviendo de entrenamiento para pilotos. Dentro de los simuladores de vuelo se pueden diferenciar varios tipos dependiendo de las prestaciones que presenten, yendo desde los simuladores recreativos más simples (usando solo software) a grandes simuladores complejos que cuentan con plataformas de movimiento con 6 grados de libertad. Generalmente, los simuladores más simples son usados como actividad recreativa, mientras que los más complejos se utilizan en tareas de entrenamiento de pilotos. Estos simuladores permiten a los pilotos en práctica obtener la experiencia necesaria sin necesidad de usar una aeronave real. El uso del simulador conlleva una mayor seguridad durante el proceso de aprendizaje, ya que sirve al piloto para familiarizarse con los controles, paneles y su gestión de esa información. Además, permite recrear en un entorno simulado situaciones desfavorables para el pilotaje, tales como: fallos en sistemas electrónicos, fallo de motor, falta de visibilidad y viento cruzado, entre otros. Figura 1.1 Exterior de un simulador de vuelo con 6 grados de libertad. En la figura 1.1, se muestran el interior y exterior de los simuladores de vuelo de última generación de la empresa Avenger Flight Group. Las prestaciones de estos simuladores son muy elevadas, ya que están certificados por AESA o FAA (dependiendo del emplazamiento del simulador) como simuladores de entrenamiento para pilotos. Estos simuladores escapan del alcance de un proyecto universitario, ya que requieren de una inversión de recursos humanos y materiales demasiado elevada. Las opciones más interesantes son aquellos simuladores sencillos que no constan de componentes físicos pero permiten implementarlos. Los simuladores de código abierto posibilitan desarrollar e implementar nuevas funcionalidades, pudiendo modificar el propio código fuente que el simulador ofrece. Es por ello que los simuladores de código abierto serían los candidatos perfectos para esta línea de trabajo basada en la exteriorización de los controles del avión. Poder modificar 1
2Capítulo 1. Introducción el código del simulador facilita las tareas de implementación, permitiendo revisar códigos funcionales, implementar los paneles de forma modular y esclarecer el origen de fallos gracias a las múltiples herramientas de debugging asociadas. Además, los simuladores de código abierto son accesibles de forma gratuita, reduciendo el coste total del proyecto. Es importante aclarar que el simulador deseado debe complementar los estudios teóricos del Grado en Ingeniería Aeroespacial, ofreciendo aeronaves comerciales actuales, como el Airbus A320, en lugar de un catálogo de aeronaves de combate. Los modelos de avión Airbus A320 y Boeing 737 son unos de los más populares en la industria, siendo muy buenas opciones para simular debido a su uso extendido. En concreto, el Airbus A320 realizó su primer vuelo en 1987, 20 años después que el 737 de Boeing. A día de hoy siguen siendo utilizados, lo que habla muy bien de su robustez y fiabilidad. Si bien estos modelos comenzaron a comercializarse hace más de 35 años, los sistemas embarcados han sufrido cambios significativos durante la vida útil de estos modelos, por lo que cuentan con sistemas actualizados que pueden ser interesantes para el aprendizaje de los alumnos. En 2006, Airbus anunció el Airbus A320neo, sucesor del A320 que no realizó su primer vuelo hasta el 2014. Este modelo es la última incorporación por parte de la compañía a la familia A320, que incluye los modelos A318, A319, A320, A320neo y A321. Debido a la fuerte presencia de Airbus en Europa, y concretamente en Sevilla (lugar de desarrollo de este proyecto), se optó finalmente por el modelo A320neo como aeronave de simulación. El departamento de Ingeniería Aeroespacial cuenta con varios simuladores de vuelo: 3 simuladores funcionales de MD-82 (de la familia McDonnell Douglas MD-80), usados actualmente en la prácticas de varias asignaturas, y un simulador en desarrollo de Airbus A320neo, que pretende aportar una visión más actual de los sistemas utilizados para mejorar la enseñanza. Este trabajo se centrará en realizar mejoras al simulador de vuelo de A320neo presente en el laboratorio. A lo largo de este documento se utilizará A320 para referirse al modelo de aeronave propia del trabajo, en referencia al modelo A320neo realmente implementado. 1.1 Introducción a simuladores Actualmente existen múltiples simuladores que permiten una gran experiencia de vuelo sin necesidad de contar con unas grandes instalaciones. En esta sección se comentan algunos de los simuladores más populares de hoy en día, omitiendo algunos que no son interesantes para esta aplicación, como DCS Combat y su enfoque en combates aéreos. 1.1.1 Simuladores de vuelo actuales A continuación se desarrollan las principales características de distintos simuladores de vuelo de uso generalizado. Las siguientes opciones son en su mayoría de pago, pudiendo presentar versiones con contenido reducido de forma gratuita. Las opciones de pago no son óptimas, ya que normalmente los sistemas físicos de control asociados son bastantes caros y se dificulta el proceso de implementación de nuevas funciones al no ser simuladores de código abierto. Microsoft Flight Simulator (MSFS) Microsoft Flight Simulator, desarrollado por Asobo Studio y publicado por Xbox Game Studios, es uno de los simuladores de vuelo más avanzados y populares del mercado. Lanzado en 2020, utiliza datos de satélite y de inteligencia artificial para crear un mundo virtual increíblemente detallado y realista. Características principales: • Gráficos realistas: Ofrece gráficos de alta fidelidad y un modelado preciso del mundo basado en imágenes satelitales y datos de mapas en 3D. • Condiciones meteorológicas en tiempo real: Reproduce las condiciones meteorológicas en tiempo real, incluyendo patrones de viento y nubes dinámicos. • Variedad de aeronaves: Incluye una amplia gama de aviones, desde pequeños aviones de hélice hasta grandes aviones comerciales y jets de negocios. • Comunidades y mods: Amplia comunidad de usuarios que crean mods y complementos para mejorar la experiencia de vuelo. Los requisitos mínimos son [13]:
1.1 Introducción a simuladores 3 Figura 1.2 Portada de Microsoft Flight Simulator. •Sistema operativo: Windows 10 •CPU: AMD Ryzen 5 1500X o Intel i5 8400 •GPU: AMD Radeon RX 590 o Nvidia GTX 970 •VRAM: 4 GB •RAM: 16 GB •Almacenamiento: 150 GB X-Plane 12 Figura 1.3 Portada de X-Plane 12. Desarrollado por Laminar Research, X-Plane 12 es conocido por su realismo en la simulación de vuelo y su capacidad para modelar el comportamiento de las aeronaves con precisión. Utiliza un modelo de vuelo basado en la teoría de los elementos finitos. Características principales: • Modelo de vuelo preciso: Utiliza la tecnología "Blade Element Theory" para simular con precisión la aerodinámica de las aeronaves. • Escenarios detallados: Ofrece escenarios detallados y la posibilidad de añadir escenarios personalizados.
4Capítulo 1. Introducción • Condiciones meteorológicas dinámicas: Simula cambios en las condiciones meteorológicas que afectan al vuelo. • Interfaz de usuario personalizable: Permite a los usuarios personalizar la interfaz y los controles para adaptarse a sus necesidades. Los requisitos mínimos son [15]: •Sistema operativo: Windows 10 •CPU: AMD Ryzen 3 o Intel i3 con 4 cores •GPU: AMD 2 GB 0 o Nvidia compatible con Vulkan 1.3 •RAM: 8 GB •Almacenamiento: 25 GB •Red: conexión a Internet Prepar3D Figura 1.4 Captura de pantalla de Prepar3D. Prepar3D, desarrollado por Lockheed Martin, es una plataforma de simulación de vuelo utilizada tanto para el entrenamiento de pilotos como para la investigación y el desarrollo. Basado en el código base de Microsoft Flight Simulator X, ofrece un entorno de simulación profesional. Características principales: • Entrenamiento y educación: Utilizado ampliamente en la industria de la aviación para el entrenamiento de pilotos y la educación aeronáutica. • Escenarios detallados: Ofrece escenarios altamente detallados y la capacidad de añadir complementos y módulos específicos. •Soporte VR: Compatibilidad con la realidad virtual para una experiencia de inmersión total. • Modelado avanzado de vuelo: Incluye características avanzadas de modelado de vuelo y simulación de sistemas. Los requisitos mínimos de su versión 6 son [12]: •Sistema operativo: Windows 10 •CPU: Quad Core 3.0 GHz •GPU: Compatible con Full DirectX 12 •VRAM: 4 GB •RAM: 8 GB •Almacenamiento: 85 GB (35 GB en disco C:\) •Red: conexión a Internet
1.1 Introducción a simuladores 5 Aerofly FS 4 Figura 1.5 Portada de Aerofly FS 4. Aerofly FS 4, desarrollado por IPACS, es un simulador de vuelo que destaca por su facilidad de uso y sus gráficos impresionantes. Es una opción popular entre los aficionados que buscan una experiencia de vuelo accesible pero detallada. Características principales: •Gráficos detallados: Ofrece gráficos detallados y un entorno visualmente impresionante. • Fácil de usar: Diseñado para ser accesible tanto para principiantes como para pilotos experimentados. •Variedad de aeronaves: Incluye una amplia gama de aeronaves civiles y deportivas. • Realismo: Simulación de vuelo realista con atención al detalle en la modelación de las aeronaves y el comportamiento de vuelo. Los requisitos mínimos de su versión 6 son [9]: •Sistema operativo: Windows 10 •CPU: Intel o AMD Quad Core •GPU: Compatible con OpenGL 4.0 o Vulkan 3D •VRAM: 4 GB •RAM: 8 GB •Almacenamiento: 100 GB FlightGear FlightGear es un simulador de vuelo gratuito y de código abierto, desarrollado por un equipo de voluntarios y mantenido por la comunidad de entusiastas de la simulación de vuelo. Lanzado por primera vez en 1997, FlightGear ha evolucionado constantemente y se ha convertido en una plataforma robusta y versátil, ideal tanto para usuarios novatos como para expertos en simulación. Características principales: • Gratuito y de código abierto: FlightGear está disponible gratuitamente bajo la licencia GNU General Public License (GPL). Esto permite a los usuarios descargar, usar, modificar y distribuir el software sin costo alguno. • Desarrollo colaborativo: Al ser de código abierto, FlightGear cuenta con una comunidad activa de desarrolladores y usuarios que contribuyen continuamente al desarrollo del software. Esto asegura un flujo constante de mejoras, correcciones de errores y nuevas características. • Variedad de aeronaves: Incluye una amplia gama de aeronaves, desde aviones ligeros hasta aviones comerciales y militares. Uno de los modelos destacados es el Airbus A320, un avión comercial ampliamente utilizado en la aviación moderna.
6Capítulo 1. Introducción Figura 1.6 Logo de FlightGear. • Escenarios y aeropuertos detallados: Ofrece escenarios globales con más de 20,000 aeropuertos detallados, paisajes realistas y características geográficas precisas. • Soporte multiplataforma: FlightGear es compatible con múltiples sistemas operativos, incluyendo Windows, macOS y Linux. Requisitos mínimos recomendados del sistema: •Sistema operativo: Windows 7/8/10 •CPU: Quad Core 2.0 GHz •GPU: Compatible con OpenGL 2.0. •RAM: 4 GB /item VRAM: 1 GB •Espacio en disco: 10 GB. 1.1.2 Simulador elegido Tras realizar un breve repaso por los simuladores actuales más usados, comentar sus características principales y habiendo comentando anteriormente las propiedades que debería tener un simulador para realizar este trabajo, se puede llegar a la conclusión de que FlightGear es el simulador que mejor se adapta a las necesidades de este proyecto. Esto se debe a que entre todas las opciones presentadas, es el simulador gratuito de código abierto que más facilitará la exteriorización modular de los controles y paneles de la cabina. Los beneficios del software libre y de código abierto son: • Transparencia: Cualquier usuario puede revisar el código fuente, lo que garantiza un alto nivel de transparencia y seguridad. • Personalización: Los usuarios pueden modificar el software para adaptarlo a sus necesidades específicas, creando nuevas funcionalidades o mejorando las existentes. • Comunidad activa: Una comunidad global de usuarios y desarrolladores trabaja conjuntamente para mejorar el software, proporcionando soporte, documentación y nuevas contribuciones. • Sin costos de licencia: Al ser gratuito, FlightGear elimina los costos asociados con la compra de licencias, lo que lo hace accesible para una audiencia más amplia. Además, FlightGear cuenta con el modelo de aeronave A320 de forma gratuita, siendo el modelo escogido anteriormente debido a su popularidad y sistemas actualizados. A continuación, se extiende la descripción de las carácterísticas principales de FlightGear. Libertad y Flexibilidad Como proyecto de código abierto bajo la licencia GPL, FlightGear permite a los usuarios descargar, copiar y modificar el simulador libremente, siempre y cuando se respeten los términos de la licencia. Esto incluye fácil acceso al código fuente más reciente, lo que hace que sea una opción atractiva para proyectos privados,
1.1 Introducción a simuladores 7 comerciales, de investigación o de hobby. El simulador utiliza formatos de archivo abiertos y accesibles, incluyendo XML para la configuración y NASAL para la programación del comportamiento, lo que facilita la creación de extensiones de terceros o la modificación directa del código fuente de FlightGear. • FlightGear utiliza archivos XML para definir y gestionar variables dentro del árbol de propiedades, una estructura jerárquica que almacena todos los datos relacionados con la simulación. Esto permite la personalización de configuraciones, la gestión de interacciones del usuario y la integración con hardware externo. • NASAL, por su parte, es un lenguaje de scripting propio de FlightGear que combina conceptos de JavaScript, Python y Perl. Este lenguaje facilita la programación del comportamiento del simulador y permite a los usuarios interactuar con el árbol de propiedades para responder dinámicamente a cambios en las variables. NASAL es particularmente útil para asociar funciones específicas a variables, como encender o apagar un LED cuando una variable cambia su valor. También es multiplataforma y seguro en entornos multihilo. Motor de Simulación (SimCore) El núcleo de FlightGear es su motor de simulación, que maneja la física del vuelo y la dinámica de las aeronaves. Utiliza varios modelos de Dinámica de Vuelo (FDM), entre los que se incluyen: • JSBSim: Un modelo genérico de dinámica de vuelo 6DoF que simula el movimiento de vehículos aéreos. Escrito en C++, se basa en archivos de configuración XML para definir propiedades de masa, aerodinámica y control. • YASim: Un FDM integrado en FlightGear que simula el efecto del flujo de aire sobre diferentes partes de una aeronave, permitiendo la simulación basada en la geometría y la información de masa de la aeronave, junto con datos de rendimiento. • UIUC: Basado en LaRCsim de la NASA, este FDM permite la simulación de aeronaves bajo condiciones específicas como la formación de hielo, utilizando tablas de búsqueda para calcular fuerzas y momentos aerodinámicos. Sistema de Terreno y Entorno FlightGear incluye una base de datos de escenarios del mundo real con más de 20,000 aeropuertos reales. La simulación del terreno es precisa y está basada en los datos más recientes del SRTM, ofreciendo una resolución de 3 segundos de arco para la mayoría de las regiones del mundo. Los escenarios incluyen detalles como lagos, ríos, carreteras, ciudades, y luces nocturnas en áreas urbanas, lo que permite un vuelo VFR nocturno realista. Modelo de Cielo Preciso FlightGear cuenta con un modelo de cielo extremadamente preciso que posiciona correctamente el sol, la luna, las estrellas y los planetas según la hora y la fecha. Este sistema sigue el reloj del ordenador para reflejar la posición exacta de los cuerpos celestes en cualquier ubicación, considerando efectos estacionales como los días de 24 horas en el círculo ártico durante el verano. Además, simula la fase lunar de manera precisa, tal como ocurre en la realidad. Motor Gráfico y Modelado de Aeronaves El motor gráfico de FlightGear maneja la representación visual del entorno, utilizando tecnologías como OpenGL para renderizar gráficos en 3D en tiempo real. Esto incluye la simulación de un cielo realista, con la posición precisa del sol, la luna, las estrellas y los planetas, ajustada según la hora y la fecha. El sistema de modelado de aeronaves de FlightGear permite la simulación de una amplia variedad de aeronaves, desde el Wright Flyer de 1903 hasta jets modernos como el A320. Las cabinas de vuelo son completamente animadas y operativas, con comportamiento realista de los instrumentos y capacidad para simular fallos en los sistemas, como el fallo del sistema de vacío o la deriva de giroscopios. SubSistemas de Entrada y Control FlightGear es compatible con una amplia gama de dispositivos de entrada, como teclados, joysticks y sistemas de control de vuelo. Los usuarios pueden personalizar la configuración de estos dispositivos según sus necesidades. Además, el simulador incluye sistemas de autopiloto y navegación avanzados que pueden ser controlados manualmente o a través de scripts, integrándose de manera fluida con la simulación física.
14 Capítulo 2. Arquitectura del simulador Figura 2.6 Panel de autopiloto de FlightGear. 2.1.6 Panel de autopiloto Este panel implementando en [ 19 ] ha sido la referencia para la correcta realización de este trabajo. Es por ello que la estructura física que soporta el correcto funcionamiento de este panel ha intentado ser replicada y adaptada para el panel EFIS. Ya que la estructra de panel físico, placa de circuito impreso y Arduino conectado al ordenador es similar en lo desarrollado a este trabajo, se optará por comentar con más detalle lo referente al panel EFIS, que puede ser trasladado a este con ligeras modificaciones en los circuitos y programas, pero con conexiones similares. 2.2 Arquitectura particular EFIS Este trabajo estará centrado en implementar las funciones asociadas al panel EFIS, por lo que a continuación se prodecerá a comentar los distintos componentes del panel EFIS y sus funciones. Figura 2.7 Panel EFIS de A320 en FlightGear. 2.2.1 Control del Panel EFIS En panel EFIS está formado por una serie de controles que actúan sobre el PFD y sobre el altímetro. Esta división de controles no puede verse de forma física en el panel desarrollado en este trabajo, pero en el panel del simulador se puede apreciar una línea blanca vertical. A la izquierda de esta línea se encuentra el selector rotativo que controla el altímetro y la pantalla asociada a este. Bajo los controles del altímetro se encuentran 2 botones que junto con los botones y selectores a la derecha de la línea permiten modificar el estado del display primario de vuelo [6].
2.2 Arquitectura particular EFIS 15 Altímetro Los controles asociados al altímetro son 3: interruptor anillo exterior, interruptor anillo interior y selector rotativo. •Selector del anillo exterior – Permite cambiar la referencia del barómetro entre hectopascales o pulgadas de mercurio. Este cambio de unidades se ve reflejado en la pantalla asociada. •Selector del anillo interior – Permite manipular el valor mostrado en la ventana de referencia del barómetro y en el PFD (visible debajo de la escala de altitud). Cuando el FCU se inicializa, mostrará 1013 o 29.92 según la selección del anillo exterior. – Tirar del selector rotativo selecciona la configuración de referencia barométrica estándar. La ventana de visualización y el PFD mostrarán "STD". – Cuando está en la posición STD, el selector rotativo no realiza cambio alguno en el comportamiento de este sistema. •Selector rotativo – Permite ajustar el valor de referencia del altímetro realizando saltos de 1 hPa o 0.01 in Hg, en función de la unidad seleccionada en el momento. – La entrada de este controlador afecta a la variable asociada a las unidades seleccionadas. Posteriormente, mediando una conversión de unidades se modifica en segundo plano el valor de la variable no mostrada por pantalla. Botón FD • Al presionar el botón FD, se activan o eliminan las barras del director de vuelo del PFD correspondiente. Si está en TRK FPA, activará o eliminará el símbolo del director de la trayectoria de vuelo. • Cuando está encendido, la luz del botón es verde y cuando está apagado, no hay iluminación en la zona superior. Siempre existe una iluminación con luz amarilla del texto mostrado en el botón. Botón LS • Al seleccionar este botón LS, se mostrarán las escalas de pendiente de planeo en el PFD y la información del localizador. • Cuando está encendido, la luz del botón es verde y cuando está apagado, no hay iluminación en la zona superior. Siempre existe una iluminación con luz amarilla del texto mostrado en el botón. Selector de Modo •Cambia el modo mostrado en el ND correspondiente. •Existen 5 modos: ROSE-ILS, ROSE-VOR, ROSE-NAV, ARC y PLAN. – ROSE-ILS: Muestra una circunferencia centrada en la aeronave con información del ILS, como la desviación lateral y vertical. – ROSE-VOR: Representa una circunferencia que muestra la información de las estaciones VOR seleccionadas. – ROSE-NAV: Utiliza una circunferencia para mostrar la ruta del FMS y los puntos de referencia a lo largo del vuelo. – ARC: Presenta un arco de 90 grados frente a la aeronave, destacando la ruta del FMS y las estaciones VOR/NDB cercanas. – PLAN: Ofrece una vista de mapa desplazable que permite ver la ruta completa del FMS y los puntos de referencia planificados. Selector de Rango •Cambia el rango mostrado en el ND correspondiente. •Los rangos disponibles son: 10, 20, 40, 80, 160 y 320 millas náuticas.
16 Capítulo 2. Arquitectura del simulador Selectores ADF-VOR • Permiten seleccionar entre las referencias ADF o VOR y la distancia DME en el ND correspondiente. Proporciona la información de la NAVAID correspondiente en el ND (excepto en el modo PLAN). Botón de Visualización de Datos Opcionales (CSTR, VOR D, WPT, NDB, ARPT) • Este botón muestra cualquier información opcional junto con los datos que se muestran permanentemente en los modos PLAN,ARC oROSE NAV. Solo se puede activar una selección a la vez. • Cuando está encendido, la luz del botón es verde y cuando está apagado, no hay iluminación en la zona superior. Siempre existe una iluminación con luz amarilla del texto mostrado en los botones. – CSTR: Muestra las restricciones de altitud y velocidad en la ruta planificada. – VOR D: Visualiza las estaciones VOR seleccionadas y la información de distancia desde la aeronave. – WPT: Muestra los puntos de referencia (waypoints) a lo largo de la ruta de vuelo. – NDB: Indica las estaciones NDB cercanas a la ruta de vuelo. – ARPT: Resalta los aeropuertos cercanos y aquellos en la ruta planificada. 2.2.2 Solución adoptada La arquitectura de la solución adoptada para la exteriorización de los paneles EFIS y avisos es similar a la usada en el panel del autopiloto, por lo que se ha optado por una línea de diseño continuista que simplificara el diseño y permitiera acortar los tiempos necesarios para su construcción. En la figura 2.8 se muestra la arquitectura de los paneles montados, para que el lector comprenda la estructura general que presentan los paneles implementados. Los componentes mecánicos interacciones físicamente con la electrónica de las PCB y estas interacciones generan señales que son recibidas por los Arduino Mega, encargados de procesarlas y prepararlas para su envío. La información con los estados de todos los componentes es enviada por el Arduino y recibida por el ordenador a través del puerto serie, usando el puerto USB como canal de comunicación. El propio ordenador, mediante el uso de Python, decodifica la información recibia por puerto serie, le aplica los cambios de formato oportunos para asegurar una buena comunicación y la envía al propio simulador mediante sockets. Los sockets constituyen un mecanismo para la entrega de paquetes de datos y quedan definidos por las direcciones IP, el protocolo de comunicación y los puertos asociados. En el caso que concierne a este trabajo se usa un host local con dirección 127.0.0.1 y los puertos 8000 y 8040 para entrada y salida respectivamente. El protocolo de comunicación del nivel de transporte escogido es el UDP (protocolo de datagramas de usuario), que permite el envío de datagramas sin necesidad de establecer conexión previa entre dispositivos. Este protocolo no garantiza la entrega de los paquetes de información como sí hace el TCP (protocolo de transmisión de datos), pero permite establecer la comunicación con mayor velocidad. Para la aplicación en este trabajo se ha considerado que le protocolo UDP se ajusta de mejor forma a los requisitos, proporcionando una comunicación veloz. En la figura 2.9 se muestra el flujo de información tras ser enviado por el archivo de Python hacia FlightGear a través de los sockets descritos anteriormente. En primer lugar se han definido dos archivos XML que incluyen las variables de entrada y salida del simulador. Estas variables no tienen por qué ser variables ya existentes del simulador, es posible crear otras nuevas para facilitar la implementación de funciones auxiliares. En este caso, las funciones auxiliares se han implementado en los dos archivos de Nasal. Estos archivos incluyen funciones que desencadenan ciertas acciones en el simulador (para las variables de entrada) y ciertas funciones que dan formato a variables ya existentes (para variables de salida). Estos archivos se deben incluir en el directorio de instalación de FlightGear y comunicar al simulador que debe usarlos durante la ejecución del programa. El contenido de estos archivos es el objeto de las sección 5 y no se pretende profundizar en su contenido en esta sección.
2.2 Arquitectura particular EFIS 17 Arduino Mega Arduino Mega Bus serie Bus serie PCB Pantalla EFIS izquierdo Ordenador Figura 2.8 Arquitectura del panel EFIS realizado en este trabajo. Bus Serie Python_out.py EFIS_UDP_IN.xml EFIS_Button.nas EFIS_UDP_OUT.xml EFIS_out.nas FlightGear Socket_out Socket_in Figura 2.9 Arquitectura de las solución software implementada en el ordenador.
3 Diseño mecánico del panel E n este Capítulo se analizan las distintas piezas fabricadas a lo largo de este trabajo. Para ello, se realizará un análisis detallado desde el diseño por ordenador hasta el producto final. En el trabajo [ 19 ], se realizaron los diseños de diversas piezas mecánicas que permiten el funcionamiento correcto de botones, ruletas y selectores, incluyendo para ello diversas piezas auxiliares de soporte. Todas las impresiones fueron llevadas acabo usando impresoras de filamento y PLA como material. Este tipo de impresión permite sacar piezas individuales de forma más rápida, aunque la resolución de las piezas, así como el acabado superficial son inferiores a los obtenidos con impresión en resina. Existía un problema con las ruletas asociadas los codificadores rotatorios (encoders), ya que sufrían de un desgaste pronunciado debido a los esfuerzos de torsión propios del movimiento de estos. Además, los botones presentaban un acabado mejorable, con poca resolución en los textos. Este acabado puede ser mejorado notablemente al cambiar de técnica de impresión. Aprovechando la compra de una impresora de resina hecha por el departamento de Ingeniería Aeroespacial, se procederá a realizar pruebas de impresión de los distintos componentes. 3.1 Técnicas de impresión 3.1.1 Impresión con filamento Las impresoras de filamento se basan en la deposición de material sobre una cama caliente, mediante extrusión. Un material comúnmente usado es el PLA (Ácido politáctico) que debe ser calentado hasta una temperatura de 200 o C para garantizar que fluya correctamente, aunque es normal realizar impresiones con temperaturas algo superiores. La cama de impresión suele calentarse a una temperatura de 220oC. El parámetro que determina la precisión máxima que permite obtener este tipo de impresoras es el diámetro de la boquilla de extrusión. Este diámetro, en el caso particular de las impresoras que pertenecen al departamento de Ingeniería Aeroespacial es de 0.4 mm. El tiempo de impresión usando esta tecnología depende principalmente del volumen de PLA necesario, por lo que una reducción en el relleno de la pieza acelera la impresión. A continuación se nombran algunas propiedades del PLA: •Densidad: 1.3 g/cm3 •Resistencia a tracción: 37 MPa •Módulo de flexión: 4 GPa •Elongación a la rotura: 6% 3.1.2 Impresión con resina Las impresoras de resina se basan en la solidificación de resina mediante la aplicación de luz ultravioleta. En este caso, tanto la pantalla como el tipo de resina afectan en gran medida a la calidad de las impresiones. Por ello, es necesario mantener en buen estado todas aquellas partes que estén entre la pantalla y la pieza. Los acabados que se pueden obtener mediante este tipo de impresión pueden llegar a tener una precisión de 0.05 mm. La temperatura de funcionamiento recomendada es de entre 15 o C y 35 o C, aunque la resina puede precalentarse antes de su uso a una temperatura inferior a 60oC. 19
20 Capítulo 3. Diseño mecánico del panel A continuación se nombran algunas propiedades de la resina estándar de Anycubic [3]: •Densidad: 1.13 g/cm3 •Resistencia a tracción: 40-50 MPa •Módulo de flexión: 1.4-1.6 GPa •Elongación a la rotura: 12-16% 3.2 Diseño en CATIA En esta sección se detalla en diseño de cada una de las piezas realizadas en este trabajo. Se evitará comentar aquellas piezas cuyo diseño no ha sido modificado respecto al trabajo [19]. 3.2.1 Botón El diseño de los botones se ha visto modificado significativamente. En primer lugar, se ha optado por una distinta separación del conjunto que forma el botón. En la figura 3.1, se realiza un esquema de las partes del botón que no corresponde completamente con las versiones de los botones, pero que sirve para ilustrar fácilmente los cambios realizados en el diseño. Anteriormente, el botón estaba compuesto por dos partes: cuerpo (pieza negra unida con pieza roja) y tapa (pieza azul). Tras el rediseño, el botón está formado por dos partes: cuerpo (pieza negra unida a pieza azul) y bajo (pieza roja). Este cambio está motivado por la necesidad de eliminar las pestañas de unión entre piezas en la zona más cercana a la cara donde van los grabados, ya que los soportes suponen una interferencia que no permite la iluminación uniforme de las zonas deseadas. Además, en el diseño de los botones se incluyen unas piezas que funcionan de separadores, dividiendo la estancia interna del botón en 2 para poder alojar dos LED y que cada uno ilumine la mitad del botón. Figura 3.1 Perfil esquema botón. En la figura 3.2 se muestra el diseño del botón VORD, usado como ejemplo. Este botón cuenta con unas pequeñas pestañas en su interior que permiten la instalación de los separadores. En su superficie externa cuenta con texto y un rectángulo grabado, realizando una operación de vaciado en CATIA para reducir su
3.2 Diseño en CATIA 21 espesor. Esto permite generar zonas translúcidas que permitan el paso de una mayor intensidad lumínica a través de ellas. Para las superficies traslúcidas, se realizaron pruebas los siguientes espesores. 0.2 mm, 0.4 mm, 0.6 mm, 0.8 mm y 1 mm. Las superficies con menor espesor, como cabe esperar, consiguen una mayor iluminación de las zonas deseadas. Sin embargo, para espesores menores a 0.6 mm se dificulta bastante su fabricación, debido a la fragilidad de dichas superficies. Durante la eliminación manual de los soportes de impresión, estas superficies se quiebran con mucha facilidad, dejando la mayoría de los botones inservibles. Al momento de crear los soportes de impresión de estas piezas, es conveniente no crearlos de forma automática, ya que el emplazamiento de estos soportes en las zonas más delgadas es un factor de muy alto riesgo para la integridad de los botones. (a) Vista frontal. (b) Vista trasera. Figura 3.2 Modelo en CATIA del botón VORD. Se pueden clasificar todos los botones atendiendo al número de LED presente en su interior. Existen botones que cuentan con cero, uno o dos LED en su interior, dependiendo principalmente de la función que desempeñen. Los botones del panel EFIS cuentan con dos LED, uno amarillo ilumina el texto con la función del botón, mientras que otro verde solo está iluminado cuando esa función está activa. En cambio, los botones presentes en el panel de avisos cuentan con un número distinto de LED cada uno. Tabla 3.1 LED correspondientes cada botón del panel avisos. Botón LED 1 LED 2 Autoland Rojo - Master Warning Rojo - Master Caut Amarillo - Chrono - - Side Stick Pirority Verde Rojo El nuevo diseño se ha realizado pensando en la inclusión de esta pared separadora, como la mostrada en la figura 3.3, que permita incluir dos LED dentro de cada botón. Esta pared debe ser lo suficientemente delgada para no interferir con los grabados de la cara superficial. Por ello, se ha optado por introducir este separador de 0.5 mm de espesor, que tras un proceso de pintura consigue eliminar en gran medida las interferencias lumínicas entre los distintos LED. El proceso de acondicionamiento de las piezas, tras su fabricación, se comentará más adelante, en una subsección específica para ello. Para poder accionar el botón es necesario que posea una superficie plana en la parte inferior. En la figura 3.4 se muestra el diseño cierre bajo del botón, que presenta 4 orificios pasantes para permitir la instalación de los LED en el interior del botón. Además, cuentan con unos soportes a 30 o que permiten que los LED descansen apuntado hacia el separador. En las figuras 3.5 y 3.6 se muestran otros dos modelos de botones: cuadrado y redondo. Estos dos tipos de botones son los utilizados en el panel de avisos. Para el caso de los botones cuadrados se ha realizado también el diseño de las piezas bajo y separador, aunque no se incluye en este documento imágenes ya que son análogas a sus homónimas rectangulares.
22 Capítulo 3. Diseño mecánico del panel Figura 3.3 Modelo en CATIA del separador interior del botón rectangular. Figura 3.4 Modelo en CATIA del bajo del botón rectangular. Figura 3.5 Modelo en CATIA del botón AUTOLAND.
3.2 Diseño en CATIA 23 Figura 3.6 Modelo en CATIA del botón tipo redondo. 3.2.2 Ruleta El diseño de la ruleta se ha modificado ligeramente, ajustando las dimensiones de esta para garantizar un juego suficiente con el anillo exterior y añadiéndole el texto "PULL STD" para que se asemeje más aún a la ruleta real. Figura 3.7 Modelo en CATIA de la ruleta con texto grabado. No se ha realizado el rediseño de los modelos de ruleta presentes en el autopiloto, aunque una vez realizadas las pruebas en resina sería posible sustituirlas por su versión con grabado en la superficie externa, de forma que se asemejase más a los presentes en el simulador. 3.2.3 Selectores El diseño de estas piezas ha sido completamente nuevo, no se ha utilizado ningún modelo anterior. Se ha realizado teniendo en cuenta las dimensiones de panel y que permitiese un correcto agarre con el selector de 8 posiciones.
30 Capítulo 4. Diseño electrónico del panel Figura 4.1 Esquemático de la PCB de un botón. Figura 4.2 Rutado de la PCB de un botón. Figura 4.3 Visualización tridimensional de la PCB de un botón.
4.2 Diseño en EAGLE 31 4.2.2 PCB 2: Botón 2 La placa de circuito impreso descrita a continuación pretende implementar dos botones y 4 LED. La lógica de diseño en completamente análoga a su hermana pequeña, contando con dos LED permanentes, dos LED controlados por el Arduino y dos interruptores. EL motivo de realizar una PCB que contenga dos interruptores es la falta de espacio disponible tras los botones FD y LS. Estos botones están muy cerca uno de otro, lo que imposibilita anclar dos PCB de un botón. En la figura 4.4 se muestra el esquemático del circuito. En la figura 4.5 se muestra la distribución de los componentes en las dos capas utilizadas en este diseño. Se puede apreciar que la dificultad para rutar este circuito es mayor que el anterior y ha sido necesario el uso de varias vías que permiten conectar las distintas capas. En la figura 4.6 se muestra el modelo tridimensional del circuito completo, muy similar al circuito anterior. En esta PCB los LED permanentes son de color amarillo, mientras que los controlables son verdes.
32 Capítulo 4. Diseño electrónico del panel Figura 4.4 Esquemático de la PCB de dos botones. Figura 4.5 Rutado de la PCB de dos botones. Figura 4.6 Visualización tridimensional de la PCB de dos botones.
4.2 Diseño en EAGLE 33 4.2.3 PCB 3: Botón 5 Esta placa se ha diseñado para unir los botones superiores del panel EFIS: CSTR, WPT, VOR.D, NDB y ARPT. La escasa separación entre estos imposibilita el uso de placas que contengan un solo botón, al igual que en la PCB de dos botones. Esta PCB permite implementar 5 botones y 10 LED de forma análoga a las anteriores. En la figura 4.7 se muestra el esquemático propio de esta placa. En la parte izquierda de la imagen, se pueden distinguir los 3 conectores usados y su conexiones. En la parte central se aprecia la parte del circuito correspondiente a los interruptores y el LED de alimentación. En la zona derecha se encuentran todos los LED usados, situados arriba los controlables y abajo los permanentemente encendidos (con funcionamiento similar al LED de alimentación). A continuación se listan los componentes usados en este circuito: •5 interruptores 8168 •11 resistencias SMD de 2kΩ •5 resistencias SMD de 2kΩ •1 LED SMD verde •5 LED 3mm verde •5 LED 3mm amarillo •3 conectores de 4 pines En la figura 4.8 se muestra la distribución de componentes a lo largo de la PCB de 4 capas. En este caso, debido al mayor número de señales necesarias se ha optado por introducir dos capas intermedias que permiten alimentar los distintos componentes sin necesidad de rutar las señales de alimentación y tierra. Finalmente, en la figura 4.8 se muestra representación 3D de la PCB. En este caso, al igual que en la PCB de dos botones, todos los LED permanentes son amarillos, mientras que los controlables son verdes.
34 Capítulo 4. Diseño electrónico del panel Figura 4.7 Esquemático de la PCB de 5 botones. Figura 4.8 Rutado de la PCB de 5 botones.
4.2 Diseño en EAGLE 35 4.2.4 PCB 4: Selectores En esta PCB se ha incluido dos tipos de selectores, de 8 posiciones y de 12 posiciones. Esto se debe a que los selectores de 12 posiciones se usaron para el panel correspondiente al control del autopiloto, mientras que los de 8 posiciones se pidieron para que llegaran a la vez qe las PCB. Es por ello, que era necesario ubicar las huellas de ambos selectores, para en caso de no funcionar los selectores de 8 posiciones, poder usar los de 12. En el caso de esta placa de circuito impreso, existen componentes electrónicos que irán conectados a ella a través de cables, siendo sus lugares de emplazamiento otros. Estos componentes son los dos interruptores ON-OFF-ON, que irán colocados directamente en sus correspondientes agujeros en la zona inferior del panel. En la figura 4.11 se muestra el esquemático del circuito. A la izquierda están representados dos los interruptores ON-OFF-ON, bajo el LED de alimentación. En la zona central y derecha tenemos dos estructuras que se repiten y representan los selectores de 8 y 12 posiciones. Se ha realizado una conexión entre los pines de igual número entre ambos selectores para permitir el uso de ambos (de forma no simultánea). El funcionamiento de estos interruptores se puede ver de mejor manera en la figura 4.10. La flecha verde representa la parte móvil del selector que realiza una conexión entre sus dos extremos. De esta forma la tensión de salida viene dada por la ecuación (4.1) , donde P es el número del pin conectado en cada momento. Vout =(8−P)R (8−P)R+Rin (4.1) En este caso, se ha optado también por diseñar una placa de 4 capas. En la figura 4.12 puede verse el rutado y la distribución de componentes de esta placa de circuito impreso. En la figura 4.13 se puede apreciar la vista tridimensional de la PCB con nombre selectores. En esta vista tridimensional están representados en la cara superior los selectores de 8 posiciones, mientras que en la cara inferior aparecen los selectores de 12 posiciones con unos vástagos más largos. 4.2.5 PCB 5: Shield Arduino El objetivo de esta placa es principalmente la organización del cableado, que permita realizar las conexiones de manera más sencilla. Además, se ha aprovechado para incluir dos interruptores necesarios para el correcto funcionamiento de dos funciones relacionadas con el encoder. Esta placa permite realizar la lectura de los botones mediante una rutina de interrupción, siendo que los diodos se han incluido aquí. Componentes: •Diodos 1N4148 En la figura 4.14 se muestra el esquemático asociado a esta PCB. Se aprecia en el centro de la imagen el Arduino, acompañado a su derecha por todos los conectores que van hacia otras placas. A la izquierda de la imagen se pueden ver los diodos empleados en la rutina de interrupción y los dos interruptores ON-OFF que acompañan al encoder. En la figura 4.15 se muestra la configuración de esta placa y su posición relativa con el Arduino. En este caso, se han añadido 5 vías conectadas a la señal de 5 V y otras 5 conectadas a tierra. Debido a que se ha dejado preparada la placa para incluir un mayor número de componentes (en caso hiciese falta más adelante), se ha considerado oportuno incluir estas vías que permitan alimentar esos componentes. En la figura 4.16 se muestra el modelo tridimensional de la placa, donde se aprecia que los únicos componentes son los conectores, diodos y resistencias SMD. Además, no se ve debido a la perspectiva escogida, pero también cuenta con filas de conectores JST macho, que permiten conectar la PCB a la placa de Arduino. 4.2.6 PCB 6: Adafruit i2c encoder Esta PCB, comercializada por Adafruit, no ha sido diseñada en este trabajo. Su uso está motivado por el intento de mejorar la lectura de las señales generadas por los distintos encoders. Esta placa ofrece una forma sencilla de manejar los encoders usando el protocolo de comunicación I2C para la transmisión de datos [ 1 ]. El protocolo I2C es un estándar de comunicación serial síncrona desarrollado por Philips Semicondutor que permite la conexión de múltiples dispositivos en un solo bus de datos. Este protocolo usa dos líneas: SDA y SCL. SDA (Serial Data) es la línea que porta la información, mientras de SCL (Serial Clock) es usada para sincronizar los datos transmitidos. Este protocolo permite que múltiples dispositivos esclavos se conecten mediante direcciones únicas a un maestro que controla la comunicación.
36 Capítulo 4. Diseño electrónico del panel En el caso particular de este trabajo, poder definir las direcciones y conectar varios dispositivos es útil para poder mejorar las capacidades del autopiloto, donde las respuestas de los encoders generan falsos movimientos o a veces no responden correctamente. 4.3 Posibles mejoras en el diseño El diseño de estas PCB incluye componentes cuyos terminales están preparados para soldar un cable a sus extremos. Este tipo de conectores presentan una forma rectangular en planta y un agujero pasante visto de perfil. Esta diferencia hace que los agujeros redondos creados en las huellas del software de diseño EAGLE no sean las óptimas. Para los componentes usados en este trabajo, no es algo relevante, ya que los agujeros redondos permiten configurar el diámetro suficiente para introducir estos terminales sin que los pads de soldadura se toquen. Sin embargo, a la hora de soldar requieren un mayor aporte de material (estaño de soldadura). Una solución más efectiva, encontrada posteriormente, es la preparación manual de pads que contengan agujeros ovalados. Esta operación no se puede realizar de forma automática mediante el software EAGLE, pero en la documentación de JLC PCB se comenta brevemente una posible solución a este problema para optimizar el diseño. La solución propuesta consiste en modificar la huella de los componentes para incluir un dibujo en la capa de fresado. Puede consultarse más información en el apartado "Platted Slotted Holes" de la documentación [10]. A la hora de realizar las comprobaciones se encontró un fallo de diseño en la PCB que va conectada directamente al Arduino. Este error fue detectado ya que al ir chequeando el correcto funcionamiento de todas las PCB, estas funcionaban correctamente. Sin embargo, al utilizar esta PCB como conexión intermedia entre el Arduino y las otras, ocurrían fallos de lectura. Se descubrió entonces que la placa presentaba un fallo de alimentación. Aunque en el esquemático el pin de 5 V del Arduino tuvisese asocidado un nombre, este resultó que no estaba conectado al plano de 5 V de la placa de circuito impreso. Este hecho provocaba que la alimentación de todas las placas conectadas a esta no fuese correcta. La solución no fue más que soldar el pin de 5 V que va conectado al Arduino con una de las tomas de 5 V libres de la placa y se hizo una conexión análoga para la toma de tierra. En la figura 4.17 se muestra el resultado de la placa tras la corrección del error junto con el Arduino Mega. 4.4 Integración de las PCBs en el panel En esta sección se presenta conjunto formado por el panel EFIS y las PCB que van colocadas fijadas a este. Se presentarán pues imágenes que muestren el panel, las placas con todos sus componentes montados y la tornillería necesaria para su unión. Este montaje ha permitido depurar el diseño de las placas de circuito impreso, sirviendo para comprobar la correcta localización de los soportes, así como la compatibilidad en el montaje. La figura 4.18 muestra el modelo tridimensional conjunto del EFIS y las placas asociadas a este panel. La figura 4.19 muestra el panel montado con la electrónica. Es esta imagen se aprecian los cables que conectan los interruptores a la PCB selectores y los cables usado para conectar los LED.
4.4 Integración de las PCBs en el panel 37 Figura 4.9 Visualización tridimensional de la PCB de 5 botones. 2 8 4 17 6 5 3 R R R R R R R Vout Rin Vcc Figura 4.10 Esquemático de las conexiones de un selector de 8 posiciones genérico.
38 Capítulo 4. Diseño electrónico del panel Figura 4.11 Esquemático de la PCB de selectores.
4.4 Integración de las PCBs en el panel 39 Figura 4.12 Rutado de la PCB de selectores. Figura 4.13 Visualización tridimensional de la PCB de selectores.
46 Capítulo 5. Desarrollo software </output> </generic> </PropertyList> Archivo de entrada XML Este documento debe incluirse en el mismo directorio que el archivo XML de salida y contiene información análoga a la descrita anteriormente. La particularidad de este documento es que se puede asignar una propiedad no existente anteriormente, por lo que al realizar la lectura se creará esta nueva propiedad. Código 5.2 Archivo XML de definición de variables de salida de FlightGear (EFIS_UDP_IN.xml). <PropertyList> <generic> <output> <line_separator>\n</line_separator> <var_separator>,</var_separator> #BOTONES <chunk> <name>button_CSTR</name> <type>bool</type> <format>%d</format> <node>/input/arduino/EFIS/CSTR</node> </chunk> </output> </generic> </PropertyList> Configuración de arranque FlightGear Una vez creados los archivos XML de entrada y salida, se requiere del uso del código 5.3 para la correcta configuración y uso de los sockets. Este código debe incluirse en los ajustes adicionales antes de comenzar el vuelo en FlightGear. Código 5.3 Código complementario para la configuración de los sockets. --generic=socket,in,60,127.0.0.1,8000,udp,EFIS_UDP_IN --generic=socket,out,60,127.0.0.1,8040,udp,EFIS_UDP_OUT En el código pueden apreciarse los siguientes parámetros: •60: Valor de frecuencia en Hz •127.0.0.1: Host local de la comunicación •8000 / 8040: Puertos configurados para entrada y salida respectivamente •udp: protocolo de comunicación •EFIS_UDP_*: archivos de entrada y salida Inclusión archivos Nasal En la siguiente subsección se comentarán las ideas básicas acerca de los archivos de Nasal. Sin embargo, para que estos sean ejecutados cuando el programa está en funcionamiento es necesario incluirlos dentro de la configuración de la aeronave. Para ello hay que localizar el archivo "fsroot\data\Aircraft\A320-family\A320- main.xml" e incluir en este las líneas mostradas en el código 5.4. Código 5.4 Archivo XML de configuración de modelo de aeronave (A320-main.xml).
5.1 Implementación de un botón funcional 47 <PropertyList> <nasal> <UDP-control> <file>Aircraft/A320-family/Nasal/FMGC/FCU_Button.nas</file> <file>Aircraft/A320-family/Nasal/FMGC/FCU_out.nas</file> <file>Aircraft/A320-family/Nasal/Panels/EFIS_Button.nas</file> <file>Aircraft/A320-family/Nasal/Panels/EFIS_OUT.nas</file> </UDP-control> </nasal> </PropertyList> Funciones Nasal Si bien es posible crear funciones usando scripts de Nasal, la aproximación más cómoda es comprobar qué funciones están asociadas a cada botón e intentar hacer uso de ellas si es posible. En el caso del botón CSTR, buscando en el archivo "\fsroot\data\Aircraft\A320-family\Models\FlightDeck\a320.flightdeck.xml" se puede encontrar el extracto de código 5.5. En este, se puede observar como se introducen las funciones a los objetos animados del panel. Usando las etiquetas <binding>,<command> y<nasal> es posible vincular una función de Nasal al objeto animado. En este caso, la función asociada al botón CSTR es la función fcu.cpt_efis_btns(). El contenido de esta función será revisado en el apartado de Nasal. Código 5.5 Archivo XML de configuración de la cabina (a320.flightdeck.xml). <PropertyList> <animation> <type>pick</type> <object-name>cstr</object-name> <action> <button>0</button> <repeatable>false</repeatable> <binding> <condition> <greater-than-equals> <property>systems/electrical/bus/dc-ess</property> <value>25</value> </greater-than-equals> </condition> <command>nasal</command> <script> if (getprop("/instrumentation/efis/inputs/CSTR") != 1) { fcu.cpt_efis_btns("cstr"); } else { fcu.cpt_efis_btns("off"); } </script> </binding> <binding> <command>nasal</command> <script>setprop("sim/sounde/btn1", 1);</script> </binding> </action> </animation> </PropertyList>
48 Capítulo 5. Desarrollo software 5.1.2 Archivos Nasal Archivos existentes Una vez descubierta la función asociada al botón, es necesario encontrar esta. En este caso, la función fcu.cpt_- efis_btns() se encuentra dentro del archivo "\data \Aircraft\A320-family\Nasal\Panels\efis.nas". Dentro de este archivo podemos encontrar varias funciones definidas, que gobiernan el comportamiento de ciertos elementos del panel EFIS. En el código 5.6 se incluye un extracto de este archivo que contiene las dos funciones usadas para que el botón funcione. La función cpt_efis_btns es llamada con un argumento de entrada dependiendo del estado del botón. Como puede comprobarse en el código 5.5, el argumento de entrada es "cstr" si el botón estaba desactivado y "off" si el botón ya estaba activado. Este argumento de entrada determina a su vez un vector de entrada a la función setEfisOptions, que ya se encarga de modificar los valores de las variables del árbol de propiedades. Código 5.6 Código Nasal donde están definidas las funciones del panel EFIS (efis.nas). var cpt_efis_btns = func(i) { if (i == "cstr") { setEfisOptions(0, 0, 1, 0, 0, 0, 0); } else if (i == "wpt") { setEfisOptions(0, 0, 0, 0, 0, 0, 1); } else if (i == "vord") { setEfisOptions(0, 0, 0, 1, 0, 1, 0); } else if (i == "ndb") { setEfisOptions(0, 0, 0, 0, 1, 0, 0); } else if (i == "arpt") { setEfisOptions(0, 1, 0, 0, 0, 0, 0); } else if (i == "off") { setEfisOptions(0, 0, 0, 0, 0, 0, 0); } } var setEfisOptions = func(n, a, b, c, d, e, f) { pts.Instrumentation.Efis.Inputs.arpt[n].setBoolValue(a); pts.Instrumentation.Efis.Inputs.cstr[n].setBoolValue(b); pts.Instrumentation.Efis.Inputs.dme[n].setBoolValue(c); pts.Instrumentation.Efis.Inputs.ndb[n].setBoolValue(d); pts.Instrumentation.Efis.Inputs.vord[n].setBoolValue(e); pts.Instrumentation.Efis.Inputs.wpt[n].setBoolValue(f); }; Archivo Nasal de entrada Ya estamos en condiciones de editar el archivo donde incluiremos la programación propia La comunicación es correcta, se han creado propiedades que almacenan las variables de entrada y se han identificado las funciones que participan en la lógica detrás de la pulsación del botón CSTR. En el código 5.7 se incluye una función que desencadena las mismas acciones que pulsar el botón en la pantalla. La función setlistener(property_- path,func,priority,persistent) permite monitorizar los cambios que se producen en una propiedad y ejecutar una acción cuando esta propiedad cambie. En este caso, la propiedad asociada es aquella que almacena el estado del botón CSTR físico (señal que nosotros transmitimos desde el Arduino hasta FlightGear). La función que se ejecuta está definida ahí mismo y usa de entrada el estado de la variable para llamar a la función cpt_efis_btns. En este caso ya que la función que modifica el comportamiento ya estaba definida con anterioridad, no se requiere programar más que una llamada a esta. Durante todo el trabajo se usan valores de prioridad igual a 1 y persistencia igual a 0. La prioridad determina que función oyente se ejecuta primero, mientras que la persistencia permite que la función oyente no se desactive tras realizar la función asociada y siga activa. Código 5.7 Código Nasal donde están definidas las funciones del panel EFIS (efis.nas).
5.1 Implementación de un botón funcional 49 setlistener("input/arduino/EFIS/CSTR", func(state) { if (state.getBoolValue()) { if (getprop("/instrumentation/efis/inputs/CSTR") != 1) { fcu.cpt_efis_btns("cstr"); } else { fcu.cpt_efis_btns("off"); } state.setBoolValue(0); } }, 1, 0); Archivo Nasal de salida En el caso que concierne al botón CSTR, ya que su estado puede representarse mediante una variable booleana no requiere de ninguna operación de cambio de formato para poder enviarse. Se tratará pues en este apartado el caso del valor en HPa mostrado por el altímetro. En el código 5.8 se incluye las 3 funciones usadas para modificar el formato de esta variable. • setlistener: Realiza un seguimiento de la propiedad y, cuando esta cambia de valor, llama a la función updateHpaSetting • format_hpa: Recibe un valor y lo devuelve con el formato%04d (entero de 4 dígitos que usa 0 como relleno) • updateHpaSetting: Es activada cuando la propiedad cambia de valor, obtiene su valor, llama a la función format_hpa y almacena el resultado en una propiedad nueva mediante la función setprop(property, value) Código 5.8 Código Nasal donde están definidas las funciones del panel EFIS (efis.nas). var format_hpa = func(val) { return sprintf("%04d", val); }; var updateHpaSetting = func { var setting_hpa = getprop("/instrumentation/altimeter/setting-hpa"); var formatted_setting_hpa = format_hpa(setting_hpa); setprop("/output/EFIS/formatted-setting-hpa", formatted_setting_hpa); }; setlistener("/instrumentation/altimeter/setting-hpa", updateHpaSetting); 5.1.3 Archivos Python El principal archivo de Python contiene el código necesario para realizar el intercambio de información entre el Arduino y FlightGear. En el código 5.9 se muestra un extracto del archivo Python_out.py que incluye la deficinición de los sockets y el bucle de comunicación. Esta versión del archivo implementa la comunicación los valores de los 5 botones de visualización de datos opcionales y sus LED asociados. El bucle de comunicación realiza, en el orden expuesto, las siguientes acciones: 1. Conexión, recepción y decodificación de datos provenientes de FlightGear mediante el socket de salida. 2. Selección y envío a través del puerto serie de valores al Arduino EFIS izquierdo, seleccionados mediante la función encode_datagram_led. 3. Lectura del mensaje enviado por el Arduino EFIS izquierdo a través del puerto serie. 4. Transformación de valores recibidos desde el Arduino y envío a FlightGear mediante el socket de entrada.
50 Capítulo 5. Desarrollo software El bucle de comunicación cuenta con mensajes que son mostrados en la consola para facilitar el debugging del código. También cuenta con bloques try/except que permiten aislar los errores para rastrear con mayor facilidad el origen del fallo. Código 5.9 Archivo de Python encargado de la comunicación (Python_out.py). Socket_OUT = socket(AF_INET, SOCK_DGRAM) Socket_OUT.setsockopt(SOL_SOCKET, SO_SNDBUF, 4096) Socket_OUT.bind((HOST, PORT_OUT)) Socket_IN = socket(AF_INET, SOCK_DGRAM) Socket_IN.setsockopt(SOL_SOCKET, SO_SNDBUF, 4096) Socket_IN.connect((HOST, PORT_IN)) while True: try: datagram_rawB_OUT, adrinput = Socket_OUT.recvfrom(2048) datagram_rawS_OUT = datagram_rawB_OUT.decode('ascii')[:-1] logging.info(f"Received datagram from FlightGear: {datagram_rawS_OUT}") datagram_led = encode_datagram_led(datagram_rawS_OUT) logging.info(f"Encoded datagram for LED: {datagram_led}") arduino_EFIS_left.write(datagram_led.encode('UTF-8')) logging.info(f"Data sent to Arduino (LED): {datagram_led.encode('UTF-8')}" ) while arduino_EFIS_left.in_waiting > 0: try: response_EFIS_left = arduino_EFIS_left.readline().decode('utf-8').strip () logging.info(f"Arduino response: {response_EFIS_left}") button_states = transform_serial_info_EFIS(response_EFIS_left) Socket_IN.send(button_states.encode('ascii')) logging.info(f"Data sent to FlightGear: {button_states}") except Exception as e: logging.error(f"Error reading from Arduino: {e}") except Exception as e: logging.error(f"Error in main loop: {e}") time.sleep(1) 5.1.4 Archivos Arduino 5.1.5 Arduino EFIS El código 5.10 muestra el código completo utilizado para la lectura de las señales correspondientes a 5 botones, su envío mediante puerto serie y la recepción por puerto serie de los estados de los LED asociados a esos botones. Al final del código aparece una función que pretende ser activada mediante una interrupción para generar la lectura de los botones, aunque no se ha llegado a sustituir por la función actual. La lectura de los botones actualmente se realiza mediante la función func_buttons que no permite realizar lecturas con un tiempo menor a bump_time (tiempo de pulsación) entre ellas. Código 5.10 Código cargado en el Arduino EFIS izquierdo (botones_EFIS.ino). ///////////////////////// BOTONES ///////////////////////////
5.1 Implementación de un botón funcional 51 const int bump_time = 250; const int num_buttons = 5; //CSTR,WPT,VORD, NDB, ARPT const int buttons [] = {38, 36, 24, 30, 28}; bool state_buttons [] = { 0, 0, 0, 0, 0}; bool press_event = 0; unsigned long press_time = 100; ///////////// LEDS ////////////////// //botones_5 const int led [] = {22, 26, 32, 34, 40}; unsigned long t_send = 0; const int fr = 100; ////////////// SETUP /////////////// void setup() { Serial.begin(1000000); while (!Serial) delay(10); if (! ss.begin(SEESAW_ADDR)) { while(1) delay(10); } encoder_position = ss.getEncoderPosition(); ss.enableEncoderInterrupt(); for (int i = 0 ; i<5; i++){ pinMode (led[i], OUTPUT); } delay(100); } /////////////// LOOP ////////////// void loop() { func_buttons(); if (millis()> t_send+fr){ t_send = millis(); envio(); lectura(); memset(state_buttons, 0, num_buttons); } } ////////// FUNCTIONS /////////// void lectura() { while(Serial.available() != 0){ String data = Serial.readStringUntil('\n'); digitalWrite(led[0],data.substring(0,1) == "1"); digitalWrite(led[1],data.substring(1,2) == "1"); digitalWrite(led[2],data.substring(2,3) == "1"); digitalWrite(led[3],data.substring(3,4) == "1"); digitalWrite(led[4],data.substring(4,5) == "1"); } } void envio() { char buffer[80]; //specified format below uses 11 characters: 2 brackets + 4 comas + 5 buttons sprintf(buffer, "{%d,%d,%d,%d,%d}", \ state_buttons [0], state_buttons [1], state_buttons [2], state_buttons [3], state_buttons [4]); Serial.println(buffer);
52 Capítulo 5. Desarrollo software } void func_buttons() { if (millis() > press_time + bump_time){ int i = 0; press_event = 0; while (i<7 && !press_event){ if(digitalRead(buttons[i])==1){ press_time = millis(); state_buttons[i] = 1; press_event = 1; } else{ i++; } } } } ///////////////// INTERRUPTIONS ////////////////// /* void read_buttons () { for (int i = 0; i < 6 ; i++) { state_buttons[i] = digitalRead(buttons[i]); } } */ 5.1.6 Arduino Pantalla El otro Arduino usado en este trabajo controla la pantalla OLED 1.3 SH1106 (128x64), modelo escogido para la realización de este trabajo. Para hacer uso de esta se ha instalado la librería [ 14 ], que contiene las funciones y fuentes necesarias para su correcto funcionamiento y personalización. Para las representaciones numéricas se han escogido dos fuentes cuyos caracteres numéricos se asemejan a los de un display de 7 segmento. Sin embargo, estas fuentes no incluyen letras, por lo que para representar la cadena de texto "Std" se ha escogido otra fuente con un tamaño suficiente para poder visualizar el texto correctamente. Todos estos parámetros están incluidos dentro de la función updateDisplay incluida en el código 5.11. Código 5.11 Código cargado en el Arduino de la pantalla (botones_EFIS.ino). #include <Arduino.h> #include <U8g2lib.h> #ifdef U8X8_HAVE_HW_SPI #include <SPI.h> #endif #ifdef U8X8_HAVE_HW_I2C #include <Wire.h> #endif // Pin Definitions uint8_t PIN_CS_1 = 22; uint8_t PIN_RES_1 = 29; uint8_t PIN_DC = 2; // Global Variables for Display bool altimeter_std = 0;
5.1 Implementación de un botón funcional 53 bool altimeter_inHg = 0; bool s = 0; unsigned short int altitude_hpa = 0; float altitude_inhg = 0.00; U8G2_SH1106_128X64_NONAME_F_4W_HW_SPI disp1(U8G2_R0, PIN_CS_1, PIN_DC, PIN_RES_1); void setup() { // Initialize Serial Communication Serial.begin(115200); Serial.setTimeout(25); // Initialize Display disp1.begin(); delay(10); // Stabilization delay } // Function to Update the Display based on received data void updateDisplay(bool altimeter_std, bool altimeter_inHg, unsigned short int altitude_hpa, float altitude_inhg) { disp1.clearBuffer(); if (altimeter_std) { disp1.setFont(u8g2_font_logisoso34_tf); // Switch to a font that supports letters for "Std" disp1.drawStr(30, 50, "Std"); // Adjust position for best visibility } else { if (altimeter_inHg) { disp1.setFont(u8g2_font_7_Seg_41x21_mn); char buffer[6]; dtostrf(altitude_inhg, 5, 2, buffer); // Convert float to string with 2 decimal places disp1.drawStr(0, 12, buffer); // Display the number with the correct font } else { // Use the 7-segment font for hPa disp1.setFont(u8g2_font_7Segments_26x42_mn); disp1.drawStr(0, 48, String(altitude_hpa).c_str()); // Display hPa value } } disp1.sendBuffer(); } void loop() { // Wait for incoming data while (Serial.available() == 0) {} // Read the incoming data String data = Serial.readStringUntil('\n'); // Parse the received data for display altimeter_std = data.substring(0, 1) == "1"; altimeter_inHg = data.substring(1, 2) == "1";
54 Capítulo 5. Desarrollo software altitude_hpa = data.substring(2, 6).toInt(); altitude_inhg = data.substring(6, 11).toFloat(); s = data.substring(11, 12) == "1"; // Update the display based on the parsed data updateDisplay(altimeter_std, altimeter_inHg, altitude_hpa, altitude_inhg); }
6 Implementación y pruebas T ras completar el panel físico y entender cómo implementar uno de los botones, es posible realizar la implementación del resto de funciones asociadas a los botones. En esta sección se irá comentando el orden en el que se han ido implementando todas las funciones y los fallos obtenidos durante el proceso. 1. Salidas LED botones: CSTR, WPT, VORD, NDB y ARPT. 2. Entradas botones: CSTR, WPT, VORD, NDB y ARPT. 3. Salida pantalla altímetro. 4. Selectores 8 posiciones. 5. Encoder e interruptores asociados. 6. Interruptores 3 posiciones. 7. Entradas y salidas del botón LS. En primer lugar se decidió realizar una primera versión que permitiera obtener información del simulador, ya que de esta forma no es necesario realizar ningún código de Nasal que modifique el comportamiento del simulador. Posteriormente, se pasó a introducir señales provenientes del Arduino y poder así controlar algunos de los botones. Una vez que ya se completaron estas dos tareas, las otras funciones no han supuesto un mayor problema. Para la salida por pantalla de la referencia del altímetro fue necesario programar un cambio de formato en las variables a representar. Los otros botones y selectores del simulador se han programado usando las funciones ya existentes de Nasal, en caso de que existieran. Para los controles que no tuvieran una función de Nasal asociada, se ha optado por usar las funciones getprop ysetprop para modificar sus valores y que se correspondan con lo esperado según las posiciones de los componentes físicos. • getprop("/path"): Permite obtener el valor de la propiedad dada la ruta especificada. Esta función es esencial para acceder a valores dentro del entorno de simulación. – Argumento de entrada: "/path" : Cadena de texto que especifica la ruta de la propiedad que se desea consultar. Esta ruta debe ser precisa y corresponder a una estructura válida dentro del árbol de propiedades del simulador. – Resultado: Valor de la propiedad si existe en la ruta especificada. Si la propiedad no se encuentra, retorna nil y puede lanzar un error si la ruta es inválida o no accesible. • setprop("/path", value): Utilizada para establecer o modificar el valor de una propiedad en el entorno del simulador. –Argumentos de entrada: ∗ "/path" : Cadena de texto que especifica la ruta de la propiedad que se quiere modificar. ∗ value : El valor que se desea asignar a la propiedad. Puede ser de cualquier tipo compatible con el sistema de propiedades, como números, cadenas de texto o valores booleanos. –Resultado: No obtiene resultado, únicamente realiza el cambio de valor de la variable. 55
62 Capítulo 8. Anexo 1: Proceso de impresión con resina • Selecciona el tipo de resina que vas a utilizar y ajusta los parámetros de exposición de acuerdo con las recomendaciones del fabricante (tiempo de exposición, altura de capa, etc.). En este caso se optó por un tiempo de exposición de 3 segundos. •Generar el archivo de impresión con formato PM3M. 8.4 Preparación de la impresora y resina • Realizar cuidadosamente la nivelación de la plataforma de impresión. El proceso de nivelación está documentado en el manual de la impresora, presente en el laboratorio para facilitar su consulta. •Agitar el recipiente que contiene la resina para homogeneizar la mezcla. •Llenar el tanque de resina en caso no tenga suficiente, sin sobrepasar el límite marcado. •Introducir la memoria FLASH y seleccionar el archivo de impresión deseado. •Cerrar correctamente la impresora y comenzar la impresión. 8.5 Limpieza y curado de las piezas Una vez finalizada la impresión, se procede a retirar y preparar las piezas. • Retirar la cama de impresión y escurrir brevemente para recuperar la mayor cantidad de resina posible. Es recomendable ayudarse de la espátula de plástico para recuperar la mayor cantidad de resina posible. •Retirar las piezas con cuidado de no dañarlas. Para ello, está disponible una espátula metálica. • Retirar los soportes de la pieza. Para piezas pequeñas o complejas es conveniente ayudarse de alguna herramienta para poder alcanzar los soportes que estén situados en zonas poco accesibles. • Si alguna pieza tiene un exceso de resina, es conveniente dejar reposar sobre una superficie que permita la deposición de la resina en un recipiente. De esta forma se recupera una mayor cantidad de resina y se generan menos residuos durante su limpieza. Este paso es especialmente crítico en piezas cuyo diseño incluye un vaciado de la pieza. •Introducir las piezas el baño de alcohol isopropílico y comenzar un proceso de centrifugado. • Si quedan restos de resina, repetir el proceso de centrifugado en alcohol o retirar las posibles partículas adheridas a su superficie con la ayuda de un pincel mojado en alcohol. También es posible realizar una limpieza final usando un limpiador ultrasónico. • Dejar secar por completo la pieza. Es conveniente posar las piezas sobre papel absorbente. Este proceso se alarga considerablemente para piezas huecas, aunque puede acelerarse usando una pistola de aire comprimido. • Curar las piezas. El proceso de curado depende de la resina utilizado, así como del tamaño de cada una de las piezas. Las piezas más grandes pueden requerir un mayor tiempo de curado. 8.6 Limpieza de la impresora Este proceso de limpieza es conveniente realizarlo durante los tiempos de limpieza y curado de piezas, para optimizar el tiempo. • Retirar la resina del tanque e introducir en un envase original. A ser posible, utilizar un envase exclusivo para la resina recuperada del tanque. Para introducir la resina en el bote original de resina Anycubic Standard, se ha impreso un embudo que facilita realizar el proceso manchando lo menos posible. Es necesario usar filtros de papel para evitar que posibles restos de resina solidificada entren en el envase. En caso de realizar varias impresiones consecutivas, es posible no realizar este paso siempre y cuando todas las piezas de la impresión anterior hayan sido correctamente impresas (las piezas no adheridas a la plataforma quedan como restos sólidos en el tanque). • En caso de retirar la resina del tanque, limpiar con alcohol isopropílico evitando dejar residuo alguno de resina.
8.7 Recuperación del alcohol 63 • Tras retirar las piezas de la plataforma, eliminar los restos de resina con un papel absorbente y alcohol isopropílico. • Limpiar el área próxima a la impresora, envases utilizados y embudo, así como todas las herramientas usadas durante todo el proceso. Aunque ciertos objetos no hayan estado expuestos al contacto directo con la resina es necesario limpiarlos si han sido manipulados mientras se tenían puestos los guantes de nitrilo. •Verificar que la pantalla y la membrana del tanque de resina no presentan ningún desperfecto. 8.6.1 Desperfectos en la membrana o pantalla La manipulación de la membrana del tanque de resina puede generar pequeñas perforaciones en esta. Estas perforaciones permiten el paso de la resina a través de ellas, pudiendo generar durante la impresión una serie de restos solidificados entre la membrana y la pantalla. Estas perforaciones pueden estar causadas por la falta de una correcta limpieza del tanque. Si este presenta algún resto sólido al comenzar al impresión, este será presionado contra al membrana por la plataforma. Es importante identificar estos fallos cuanto antes, para evitar problemas mayores. La membrana del tanque de resina es una película de FEP (propileno de etileno fluorado) que puede ser sustituida en caso de presentar desperfectos. La pantalla también puede ser sustituida, aunque generalmente se coloca un protector sobre esta para evitar que sea la pantalla la que sufra problemas durante las impresiones. Si los restos solidificados son escasos, se pueden tratar de eliminar usando un rascador y aplicando alcohol isopropílico. Es importante realizar esta acción con sumo cuidado. Si no fuese posible recuperar un buen estado del protector de pantalla, sería necesaria su sustitución. 8.7 Recuperación del alcohol El alcohol usado para la limpieza de las piezas se puede saturar de resina. Esto provoca que la limpieza sea menos efectiva, pudiendo llegar a ser contraproducente. Se considera que el alcohol está en mal estado cuando se ha saturado de resina o cuando tras la exposición a luz solar se ha curado parte de la resina presente en la mezcla. Figura 8.1 Piezas tras un proceso de limpieza fallido. En la figura 8.1 se muestra el resultado de la limpieza en alcohol con restos solidificados. Estos restos deben ser retirados de las piezas usando alcohol en condiciones óptimas, ya que de no ser retirado puede quedar adherido a la pieza y afectar al acabado superficial de la pieza. Es por ello que cuando el alcohol no presente la calidad necesaria para realizar una correcta limpieza de las piezas, se deben seguir los siguientes pasos. • Exponer en un envase transparente el alcohol a luz solar. Si es posible acceder al envase, es conveniente agitar el envase pasadas unas horas, para exponer a la luz solar distintas zonas de la mezcla. • Pasado un día, filtrar el alcohol y depositar en un envase limpio. Retirar los restos de alcohol depositados y limpiar el envase utilizado. En la figura 8.2 se puede apreciar los restos de resina ya solidificados. • Repetir los dos pasos anteriores hasta que el alcohol no genere residuos sólidos o hasta que estos no se puedan filtrar eficazmente.
64 Capítulo 8. Anexo 1: Proceso de impresión con resina • Si la resina queda con un color blanquecino, conviene realizar un proceso de destilación. Este proceso consiste en llevar el alcohol al punto de ebullición, condensar los vapores y recolectar el líquido destilado. Este líquido contendrá una mayor proporción de alcohol isopropílico, aunque no llegue a la misma pureza que originalmente. •Envasar correctamente el alcohol. Durante la realización de este trabajo se ha realizado un proceso de destilación utilizando el material más simple posible. En la figura 8.3 se muestra el empleado en el proceso de destilación. A la izquierda se muestra el envase con alcohol ya filtrado, mientras que a la derecha se muestra el producto tras la destilación. En el centro de la figura se aprecia el conjunto de envases que permiten realizar la destilación. Este conjunto de envases consta de 1 envase cilíndrico transparente y varios envases prismáticos transparentes. Los envases prismáticos deben llenarse con la mezcla a destilar y posicionarse dentro del envase cilíndrico, como muestra la figura. Esta configuración permite que el alcohol se evapore y, posteriormente, se condense en las paredes del envase mayor. La curvatura del envase de mayor tamaño favorece que el alcohol se deposite en el fondo y evita que este toque los otros envases. Pasado un tiempo razonable, se retiran los envases prismáticos y se vierte el líquido obtenido en un envase limpio. Este proceso es lento, debido a que la evaporación es un proceso espontáneo que se produce exclusivamente en la superficie del fluido. Es posible acelerar la destilación de alcohol llevando a este hasta el punto de ebullición (en torno a 83 o C), aunque se requeriría de un sistema más complejo para realizar el proceso. Figura 8.2 Restos de resina curada en envase con alcohol. 8.8 Errores comunes En esta sección se comenta los errores más comunes obtenidos durante la impresión y posibles soluciones. 8.8.1 Pieza no adherida Este problema puede ser causado principalmente por dos razones: problemas de nivelación de la plataforma y falta de adherencia de los soportes. • El primer factor es sencillo de detectar, ya que normalmente ocurre tras realizar impresiones consecutivas sin realizar un correcto nivelado de la plataforma. Este proceso es crítico y debe realizarse todas y cada una de las veces que se quiera imprimir. • El segundo factor es el diseño de los soportes. Generalmente, todas las piezas deben llevar un soporte que permita la correcta impresión de estas. Es importante valorar la orientación de la pieza antes de
8.8 Errores comunes 65 Figura 8.3 Material usado en la destilación del alcohol. Figura 8.4 Intento fallido de impresión de panel EFIS de A320. colocar el soporte, teniendo en cuenta las caras en las que se requiere un mejor acabado. Cuanto mayor sea la superficie del soporte en contacto con la plataforma, mejor adherida quedará la pieza. Una vez elegida la orientación de la pieza es necesario realizar una selección del tipo de soporte. Aquellos que cuentan con base, mayor ángulo de apoyo y menor distancia de anclaje resultan en una mayor adhesión de las piezas, mientras aquellos que no cuentan con base y presentan menores ángulos de apoyo y distancias de anclaje son más propicios a desprenderse de la plataforma. Es importante seleccionar los puntos de contacto con la pieza de forma correcta, así como utilizar los suficientes apoyos para evitar el sobrecoste que supone realizar otra impresión tanto en tiempo como en recursos. En la figura 8.4 se muestra el resultado obtenido tras una impresión fallida tras el desprendimiento de la pieza a mitad de la impresión. Este ejemplo muestra un panel EFIS con un vaciado cuyo tiempo de impresión era de 16 horas. En el caso de imprimir piezas que sean una extrusión de un perfil bidimensional, pueden realizarse pruebas de impresión sin soporte para obtener un mejor acabado superficial.
66 Capítulo 8. Anexo 1: Proceso de impresión con resina Figura 8.5 Pieza impresa despegada de sus soportes. 8.8.2 Pieza deformada Otro error común es que las piezas salgan deformadas. Esto puede deberse a varios motivos. • El primer caso es que sea el usuario el que modifique la geometría de la pieza aplicando una fuerza externa a la pieza, con mayor repercusión en el resultado cuando se aplica a la pieza antes de curar. Piezas muy extensas y con muy poca altura se deforman al despegar los soportes de la plataforma de impresión. • El segundo caso es que la pieza se curve debido a los esfuerzos internos a los que está sometida. Este efecto puede verse acrecentado cuando el proceso de curación no se realiza de forma uniforme. Este efecto se ha intentado mitigar posteriormente aplicando calor y peso, pero ha resultado ineficaz. • El tercer caso consiste en el desprendimiento de los extremos de una pieza durante la impresión. El propio peso puede hacer que la pieza se despegue de los soportes y, cuando esto ocurre parcialmente, la pieza continua con el proceso de impresión viendo modificada su geometría. En el caso expuesto en la figura 8.5, la superficie final quedó impresa de forma correcta, aunque los extremos de la pieza presentaban un menor espesor. En esta situación no existe ninguna forma de arreglar la pieza, ya que las zonas con menor espesor cuentan con menos material del deseado. En general, este error puede ser mitigado realizando divisiones de las piezas durante la fase de diseño. Estas divisiones pueden ayudar a agilizar el proceso de impresión, disminuyendo el tiempo necesario. Para su posterior unión, es posible el uso de cianocrilato, aunque se recomienda incluir en el diseño algún sistema que permita una unión mecánica. 8.8.3 Superficies brillantes A veces, las piezas presentan zonas brillantes en su superficies debido a una mala limpieza de esta. Para evitar este problema es importante limpiar correctamente la pieza, intentado retirar con alcohol todos los restos de resina que hayan podido quedar adheridos. Además, también es necesario cerciorarse de que la pieza está completamente seca antes de realizar el proceso de curado. Este problema es más frecuente cerca de las zonas diseñadas para evacuar la resina de piezas huecas. Esto se debe a que la resina fluye hacia esas zonas, pudiendo fluir restos alojados en el interior de la pieza tras una mala limpieza. 8.8.4 Agujeros en la superficie final Se entiende por superficie final el conjunto de capas más alejado de la plataforma al finalizar la impresión (últimas capas impresas). Durante la impresión la plataforma se sumerge repetidamente en la resina, pudiendo provocar la aparición de burbujas en ella. Estas burbujas pueden quedar marcadas en la supericie, creando imperfecciones. Técnicamente, sería posible introducir resina en el orificio y curarlo, aunque debido a la falta de tiempo disponible no se ha explorado esta vía.
8.8 Errores comunes 67 8.8.5 Falta de precisión al imprimir En el caso de estar probando una resina, se recomienda realizar una impresión de prueba RERF (buscador de rangos de exposición de resina, o en inglés, "Resin Exposure Range Finder") [ 2 ]. Cada impresora Anycubic reconoce el archivo llamado R_E_R_F (diferente para cada modelo) y genera una impresión con 8 modelos dispuestos en un patrón matricial 2x4. Cada uno de los modelos se imprime usando un tiempo de exposición distinto, lo que permite ajustar el tiempo de exposición para estas resina de forma que la calidad de impresión sea óptima. 8.8.6 Capas de impresión separadas Es un error que ocurre con mayor frecuencia al usar técnicas de impresión por extrusión de filamento. Al usar resina las capas son más delgadas y normalmente se adhieren bien unas a otras. Como la frecuencia es mucho menor que la de los otros fallos, se ha optado simplemente por volver a imprimir las piezas que cuenten con este desperfecto.
Índice de Figuras 1.1 Exterior de un simulador de vuelo con 6 grados de libertad 1 1.2 Portada de Microsoft Flight Simulator 3 1.3 Portada de X-Plane 12 3 1.4 Captura de pantalla de Prepar3D 4 1.5 Portada de Aerofly FS 4 5 1.6 Logo de FlightGear 6 1.7 Vista general de simulador 9 1.8 Zonas de interacción del simulador 9 2.1 Palanca de mando Thrusmaster TCA Airbus Edition 11 2.2 Palanca de empuje Thrustmaster Airbus Edition 12 2.3 Pedales Thrustmaster TPR 12 2.4 Sistema de pantalla táctil 13 2.5 Sistema de pantalla táctil 13 2.6 Panel de autopiloto de FlightGear 14 2.7 Panel EFIS de A320 en FlightGear 14 2.8 Arquitectura del panel EFIS realizado en este trabajo 17 2.9 Arquitectura de las solución software implementada en el ordenador 17 3.1 Perfil esquema botón 20 3.2 Modelo en CATIA del botón VORD 21 3.3 Modelo en CATIA del separador interior del botón rectangular 22 3.4 Modelo en CATIA del bajo del botón rectangular 22 3.5 Modelo en CATIA del botón AUTOLAND 22 3.6 Modelo en CATIA del botón tipo redondo 23 3.7 Modelo en CATIA de la ruleta con texto grabado 23 3.8 Modelo en CATIA del selector 24 3.9 Modelo en CATIA de la caja del encoder 24 3.10 Modelo en CATIA del soporte para los interruptores 25 3.11 Modelo en CATIA del panel EFIS con las piezas impresas 26 4.1 Esquemático de la PCB de un botón 30 4.2 Rutado de la PCB de un botón 30 4.3 Visualización tridimensional de la PCB de un botón 30 4.4 Esquemático de la PCB de dos botones 32 4.5 Rutado de la PCB de dos botones 32 4.6 Visualización tridimensional de la PCB de dos botones 32 4.7 Esquemático de la PCB de 5 botones 34 4.8 Rutado de la PCB de 5 botones 34 4.9 Visualización tridimensional de la PCB de 5 botones 37 4.10 Esquemático de las conexiones de un selector de 8 posiciones genérico 37 4.11 Esquemático de la PCB de selectores 38 69
70 Índice de Figuras 4.12 Rutado de la PCB de selectores 39 4.13 Visualización tridimensional de la PCB de selectores 39 4.14 Esquemático de la PCB shield de Arduino 40 4.15 Rutado de la PCB shield de Arduino 41 4.16 Visualización tridimensional de la PCB shield de Arduino 41 4.17 PCB shield tras arreglar el problema de alimentación 42 4.18 Disposición de PCB entorno al panel EFIS 42 4.19 Panel EFIS con electrónica montada 43 6.1 Árbol de propiedades de FlightGear 56 6.2 Mensajes de debugging 57 6.3 Panel final resultante 58 6.4 Panel final conectado al simulador 58 8.1 Piezas tras un proceso de limpieza fallido 63 8.2 Restos de resina curada en envase con alcohol 64 8.3 Material usado en la destilación del alcohol 65 8.4 Intento fallido de impresión de panel EFIS de A320 65 8.5 Pieza impresa despegada de sus soportes 66
Índice de Tablas 3.1 LED correspondientes cada botón del panel avisos 21 71