Status: Enclosure in production
I am creating a console/simpit for controlling Kerbal Space Program. As much as possible, I want this to be a full replacement for the keyboard and mouse controls. Although this project is for me, I am trying to make this as modular and configurable as possible for other DIYers to follow in my footsteps.
Rather than a simple keyboard emulator, I am going to use the fly-by-wire controls available via the Telemachus API. I am using a heavily modified version of thearn's Python-Arduino-Command-API to send read/write requests over serial to transfer telemetry and fly-by-wire data from the Arduino to a Python script and 602p's pyksp module for communicating from Python into Kerbal Space Program.
I am using an Arduino Mega 2560 as my controller due to the larger quantity of IO pins it has. This frees me from needing daughter boards for multiplexing. I've created a basic shield which provides convenient pins for connecting dupont cables which will run to each component. One of the photos shows a 6 pin connector running from this board to the joystick. This provides 4 signal pins as well as +5v and GND.
I started out using a protoboard with conductive paint, but that was very unreliable. I eventually moved to soldered traces, and finally to a fabricated PCB. I used Fritzing to design the board and have uploaded it to my Github repo. I ordered my PCB from Seeed Studio Fusion. This is the first time I've designed and ordered a PCB, but it was simple enough that it came out well.
Here's an overview of what's working and what's planned:
Complete:
- Communication between Arduino and Kerbal Space Program
- Protected input for Staging and Abort
- API Buttons
- Dual Joysticks
- Non-API Buttons
- Trigger a keypress
- Throttle
- Indicator LEDs
- Configuration from a file
- Can read JSON from a file
- Uses this data to create objects for hardware
- 7-segment Displays
- Python class complete and tested
- Hardware tested
- LED Bargraph Displays
- Python class complete and tested
- Backpacks assembled
- Hardware tested
- Full hardware test
- Replaced LEDs and resistors in buttons
- Soldered all wire harnesses to buttons
- Fixed bad traces on protoboard
- Mounted all controls and displays in a new shoebox
- Tested and working
- Setup script that checks for dependencies
- Printed PCB
- Arrived and Assembled
- Installed and tested
- Onboard Raspberry Pi + Wifi + Battery
- Raspberry Pi 2
- Rechargeable battery
- Trackball for mouse control via Synergy
- Multiple Arduino support
- One computer to handle multiple devices
- Each identified by a UUID
- Multiple mode support
- Remap controls and displays for rovers, EVA, etc
- Configuration wizard to create JSON configuration file
- Display for showing configuration
- SpaceX Dragon-like on a touchscreen?
- Use touchscreen to display options in SpaceX style
- Fits better with overall aesthetic than going with Apollo-era tech
- Options:
- Selecting displayed data
- Selecting display formatting
- Changing modes
- Interface is web based using Flask
- Possibly use smartphone as display
- SpaceX Dragon-like on a touchscreen?
In progress (v.0.9.1):
- Code cleanup and optimizations
- Fix issues found by code analysis
- Fix (most) PEP8 compliance issues
- Officially test on Raspberry Pi
- Automate build and testing
- Investigate packaging as .pex
- Enclosure
- Modeled all components in SketchUp
- Trying out different layouts
- Planning materials and assembly
- Throttle handle
- I want something like this.
- Modeling in SketchUp
- Trying to have my library 3D print it, but it's not going well...
Planned for Final Version (v1.0.0):
- Enclosure
- Material: Wood and Acrylic
- Style: SpaceX style feel, but more green
- Layout: Slanted console
- Documentation
- Improve UI to look more like Dragon 2 interface
Ideas for the future (v2.0.0):
- Display for showing the Navball (a la Sli/MkON)
- Navball needs more research and investigation
- Dynamic Trackball Backlighting
- Alarm/Environmental display styles
- Altitude based default color
- Backlit Detailing
- Mask off section dividers and paint plexiglass with translucent paint
- Backlight dividers for glowing panel look of Dragon capsule
Me and my uncle are trying to do something similar, using kRPC (KSP -> Python) and python-arduino (Python -> Arduino).
I am, however, having trouble importing the Arduino module in to my Python script. Running "from arduino import Arduino" simply gives me the error: "ModuleNotFoundError: No module named 'arduino'".
I know this is very specific, but you wouldn't have some ideas as to why this happens? I'm on the programming part of this project, but I've never worked with Python. Am I missing something?
To clearify, I did of course install the module correctly, along with the required modules (using pip). Python 3.6.
Best Regards
-FP