
Vape powerbank pcb
chrisdoelcreates/vape-power-bank
An open source, fast charge power bank that uses 35 discarded 13mm disposable vape batteries.

ETC EOS Element Wing custom PCB project
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.
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.
| Part | Qty | Total ($AUD) | Source |
|---|---|---|---|
| Gateron Black Switches | 90 | $31.19 | https://www.aliexpress.com/item/1005006376024657.html |
| Blank White XDA PBT Keycaps | 90 | $34.00 | https://www.aliexpress.com/item/1005007683242914.html |
| 1N4148 THT Diodes | 90 | $4.69 | https://www.aliexpress.com/item/32866531235.html |
| MCP23017-E/SO | 1 | $12.59 | https://www.aliexpress.com/item/1005005066054098.html |
| Raspberry Pi Pico* | 1 | $5.63 | https://www.aliexpress.com/item/1005006071676557.html |
| EC11 Rotary Encoders | 4 | $5.20 | https://www.aliexpress.com/item/10000056483250.html |
| Aluminium Knob for Encoders | 4 | $11.39 | https://www.aliexpress.com/item/1005005207623966.html |
| Plastic Heat Set Inserts | 6 | $14.99 | https://www.aliexpress.com/item/1005006472962973.html |
| Total (excluding PCB) | $119.68 |
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.
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.
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.
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):
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:
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!
| Qty | Value | Footprint | References |
|---|---|---|---|
| 90 | Diode | ScottoKeebs_Components:Diode_DO-35 | D1, D2, D10, D11, D12, D13, D14, D15, D16, D17, D18, D19, D20, D21, D22, D23 +74 |
| 4 | RotaryEncoder_Switch | Rotary_Encoder:RotaryEncoder_Alps_EC11E-Switch_Vertical_H20mm | EC1, EC2, EC3, EC4 |
| 2 | 2.2k | Resistor_THT:R_Axial_DIN0207_L6.3mm_D2.5mm_P10.16mm_Horizontal | R1, R2 |
| 1 | + | ScottoKeebs_MX:MX_PCB_1.00u | SW43 |
| 1 | +% | ScottoKeebs_MX:MX_PCB_1.00u | SW57 |
| 1 | - | ScottoKeebs_MX:MX_PCB_1.00u | SW45 |
| 1 | -% | ScottoKeebs_MX:MX_PCB_1.00u | SW67 |
| 1 | / | ScottoKeebs_MX:MX_PCB_1.00u | SW46 |
| 1 | About | ScottoKeebs_MX:MX_PCB_1.00u | SW22 |
| 1 | AddressPatch | ScottoKeebs_MX:MX_PCB_1.00u | SW2 |
| 1 | Assert | ScottoKeebs_MX:MX_PCB_1.00u | SW32 |
| 1 | At | ScottoKeebs_MX:MX_PCB_1.00u | SW86 |
| 1 | BeamPalette | ScottoKeebs_MX:MX_PCB_1.00u | SW61 |
| 1 | Blind | ScottoKeebs_MX:MX_PCB_1.00u | SW12 |
| 1 | Block | ScottoKeebs_MX:MX_PCB_1.00u | SW31 |
| 1 | Capture | ScottoKeebs_MX:MX_PCB_1.00u | SW36 |
| 1 | ColorPalette | ScottoKeebs_MX:MX_PCB_1.00u | SW60 |
| 1 | CopyTo | ScottoKeebs_MX:MX_PCB_1.00u | SW18 |
| 1 | Cue | ScottoKeebs_MX:MX_PCB_1.00u | SW41 |
| 1 | Delay | ScottoKeebs_MX:MX_PCB_1.00u | SW81 |
| 1 | Delete | ScottoKeebs_MX:MX_PCB_1.00u | SW27 |
| 1 | Displays | ScottoKeebs_MX:MX_PCB_1.00u | SW1 |
| 1 | Effect | ScottoKeebs_MX:MX_PCB_1.00u | SW29 |
| 1 | EmptyMacro | ScottoKeebs_MX:MX_PCB_1.00u | SW21 |
| 1 | Enter | ScottoKeebs_MX:MX_PCB_1.00u | SW87 |
| 1 | Escape | ScottoKeebs_MX:MX_PCB_1.00u | SW24 |
| 1 | Fan | ScottoKeebs_MX:MX_PCB_1.00u | SW35 |
| 1 | FocusPalette | ScottoKeebs_MX:MX_PCB_1.00u | SW51 |
| 1 | Full | ScottoKeebs_MX:MX_PCB_1.00u | SW76 |
| 1 | Go | ScottoKeebs_MX:MX_PCB_1.00u | SW90 |
| 1 | GoToCue | ScottoKeebs_MX:MX_PCB_1.00u | SW30 |
| 1 | Group | ScottoKeebs_MX:MX_PCB_1.00u | SW72 |
| 1 | Help | ScottoKeebs_MX:MX_PCB_1.00u | SW15 |
| 1 | High | ScottoKeebs_MX:MX_PCB_1.00u | SW34 |
| 1 | Home | ScottoKeebs_MX:MX_PCB_1.00u | SW58 |
| 1 | IntensityPalette | ScottoKeebs_MX:MX_PCB_1.00u | SW50 |
| 1 | LOGO | LOGO | G*** |
| 1 | LabelNote | ScottoKeebs_MX:MX_PCB_1.00u | SW20 |
| 1 | Last | ScottoKeebs_MX:MX_PCB_1.00u | SW79 |
| 1 | Learn | ScottoKeebs_MX:MX_PCB_1.00u | SW16 |
| 1 | Level | ScottoKeebs_MX:MX_PCB_1.00u | SW77 |
| 1 | Live | ScottoKeebs_MX:MX_PCB_1.00u | SW11 |
| 1 | MCP23017_SO | Package_SO:SOIC-28W_7.5x17.9mm_P1.27mm | U2 |
| 1 | MLControls | ScottoKeebs_MX:MX_PCB_1.00u | SW3 |
| 1 | Macro | ScottoKeebs_MX:MX_PCB_1.00u | SW14 |
| 1 | Mark | ScottoKeebs_MX:MX_PCB_1.00u | SW47 |
| 1 | MoreSK | ScottoKeebs_MX:MX_PCB_1.00u | SW10 |
| 1 | Next | ScottoKeebs_MX:MX_PCB_1.00u | SW88 |
| 1 | Out | ScottoKeebs_MX:MX_PCB_1.00u | SW66 |
| 1 | PageDown | ScottoKeebs_MX:MX_PCB_1.00u | SW38 |
| 1 | PageLeft | ScottoKeebs_MX:MX_PCB_1.00u | SW37 |
| 1 | PageRight | ScottoKeebs_MX:MX_PCB_1.00u | SW39 |
| 1 | PageUp | ScottoKeebs_MX:MX_PCB_1.00u | SW25 |
| 1 | Park | ScottoKeebs_MX:MX_PCB_1.00u | SW23 |
| 1 | Part | ScottoKeebs_MX:MX_PCB_1.00u | SW40 |
| 1 | Path | ScottoKeebs_MX:MX_PCB_1.00u | SW28 |
| 1 | Preset | ScottoKeebs_MX:MX_PCB_1.00u | SW70 |
| 1 | QOnlyTrack | ScottoKeebs_MX:MX_PCB_1.00u | SW78 |
| 1 | Query | ScottoKeebs_MX:MX_PCB_1.00u | SW17 |
| 1 | Raspberry_Pi_Pico | ScottoKeebs_MCU:Raspberry_Pi_Pico | U1 |
| 1 | RecallFrom | ScottoKeebs_MX:MX_PCB_1.00u | SW19 |
| 1 | Record | ScottoKeebs_MX:MX_PCB_1.00u | SW42 |
| 1 | RecordOnly | ScottoKeebs_MX:MX_PCB_1.00u | SW52 |
| 1 | RemDim | ScottoKeebs_MX:MX_PCB_1.00u | SW56 |
| 1 | S1 | ScottoKeebs_MX:MX_PCB_1.00u | SW4 |
| 1 | S2 | ScottoKeebs_MX:MX_PCB_1.00u | SW5 |
| 1 | S3 | ScottoKeebs_MX:MX_PCB_1.00u | SW6 |
| 1 | S4 | ScottoKeebs_MX:MX_PCB_1.00u | SW7 |
| 1 | S5 | ScottoKeebs_MX:MX_PCB_1.00u | SW8 |
| 1 | S6 | ScottoKeebs_MX:MX_PCB_1.00u | SW9 |
| 1 | ScrollLock | ScottoKeebs_MX:MX_PCB_1.00u | SW13 |
| 1 | Select | ScottoKeebs_MX:MX_PCB_1.00u | SW26 |
| 1 | SelectActive | ScottoKeebs_MX:MX_PCB_1.00u | SW69 |
| 1 | SelectLast | ScottoKeebs_MX:MX_PCB_1.00u | SW49 |
| 1 | SelectManual | ScottoKeebs_MX:MX_PCB_1.00u | SW59 |
| 1 | Shift | ScottoKeebs_MX:MX_PCB_1.00u | SW80 |
| 1 | Sneak | ScottoKeebs_MX:MX_PCB_1.00u | SW48 |
| 1 | StopBack | ScottoKeebs_MX:MX_PCB_1.00u | SW89 |
| 1 | Sub | ScottoKeebs_MX:MX_PCB_1.00u | SW71 |
| 1 | Thru | ScottoKeebs_MX:MX_PCB_1.00u | SW44 |
The 173 most common of 196 parts.

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

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



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

andywarburton/Mech-50
A 50% ortholinear mechanical keyboard PCB with three extra keys


CyberPit/FreeDSP-FreeDSP_SMD_AB
2in4out ADAU1701 Board with selectable 2 EEPROMs, SMD resisitors, ThtoughHole Ele-Caps.
It measures 321.5 × 233.4 mm and has 2 copper layers, 1.6 mm thick.
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.
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.
Its repository states no licence, so its author keeps all rights: ask jamiejcole before reusing the design.