top of page

Build instructions

GRIPS

First print hannibal's grips, except for the hat sections. You will need to print the original file + a mirrored version, to have both sides grips.

Then print the hat sections, spacer and trigger assembly (trigger.stl, trigger_case.stl and trigger_lid.stl) from my thingiverse site.

We'll start with all the buttons and switches  in the different sections of the grips first, and finish with the hat sections.

For each non-hat section you will need 4 x 12mm pushbuttons, one 3-position momentary rocker switch and one trigger assembly (which requires one mini limit switch, one 6x6x4.3 switch and a 19x7 mm aprox spring:

IMG_20230502_104009.jpg
IMG_20230502_104433.jpg
IMG_20230502_104452.jpg
IMG_20230502_104444.jpg

At this point we can start attaching wires to the switches and buttons. I would strongly suggest that the terminals are finished with shrinking tube, as it will help holding the wires. Otherwise, they can easily snap from the terminals.

The inside of the TEDAC enclosure is going to be a real mess of wires, once you've wired all the buttons and switches, so leaving plenty of wire is in order to make your life easier when you need to start connecting all the wires. I would say around 40 cm of wire is enough for all of them (some may get away with less, but it's better to have too long wire than too short). Also, labeling each button wire is a must.

b9e1737e-ea08-4330-96c0-5bbca8f11834.jpg

We can build the trigger assembly and move it asside. To hold it together I used 1.2x20 mm nails to which I grinded the extra flat aginst the sides of the assembly, but you can use piano wire too:

IMG_20230306_203849.jpg

Out of the 4 legs of the 6x6 buttons, two of them are connected together. You need to solder one lead to each pair of legs. The limit switches have a common leg (C), a normally open (NO) and a normally closed (NC) ones:

minilimitswitch.jpg

You need to solder one lead to the common leg, and the other to the normally open (NO) leg. I held both buttons with a dab of superglue once  the leads were soldered.

You can now start putting the grips together, except for the top hat part. First glue the spacer to the inner part of the grip (this is not mandatory, I just needed the spacer because otherwise it requires longer than 20 mm M3 screws to attach it to the enclosure, and 20 mm were the longest I had laying around).

IMG_20230515_112126.jpg

With the bottom part of both grips finished and labled, you can start building the hat part. If you are going to be using the same switches as me, you'll need to print these from my Thingiverse files, not the original grip design. You can start with the easier ones like buttons and switches:

IMG_20230531_171412.jpg

Then move on to the 4 position hat switches. Prebuilt hat switches are hard to find and expensive, so I built my own ones, using TooG's design here.

You can find the KiCad project files there, but if you are unfamiliar with working with PCB software and want to go straight to the point, you can upload this file directly in JLCPCB or any other PCB manufacturer company.

You could get away without the custom PCBs, but a set of 5, which is exactly the quantity you will need, cost me only about $6 at JLCPCB and made my life way easier. You just solder 6x6x4.3 pushbuttons vertically, snap the other two ends, and you're done, assemble the top and bottom bodies , as well as the stalk (which you will probably have to sand a little bit) with M2 screws, and the end result should look something like this:

Two of these will go to the right grip, and the other three to the left one. You will need to place a spacer and a longer stalk (I just scaled two of mine in the Z axis to make them longer) in the top hat of each grip (TADS and FCR fields of view) because the hole where they go is a bit deep.

​

The right grip uses a joystick for MAN TRACK, and the left grip uses a 4 way switch with center pushbutton (RKJXT1F42001). You can mount them with the provided stl brackets:

(WARNING: a bug has been detected, likely related to the use of the RKJXT1F42001 switch, so I plan on replacing it with a joystick controller)

IMG_20230606_083416.jpg

Then you can print the SmallPushbuttonTop and Bottom pieces. The top one is just a trim piece, and the bottom one holds the 6x6x15 tactile pushbutton. Both pieces can be glued as below:

IMG_20230606_082632.jpg

Remember to label all the buttons and switches in the hat section as well before, putting it together with the rest of the grip.

The grips can now be moved aside for a while.

​

BUTTON MATRIX AND ARDUINO CONNECTIONS

I chose the Arduino Pro Micro as the microcontroller, as it is a native HID device automatically recognized by windows as a gaming device. 

There are over 80 inputs in the TEDAC, if we include both the grips and the MDF, besides 4 independent analog inputs (potentiomenters). A matrix of 9x9 should be able to manage that, but there aren't enough free inputs in the Pro Micro, so instead I've done it with two matrices. One 8x8 for the grips, and the 3 position rotary switch of the MPD (DAY/NT/OFF), and another one, 3x7, for the MPD buttons (it is like this from when I thought I would be able to do one single 9x9 matrix).

​

Time to actually start building the electronics.

To properly build a button matrix, you will need to include diodes to it in order to avoid the inputs to be crossed wired when two or more buttons are pushed simultaneously. We won't be doing that for the MFD matrix, since you will likely never be pushing two buttons in the MPD at once.

A matrix button, specially one as big as this one, and with the need of diodes, can get very messy in terms of wiring, because you will be crossing one lead of several buttons with the other lead of several others. In order to make this process simpler, I've designed a PCB where you can solder size 1206 1N4148W diodes, pin headers and the PCF8575 board. You can find it in the Files section.

Of course, you can wire it up yourself in a prototype board and throughole diodes like the below image, but it can be very messy, and the PBC is very inexpensive:

IMG_20230702_194306_edited.jpg

Ignore the Nano in the image, but the concept of a DIY 8x8 matrix in a prototype board.

IMG_20231012_124004.jpg

This is the first version of the PCB that doesn't have room for the port expander board to be soldered in, so it's connected via jumper wires. The one available in here is V2.

IMG_20231012_124013.jpg

All the required diodes soldered in the back of the board

As you can see, there is a 5V power rail. This will be powered from the VCC and GND pins in the Pro Micro and will be used to connect the 4 potentiometers required for this build (X and Y right hand grip axis, level and gain in the MPD).

I decided to solder the wires on the Pro Micro because it is mounted in the very back of the enclosure and it has very difficult access. I would strongly recommend you do the same. For that reason, the PCB also has some auxiliary optional pins to connect the potentiometer analog signal pins with the Arduino Pro Micro, and the the MPD (labeled as MFD in the PCB) rows and columns for the MPD button matrix.

These are optional, but you may find them useful, considering the amount of wires the inside of the enclosure has. They would allow you to disconnect the grips or the MPD without having to reach out to the Pro Micro behind.

All the grip inputs, except for the right hand joystick, plug into the PCB. Any push button, or three position, three pin switches can be plugged in either way, but 4 position hat switches, the cursor switch and the DAY/NT/OFF switch need to have the common to the left (if you flip the board, the common is the one with the diode). 

There were some leftover slots for additional inputs, so I added two additional 3 position switches to the top of the enclosure that I'll be using for SRS radios and intercom. These are completely optional.

Here's a rough diagram of how everything else connects:

schematics_edited.jpg

The PCF8575 is mounted in the matrix PCB with pins P00 to P07 to the right, and pins P10 to P17 to the left, in the above image.

MPD

Disclaimer: the MPD PCB is the very first PCB I ever designed, and I was not very satisfied with the end results (although it is fully functional). I've designed a v2.0 of the PCB that uses 6*6*4.3 tactile pushbuttons instead of the small 3*6*2.5 ones, and 6*6 led pushbuttons instead of the 12*12 ones, which have a very dim and ugly light. Although it's an improved version, I have not yet manufactured and tested this version of the PCB. I may do it in the future, but if you wish to use it, do it at your own discretion. KiCad files are also available in case you want to review it. No button caps designed for them yet.

​

Now it's time to set up the MPD PCB, that you can find in the files section. Solder the PT10 pots (for the level and gain knobs) and the 3*6*2.5 SMD pushbuttons (these will be used for the rocker switches, such as the symbology or contrast switches):

IMG_20230830_183936.jpg

Backlight is optional, so if you want to skip this feature, you just don't solder the resistors, 3mm leds and the leads of the 12x12 pushbuttons.

If instead, you do want to build it with backlight, to try to amend the problem with the dim and ugly leds that the 12x12 buttons bring stock, I replaced the small 1.8mm led inside the button with the 3mm high brightness ones, and for that I had to drill the cover to let the led poke out:

Although it improves the backlight significantly, and matches with the rest of the leds, it is quite hard work fitting the 3mm leds where a 1.8mm led was, and it impacts the feel of the push and makes it a bit unconfortable. Luckily the MPD buttons are not the most used in the game. If I had to do it now, knowing what I know, I would design the PCB for a different type of button, but since this was the most expensive PCB of them all, and I had 5 of them, I decided to go ahead with it.

I would say just don't use backlight, unless you want to design your own custom PCB and use better led buttons. It doesn't really make that difference, specially if you can't have the buttons resin printed. If you have to FDM print your buttons, I wouldn't even bother.

If you do decide to use backlight, bear in mind:

  • There are slots for throughole resistors. 220 ohm will do.

  • The footprint of the other leds (you can see one to the right of the pot in the image above) is reversed, and the square pad is actually the postive (long) leg of the led.

  • All the leds, including the ones in the buttons, are connected in series of 3. To trace the positives and negatives of the leds, start from a resistor trace and that will lead you to the positive of the first led. The other end will be the negative, that the trace will lead you to the next positive. And the same for the last one.

  • In the top left corner of the back of the PCB there are two pads labeled GND and VIN that are for the backlight, which is independent from the game (in fact it's independent from the PC itself). These will be used to plug an external +12V DC power supply, in my case, the lcd screen mainboard, which requires precisely that:

Backlightpower

Leads can be soldered to the power in connector of the lcd screen mainboard. These in turn can be connected directly to the VIN and GND pads of the MPD PCB, which would turn the backlight permanently while the TEDAC is plugged in, or use a switch in between to turn them on and off.

The MPD PCB also has pads (all of them are throughole so allow soldering pinheaders if wanted) to connect the buttons to the Arduino Pro Micro.

As mentioned before, my original intention was to have one single button matrix for all the buttons in the grips and the MPD, but I wasn't finally able to do that. For that reason, the pads are labeled from C1 to C7, and from F7 to F9 (row in spanish is fila). Hence the 3 (rows) by 7 (columns) matrix that is directly connected to the Arduino. Rows 7 to 9 connect to pins 4, 5 and 6, and columns 1 to 7 connect to pins 7, 8, 9, 10, 16, 14 and 15 respectively.

(Notice that pads C1, C2 and C4 are together, and pad for C3 is in a separate pad in the side. Sorry about that.)

Since these, that are at the very front of the device, go connected directly to the Arduino, that is at the very end of it, I added some bridge connectors in the button matrix PCB (which I glued closer to the screen), in case you want to be able to plug and unplug the MPD without having to reach out all the way back to the Arduino:

2023-10-23 20_25_29-Visor 3D.png

These are just connected vertically. You could plug wires from the Arduino to the top rows, and then other wires from the bottom rows to the MPD.

I personally just run long wires with female dupont connectors from the Arduino up to the front, and soldered pin headers in the MPD pads, but you do you.

The only inputs left are the gain and level pads, which are labeled B, S1, R and S2, and the DAY/NT/OFF rotary switch. They both plug into the button matrix PCB. The B and R are ground and positive to the 5V power rail, and the S1 and S2 go to two analog inputs (already mentioned earlier).

The rotary switch has a common lead, which it's in the center (there is usually more than one) and a series of pins around the exterior that are the individual positions of the switch. As also mentioned earlier, the common ground needs to plug to the left pin in the matrix PCB.

IMG_20231023_195825.jpg

The PCB screws into the front MPD faceplate. The buttons are held by the PCB itself, so the 12x12 ones just need to be put in place and are just about the right height, and the rocker switches need some small blocks glued to the tips to activate the small SMD 3*6*2.5 buttons:

rocker.png

The blocks are roughly 5*4*5.56 mm but some of them may require some sanding to adjust them to the proper height.

Once the buttons are put in place (you may need to sand or file the edges of the cut holes in the face piece), you can press the PCB in it's position and it should hold the buttons with minimal to none room to wiggle. Make sure they are not too tight, though, or that could result in a bad clicking experience or even keeping the button constantly pressed.

The PCB screws into the face piece with M3 screws.

OPTIONAL

There are several optional features that you can add to the TEDAC but are not required for it to be fully functional:

  • I added 2 x three position switches on top of it for additional controls, such as SRS radios. They plug into the button matrix:

IMG_20231023_212029_edited.jpg
IMG_20231012_124004_edited.jpg
  • Green backlight is the weakest point of the build, as it doesn't improve very much the looks of it, specially if you don't have a resin 3D printer and a laser cutter to engrave the buttons. But is purely an aesthetic feature, it looks good the same without the light. If you decide not to have backlight, you can ignore the resistors and leds in the MPD PCB. In the above left image, the center switch is just a 2 position switch to turn on and off the backlight. The voltage is coming from the LCD mainboard power supply, as shown in this picture.

  • Screen. If you plan on using it on VR, you can save a fair amount of money by not installing the LCD. This is obviously completely independent from the rest of the system. 

FIRMWARE

The firmware is essentially an Arduino sketch that needs to be loaded into the Arduino Pro Micro for it to work as expected. The sketch is in the Files section. However, if you upload it as is, Windows will detect the device as an Arduino Pro Micro. You'd be fine just like that, but if you were to have other Arduino devices plugged into the computer, it could get confusing. I have a DIY collective which also uses an Arduino Pro Micro, so when I went to bind the controls, I would find two Arduino Pro Micros and I would need to be very clear on which one is which.

To solve that problem (and also have a cooler device), you can download and save the hardware folder, also in the Files section, and save it in your Documents/Arduino/hardware folder (create the folder if it doesn't exist).

That is essentially a folder that renames the Arduino Pro Micro but keeps everything the same, so when uploading the sketch, instead of selecting that board, the below one is available:

Arduino_board.png

The device is now an Apache TEDAC in all effects:

USB_device.png

If you have reached this point, it's a good moment to start testing it. As you can see, the Windows gaming device screen only displays up to 32 buttons. You will need a game device tester that can handle much more than that, and my suggestion for that is Pointy's Joystic Test Application. It's very simple and powerful, and displays 100% of the inputs of any gaming device.

There are several things that could not be right from the very beginning, but don't worry, they are very easily fixable by changing some lines in the Arduino sketch and re-uploading it:

  • The MAN TRK joystick and/or the Level and Gain knobs do not move what they are suposed to:

Search for this piece of code in the sketch:​

#define joyX A1
#define joyY A0
#define gain A3
#define lev A2

And change the values A0 to A3 around (for instance if moving the joystick left and right moves up and down on the screen, and moving the joystick up and down moves left and right on the screen, you need to change the code to:

#define joyX A0

#define joyY A1

  • The MAN TRK joystick and/or the Level and Gain knobs move what they are suposed to, but in the reverse direction:

Search for this piece of code in the sketch:​

xAxis_ = map(xAxis_, 0, 1023, 0, 255);
yAxis_ = map(yAxis_, 0, 1023, 0, 255);
rudder_ = map(rudder_, 0, 1023, 0, 255);
throttle_ = map(throttle_, 0, 1023, 0, 255);

And change the last two values of the line (for instance if moving the joystick left and right moves right and left on the screen, you need to change the code to:

xAxis_ = map(xAxis_, 0, 1023, 255, 0);

bottom of page