Skip to content

Latest commit

 

History

History
386 lines (303 loc) · 20.4 KB

notes-es.md

File metadata and controls

386 lines (303 loc) · 20.4 KB

Notas de Modular Cockpit para Star Citizen

Motivaciones

  1. Star Citizen es un juego con una funcionalidad y iteractividad complejas y muy rica.
  2. Cada nave en Star Citizen puede desempeñar uno o varios roles.
  3. Cada jugador en Star Citizen puede jugar uno o varios roles.
  4. Cada rol tiene una forma particular de interactividad.
  5. Cada jugador tiene una forma distinta de jugar.

Por lo tanto cada jugador necesita un cockpit único adaptado a su forma de jugar. Se necesita un cockpit para Star Citizen modular, abierto y adaptable.

Star Citizen Buttom Box

Requerimientos del teclado

  1. Debe ser modular.
  2. La estética debe ser una combinación de:
  3. Los dispositivos de entrada deben ser identificables.
    • Teclas que se puedan marcar.
    • Los otros dispositivos se identifican marcándolos en el panel.
  4. Al ancho máximo de la botonera debe ser de unos 82 cms que corresponde con el ancho de un monitor de 34'' QHD.
  5. El numero total de keybindings en SC es de 502, según Número de teclas en Star Citizen, Por lo que la botonera debe facilitar el uso de este gran número de entradas.

Modular

El "Modular Cockpit" tiene una arquitectura modular, obviamente. Y un módulo debe cumplir con lo siguiente:

  • Cada módulo debe funcionar independientemente, para funcionar no debe necesitar de otros módulos u otros elementos, con excepción del computador.
  • Un módulo agrupa varias funciones relacionadas.
  • Un módulo está construido con varios componentes.
  • Todos los módulos deben cumplir con los criterios de compatibilidad (estos son definidos más adelante).

Definiciones

Marco : Este es una estructura creada con Makerbeam de 10x10 mm y tiene una altura de 120 mm. Para ello se usa Beams verticales de 100 mm de largo y se unen a los Beams horizontales con MakerBeam Corner Cube. En los Beams horizontales se introducen varios T-slot nuts, que es donde se atornillan los Módulos con pernos M3. Se puede usar cualquier otro sistema compatible. Por ejemplo el siguiente es un Marco de 220 mm.

Frame with measurements

Criterios de compatibilidad

  1. Cada módulo solo debe tener una conexión USB.
  2. Un módulo debe poder atornillarse al Marco.

Módulos

  1. Power Module
  2. Camera Module
  3. Camera Module
  4. Emotes Module
  5. Cockpit Module
  6. Radar and Scanning Module
  7. Torret Module
  8. Shields Module
  9. Countermeasures Module
  10. Missiles Module
  11. Docking Module
  12. Targeting Module

Dispositivos de entrada

Tendrá varios tipos de dispositivos de entrada.

Teclas de teclado mecánico : Las teclas de teclado mecánico se usan para la mayoría de los keybindings de SC, esto es por que SC esta diseñado usando teclas.

Encoders : Para los casos que se tienen dos teclas en la que una es de incrementar y otra de decrementar cambiando una misma cantidad, por ejemplo incrementar o decrementar la energía de los escudos.

Toggle Switch (ON/OFF) : Estos se usan cuando se tienen dos teclas, una de prender y otra de apagar, por ejemplo prender y apagar escudos. Pero para poder usarlo en SC es necesario hacer una programación que aunque este permanentemente en ON mande solo una tecla de ON en el momento que se cambia a esta posición, al igual que con el OFF.

Dispositivos de entrada que posiblemente se puedan usar

Estos son dispositivos de entrada en los hay que hacer pruebas lógicas y de usabilidad conectándose a SC, y teniendo en cuenta sus limitaciones de este para saber si sirven.

Potenciómetro líneal : Estos sirven para aquellos casos en los que SC tiene asociados ejes (axis). El problema es con los keybindings que no sean ejes y que por su naturaleza deberían serlo (como incrementar o decrementar la potencia de los escudos), por que los potenciómetros dan mediadas absolutas y no incrementos y esto último es como funciona SC, oprimiendo varias veces una tecla para incrementar o decrementar una cantidad.

Joystick : Aparte de los casos obvios en el cual se usan los joystick hay keybinding que por su naturaleza deberían controlarse con joystick, por ejemplo las rotaciones de algo. Pero un joystick en realidad son (por lo menos) dos potenciómetros ortogonales, por lo que tiene el mismo problema de estos con los keybindings que no sean ejes y que por su naturaleza deberían serlo (como el desplazamiento angular de la cámara).

GlidePoint® Circle Trackpads (el del Steam Controler) : Este trackpad funciona muy parecido a un joystick análogo por lo que puede usarse en lo mismo, pero también tiene el mismo problema de dar valores absolutos y no incrementos que es lo que necesita SC.

Microcontroladores

Se tienen dos posibilidades:

Sparkfun Pro Micro : Este microcontrolador es como un Arduino pero puede funcionar como si fuera un teclado o un joystick.

Teensy® : Este es como el Sparkfun Pro Micro o un Arduino también puede funcionar como un Teclado y un joystick con la diferencia que tiene un procesador mas potente, más memoria y muchos más pines de entrada/salida por lo que se le pueden conectar más dispositivos de entrada y tener un firmware mas grande.

Firmware

Hay dos posibilidades:

Arduino con keypad.h, joystick.h y keyboard,h : Hay que programar casi todo desde cero, lo cual es una ventaja y una desventaja al mismo tiempo. Una ventaja por que se tiene un control sobre todo, pero es una desventaja por que hay que hacer mucho.

QMK Firmware : Muchas de las cosas que se necesitan están presentes en QMK y no abría que programar desde cero.

El usar el uno o el otro depende de:

  1. Se puedan programas todos los dispositivos de la forma en que se quieren usar.
  2. Facilidad de programación.
  3. Que se pueda usar joystick y keyboard al mismo tiempo. Esto para sobrepasar la limitación de las 32 teclas del joystick tanto en Arduino como en QMK.

Joystick

Extreme Joystick

Si se pone la siguiente línea en un programa con joystick antes de los #include

 #define JOYSTICK_SIZE         64	//  12 = normal, 64 = extreme joystick

Entonces el saca un error como el siguiente:

/home/aztlek/Documentos/ModularCockpit/modules/PowerModule/src/firmware/firmware.ino:30: warning: "JOYSTICK_SIZE" redefined
   30 | #define JOYSTICK_SIZE         64        //  12 = normal, 64 = extreme joystick
      |
In file included from /home/aztlek/.arduino15/packages/teensy/hardware/avr/1.58.0/cores/teensy4/usb_serial.h:33,
                 from /home/aztlek/.arduino15/packages/teensy/hardware/avr/1.58.0/cores/teensy4/WProgram.h:52,
                 from /tmp/arduino/sketches/B19FFDD5866611D7F05A07723232A08F/pch/Arduino.h:6:
/home/aztlek/.arduino15/packages/teensy/hardware/avr/1.58.0/cores/teensy4/usb_desc.h:318: note: this is the location of the previous definition
  318 |   #define JOYSTICK_SIZE         12      //  12 = normal, 64 = extreme joystick
      |
Opening Teensy Loader...
Memory Usage on Teensy 4.0:
  FLASH: code:23976, data:6284, headers:8648   free for files:1992708
   RAM1: variables:8544, code:22248, padding:10520   free for local variables:482976
   RAM2: variables:12608  free for malloc/new:511680

Por lo que se puede inferir de donde toma el Arduino Ide las librerías de Teensy. En este caso:

.arduino15/packages/teensy/hardware/avr/1.58.0/cores/teensy4/

Para el Teensy 4. Por lo que un comando bash para averiguar donde modificar sería:

cd .arduino15/packages/teensy/hardware/avr/1.58.0/cores/teensy4/
egrep -Rn '#define[ ]+JOYSTICK_SIZE' *

Componentes

Para el prototipo

Switches

Encoders

Potenciómetros

Joysticks

Otros

Referencias

Diseño de la PCB

  1. Teensy symbol library for KiCAD La librería de simbolos de Teensy para KiCAD
  2. Keyboard PCB Guide
  3. Designing a keyboard from scratch - Part 1

KiCAD

  1. KRSTEC-keyboard: Teclado diseñado de cero:
    1. KRSTEC-keyboard Github del teclado donde están los foodprint del teclado, entre esos los del switch de reset.
    2. Diseño de Teclado KrsTec - creando el PCB
    3. Teclado KrsTec - Montaje de las partes
    4. KrsTec Programado y Prueba de Sonido
      1. Montaje de plates
      2. Keyboard layout editor Editor del mapa de teclado.
      3. Keyboard Firmware Builder Produce el código fuente para QMK del teclado.
    5. Modificando el PCB Krstec añadiendo un Encoder + Crear archivos Gerber Generando los archivos gerber.
      1. Modificando el equemático.
      2. Modificando el PCB
      3. Generando y comprimiendo los archivos Gerber para JLCPCB
      4. Mandar a fabricar en JLCPCB.
    6. Teclado Krstec - Generando Archivos QMK
    7. Como generar los archivos para mandar a cortar los acrilicos

Componentes

Microcontrodores

Teensy
  1. Teensy® 4.1 Development Board
  2. Teensy® 4.0 Development Board
  3. Teensy® 3.6 Development Board No está en stock:
  4. Amazon: Teensy 3.5 (Without Pins)
Teensy con Arduino

Para trabajar con el IDE de Arduino se necesitan al menos tres partes:

  1. Teensyduino La extensión del IDE de Arduino para Teensy.
  2. Using USB Keyboard Libraría para simular un teclado con Teensy.
    1. Using USB Joystick Librería para sinular un joystick con Teensy. No sirve parque sólo maneja 32 botones.
    2. Keypad Library Librería para leer una matriz de teclas.
    3. Encoder Library Libreria para leer los encoders.
Teensy con QMK

Si se usa el Teensy QMK en el archivo rules.mk hay que poner el microcontrolador, el MCU.

Empezando con QMK
  1. Building Your First Firmware Explica como crear un nuevo keymap.
  2. QMK_Teensy_2.0_Tutorial Tutorial que explica como poner el firmware en un Teensy 2.0. Funciona mejor en Linux.
  3. Using The Teensy Loader on Ubuntu Linux Complementario al anterior explica como quemar desde Linux (Ubuntu).
  4. Keycodes Overview
Encoders
  1. Rotary Encoder En encoder sensillo de 12 pasos de Sparkfun.
    1. Rotary Encoder 318-ENC130175F-12PS El datasheed del encoder.
    2. Black Metal Knob - 14x24mm La perilla del (knob) encoder. Negra de metal y para 6mm.
    3. Clear Plastic Knob Otra perilla para el encoder, pero transparente. Esta sería mejor para el encoder que tiene RGB.
    4. uxcell 5pcs, Potentiometer Control Knobs For Encoder Code Switch Knobs Acrylic Volume Tone Knobs Black D type 6mm Perilla para concoder plana.
  2. Rotary Encoder - Illuminated (RGB) Un encoder 24 pasos y RGB de Sparkfun.
    1. Clear Plastic Knob Otra perilla para el encoder, pero transparente. Esta sería mejor para el encoder que tiene RGB.
  3. AliExpress: 100 step encoder Encoders de 100 pasos en Aliexpress.
  4. Amazon: 5V 60MM Ultra-Thin Hand Wheel Pulse Encode
  5. Amazon: Busqueda cnc rotary encoder Un Encoder de 100 pasos como los de Aliexpress pero en Amazon.
    1. 100PPR 6 Terminal Electronic Hand Wheel Manual Pulse Encoder for CNC System (Black) Otro encoder de 100 pasos mejor documentado.
Los encoders con Arduino
  1. Arduino - Rotary encoder Simple Example KY-040
Los encoders con QMK
  1. Encoders: Documentación de QMK Parece estar muy bien exlicado, supone que se sabe que son las líneas A y B.
  2. How can I use a rotary encoder? Explica como usar un rotaty encoder wn QMK con eejemplo específicos como control de audio, scrolling, moviemiento de ventanas, tabbing, etc.
  3. QMK Encoder Setup Explica como configurar un escoder de cien pasos (de los que se consiguen en Aliexpress)
  4. Hub16 Encoder Configuration Como configurar dos encoder con QMK y los codigos de teclado de QMK.
  5. Using multiple encoders in QMK by wiring them up to your matrix rows Explica como conectar varios encoders.

Imagenes

openclipart