Sunriser: a Completely Custom Keyboard With a Volume Knob!
by crashl1445 in Circuits > Electronics
4284 Views, 43 Favorites, 0 Comments
Sunriser: a Completely Custom Keyboard With a Volume Knob!
![image2.jpeg](/proxy/?url=https://content.instructables.com/F5Q/SILF/L2RLC7YC/F5QSILFL2RLC7YC.jpg&filename=image2.jpeg)
![image0.jpeg](/proxy/?url=https://content.instructables.com/FXW/YNDP/L2RLC84Z/FXWYNDPL2RLC84Z.jpg&filename=image0.jpeg)
![unnamed (14).jpg](/proxy/?url=https://content.instructables.com/FFQ/TC1A/L2RLC78Q/FFQTC1AL2RLC78Q.jpg&filename=unnamed (14).jpg)
I decided to completely custom keyboard for my SIDE project in my engineering class taught by Ms. Berbawy at Irvington High School. This board features a TKL minus F-row layout, rotary encoder that serves as a volume knob, and support for an OLED display.
The name "Sunriser" is a play on the name of the keyboard Sunsetter which was designed and manufactured by Charue Design [see pic 3], which was my first introduction into the hobby of custom keyboards. The board served as a huge inspiration for this project not only because of the name, but also because I wanted to be able to use the extra badges I owned from participating in their group buy for this project.
- Shout out to Duv Basil for help with the code
- Shout out to Ms. Berbawy for believing in me when no one else did and for supporting me through some rough times
- AND CHARUE DESIGN (the team and community) for giving me the opportunity to enter this new hobby and for serving as the inspiration for this project
Supplies
![unnamed (15).jpg](/proxy/?url=https://content.instructables.com/F9F/JKHH/L2RLC78S/F9FJKHHL2RLC78S.jpg&filename=unnamed (15).jpg)
![unnamed (16).jpg](/proxy/?url=https://content.instructables.com/F6B/8PTZ/L2RLC78U/F6B8PTZL2RLC78U.jpg&filename=unnamed (16).jpg)
![unnamed (20).jpg](/proxy/?url=https://content.instructables.com/FLY/KE5O/L2RLC792/FLYKE5OL2RLC792.jpg&filename=unnamed (20).jpg)
![unnamed (21).jpg](/proxy/?url=https://content.instructables.com/FWW/SZ2I/L2RLC793/FWWSZ2IL2RLC793.jpg&filename=unnamed (21).jpg)
![unnamed (18).jpg](/proxy/?url=https://content.instructables.com/F9X/OFWG/L2RLC78Z/F9XOFWGL2RLC78Z.jpg&filename=unnamed (18).jpg)
![unnamed (19).jpg](/proxy/?url=https://content.instructables.com/FVE/0VFO/L2RLC791/FVE0VFOL2RLC791.jpg&filename=unnamed (19).jpg)
![unnamed (23).jpg](/proxy/?url=https://content.instructables.com/F7N/TXB7/L2RLC795/F7NTXB7L2RLC795.jpg&filename=unnamed (23).jpg)
![unnamed (24).jpg](/proxy/?url=https://content.instructables.com/FCD/AE37/L2RLC796/FCDAE37L2RLC796.jpg&filename=unnamed (24).jpg)
![unnamed (17).jpg](/proxy/?url=https://content.instructables.com/FRF/GI6S/L2RLC78W/FRFGI6SL2RLC78W.jpg&filename=unnamed (17).jpg)
Materials you will need:
- PCB
- [pic 1 and 2]
- Microcontroller
- [pic 3]
- Diodes
- [pic 4]
- Reset Switch
- [pic 5]
- Key Switches
- (preference)
- [pic 6]
- Rotary Encoder
- [pic 7]
- Knob
- [pic 8]
- Stabilizers
- [pic 9]
- Keycaps
- (preference)
- Filament
- (preference)
- Acrylic
- Silicone
- M2 Screws
- M2 Inserts
- M2 Standoffs
Tools you will need:
- Soldering Iron
- Solder
- Screwdriver
- M2 Allen key
- Pliers
- Flush cutters
- 3D Printer
- Laser Cutter
- Super Glue
Software:
- Fusion 360
- Adobe Illustrator
- KiCad
- QMK
- Respective Programs for 3D-Printer & Laser Cutter
The PCB!
![unnamed (8).png](/proxy/?url=https://content.instructables.com/FZJ/181N/L2RLC78D/FZJ181NL2RLC78D.png&filename=unnamed (8).png)
![unnamed (7).png](/proxy/?url=https://content.instructables.com/FVQ/OS62/L2RLC78B/FVQOS62L2RLC78B.png&filename=unnamed (7).png)
![Screenshot 2022-05-04 225903.png](/proxy/?url=https://content.instructables.com/FOZ/ZTS2/L2RLD3GN/FOZZTS2L2RLD3GN.png&filename=Screenshot 2022-05-04 225903.png)
![unnamed (6).png](/proxy/?url=https://content.instructables.com/FKX/BBKO/L2RLC789/FKXBBKOL2RLC789.png&filename=unnamed (6).png)
![unnamed (25).jpg](/proxy/?url=https://content.instructables.com/FCW/5XGP/L2RLC797/FCW5XGPL2RLC797.jpg&filename=unnamed (25).jpg)
![F6B8PTZL2RLC78U.jpeg](/proxy/?url=https://content.instructables.com/FGS/0URL/L2RLCYKT/FGS0URLL2RLCYKT.jpg&filename=F6B8PTZL2RLC78U.jpeg)
![F9FJKHHL2RLC78S.jpeg](/proxy/?url=https://content.instructables.com/FMY/H0WV/L2RLCYKS/FMYH0WVL2RLCYKS.jpg&filename=F9FJKHHL2RLC78S.jpeg)
- I Used KLE to plan and create the desired keyboard layout. I also added optional layouts and key layouts (color-coded).
- [pic 1]
- Then I moved over to KiCad, a PCB design software and through available keyboard libraries, I created my PCB schematic by using a switch matrix and diodes to optimize the number of rows and columns used and assigned those rows and columns to pins on the Elite-C microcontroller.
- [pic 2 and 3]
- I added the switch portion of the encoder to the matrix and assigned the two other pins to the MCU
- I also decided to add support for an OLED display, as shown here, but I decided not to use it for my first iteration of this project.
- [pic 5]
- Don't forget to create a circuit that uses a push-button switch to short the reset and ground pins on your MCU, without needing to manually do so
- The PCB was then created by placing the component footprints and using "Free Router" to route the traces
- [pic 4]
- Make sure to add stabilizer holes (if your footprint does not support it)
- I then created and added a custom anime japanese car weeb silkscreen that I made in Adobe Illustrator!
- [pic 6]
- Once I was ready to print the PCB I used JLCPCB to get my PCB manufactured.
- [pic 7]
The Case Design
![unnamed (16).png](/proxy/?url=https://content.instructables.com/FA2/2P8S/L2RLC78V/FA22P8SL2RLC78V.png&filename=unnamed (16).png)
![unnamed (13).png](/proxy/?url=https://content.instructables.com/F33/T5JG/L2RLC78P/F33T5JGL2RLC78P.png&filename=unnamed (13).png)
![unnamed (14).png](/proxy/?url=https://content.instructables.com/FSR/G13F/L2RLC78R/FSRG13FL2RLC78R.png&filename=unnamed (14).png)
![unnamed (12).png](/proxy/?url=https://content.instructables.com/FLU/KO7Y/L2RLC78L/FLUKO7YL2RLC78L.png&filename=unnamed (12).png)
![unnamed (27).jpg](/proxy/?url=https://content.instructables.com/F0U/CUCU/L2RLC799/F0UCUCUL2RLC799.jpg&filename=unnamed (27).jpg)
![unnamed (15).png](/proxy/?url=https://content.instructables.com/F7T/08YV/L2RLC78T/F7T08YVL2RLC78T.png&filename=unnamed (15).png)
![unnamed (9).png](/proxy/?url=https://content.instructables.com/FNJ/F1IE/L2RLC78F/FNJF1IEL2RLC78F.png&filename=unnamed (9).png)
![unnamed (10).png](/proxy/?url=https://content.instructables.com/FPV/AESK/L2RLC78H/FPVAESKL2RLC78H.png&filename=unnamed (10).png)
![unnamed (11).png](/proxy/?url=https://content.instructables.com/F6C/1JK1/L2RLC78J/F6C1JK1L2RLC78J.png&filename=unnamed (11).png)
- I created the case in Fusion 360
- pink- top case
- green- bottom case
- red- PCB
- translucent dark- acrylic plates
- [pic 1] overall view
- [pic 2] bottom view of the top case
- [pic 3] top view of the bottom case
- [pic 4] bottom view of the bottom case
- I put the source information of the layout from KLE into a plate generator to create SVG files to create a compatible plate for the layout I chose
- (don't forget to overlap the optional layouts over the main part off the layout before you put it into the plate generator)
- I imported this SVG into Fusion and created a 1.5mm thick plate.
- I edited the plate to include tabs, that will eventually serve as gaskets for a softer typing feel as well as to suspend the plate and PCB between the top and bottom case
- [pic 5] (from keyboard university)
- Receiving/Female tabs were designed as a part of the case that has spacing to accommodate the thickness of the plate due to both the top and bottom gaskets made from the silicone rubber sheets
- [pic 2 and 6]
- I used the dimensions from the finished PCB to size the case to my liking
- I made sure the holes for the knob, USB port, badge slot, navigation cluster, arrow keys, alphas/modifiers, and keycaps were given attention.
- [pic 7 and 8]
- A chamfer was added under the nav cluster due to the lack of clearance from the case being too close to the keycaps
- This is also where I created a slot similar to the one from the "Sunsetter" to accept the badges from my other board.
- The case was also split, with male and female tabs to connect the two halves
- [pic 9]
- Due to the size of the keyboard, I was unable to fit the entire case on the build plate of a Prusa Mk3+
- I also designed access to the bottom of the board with an acrylic plate. It is meant to a be pleasant and aesthetic window to be able to view the solder job, components, and PCB silkscreen from underneath
- [pic 4]
- I also designed an accent plate, where I would be able to offset a thin acrylic plate over the diodes that I'd be able to engrave with my designs!
Acrylic Plates
![unnamed (17).png](/proxy/?url=https://content.instructables.com/FUI/LI17/L2RLC78Y/FUILI17L2RLC78Y.png&filename=unnamed (17).png)
![unnamed (29).jpg](/proxy/?url=https://content.instructables.com/FY2/ZS17/L2RLC79B/FY2ZS17L2RLC79B.jpg&filename=unnamed (29).jpg)
![unnamed (32).jpg](/proxy/?url=https://content.instructables.com/FVY/NMLN/L2RLC79H/FVYNMLNL2RLC79H.jpg&filename=unnamed (32).jpg)
![unnamed (4).jpg](/proxy/?url=https://content.instructables.com/F0L/BZM3/L2RLC784/F0LBZM3L2RLC784.jpg&filename=unnamed (4).jpg)
![IMG_2014.jpg](/proxy/?url=https://content.instructables.com/FPS/YH75/L2RLC77W/FPSYH75L2RLC77W.jpg&filename=IMG_2014.jpg)
- To create the plates I downloaded the plates I had already designed in Fusion 360 as an SVG file.
- Next, I headed to Adobe Illustrator to edit/add graphics that will be engraved or rastered including my name, contact info, keyboard name, and sun graphic to go along with the name.
- [pic 1] the completed adobe illustrator file ready to cut
- red- cut lines
- blue- engrave lines
- black- raster lines
- Then, I tested the graphics by cutting the plates out of wood
- [pic 2] wooden test cut for the bottom plate
- [pic 3] wooden test cut for the switch plate
- After I was happy with the results, I laser cut them out of 1.5mm thick acrylic sheets
- CAUTION
- [pic 5] (thin acrylic can be fragile and crack)
- 2+ mm acrylic is way too thick for the stabs to fit with no issue
- Then I assembled the switch and accent plate with M2 screws and standoffs
- [pic 6]
3D Printing the Case
![Layer 1.png](/proxy/?url=https://content.instructables.com/FEX/HLKX/L3060YEN/FEXHLKXL3060YEN.png&filename=Layer 1.png)
![Layer 2.png](/proxy/?url=https://content.instructables.com/FCZ/2KAG/L3060YEM/FCZ2KAGL3060YEM.png&filename=Layer 2.png)
![Layer 3.png](/proxy/?url=https://content.instructables.com/FXF/2W7D/L3060YEL/FXF2W7DL3060YEL.png&filename=Layer 3.png)
![unnamed (3).jpg](/proxy/?url=https://content.instructables.com/F9B/RM9A/L2RLC781/F9BRM9AL2RLC781.jpg&filename=unnamed (3).jpg)
![IMG_2007.jpg](/proxy/?url=https://content.instructables.com/FD1/FQBV/L2RLC77K/FD1FQBVL2RLC77K.jpg&filename=IMG_2007.jpg)
![IMG_2008.jpg](/proxy/?url=https://content.instructables.com/FIJ/OJ85/L2RLC77L/FIJOJ85L2RLC77L.jpg&filename=IMG_2008.jpg)
- 3D Print the Case in PETG for extra strength or PLA for better color options, I chose PETG
- Open the STL files in the slicer. I used the settings below which might change depending on your printerfo1':
- 20 % infill (may vary)
- Supports everywhere
- CAUTION: Note the orientation of each print
- [pic 2, 4, and 6]
- I used the Prusa Mk3+ and so, had to print in 3 batches
- [pic 1] both bottom halves
- [pic 3] left top half
- [pic 5] right top half
- Final Prints!!
- [pic 6]
- BONUS [pic 8 and 9] Badge test fits!
- LOVE YOU CD community
Stabilizers!
![unnamed (26).jpg](/proxy/?url=https://content.instructables.com/FNZ/YGCD/L2RLC798/FNZYGCDL2RLC798.jpg&filename=unnamed (26).jpg)
- Here I followed the stabilizer's included instructions to lube and install the stabilizers into the PCB
- more advanced tutorial for lubing and tuning stabs
Soldering
![IMG_2010.jpg](/proxy/?url=https://content.instructables.com/F3X/I3JI/L2RLC77N/F3XI3JIL2RLC77N.jpg&filename=IMG_2010.jpg)
![unnamed (28).jpg](/proxy/?url=https://content.instructables.com/FX9/DO51/L2RLC79A/FX9DO51L2RLC79A.jpg&filename=unnamed (28).jpg)
![unnamed (30).jpg](/proxy/?url=https://content.instructables.com/FCP/FUEM/L2RLC79C/FCPFUEML2RLC79C.jpg&filename=unnamed (30).jpg)
![Inked66673403125__D972F67E-FE7A-41E2-8AAC-A73E7AF1EE46_LI.jpg](/proxy/?url=https://content.instructables.com/FGT/5CHJ/L2T0TH6Q/FGT5CHJL2T0TH6Q.jpg&filename=Inked66673403125__D972F67E-FE7A-41E2-8AAC-A73E7AF1EE46_LI.jpg)
![IMG_2011.jpg](/proxy/?url=https://content.instructables.com/FOZ/L3XT/L2RLC77O/FOZL3XTL2RLC77O.jpg&filename=IMG_2011.jpg)
![IMG_2012.jpg](/proxy/?url=https://content.instructables.com/F7G/0E2Q/L2RLC77U/F7G0E2QL2RLC77U.jpg&filename=IMG_2012.jpg)
- Through-hole solder the MCU sockets (NOT THE MCU) into the PCB while it is facing down
- [pic 3]
- (make sure you clip the protruding ends that face up) this is necessary for the switch above it to have enough clearance to sit flush onto the PCB)
- SMT solder the diodes onto the top half of the PCB
- [pic 4]
- SMT solder the reset switch
- Then with the acrylic plate above the PCB click in all the switches through the plate (in your desired layout) and make sure the legs fit into the PCB.
- [pic 5]
- When you have all of your switches in, through-hole solder every switch on the board
- Next, solder in the rotary encoder
- Don't forget to solder resistors, headers, and/or wires for the OLED if applicable
- Finish off the board by soldering the Elite-C to the microcontroller sockets you soldered in step 1
- [pic 2] is me :)
- [pic 1, 6, and 7] finished (PCB plate switch combo) product
Programming
- The easiest way to create the program for this keyboard is to use QMK
- (QMK is the easiest and most widely used keyboard software)
- I used the website "Keyboard Firmware Builder" to start building the basics of the firmware
- This website takes a layout combined with some settings to create a QMK program for any custom keyboard. Even though the website is outdated, it can still work.
- The website asks to input:
- a switch layout imported from KLE
- a wiring diagram of my switch matrix
- the assigned pins to each row
- diode direction
- MCU selection
- the keymap itself
- Next, I had to download the source files because the website is outdated and was based on older QMK builds. This meant that I had to edit each individual file to the standard formatting used by recent QMK builds by referencing default keymaps and files of current keyboards on the market as well as the QMK docs.
- Not to mention, I had to also add in support for the rotary encoder as explained by this part of the QMK write-up.
- Then using the QMK environment, I compiled the newly adjusted files and flashed them to the MCU using the QMK bootloader.
- I continued to edit, refine, and tweak the firmware to my liking using features such as unique keycodes, layers, and much more, all available in the vast library of QMK support.
Assembling the Case Pieces
![unnamed (7).jpg](/proxy/?url=https://content.instructables.com/FYX/BJM4/L2RLC78A/FYXBJM4L2RLC78A.jpg&filename=unnamed (7).jpg)
![unnamed (9).jpg](/proxy/?url=https://content.instructables.com/FIJ/DT8V/L2RLC78E/FIJDT8VL2RLC78E.jpg&filename=unnamed (9).jpg)
![unnamed (5).jpg](/proxy/?url=https://content.instructables.com/FGJ/7ZJP/L2RLC786/FGJ7ZJPL2RLC786.jpg&filename=unnamed (5).jpg)
![unnamed (6).jpg](/proxy/?url=https://content.instructables.com/FLE/76VP/L2RLC788/FLE76VPL2RLC788.jpg&filename=unnamed (6).jpg)
![unnamed (10).jpg](/proxy/?url=https://content.instructables.com/FM9/0JHD/L2RLC78G/FM90JHDL2RLC78G.jpg&filename=unnamed (10).jpg)
- Clean up and remove the supports fro the prints
- Re-drill the standoff holes if necessary
- Sand down and clean up edges
- Fit the halves into each other (Dremel/Sand if needed)
- Install the M2 inserts into the top and bottom case (method based on tolerances)
- [pic 1]
- Method 1 (If tighter)
- Heat the inserts via a heat gun and
- Press fit the hot inserts into the holes
- Method 2 (If looser)
- Put a drop of super glue in the standoff hole
- Use pliers to push the standoff into the hole
- If necessary use liquid super glue around the edge of the standoff/hole
- Cut out the silicone pieces into gasket tabs sized by the indents in the case
- Install gaskets
- Set up the bottom half facing up
- add super glue to each tab indent
- Apply the silicone gaskets to each indent
- [pic 2]
- Place the acrylic switch plate facing up
- Add super glue to each of the tabs
- Apply the silicone gaskets to each tab,
- [pic 3]
- make sure there is no overhanging silicone
- Let them dry
- Test fit the top and bottom halves with the plate ONCE DRY
- [pic 4]
- Fit in and screw the "Sunsetter" badge in
- [pic 5]
Final Assembly
![unnamed.jpg](/proxy/?url=https://content.instructables.com/F3A/84O0/L2RLC79K/F3A84O0L2RLC79K.jpg&filename=unnamed.jpg)
![F5QSILFL2RLC7YC.jpeg](/proxy/?url=https://content.instructables.com/F0A/M9AW/L2T0U2B5/F0AM9AWL2T0U2B5.jpg&filename=F5QSILFL2RLC7YC.jpeg)
![FXWYNDPL2RLC84Z.jpeg](/proxy/?url=https://content.instructables.com/F8H/GBRN/L2T0U2B6/F8HGBRNL2T0U2B6.jpg&filename=FXWYNDPL2RLC84Z.jpeg)
- Place the PCB plate switch assembly into the bottom case making sure:
- the tabs fit into the indents and each one makes contact with the silicone gaskets
- the USB port from the microcontroller fits into the USB slot in the case
- Fit the top case over the PCB, sandwiching the plate.
- Screw in the bottom case into the top case from the bottom using, appropriately sized M2 screws
- Then with the board flipped over, screw the bottom acrylic panel into the bottom case
- Then dress up your keyboard with your favorite keycaps
- Done :)
Conclusion
![unnamed (11).jpg](/proxy/?url=https://content.instructables.com/FO2/VS2B/L2RLC78I/FO2VS2BL2RLC78I.jpg&filename=unnamed (11).jpg)
![unnamed (12).jpg](/proxy/?url=https://content.instructables.com/FUP/EBJS/L2RLC78K/FUPEBJSL2RLC78K.jpg&filename=unnamed (12).jpg)
This project taught me the basics of programming, 3D printing, laser cutting, and appropriate software. This keyboard, hobby, and class pushed me through some tough times, taught me new skills, and showed me a creative side of myself that I never knew existed! Thank you to everyone who helped me! Until my next project or post, peace everyone. ✌️
P.S. Message me on discord "Crash#8751" if any of you need help on a similar project :)