Introduction
Xplane user for over three years now, I thought it was time for me to tinker with a few switches, glue and nails, a dashboard allowing me to add additional commands to the joystick that is already being used and all for less than 130 dollars.
A real cockpit here would be pretty good ! |
Technical choice:
obviously, only the nails are not sufficient, we also need some electronics and computer science. But nothing really difficult after a bit of thinking. Indeed, a little Web lap I discovered that the Teensy micro-controller makes it easy to be programmed as a USB device.For my application, I choose de Teensy++2.0 because it has forty Inputs/outputs. The factory website is https://www.pjrc.com/teensy/.
To better understand what can be done, an overview on existing projects shows us that we should be able to do many things :
- switch panel (German site)
- Radio Module for X-Plane
- Garmin G1000 Emulator
- X-Plane Autopilot Panel
- ...
And of course the forums are a great source of information:
- forum x-plane.org (Low-cost hardware using Teensy USB boards)
- http://www.x-plane.fr/thread53808.html
- ...
In short, after being reassured about the feasibility of the project, we can begin to saw some boards. But first, a little plan:
the sticky joystick shows us the remaining space for the dashboard |
Wooden angles also serve as pins for feet (see back panel) |
Back panel, Pins used for add stabilizer feet |
After some brainstorming, here are the chosen commands which will be installed into the cockpit.
Electronics and wiring :
Now, let's do a bit of wiring. Heat the soldering iron...Changing the radio frequencies :
Let's start with the part of rotary encoders (those used to change the frequency of the radio). For this, I opted for this type of encoders: 3054-encoder-bright-a-rotation-infinite whose plans are there.These encoders are backlit by two red and green internal LEDs. I chose to take the green for the radio part and the color red for the navigation part. For coding, there are two possible ways: either using D flip-flops (component CMOS 40xx) for decoding the direction, either it is the the Teensy micro-controller which handles this though a computer program. For now, we will choose the second approach.
The wiring diagram for the 4 encoders consist of 4 resistors to power the integrated LEDs. Note that the resistance values are higher for green LEDs to reduce their brightness compared to red.
And here is the result :
Support plate for the micro-controller Teensy:
We will add 2 connection strips to the Teensy:
Then prepare on a 'prototyping' printed circuit for receiving wires and connector.
Wiring:
Rummaging through my boxes, I found an old ribbon wire and another with an 8 point connector which can be used to connect the inner pins of Teensy. This cable was used to connect two USB ports on a motherboard to the front of a PC.notice the 8 soldered pins for receive the connector and 2 more soldered pins for deport the teensy reset button. |
Initially I had not planned to deport the Reset button. However, this offset will be helpful for that button should be used to dump the program to the Teensy.
I had not ordered enough Pin on my last purchase, I went to the dump and I was able to get an old computer mother board from which I got these connectors.
From side of the support plate, here is the result :
And finally, the links to the other switches and components :
The ribbon wires perfectly play their role in so far as they provide a clean wiring. Which is far from being the case for the big switches. Still, a layout is needed to see things more clearly... :
And now, plug in the teensy :
Programming the Tennsy:
requisite :
- set up TeensyLoader : https://www.pjrc.com/teensy/loader.html
- set up "Arduino" soft and "Teensyduino" : https://www.pjrc.com/teensy/td_download.html
- set up X-plane plug-in : http://www.pjrc.com/teensy/td_flightsim.html
a first test:
First, let's make a program just to identify the connections of each switch. Indeed, when wiring I did not follow the exact order and now I'd better check what is connected with what. You'll also notice that sometimes I skipped some Pins Teensy in order to keep the specialized pins (PWM -> Pulse Wave Modulation, AC / DC, etc ...). These pins can be used later as a dimmer dashboard (exit PWD), joysticks potentiometers (AD converter) for the propeller pitch, richness carburettor, etc ...So, before fantasizing, let's find our connections.
The program is available at the following address : https://github.com/Nicolou/cockpit/blob/master/testButtons/testButtons.ino. To upload program into Teensy, instructions are on the manufacturer website : https://www.pjrc.com/teensy/loader.html
AS mentioned in the prerequisites, do not forget to install and set up Arduino programming software and the plugin to be able to use the Teensy : https://www.pjrc.com/teensy/tutorial.html
Here's what happens with me:
And the deducted summary table :
Pin number | ||
Button name | arduino style | C style |
BATTERY | 20 | B0 |
ALTERNATOR | 21 | B1 |
MAGENTO_STOP | 7 | D7 |
MAGENTO_LEFT | 8 | E0 |
MAGENTO_RIGHT | 9 | E1 |
MAGNETO_BOTH | 10 | C0 |
MAGNETO_START | 11 | C1 |
AVIONIC | 23 | B3 |
PUMP | 22 | B2 |
CARB HEAT | 19 | E7 |
NC1 | 5 | D5 |
NC2 | 4 | D4 |
LAND_LIGHT | 3 | D3 |
TAXY_LIGHT | 2 | D2 |
NAV_LIGHT | 1 | D1 |
STROB_LIGHT | 0 | D0 |
BEACON_LIGHT | 27 | B7 |
RADIO_SWITCH | 17 | C7 |
NAV_SWTICH | 14 | C4 |
RADIO_MHZ | 28,29 | PA0,PA1 |
RADIO_KHZ | 32,33 | PA4,PA5 |
NAV_MHZ | 30,31 | PA2,PA3 |
NAV_KHZ | 34,35 | PA6,PA7 |
LANDING_GEAR | 12 | C2 |
A second test, the rotary encoders :
For this, we will use the library "Encoder .h" as shown in the example of the site : https://www.pjrc.com/teensy/td_libs_Encoder.htmlBy adapting the exemplary program with our matching pin numbers we get the following code : https://github.com/Nicolou/cockpit/blob/master/testEncoders/TwoKnobs/TwoKnobs.ino
An upload of this program in the Teensy and ... The test proves successful.
Now, we can really start to have fun.
Xplane program :
We will use the specifications provided by dataref file for communication between the cockpit and the Teensy Xplane software.Do not forget to install the X-Plane plug-in by decompressing it in the following folder ./Resources/plugins.
But first, some explanation of the elements used in the program will allow a better understanding of its operation.
- To use the FlightSim specific library Xplane, it is necessary in the Arduino program editor to set up USB type. Hence, go to the menu tool '->' USB type 'and select' Flight sim controls'.
- To identify the pine Teensy numbers, we will use constants to define these numbers for once and in one place in the program.
- In addition to the library 'Encoder.h'; we will use the library 'bounce.h'. This library allows to manage the switches states (anti-rebound, change of state detection, etc) See https://www.pjrc.com/teensy/td_libs_Bounce.html
- Read the documentation https://www.pjrc.com/teensy/td_flightsim.html
- A program Arduino '(or teensy) always consists of a setup () and loop() functions...
Then compile and upload it in your Teensy.
That's it, the box is almost finished. I just need an USB socket and a push button (reset) that will allow me to close the set. |
Just one last picture, (but not the most beautiful) to show you how I have fixed the cockpit on my desk.
Well, that is finished regarding the prototyping stage. Hopefully this article will be useful.
Nicolas Montarnal