added example page, instructions on getting keycaps
|
|
@ -10,6 +10,7 @@
|
|||
"opacity": {
|
||||
"images": 0.6,
|
||||
"pads": 1.0,
|
||||
"shapes": 1.0,
|
||||
"tracks": 1.0,
|
||||
"vias": 1.0,
|
||||
"zones": 0.6
|
||||
|
|
@ -62,9 +63,10 @@
|
|||
35,
|
||||
36,
|
||||
39,
|
||||
40
|
||||
40,
|
||||
41
|
||||
],
|
||||
"visible_layers": "fffffff_ffffffff",
|
||||
"visible_layers": "ffffffff_ffffffff",
|
||||
"zone_display_mode": 0
|
||||
},
|
||||
"git": {
|
||||
|
|
@ -75,9 +77,71 @@
|
|||
},
|
||||
"meta": {
|
||||
"filename": "orpheuspad_pcb.kicad_prl",
|
||||
"version": 3
|
||||
"version": 4
|
||||
},
|
||||
"net_inspector_panel": {
|
||||
"col_hidden": [
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false,
|
||||
false
|
||||
],
|
||||
"col_order": [
|
||||
0,
|
||||
1,
|
||||
2,
|
||||
3,
|
||||
4,
|
||||
5,
|
||||
6,
|
||||
7,
|
||||
8,
|
||||
9
|
||||
],
|
||||
"col_widths": [
|
||||
156,
|
||||
141,
|
||||
103,
|
||||
71,
|
||||
103,
|
||||
103,
|
||||
103,
|
||||
74,
|
||||
103,
|
||||
103
|
||||
],
|
||||
"custom_group_rules": [],
|
||||
"expanded_rows": [],
|
||||
"filter_by_net_name": true,
|
||||
"filter_by_netclass": true,
|
||||
"filter_text": "",
|
||||
"group_by_constraint": false,
|
||||
"group_by_netclass": false,
|
||||
"show_unconnected_nets": false,
|
||||
"show_zero_pad_nets": false,
|
||||
"sort_ascending": true,
|
||||
"sorting_column": 0
|
||||
},
|
||||
"project": {
|
||||
"files": []
|
||||
},
|
||||
"schematic": {
|
||||
"selection_filter": {
|
||||
"graphics": true,
|
||||
"images": true,
|
||||
"labels": true,
|
||||
"lockedItems": false,
|
||||
"otherItems": true,
|
||||
"pins": true,
|
||||
"symbols": true,
|
||||
"text": true,
|
||||
"wires": true
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,14 +6,14 @@
|
|||
"apply_defaults_to_fp_fields": false,
|
||||
"apply_defaults_to_fp_shapes": false,
|
||||
"apply_defaults_to_fp_text": false,
|
||||
"board_outline_line_width": 0.049999999999999996,
|
||||
"copper_line_width": 0.19999999999999998,
|
||||
"board_outline_line_width": 0.05,
|
||||
"copper_line_width": 0.2,
|
||||
"copper_text_italic": false,
|
||||
"copper_text_size_h": 1.5,
|
||||
"copper_text_size_v": 1.5,
|
||||
"copper_text_thickness": 0.3,
|
||||
"copper_text_upright": false,
|
||||
"courtyard_line_width": 0.049999999999999996,
|
||||
"courtyard_line_width": 0.05,
|
||||
"dimension_precision": 4,
|
||||
"dimension_units": 3,
|
||||
"dimensions": {
|
||||
|
|
@ -24,13 +24,13 @@
|
|||
"text_position": 0,
|
||||
"units_format": 1
|
||||
},
|
||||
"fab_line_width": 0.09999999999999999,
|
||||
"fab_line_width": 0.1,
|
||||
"fab_text_italic": false,
|
||||
"fab_text_size_h": 1.0,
|
||||
"fab_text_size_v": 1.0,
|
||||
"fab_text_thickness": 0.15,
|
||||
"fab_text_upright": false,
|
||||
"other_line_width": 0.09999999999999999,
|
||||
"other_line_width": 0.1,
|
||||
"other_text_italic": false,
|
||||
"other_text_size_h": 1.0,
|
||||
"other_text_size_v": 1.0,
|
||||
|
|
@ -41,11 +41,11 @@
|
|||
"height": 1.524,
|
||||
"width": 1.524
|
||||
},
|
||||
"silk_line_width": 0.09999999999999999,
|
||||
"silk_line_width": 0.1,
|
||||
"silk_text_italic": false,
|
||||
"silk_text_size_h": 1.0,
|
||||
"silk_text_size_v": 1.0,
|
||||
"silk_text_thickness": 0.09999999999999999,
|
||||
"silk_text_thickness": 0.1,
|
||||
"silk_text_upright": false,
|
||||
"zones": {
|
||||
"min_clearance": 0.5
|
||||
|
|
@ -63,16 +63,19 @@
|
|||
"copper_edge_clearance": "error",
|
||||
"copper_sliver": "warning",
|
||||
"courtyards_overlap": "error",
|
||||
"creepage": "error",
|
||||
"diff_pair_gap_out_of_range": "error",
|
||||
"diff_pair_uncoupled_length_too_long": "error",
|
||||
"drill_out_of_range": "error",
|
||||
"duplicate_footprints": "warning",
|
||||
"extra_footprint": "warning",
|
||||
"footprint": "error",
|
||||
"footprint_filters_mismatch": "ignore",
|
||||
"footprint_symbol_mismatch": "warning",
|
||||
"footprint_type_mismatch": "ignore",
|
||||
"hole_clearance": "error",
|
||||
"hole_near_hole": "error",
|
||||
"hole_to_hole": "warning",
|
||||
"holes_co_located": "warning",
|
||||
"invalid_outline": "error",
|
||||
"isolated_copper": "warning",
|
||||
|
|
@ -83,9 +86,11 @@
|
|||
"lib_footprint_mismatch": "warning",
|
||||
"malformed_courtyard": "error",
|
||||
"microvia_drill_out_of_range": "error",
|
||||
"mirrored_text_on_front_layer": "warning",
|
||||
"missing_courtyard": "ignore",
|
||||
"missing_footprint": "warning",
|
||||
"net_conflict": "warning",
|
||||
"nonmirrored_text_on_back_layer": "warning",
|
||||
"npth_inside_courtyard": "ignore",
|
||||
"padstack": "warning",
|
||||
"pth_inside_courtyard": "ignore",
|
||||
|
|
@ -100,7 +105,9 @@
|
|||
"text_thickness": "warning",
|
||||
"through_hole_pad_without_hole": "error",
|
||||
"too_many_vias": "error",
|
||||
"track_angle": "error",
|
||||
"track_dangling": "warning",
|
||||
"track_segment_length": "error",
|
||||
"track_width": "error",
|
||||
"tracks_crossing": "error",
|
||||
"unconnected_items": "error",
|
||||
|
|
@ -113,27 +120,29 @@
|
|||
"min_clearance": 0.0,
|
||||
"min_connection": 0.0,
|
||||
"min_copper_edge_clearance": 0.5,
|
||||
"min_groove_width": 0.0,
|
||||
"min_hole_clearance": 0.25,
|
||||
"min_hole_to_hole": 0.25,
|
||||
"min_microvia_diameter": 0.19999999999999998,
|
||||
"min_microvia_drill": 0.09999999999999999,
|
||||
"min_microvia_diameter": 0.2,
|
||||
"min_microvia_drill": 0.1,
|
||||
"min_resolved_spokes": 2,
|
||||
"min_silk_clearance": 0.0,
|
||||
"min_text_height": 0.7999999999999999,
|
||||
"min_text_height": 0.8,
|
||||
"min_text_thickness": 0.08,
|
||||
"min_through_hole_diameter": 0.3,
|
||||
"min_track_width": 0.0,
|
||||
"min_via_annular_width": 0.09999999999999999,
|
||||
"min_via_annular_width": 0.1,
|
||||
"min_via_diameter": 0.5,
|
||||
"solder_mask_to_copper_clearance": 0.0,
|
||||
"use_height_for_length_calcs": true
|
||||
},
|
||||
"teardrop_options": [
|
||||
{
|
||||
"td_onpadsmd": true,
|
||||
"td_onpthpad": true,
|
||||
"td_onroundshapesonly": false,
|
||||
"td_onsmdpad": true,
|
||||
"td_ontrackend": false,
|
||||
"td_onviapad": true
|
||||
"td_onvia": true
|
||||
}
|
||||
],
|
||||
"teardrop_parameters": [
|
||||
|
|
@ -208,6 +217,7 @@
|
|||
"mfg": "",
|
||||
"mpn": ""
|
||||
},
|
||||
"layer_pairs": [],
|
||||
"layer_presets": [],
|
||||
"viewports": []
|
||||
},
|
||||
|
|
@ -402,10 +412,15 @@
|
|||
"duplicate_sheet_names": "error",
|
||||
"endpoint_off_grid": "warning",
|
||||
"extra_units": "error",
|
||||
"footprint_filter": "ignore",
|
||||
"footprint_link_issues": "warning",
|
||||
"four_way_junction": "ignore",
|
||||
"global_label_dangling": "warning",
|
||||
"hier_label_mismatch": "error",
|
||||
"label_dangling": "error",
|
||||
"label_multiple_wires": "warning",
|
||||
"lib_symbol_issues": "warning",
|
||||
"lib_symbol_mismatch": "warning",
|
||||
"missing_bidi_pin": "warning",
|
||||
"missing_input_pin": "warning",
|
||||
"missing_power_pin": "error",
|
||||
|
|
@ -418,9 +433,14 @@
|
|||
"pin_not_driven": "error",
|
||||
"pin_to_pin": "warning",
|
||||
"power_pin_not_driven": "error",
|
||||
"same_local_global_label": "warning",
|
||||
"similar_label_and_power": "warning",
|
||||
"similar_labels": "warning",
|
||||
"similar_power": "warning",
|
||||
"simulation_model_issue": "ignore",
|
||||
"single_global_label": "ignore",
|
||||
"unannotated": "error",
|
||||
"unconnected_wire_endpoint": "warning",
|
||||
"unit_value_mismatch": "error",
|
||||
"unresolved_variable": "error",
|
||||
"wire_dangling": "error"
|
||||
|
|
@ -432,7 +452,7 @@
|
|||
},
|
||||
"meta": {
|
||||
"filename": "orpheuspad_pcb.kicad_pro",
|
||||
"version": 1
|
||||
"version": 2
|
||||
},
|
||||
"net_settings": {
|
||||
"classes": [
|
||||
|
|
@ -447,6 +467,7 @@
|
|||
"microvia_drill": 0.1,
|
||||
"name": "Default",
|
||||
"pcb_color": "rgba(0, 0, 0, 0.000)",
|
||||
"priority": 2147483647,
|
||||
"schematic_color": "rgba(0, 0, 0, 0.000)",
|
||||
"track_width": 0.2,
|
||||
"via_diameter": 0.6,
|
||||
|
|
@ -455,7 +476,7 @@
|
|||
}
|
||||
],
|
||||
"meta": {
|
||||
"version": 3
|
||||
"version": 4
|
||||
},
|
||||
"net_colors": null,
|
||||
"netclass_assignments": null,
|
||||
|
|
@ -531,6 +552,7 @@
|
|||
],
|
||||
"filter_string": "",
|
||||
"group_symbols": true,
|
||||
"include_excluded_from_bom": false,
|
||||
"name": "Grouped By Value",
|
||||
"sort_asc": true,
|
||||
"sort_field": "Reference"
|
||||
|
|
@ -565,6 +587,7 @@
|
|||
"net_format_name": "",
|
||||
"page_layout_descr_file": "",
|
||||
"plot_directory": "",
|
||||
"space_save_all_events": true,
|
||||
"spice_current_sheet_as_root": false,
|
||||
"spice_external_command": "spice \"%I\"",
|
||||
"spice_model_current_sheet_as_root": true,
|
||||
|
|
|
|||
BIN
website/public/docs/importpage.png
Normal file
|
After Width: | Height: | Size: 93 KiB |
BIN
website/public/docs/newpage.png
Normal file
|
After Width: | Height: | Size: 53 KiB |
BIN
website/public/docs/routepage.png
Normal file
|
After Width: | Height: | Size: 98 KiB |
|
|
@ -17,7 +17,7 @@ import "./index.css";
|
|||
|
||||
|
||||
// IMPORT YOUR PROJECTS HERE
|
||||
import OrpheusPad from "./pages/submissions/OrpheusPad.mdx"
|
||||
import OrpheusPad from "./pages/submissions/Orpheuspad/OrpheusPad.mdx"
|
||||
|
||||
const router = createBrowserRouter([
|
||||
{
|
||||
|
|
@ -55,7 +55,7 @@ const router = createBrowserRouter([
|
|||
element: <DocPage Content={ ResearchNote } />,
|
||||
},
|
||||
{
|
||||
path: "/get-keycaps",
|
||||
path: "/get-keycap",
|
||||
element: <DocPage Content={ GetKeycap } />,
|
||||
},
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# Get your Hack Club keycaps!
|
||||
|
||||
Finally got your hackpad, eager to get your new custom hc keycap? Read on to find out how!
|
||||
Finally got your hackpad, eager to get your new custom HACK CLUB BRANDED keycap? Read on to find out how!
|
||||
|
||||
## Assemble your hackpad
|
||||
|
||||
|
|
@ -12,26 +12,66 @@ As always, if you ever need help, ask in #hackpad!
|
|||
|
||||
## Get the firmware working
|
||||
|
||||
Once that works, send a video in #hackpad! Let the world see.
|
||||
When you initially flash your firmware, there's a good chance that it won't actually work. That's okay! It's pretty hard to develop firmware without the physical device. Now's your chance to fix it, edit it, and add whatever features you may want.
|
||||
|
||||
Eventually, it should work! Send a video in #hackpad and let everyone see what you've made. Now it's time to add it to the hackpad website!
|
||||
|
||||
## Write your page!
|
||||
Now you have an awesome working macropad, that you designed yourself. Time to write it!
|
||||
## Update the website to add your page
|
||||
|
||||
Make sure to add each section! It really goes a long way to document your project. Imagine if I didn't docuemnt any of this
|
||||
Now you have an awesome working macropad, that you designed yourself. Time to add it to the hackpad website! We're now going to edit the website.
|
||||
|
||||
First, clone the repository. Navigate over to the "website" folder. Run the command "pnpm install", then run "pnpm dev". It should show up on port 5173. That can be pretty confusing, so if you have any issues make sure to ask in #hackpad!
|
||||
|
||||
(side note: node v23.0 and up breaks the site, so try downgrading if you're running into issues)
|
||||
|
||||
Navigate over to `website/src/pages/submissions`. Make a new folder with the title of your hackpad, then create a new MDX file with the same name. It should look something like this:
|
||||
<img src="/docs/newpage.png" alt="New Page" width="500"/>
|
||||
(there's some additional assets in there. Note the OrpheusPad.mdx file)
|
||||
|
||||
Now you're ready to start writing your page! Let's get to it
|
||||
|
||||
#### Write your page!
|
||||
|
||||
Now that you have the website set up locally, you can now edit it to add a page on your hackpad. Edit the MDX file
|
||||
|
||||
Make sure to add each section. It really goes a long way to document your project. Imagine if I didn't docuemnt any of this!!
|
||||
|
||||
- Overview
|
||||
- CAD model
|
||||
- PCB
|
||||
- Firmware
|
||||
- BOM
|
||||
- Any fun facts!!!
|
||||
- Any fun facts / random stuff you wanna share
|
||||
|
||||
Check the [OrpheusPad](https://hackpad.hackclub.com/projects/orpheuspad) page as a reference
|
||||
Check the [OrpheusPad](https://hackpad.hackclub.com/projects/orpheuspad) page as a reference. Doesn't need to be as fancy, but this is your chance to get on an OFFICIAL hack club page. Use it wisely
|
||||
|
||||
#### Add the route
|
||||
Once you're done writing the page, you need to add the route so that people can actually see it! Head over to main.tsx, then you're going to do 2 things.
|
||||
|
||||
## Update the website to add your page
|
||||
Here's your final part!
|
||||
First, at the top of the file, import your page. In the case of orpheuspad:
|
||||
```javascript
|
||||
import OrpheusPad from "./pages/submissions/Orpheuspad/OrpheusPad.mdx"
|
||||
```
|
||||
It should look something like this:
|
||||
<img src="docs/importpage.png" alt="Import Page" width="500"/>
|
||||
|
||||
Next, we need to add a route to your page. Otherwise, people wouldn't be able to find it! The route is basiaclly where your page will be located.
|
||||
|
||||
Head over to main.tsx. You should see a bunch of routes. Add a new route to your page at the bottom. Each route follows the same syntax. To add OrpheusPad:
|
||||
|
||||
```javascript
|
||||
// Submitting? Great! Do something like this:
|
||||
{
|
||||
path: "/projects/orpheuspad",
|
||||
element: <DocPage Content={ OrpheusPad } />
|
||||
}
|
||||
```
|
||||
|
||||
After, it should look something like this:
|
||||
<img src="docs/routepage.png" alt="Add Route" width="500"/>
|
||||
|
||||
You should be done! Make sure to test these changes locally by going to `http://localhost:5173/projects/yourprojectname`. If it works, you're ready to make a PR! Head on over to the repository and make a PR with your changes.
|
||||
|
||||
## Fill out the form!
|
||||
If all goes well, your PR will be merged and you'll be sent a form to get your keycap. Have fun!!
|
||||
|
||||
|
|
|
|||
|
|
@ -1,15 +0,0 @@
|
|||
# Orpheuspad
|
||||
|
||||
Orpheuspad is a 4 key macropad with a rotary encoder, an OLED Display. It also has 2 WS2812B Leds, and uses QMK firmware
|
||||
|
||||
I made it because hack club needed a tutorial macropad and there weren't any good options....
|
||||
|
||||
## Fun facts
|
||||
- This project took 20+ hours!!
|
||||
- I redesigned it like 15 times...
|
||||
- It glows underneath. Isn't that sick!!!
|
||||
|
||||
|
||||
## What I learned
|
||||
|
||||
Something. hopefully...
|
||||
71
website/src/pages/submissions/Orpheuspad/OrpheusPad.mdx
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
import schematicImage from './schematic.png';
|
||||
import pcbImage from './pcb.png';
|
||||
import cadImage from './cad.png';
|
||||
import bongoCat from './bongocat.png';
|
||||
|
||||
# Orpheuspad
|
||||
|
||||
Orpheuspad is a 4 key macropad with a rotary encoder, an OLED Display. It also has 2 WS2812B Leds, and uses QMK firmware
|
||||
|
||||
It serves as an example piece/reference for the hackpad YSWS, since it contains an implementation of every common part.
|
||||
|
||||
## Features:
|
||||
- Dual layer acrylic case. looks looks awesome doesn't it??
|
||||
- 128x32 OLED Display
|
||||
- EC11 Rotary encoder for whatever you want
|
||||
- 2 WS2812B RGB LEDs. One for underglow, and one that diffuses throughout the case
|
||||
- 4 Keys
|
||||
- [VIA](https://www.caniusevia.com/) support!
|
||||
|
||||
## CAD Model:
|
||||
Everything fits together using 5 M3 Bolts and heatset inserts. 4 for the case, one for the PCB. Also, it has a 5 degree tilt
|
||||
|
||||
It has 3 separate printed pieces. The angle, the base where the PCB sits, and the top cover. it also has 2 acrylic plates. One to cover the electronics, the other to hold the switches
|
||||
|
||||
<img src={cadImage} alt="Schematic" width="500"/>
|
||||
|
||||
Made in Fusion360. Nifty
|
||||
|
||||
|
||||
## PCB
|
||||
Here's my PCB! It was made in KiCad. The silkscreen was imported from a Figma image.
|
||||
|
||||
Schematic
|
||||
<img src={schematicImage} alt="Schematic" width="300"/>
|
||||
|
||||
PCB
|
||||
<img src={pcbImage} alt="Schematic" width="300"/>
|
||||
|
||||
I used MX_V2 for the keyswitch footprints. I think in retrospect, I should've added a ground plane
|
||||
|
||||
## Firmware Overview
|
||||
This hackpad uses [QMK](https://qmk.fm/) firmware for everything.
|
||||
|
||||
- the rotary encoder changes volume. press to mute
|
||||
- The 4 keys currently act as macros I dynamically change in VIA.
|
||||
- The OLED is a cat!! Bongocat!! :3
|
||||
|
||||
<img src={bongoCat} alt="Bongo Cat" width="300"/>
|
||||
|
||||
I might add more in the future! That's it for now
|
||||
|
||||
## BOM:
|
||||
Here should be everything you need to make this hackpad
|
||||
|
||||
- 4x Cherry MX Switches
|
||||
- 4x DSA Keycaps
|
||||
- 5x M3x5x4 Heatset inserts
|
||||
- 3x M3x16mm SHCS Bolts
|
||||
- 2X M3x12mm SHCS Bolts
|
||||
- 5x 1N4148 DO-35 Diodes.
|
||||
- 2x WS2812B LEDs
|
||||
- 1x 0.91" 128x32 OLED Display
|
||||
- 1x EC11 Rotary Encoder
|
||||
- 1x XIAO RP2040
|
||||
- 1x Case (3 printed parts, 2 laser cut parts)
|
||||
|
||||
|
||||
## Extra stuff
|
||||
Honestly I'm not quite too sure what to add here. Favourite meme? a joke?? Uhhh you can imagine it
|
||||
|
||||
Oh fun fact: I built mine in SF the day before github universe LOL
|
||||
BIN
website/src/pages/submissions/Orpheuspad/bongocat.png
Normal file
|
After Width: | Height: | Size: 180 KiB |
BIN
website/src/pages/submissions/Orpheuspad/cad.png
Normal file
|
After Width: | Height: | Size: 2.6 MiB |
BIN
website/src/pages/submissions/Orpheuspad/pcb.png
Normal file
|
After Width: | Height: | Size: 300 KiB |
BIN
website/src/pages/submissions/Orpheuspad/schematic.png
Normal file
|
After Width: | Height: | Size: 182 KiB |