Piper PA-28 Project

Converting a Piper PA-28-151 cockpit for use with X-Plane 11

View project on GitHub

Garmin G1000 suite for flight simulator

Back in my early days of seriously getting in flight simulator and starting to build panels around 2006, the idea of building a Garmin G1000 unit simply wasn’t feasible. With the advent of consumer-grade 3D printers and laser cutters, that’s now a reality.

Finished G1000 instrument panel

Close-up G1000 instrument panel

This project draws heavy inspiration from Allan Glen’s C172 Garmin GNS430 and GNS530 units. I started down that route for my own home cockpit (a 1975 Piper PA-28-151 fuselage).

Complete G1000 instrument panel

Please read through all this before you get started. There’s a lot of pieces to laser cut, 3D print, engrave, and assemble. I use Air Manager and X-Plane 11, but there’s no reason this shouldn’t work with other flight sims or controllers. I’m eagerly awaiting FS2020 to see!

Parts required

The following parts and components are required to build the G1000 units. The 10.4” LCD screens and then dual rotary enconders are the most expensive components. In total, this entire G100 was under $450 US, which is a whole lot less than commercial offerings, or even kit options. Even adding in the cost of a 3D printer and laser cutter, it’s under $1,000 US.

Panel components

The following items are needed to cut, attach, and finish the panels:

Item Dimensions Quantity Purchase
5mm cast white acrylic 12” x 8” 4  
Pan head machine screws #6-32 x 3/8” 20 https://www.amazon.com/gp/product/B00F359CIS
Matt black spray paint 12oz 1  

Screens, power, and HDMI

The following LCD screens and components are needed for the G1000 PFD / MFD units:

Item Quantity Purchase
10.4” LCD screen @ 1024x768 2 https://www.amazon.com/gp/product/B07R3RZC4F
12V 2A power adapter 2 https://www.amazon.com/gp/product/B00Q2E5IXW

Hardware components

The following associated buttons, switches, and Arduinos are needed to actually run the suite of devices:

Item Quantity Use Purchase
Arduino Mega 2560 2 PFD / MFD wiring https://www.amazon.com/gp/product/B01H4ZDYCE
Square 7mm x 7mm momentary mini push button 85 Panel buttons https://www.amazon.com/gp/product/B00OK476IG
5mm dual rotary encoder with push button switch 11 NAV, COM, ALT, CRS/BARO, FMS, dummy audio https://www.propwashsim.com/store/dual-encoder-kit
6mm rotary encoder with push button switch 2 HDG control https://www.amazon.com/gp/product/B0177VGSQY
6mm rotary potentiometer 4 Dummy PFD / MFD volume control https://www.amazon.com/gp/product/B07DS5C7RF
4-way directional switch with rotary encoder and push button 2 PFD / MFD range and pan control https://www.mouser.com/ProductDetail/ALPS/RKJXT1F42001?qs=6EGMNY9ZYDTsBzSTrhiL0w%3D%3D
Arduino Nano 1 Audio panel wiring https://www.amazon.com/gp/product/B07G99NNXL
15mm momentary red push button switch 1 Audio panel emergency flip https://www.amazon.com/gp/product/B019DSZQ9O

Make the G1000 faceplate

The PFD and MFD faceplates are each cut from 5mm cast white acrylic. A piece of acrylic cut to 12” x 8” works great. The cut-out section for the screen provides enough material to then cut out the required parts for the audio panel.

The laser_cut/1000-faceplate.svg file includes three layers - vector, bevel, and engrave. Use the vector layer to cut the outline for the faceplate. Without removing the piece of acrylic, then use the bevel layer to raster engrave the lines for the soft-key buttons.

Remove the faceplate from the laser cutter, pop-out the cut pieces for the buttons or screen holes, then remove any backing paper if needed. Use an alcohol cleaner to clean at least the front of the acrylic, as this is sprayed in the next step. You want to remove any residue left over from the laser cutting or protective film / paper.

Use a black spray paint (I used a matt finish) to spray the front of the faceplate. Use multiple light coats, and take care to minimize any dust in the spray area. Make sure the edges of the panel, button holes, and inside of the screen cut out are also sprayed black.

When the spray paint is dry, place a scrap piece of thin plywood in the laser cut, load the laser_cut/g1000-faceplate.svg file, and enable the vector layer. At a low power and high speed, vector cut this outline onto the plywood - it won’t cut all the way through, but leaves a visible outline.

Carefully align the acrylic faceplate over the top of the etched outline on the plywood. If needed, use painters tape to hold in place. View the engrave layer, then raster engrave the faceplate to remove the layer of black spray paint and expose the white acrylic underneath for the lettering and graphics.

Etched faceplate

To protect the faceplate, lightly spray the faceplate with a clear matt protectant coat.

Repeat the process to create two such faceplates - one for the PFD, and one for the MFD.

Make the G1000 hardware layer

The G1000 hardware layer is laser cut from the laser_cut/g1000-hardware-mount.svg file. As a suggestion, use the laser_cut/kerf_test.svg file to cut a single 7mm x 7 mm square in a piece of scrap acrylic. Test mount one of the momentary push button switches to see how snugly they fit. If they’re too tight to push-fit into the acrylic, slightly increase the hole size and create another test cut. You want them just large enough to be able to gently push in place. If you need to update the size of the test hold, apply this updated measurement to the actual laser_cut/g1000-hardware-mount.svg file.

Once the hardware layer is cut from the acrylic, push fit the 7mm x 7mm momentary push button switches. A small spot of glue on each side of the switch holds them in place. This approach removes the need for PCB for the button mounts. Take care not to break the thin top strip like I did in this demo unit :)

Buttons attached

The rotary encoder, dual rotary encoders, potentiometers, and 4-way switch are mounted to the rear of the faceplate (next section). They don’t actually attach to the hardware layer due to the length of the shafts of those components and the thickness of the acrylic.

Repeat the process to create two such faceplates - one for the PFD, and one for the MFD.

Attach the G1000 layers

The laser_cut/g1000-electronics-mount.svg file is used to attach the Arduino Mega 2560 and LCD driver board. Cut out this file on the laser cutter, then use #6-32 x 3/8” pan head machine screws or adhesive like Weld-On to attach the electronics mount to the back of the hardware mount.

Use #6-32 x 3/8” pan head machine screws to then attach the Arduino Mega 2560 and LCD driver board to the electronics mount.

Electronics layer attached

Set the 10.4” LCD screen into place on the rear of the faceplate, then align the hardware mount and buttons with the faceplate. The buttons should be aligned in the center of the holes cut into the faceplate. The are two ways to attach hardware mount to the rear of the faceplate:

  • Using #6-32 x 3/8” pan head machine screws
    • Carefully drill a shallow hole into the rear of the faceplate for the four hardware mount screws, then attach the two panels together.
  • An arcylic-safe glue such as Weld-On
    • Follow the directions for your adhesive and attach the panels together.

I’ve tried both methods and prefer the accuracy of glueing the panels together. With needing to drill shallow holes in the rear of the faceplate to align with your buttons, it’s easy to get that slightly offset and ruin the alignment.

All layers attached and LCD screen in place

3D print four copies of 3d_print/screen_clips.stl and attach to the rear of the hardware mount to hold the LCD screen in place. The clips can be screwed or glued in place. Depending on where you mount the screen clips or actual screen you use, you may need a pair of the slightly shallower 3d_print/screen_clips_1mm.stl.

Repeat the process to attach the layers - one for the PFD, and one for the MFD.

Attach additional G1000 controls

With the hardware layer and faceplate joined using screws or adhesive, now attach the remaining controls to the faceplate. The following controls attach directly to the faceplate:

  • Dual rotary encoders
  • 6mm rotary encoder with push button (HDG control)
  • 6mm rotary potentiometer (dummy VOL controls)
  • 4-way directional switch with rotary encoder and push button (RANGE / PAN controls)

Depending on the controls you purchase, you may be able to use a nut and washer to attach to the shaft through the faceplate. If there’s not enough length on the shaft to do this, you can use an adhesive to attach them.

Make sure you align the 4-way directional switch with rotary encoder up / down / left / right controls such that they correctly move horizontally and vertically.

Repeat the process to attach additional controls - one for the PFD, and one for the MFD.

Wire up all the G1000 controls

Now the fun (?!) part. Wire up the all the controls to the Arduino Mega 2560. For ease of wiring, use a common ground around the outside of the hardware layer to the 7mm square push buttons. You can also then use this common groud for the all the rotary controls.

Color coding of wires may help to keep track of the wiring as you go. The Arduino Mega 2560 is almost completely full, so there’s a lot of wires to solder and then connect. Keep track of what controls attach to which pin. I found it helped to configure Air Manager with the appropriate pins as I wired them up, even though the Arduino Mega 2560 wasn’t connected.

Complete wiring

When all the controls are wired up, connect the delicate video cable from the LED driver board. Take care when you attach the video cable so as not to damage it.

The 4-way directional switch with rotary encoder and push button is “fun” to wire. In the following image:

  • The blue wire is common ground
  • The two red wires are encoder up and down
  • The four green wires are directional
  • The yellow wire is center push button

4-way joystick wiring

Repeat the process to wire up the controls - one for the PFD, and one for the MFD.

3D print G1000 buttons and knobs

There are two different buttons for the G1000 unit. I suggest printing a few extra of each button to allow for spares when engraving:

  • 3d_print/button_small.stl buttons are for the 12 multi-purpose buttons across the bottom of the unit.
  • 3d_print/button_medium.stl buttons are for the 20 autopilot, FMS, and radio controls.

Print these buttons in white PLA. I enable ironing so the top of the buttons are smooth and minimize the need for sanding. Once printed, apply a few light coats of black spray, the same as when doing the faceplate.

Once the paint is dry, use the appropriate engrave/g1000_button_small_engrave.svg or engrave/g1000_button_medium_engrave.svg to laser engrave the button text. Use a scrap piece of wood to quick cut a low-power outline of the button, align the 3D printed button into the outline, then raster engrave each text layer. Hide and view the next layer in the SVG file each time to work your way through the text layers for the _medium buttons.

Engraving buttons

To protect the buttons, lightly spray them with a clear matt protectant coat.

Print the knobs in black PLA. There’s no engraving of text to do on them:

  • 3d_print/knob_heading.stl - print 1 of these.
  • 3d_print/knob_range_pan.stl - print 1 one of these. Note that supports are needed for the buttom of the knob.
  • 3d_print/knob_volume.stl - print 2 of these for the dummy COM / NAV volume controls.

3D printed range knob

For a little extra detail, print in black PLA two of 3d_print/dummy_sd_card.stl. These can then be glued into place in the SD card slots of the faceplate.

Repeat the process to 3D print and engrave the buttons and knobs - one for the PFD, and one for the MFD.

Attach G1000 buttons and knobs

The 3D printed knobs should all push-fit onto their respective knobs. You don’t need to glue these in place.

Use the knobs included with the dual rotary encoders as they’re already made to fit each of the shafts.

Attach the 3D printed buttons by placing a small drop of glue on the shaft of the 7mm square buttons then placing the appropriate engrave button on top. I take care not to push down on the button to avoid potentially pushing any glue into the button mechanism. The buttons should just need a little alignment to make sure they glue and dry flat and square.

Complete unit

Repeat the process to attach the buttons and knobs - one for the PFD, and one for the MFD.

G1000 connections and configuration

The LCD screen recommends a 12V 2A power supply and connects using a regular HDMI cable. No special drivers should be required as it should display as a regular additional monitor.

The Arduino Mega 2560 connects using a USB A-B cable. Depending on the software you use to connect to your flight sim of choice, you may need to load their software onto the Arduino board first. For example, in Air Manager (which is what I use), you run the Air Manager Arduino installer to prepare the board for use with the Air Manager software.

If you use Air Manager, the instruments/ folder contains the following LUA files:

  • pfd/logic.lua for the primary flight display (the pilot side).
  • mfd/logic.lua for the multi-function display (the co-pilot side).
  • audio/logic.lua for the audio panel, although only a subset of controls are actually configured based on availability within X-Plane (I assume P3D has similar limited functionality).

These LUA files can be loaded into Air Manager, and then simply select the channel you configured your Arduino Mega 2560 on and then the actual analog or digital pin for each control. The following table outlines how I configured my pins and controls, but yours may vary:

Type Name Pin
Button NAV flip flop D13
Rotary encoder - pin A NAV outer rotary control D12
Rotary encoder - pin B   D11
Rotary encoder - pin A NAV inner rotary control D10
Rotary encoder - pin B   D9
Button NAV 1/2 (push) D8
Rotary encoder - pin A HDG rotary control D6
Rotary encoder - pin B   D7
Button HDG sync (push) D5
Button Autopilot D4
Button Flight director D3
Button Autopilot HDG D2
Button Autopilot ALT D14
Button Autopilot NAV D15
Button Autopilot VNAV D16
Button Autopilot approach D17
Button Autopilot backcourse D18
Button Autpilot vertical speed D19
Button Autopilot flight level change D21
Button Autopilot nose up D20
Button Autpilot nose down D22
Rotary encoder - pin A Altitude outer rotary control D23
Rotary encoder - pin B   D24
Rotary encoder - pin A Altitude inner rotary control D25
Rotary encoder - pin B   D26
Button Softkey 1 D27
Button Softkey 2 D28
Button Softkey 3 D29
Button Softkey 4 D30
Button Softkey 5 D31
Button Softkey 6 D32
Button Softkey 7 D33
Button Softkey 8 D34
Button Softkey 9 D35
Button Softkey 10 D36
Button Softkey 11 D37
Button Softkey 12 D38
Button COM flip flip A0
Rotary encoder - pin A COM outer rotary control A7
Rotary encoder - pin B   A6
Rotary encoder - pin A COM inner rotary control A5
Rotary encoder - pin B   A4
Button COM 1/2 (push) A3
Rotary encoder - pin A CRS rotary control A12
Rotary encoder - pin B   A11
Button CRS sync (push) A8
Rotary encoder - pin A Barometer rotary control A10
Rotary encoder - pin B   A9
Button Pan up D50
Button Pan right D51
Button Pan down D52
Button Pan left D53
Rotary encoder - pin A Range rotary control A15
Rotary encoder - pin B   A14
Button D-> D49
Button Menu D48
Button Flight plan D47
Button Procedures D46
Button Clear D45
Button Enter D44
Rotary encoder - pin A FMS outer rotary control D42
Rotary encoder - pin B   D43
Rotary encoder - pin A FMS inner rotary control D40
Rotary encoder - pin B   D39
Button FMS cursor (push) D41

Repeat the process to connect and configure the panel in software - one for the PFD, and one for the MFD.

X-Plane 11 G1000 bezel-less display

For X-Plane 11, when you pop-out the G1000 PFD and MFD and drag the displays to the LCD screens, a bezel is displayed around the device. To only view the actual screen component, copy and paste the the following files:

  • cockpit/EFIS/G1000/G1000PFD_2d.png
  • cockpit/EFIS/G1000/G1000PFD_2d.png

into your X-Plane 11/Aircraft/<name> directory. These files create a 1×1 pixel blank PNG that remove the bezel.

The default Windows border is still displayed across the top, however the size of the faceplate is designed to hide this. Double-click the window to maximize and hide the bar behind the faceplate.

Running unit

For more information, see https://developer.x-plane.com/2017/09/three-lesser-known-aircraft-features-for-11-10/.

Make the G1000 audio panel

The G1000 audio panel is designed and built in the same way as the G1000 PFD and MFD panels.

Laser cut the following from the same 5mm cast white acrylic material. You can use the pieces cut out for the PFD and MFD LCD panels:

  • laser_cut/audio-faceplate.svg
  • laser_cut/audio-hardware-mount.svg
  • laser_cut/audio-electronics-mount.svg

Again, spray the audio faceplate with matt black paint, let it dry, then raster engrave the lettering and outlines from the Engrave layer in the laser_cut/audio-faceplate.svg file.

Engraving audio panel

Push fit the 7mm x 7mm momentary push button switches into the audio hardware mount, and again, use a small spot of glue on each side of the switch holds them in place. This approach removes the need for PCB for the button mounts.

Attach the Arduino Nano to the electronics mount, then use Weld-On or similar adhesive to attach the electronics mount at 90 degrees to the hardware mount, between the two columns of buttons.

Rear of audio panel with wiring and Arduino attached

To wrap up the hardware components, attach the dual-rotary encoder and 15mm momentary red push button switch. The dual rotary encoder doesn’t actually get wired up, it’s just for show.

The 3mm green LEDs attach to the back of the audio panel faceplate. Apply a small spot of glue on either side of the LED to hold it in place. When dry, use Weld-On or similar adhesive to attach the faceplate to the hardware layer. Take care as you feed the LED legs through the cut-outs in the hardware layer.

For wiring, run a common ground to all the 7mm x 7mm square buttons and the cathode (short leg) of each 3mm LED.

Each anode (long leg) of the LED requires a resistor, around 200-400 ohm depending on your LEDs and how bright you want them. You can also control the brightness in the Air Manager .lua file.

The following table outlines how I configured my pins and controls, but yours may vary:

Type Name Pin
Button Transmit audio COM1 A3
LED Transmit audio COM1 D4
Button Monitor audio COM1 A5
LED Monitor audio COM1 D2
Button Transmit audio COM2 A2
LED Transmit audio COM2 D5
Button Monitor audio COM2 A4
LED Monitor audio COM2 D3
Button Monitor audio MKR A1
LED Monitor audio MKR D6
Button Monitor audio DME A0
LED Monitor audio DME D7
Button Monitor audio NAV1 A11
LED Monitor audio NAV1 D9
Button Monitor audio ADF D13
LED Monitor audio ADF D8
Button Monitor audio NAV2 D12
LED Monitor audio NAV2 D10
Button Big red display inversion A1

Completed G1000 suite

As I’m using a real Piper PA-28-151 cockpit, I removed the existing metal instrument panel traced the outline onto 3mm plywood. The outline was then cut, and then cut-outs made for where the G1000 units would go.

G1000 units mounted to instrument panel

There’s quite a bit of wiring behind the panel when all completed.

Rear of G1000 units mounted to instrument panel

I used 90 degree adapters for the HDMI ports of the LCD driver boards to reduce cable clearance at the top when mounting into the cockpit also used left and right 90 degree USB cables for the PFD and MFD to again help with cable clearances. All three Arduinos connect to a powered USB hub.

Complete G1000 instrument panel mounted in cockpit

Limitations and considerations

As I went through the build process and have spent some time using the G1000 suite, there’s a few things to point out that I may have done differently or may not quite line up with real-world use.

The following are things to bear in mind for your own builds if there’s a concern:

  • The top row of the LCD screen is a little hard to read depending on your eye level.
    • I typically use COM2 and NAV2 so I can clearly see the frequencies.
  • The buttons aren’t rubber, to the tactile response is a little different.
  • There’s no backlighting, but I don’t think it’s really worth it here.
    • I’ve done this for some F-18 panels, and it was a lot of effort. You could try to find 7mm x 7mm square buttons that include an LED to fairly easily backlight those, but I don’t know how well the 3D printed buttons would respond.
    • I’ll likely run an LED strip at the top of the glare shield in the cockpit anyway, and if you weren’t in an enclosed cockpit, ambient room lighting would likely be sufficient.
  • The LEDs in the audio panel are bright.
    • The photos actually make it appear worse than they are, but larger resistors may have been better (I used 330 ohm resistors).
    • I could also drop the brightness to 0.5 or 0.25 in Air Manager.

Frequently asked questions

A few common questions that people have asked or may come up:

How long did it take to build this?

In total, about 6-8 weeks including designing the panels themselves. The final G1000 panel for my PFD ended up taking about one week as I knew exactly how to make, assemble, and wire everything up.

How many prototypes were there?

I think my MFD was the third build. First build was just the laser cut panels to see how they fit and the LCD screen would look. Second build refined the panels and got as far as 7mm x 7mm buttons and attaching the layers together. By the third build, everything came together correctly and was wired up. The PFD was a straight single build. The audio panel took two builds.

Why a glass cockpit in a steam-driven cockpit?

It is and it isn’t. The actual fuselage is from a 1975 Piper PA-28-151. I originally started down the path of steam-driven gauges, but the engineering to build these myself, or the cost to purchase commerical flight sim gauges was just too much.

I did build functional Garmin GNS-430, Garnmin GNS-530, and GMS-340 units, which were the inspiration for this G1000 suite. So, I ended up switching from the AeroSphere Piper PA28-161 Warrior II v2 flight sim model in X-Plane 11 to the AeroSphere Piper PA-28-181 Archer III model.

Back to the top