Skip to the content
2 layers321.5 × 233.4 mmElementWing, the printed circuit board in 3D

ETC EOS Element Wing custom PCB project

Size
321.5 × 233.4 mm
Copper layers
2
Thickness
1.6 mm
Parts
196
Nets
152
Pads
782
Tracks, vias
571, 30
Pours
2
Routed
Yes
KiCad
KiCad 8.0 (file 20240108)
Created
26 Dec 2024
Updated
28 May 2026

Overview

ElementWing is an open-source printed circuit board by jamiejcole, from the jamiejcole/ElementWing repository on GitHub. It is a 2-layer board of 321.5 × 233.4 mm with 196 parts on 152 nets, routed with 571 tracks and 30 vias.

Its parts include 90 diodes, 74 switches, 2 resistors and 2 ICs. It belongs with the RP2040 boards of this library.

README

README.md

Element Wing - A DIY Command Wing for ETC EOS

This project is an extension of my previous EOS controller that I made primarily for controlling moving head fixtures, as my Element 2 console doesn't have any encoder wheels.

It's a full sized EOS command wing, featuring the standard ETC key layout and 4 customisable rotary encoders.

Top

Components used

Note: The PCB design has the footprint for an official Raspberry Pi Pico with a micro-usb port. I wanted to have USB-C on my board, so I ordered the 16M variant of the above RP2040 board, without checking the pin layout. The board I ordered actually had a slightly different pin layout to the official Pi Pico so I had to make some jumps with short wire on the board, so if you use my PCB design, check which Pico you're ordering first! Note 2: As of Feb 2026, firmware has been modified to work with standard Pico board.

PCB Design

This was the first PCB I've designed, so apologies in advanced if I've made any silly mistakes on it. Joe Scotto's video was helpful for getting started with the design, and iNimbleSloth's tutorials were also extremely useful for designing the keyswitch matrix. I ended up ordering the PCB from JLCPCB for around $100AUD including shipping, bringing the total project cost to ~$220 AUD.

PCB

The PCB consists of a 13x8 diode keyswitch matrix, where each row and column are connected to a GPIO pin on the Pico. The A/B/SW pins of each encoder are connected to a GPIO port on the MCP23017, which is connected to the Pico on the I2C0 interface, with the SDA and SCL lines pulled up to 3v3 with 2.2k resistors.

Assembly process

After receiving the PCBs, I started designing some test layouts for the Cherry MX style switches. Due to the bed size of my 3D printer, I had to split up each piece into two parts, to be plastic welded together after printing. The CAD design consists of three main parts (each with left/right sides):

  1. A plate for the switches to be inserted into prior to soldering to the PCB
  2. A main case where the brass heat-set inserts will be put in, allowing the whole unit to be bolted together.
  3. A top face-plate/cover with cut-outs for the switches and encoders.
Exploded View

Custom Keycaps

The keycaps were made using a process I found here. I used blank white XDA profile PBT keycaps from aliexpress. The process was pretty straightforward:

  • Cover each keycap in a thin layer of powder from a toner cartridge. I breathed on the keys before dunking them in the powder (the "hah hah" kind of breathing you do to clean glasses) to get the powder to stick better, then gently blew off the excess.
  • Place keycap into a jig mounted to the laser engraver (this was done to ensure the text is consistently in the correct spot).
  • Using a 15W diode laser at 380mm/min, 2.1% power and text on a fill layer at 300 lines/inch, etched the dye into the keycaps.
  • Cleaned off the excess powder with warm water.

Programming the microcontroller

I decided to use a Raspberry Pi Pico rather than an Arduino or ESP8266 due to the amount of GPIO pins it had. I downloaded Earle Philhower's Arduino Core for RP2040 boards and uploaded a test sketch using the Arduino IDE. The Pico uses OSC to communicate with EOS over the USB Serial interface. More info about OSC can be found here.

The ETC #lighthack community also was extremely helpful. Big thanks to sstaub over on the OSC repo.

To connect to Element 2 or other ETC consoles running Embedded Windows 7, a custom .inf descriptor must be installed in device manager in order for the OS to recognise the Pico as a USB CDC device which supports Serial. This can be done by putting the src/element-wing.inf file on a USB, opening device manager on the console via sticky keys, and manually selecting the driver within the device properties of the Pico. I believe this isn't necessary on consoles running Embedded Windows 10.

Note, I take no responsibility for any damage or unintended behaviour caused by adding custom drivers or modifying OS-level settings. Use at your own risk!

Parts

196
QtyValueFootprintReferences
90DiodeScottoKeebs_Components:Diode_DO-35D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +74
4RotaryEncoder_SwitchRotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mmEC1, EC2, EC3, EC4
22.2kResistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_HorizontalR1, R2
1+ScottoKeebs_MX:MX_PCB_1.00uSW43
1+%ScottoKeebs_MX:MX_PCB_1.00uSW57
1-ScottoKeebs_MX:MX_PCB_1.00uSW45
1-%ScottoKeebs_MX:MX_PCB_1.00uSW67
1/ScottoKeebs_MX:MX_PCB_1.00uSW46
1AboutScottoKeebs_MX:MX_PCB_1.00uSW22
1AddressPatchScottoKeebs_MX:MX_PCB_1.00uSW2
1AssertScottoKeebs_MX:MX_PCB_1.00uSW32
1AtScottoKeebs_MX:MX_PCB_1.00uSW86
1BeamPaletteScottoKeebs_MX:MX_PCB_1.00uSW61
1BlindScottoKeebs_MX:MX_PCB_1.00uSW12
1BlockScottoKeebs_MX:MX_PCB_1.00uSW31
1CaptureScottoKeebs_MX:MX_PCB_1.00uSW36
1ColorPaletteScottoKeebs_MX:MX_PCB_1.00uSW60
1CopyToScottoKeebs_MX:MX_PCB_1.00uSW18
1CueScottoKeebs_MX:MX_PCB_1.00uSW41
1DelayScottoKeebs_MX:MX_PCB_1.00uSW81
1DeleteScottoKeebs_MX:MX_PCB_1.00uSW27
1DisplaysScottoKeebs_MX:MX_PCB_1.00uSW1
1EffectScottoKeebs_MX:MX_PCB_1.00uSW29
1EmptyMacroScottoKeebs_MX:MX_PCB_1.00uSW21
1EnterScottoKeebs_MX:MX_PCB_1.00uSW87
1EscapeScottoKeebs_MX:MX_PCB_1.00uSW24
1FanScottoKeebs_MX:MX_PCB_1.00uSW35
1FocusPaletteScottoKeebs_MX:MX_PCB_1.00uSW51
1FullScottoKeebs_MX:MX_PCB_1.00uSW76
1GoScottoKeebs_MX:MX_PCB_1.00uSW90
1GoToCueScottoKeebs_MX:MX_PCB_1.00uSW30
1GroupScottoKeebs_MX:MX_PCB_1.00uSW72
1HelpScottoKeebs_MX:MX_PCB_1.00uSW15
1HighScottoKeebs_MX:MX_PCB_1.00uSW34
1HomeScottoKeebs_MX:MX_PCB_1.00uSW58
1IntensityPaletteScottoKeebs_MX:MX_PCB_1.00uSW50
1LOGOLOGOG***
1LabelNoteScottoKeebs_MX:MX_PCB_1.00uSW20
1LastScottoKeebs_MX:MX_PCB_1.00uSW79
1LearnScottoKeebs_MX:MX_PCB_1.00uSW16
1LevelScottoKeebs_MX:MX_PCB_1.00uSW77
1LiveScottoKeebs_MX:MX_PCB_1.00uSW11
1MCP23017_SOPackage_SO:SOIC-28W_7.5x17.9mm_P1.27mmU2
1MLControlsScottoKeebs_MX:MX_PCB_1.00uSW3
1MacroScottoKeebs_MX:MX_PCB_1.00uSW14
1MarkScottoKeebs_MX:MX_PCB_1.00uSW47
1MoreSKScottoKeebs_MX:MX_PCB_1.00uSW10
1NextScottoKeebs_MX:MX_PCB_1.00uSW88
1OutScottoKeebs_MX:MX_PCB_1.00uSW66
1PageDownScottoKeebs_MX:MX_PCB_1.00uSW38
1PageLeftScottoKeebs_MX:MX_PCB_1.00uSW37
1PageRightScottoKeebs_MX:MX_PCB_1.00uSW39
1PageUpScottoKeebs_MX:MX_PCB_1.00uSW25
1ParkScottoKeebs_MX:MX_PCB_1.00uSW23
1PartScottoKeebs_MX:MX_PCB_1.00uSW40
1PathScottoKeebs_MX:MX_PCB_1.00uSW28
1PresetScottoKeebs_MX:MX_PCB_1.00uSW70
1QOnlyTrackScottoKeebs_MX:MX_PCB_1.00uSW78
1QueryScottoKeebs_MX:MX_PCB_1.00uSW17
1Raspberry_Pi_PicoScottoKeebs_MCU:Raspberry_Pi_PicoU1
1RecallFromScottoKeebs_MX:MX_PCB_1.00uSW19
1RecordScottoKeebs_MX:MX_PCB_1.00uSW42
1RecordOnlyScottoKeebs_MX:MX_PCB_1.00uSW52
1RemDimScottoKeebs_MX:MX_PCB_1.00uSW56
1S1ScottoKeebs_MX:MX_PCB_1.00uSW4
1S2ScottoKeebs_MX:MX_PCB_1.00uSW5
1S3ScottoKeebs_MX:MX_PCB_1.00uSW6
1S4ScottoKeebs_MX:MX_PCB_1.00uSW7
1S5ScottoKeebs_MX:MX_PCB_1.00uSW8
1S6ScottoKeebs_MX:MX_PCB_1.00uSW9
1ScrollLockScottoKeebs_MX:MX_PCB_1.00uSW13
1SelectScottoKeebs_MX:MX_PCB_1.00uSW26
1SelectActiveScottoKeebs_MX:MX_PCB_1.00uSW69
1SelectLastScottoKeebs_MX:MX_PCB_1.00uSW49
1SelectManualScottoKeebs_MX:MX_PCB_1.00uSW59
1ShiftScottoKeebs_MX:MX_PCB_1.00uSW80
1SneakScottoKeebs_MX:MX_PCB_1.00uSW48
1StopBackScottoKeebs_MX:MX_PCB_1.00uSW89
1SubScottoKeebs_MX:MX_PCB_1.00uSW71
1ThruScottoKeebs_MX:MX_PCB_1.00uSW44

The 173 most common of 196 parts.

Similar boards

  • 2 layers140.6 × 83.6 mmVape powerbank pcb, the printed circuit board in 3D

    Vape powerbank pcb

    chrisdoelcreates/vape-power-bank

    An open source, fast charge power bank that uses 35 discarded 13mm disposable vape batteries.

    196 parts131MIT
  • 2 layers285 × 95.7 mmAlps64, the printed circuit board in 3D

    Alps64

    tmk/alps64

    Poker X compatible 60% size PCB supports various Alps switch keyboard layouts like AEK, Omnikey, Dell, V60MTS and Infinity(KiCad Project)

    196 parts88
  • 2 layers224.2 × 153.7 mmStand, the printed circuit board in 3D

    Stand

    radiolok/dekatronpc

    DekatronPC - vacuum tube and cold-cathode tube based computer

    196 parts17
  • 2 layers226 × 94.2 mmCalcite60, the printed circuit board in 3D

    Calcite60

    siderakb/calcite

    60/52 keys Kailh Choc V1 low profile switches ortho keyboard

    196 parts12CERN-OHL-P-2.0
  • 2 layers256 × 96 mmMech50-keyboard, the printed circuit board in 3D

    Mech50-keyboard

    andywarburton/Mech-50

    A 50% ortholinear mechanical keyboard PCB with three extra keys

    196 parts8GPL-3.0
  • 2 layers100 × 100 mmFreeDSP SMD AB, the printed circuit board in 3D

    FreeDSP SMD AB

    CyberPit/FreeDSP-FreeDSP_SMD_AB

    2in4out ADAU1701 Board with selectable 2 EEPROMs, SMD resisitors, ThtoughHole Ele-Caps.

    196 parts6CC-BY-SA-4.0

Questions

How big is the ElementWing PCB?

It measures 321.5 × 233.4 mm and has 2 copper layers, 1.6 mm thick.

What parts does the ElementWing use?

196 parts. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.

Where can I download the ElementWing KiCad files?

From the jamiejcole/ElementWing repository on GitHub, at the commit this page was made from: the board is PCB/ElementWing.kicad_pcb and its schematic PCB/ElementWing.kicad_sch. PCBKit opens the board in the browser, with nothing to install.

Can I use the ElementWing design in my own project?

Its repository states no licence, so its author keeps all rights: ask jamiejcole before reusing the design.