Merge branch 'hackclub:main' into main

This commit is contained in:
End 2025-10-18 18:09:49 -07:00 committed by GitHub
commit 42114125a5
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
438 changed files with 4813259 additions and 177019 deletions

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,46 @@
# You import all the IOs of your board
import board
# These are imports from the kmk library
from kmk.kmk_keyboard import KMKKeyboard
from kmk.scanners.keypad import KeysScanner
from kmk.keys import KC
from kmk.modules.macros import Press, Release, Tap, Macros
from kmk.modules.rotary_encoder import RotaryEncoderHandler
# This is the main instance of your keyboard
keyboard = KMKKeyboard()
# Add the macro extension
macros = Macros()
keyboard.modules.append(macros)
# Define your pins here!
PINS = [board.D7, board.D8, board.D9, board.D10, board.D6, board.D5, board.D2, board.D3]
# Define rotary encoder module
encoder_handler = RotaryEncoderHandler()
keyboard.modules.append(encoder_handler)
# Assign rotary encoder actions
encoder_handler.pins = (board.GP26, board.GP27)
encoder_handler.divisor = 4
encoder_handler.map = [KC.VOLD, KC.VOLU] # Rotate Left = Volume Down, Rotate Right = Volume Up
# Tell kmk we are not using a key matrix
keyboard.matrix = KeysScanner(
pins=PINS,
value_when_pressed=False,
)
# Here you define the buttons corresponding to the pins
# Look here for keycodes: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/keycodes.md
# And here for macros: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/macros.md
keyboard.keymap = [
[KC.W, KC.A, KC.S, KC.D, KC.DEL, KC.SPC]
]
# Start kmk!
if __name__ == '__main__':
keyboard.go()

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,83 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "All Layers",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "MacroPad#2.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View file

@ -0,0 +1,584 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"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.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"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.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"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.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "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_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"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.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_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "MacroPad#2.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "../../Desktop/MacroPadStuff/Gerbers/",
"pos_files": "",
"specctra_dsn": "",
"step": "../../Desktop/MacroPadStuff/MacroPad#2.step",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"ad87ff65-c09e-4df0-a55e-fda2112b1caa",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -0,0 +1,46 @@
# You import all the IOs of your board
import board
# These are imports from the kmk library
from kmk.kmk_keyboard import KMKKeyboard
from kmk.scanners.keypad import KeysScanner
from kmk.keys import KC
from kmk.modules.macros import Press, Release, Tap, Macros
from kmk.modules.rotary_encoder import RotaryEncoderHandler
# This is the main instance of your keyboard
keyboard = KMKKeyboard()
# Add the macro extension
macros = Macros()
keyboard.modules.append(macros)
# Define your pins here!
PINS = [board.D7, board.D8, board.D9, board.D10, board.D6, board.D5, board.D2, board.D3]
# Define rotary encoder module
encoder_handler = RotaryEncoderHandler()
keyboard.modules.append(encoder_handler)
# Assign rotary encoder actions
encoder_handler.pins = (board.GP26, board.GP27)
encoder_handler.divisor = 4
encoder_handler.map = [KC.VOLD, KC.VOLU] # Rotate Left = Volume Down, Rotate Right = Volume Up
# Tell kmk we are not using a key matrix
keyboard.matrix = KeysScanner(
pins=PINS,
value_when_pressed=False,
)
# Here you define the buttons corresponding to the pins
# Look here for keycodes: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/keycodes.md
# And here for macros: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/macros.md
keyboard.keymap = [
[KC.W, KC.A, KC.S, KC.D, KC.DEL, KC.SPC]
]
# Start kmk!
if __name__ == '__main__':
keyboard.go()

View file

@ -0,0 +1,32 @@
# ChessPad!
### Inspiration
I came across this event just from a random email, and knew I had to try it out. The name was chosen quite randomly in the end though, and its only real implementation is as a symbol on the pcb
So much thanks goes to whoever made "Ducc's fidget toy". I even ended up stealing their BOM, with slight adjustments
### Extra info
None
### Specifications
BOM:
- 6x Cherry MX Switches
- 2x SK6812 MINI Leds
- 1x XIAO RP2040
- 6x Blank DSA Keycaps (preferably white or black, for that chess theme, but doesn't matter too much)
- 4x M3x16 Bolt
- 4x M3 Heatset
- 1x Soldering iron
- 1x EC11 Rotary Encoder
- 1x Case
- 1x EC11 Rotary Encoder
Others:
- KMK Firmware
- FrontPlate.step
- BackPlate.Step
Images:
![Schematic_Screenshot](https://github.com/user-attachments/assets/08919581-c4a5-4150-9384-e8a36ab13654)
![PCB_Screenshot](https://github.com/user-attachments/assets/e849a1c9-5d95-47f8-beb2-cbfadebc2ec3)
![Case_Screenshot](https://github.com/user-attachments/assets/a219568d-d7e5-445a-a565-2be9e3697372)

Binary file not shown.

After

Width:  |  Height:  |  Size: 94 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

39
hackpads/EPad/README.md Normal file
View file

@ -0,0 +1,39 @@
# Epad
This is my submission for Hackpad V2!
## Inspiration
I was inspired by a macropad that I saw in a YouTube video a while back. It looked really cool so I tried to replicate it as best as I could from memory.
## Challenges
My biggest challenge was getting everything to line up correctly. I know I spent a long time just getting every hole at the top lined up with the switches.
## Features
- 12x cherry mx keys
- 1x rotary encoder switch
- KMK firmware
## PCB
| **Schematic** | **PCB** |
|---------------|---------|
|![](https://cdn.hack.pet/slackcdn/ff0a99e057239e2adf649a0528985796.png)|![](https://cdn.hack.pet/slackcdn/4191841fe6e9bd667cdf39350d526072.png)|
## CAD
Designed with Fusion 360. The guide helped a ton!
![](https://cdn.hackclubber.dev/slackcdn/ead36b9d1c1b09904461575c4e985a7b.png)
![](https://cdn.hack.pet/slackcdn/e168b3d68d40c1df74bbcc92daa0a3c6.png)
## Firmware
Made using KMK Firmware
## BOM
- 1 XIAO-RP2040
- 12x Cherry MX Switches
- 12x White keycaps
- 12x 35_SOD27_P7.62mm diodes
- 1x Rotary Encoder Switch
- 4x 8mm deep 3.332mm wide 4mm size m4x0.7 screws
- 1x knob for the rotary encoder

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,33 @@
import board
from kmk.kmk_keyboard import KMKKeyboard
from kmk.keys import KC
from kmk.scanners import DiodeOrientation
from kmk.modules.encoder import EncoderHandler
keyboard = KMKKeyboard()
encoder_handler = EncoderHandler()
keyboard.modules.append(encoder_handler)
keyboard.col_pins = (board.GP6, board.GP7, board.GP0, board.GP3) # 5, 6, 7, 11
keyboard.row_pins = (board.GP4, board.GP2, board.GP1) # 10, 9, 8
keyboard.diode_orientation = DiodeOrientation.COL2ROW
encoder_handler.pins = ((board.GP4, board.GP2, board.GP3))
keyboard.keymap = [
[
KC.A, KC.B, KC.C, KC.D,
KC.E, KC.F, KC.G, KC.H,
KC.I, KC.J, KC.K, KC.L
]
]
encoder_handler.map = [
[
KC.VOLU, KC.VOLD
]
]
if __name__ == '__main__':
keyboard.go()

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,83 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "All Layers",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "ForrealziesDaRealPCB.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View file

@ -0,0 +1,584 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"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.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"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.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"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.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "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_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"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.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_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "ForrealziesDaRealPCB.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "ForrealziesDaRealPCB.step",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"9d2d2b40-499b-45d8-b3e1-28c32b8e6de0",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -0,0 +1,33 @@
import board
from kmk.kmk_keyboard import KMKKeyboard
from kmk.keys import KC
from kmk.scanners import DiodeOrientation
from kmk.modules.encoder import EncoderHandler
keyboard = KMKKeyboard()
encoder_handler = EncoderHandler()
keyboard.modules.append(encoder_handler)
keyboard.col_pins = (board.GP6, board.GP7, board.GP0, board.GP3) # 5, 6, 7, 11
keyboard.row_pins = (board.GP4, board.GP2, board.GP1) # 10, 9, 8
keyboard.diode_orientation = DiodeOrientation.COL2ROW
encoder_handler.pins = ((board.GP4, board.GP2, board.GP3))
keyboard.keymap = [
[
KC.A, KC.B, KC.C, KC.D,
KC.E, KC.F, KC.G, KC.H,
KC.I, KC.J, KC.K, KC.L
]
]
encoder_handler.map = [
[
KC.VOLU, KC.VOLD
]
]
if __name__ == '__main__':
keyboard.go()

149907
hackpads/Kalpad/CAD/kalpad.step Normal file

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,83 @@
{
"board": {
"active_layer": 0,
"active_layer_preset": "All Layers",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "Kalpad.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View file

@ -0,0 +1,592 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"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.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"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.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"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.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "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_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"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.1,
"min_via_diameter": 0.5,
"solder_mask_to_copper_clearance": 0.005,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "Kalpad.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"ngspice": {
"fix_include_paths": true,
"meta": {
"version": 0
},
"model_mode": 4,
"workbook_filename": ""
},
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"626270de-5fab-4eac-819f-8b0143e96062",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load diff

29
hackpads/Kalpad/README.md Normal file
View file

@ -0,0 +1,29 @@
# Kalpad
The Kalpad is a 12-key macropad with two rotary encoders intended to be used with Procreate!
<img src=assets/model.png alt="CAD Model" width="600"/>
## Inspiration
I wanted to create something that felt truly "me", whilst also going out of my comfort zone. I wanted to combine aesthetics with functionality, resulting in the Kalpad!
## PCB
The silkscreen was illustrated in Procreate as a fun Easter egg for when the macro pad is being worked on and/or taken apart.
### PCB
<img src=assets/pcb.png alt="PCB" width="400"/>
<img src=assets/pcb-3d.png alt="PCB 3D View" width="400"/>
### Schematic
<img src=assets/schematic.png alt="Schematic" width="400"/>
## Firmware Overview
This hackpad uses KMK firmware for everything.
This will likely change in the future— the Kalpad was designed to be flexible, so I'd like to add different functionalities outside of Procreate.
## BOM:
- 12x Linear MX Switches (Gateron Milky Yellow Pro Linear Switches (KS-3))
- 12x Blank DSA Keycaps
- 2x EC11 Rotary Encoder
- 1x XIAO RP2040
- 5x M3 Heatset Inserts
- 1x Case (top, middle, & bottom)

Binary file not shown.

After

Width:  |  Height:  |  Size: 464 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 391 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB

View file

@ -0,0 +1,50 @@
# import all the IOs of your board
import board
# KMK library imports
from kmk.kmk_keyboard import KMKKeyboard
from kmk.scanners.keypad import MatrixScanner
from kmk.keys import KC
from kmk.modules.encoder import EncoderHandler
# main instance of keyboard
keyboard = KMKKeyboard()
# define encoders
encoder_handler = EncoderHandler()
keyboard.modules.append(encoder_handler)
encoder_handler.pins = [
(1, 2), # first encoder (A, B pins)
(3, 4), # second encoder (A, B pins)
]
# define key matrix
keyboard.matrix = MatrixScanner(
rows=(5, 6, 7),
cols=(8, 9, 10, 11)
)
# MARK: - mappings
# keycodes: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/keycodes.md
# macros: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/macros.md
# map encoders
encoder_handler.map = [
((KC.LEFT, KC.RIGHT)), # left encoder - brush size
((KC.MINUS, KC.EQUAL)), # right encoder - zoom
]
# map matrix
keyboard.keymap = [
[
KC.BRIGHTNESS_DOWN, KC.BRIGHTNESS_UP, KC.LCMD(KC.Z), KC.LCMD(KC.LSFT(KC.Z)), # Row 1: brightness down, brightness up, undo, redo
KC.LCMD(KC.X), KC.LCMD(KC.C), KC.LCMD(KC.V), KC.L, # Row 2: selection (Cmd+X), transform (Cmd+C), HSB (Cmd+V), layer menu
KC.LCMD, KC.TAB, KC.G, KC.E # Row 3: Cmd, slide over, eyedropper, color menu
]
]
# start KMK!
if __name__ == '__main__':
keyboard.go()

Binary file not shown.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,50 @@
# import all the IOs of your board
import board
# KMK library imports
from kmk.kmk_keyboard import KMKKeyboard
from kmk.scanners.keypad import MatrixScanner
from kmk.keys import KC
from kmk.modules.encoder import EncoderHandler
# main instance of keyboard
keyboard = KMKKeyboard()
# define encoders
encoder_handler = EncoderHandler()
keyboard.modules.append(encoder_handler)
encoder_handler.pins = [
(1, 2), # first encoder (A, B pins)
(3, 4), # second encoder (A, B pins)
]
# define key matrix
keyboard.matrix = MatrixScanner(
rows=(5, 6, 7),
cols=(8, 9, 10, 11)
)
# MARK: - mappings
# keycodes: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/keycodes.md
# macros: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/macros.md
# map encoders
encoder_handler.map = [
((KC.LEFT, KC.RIGHT)), # left encoder - brush size
((KC.MINUS, KC.EQUAL)), # right encoder - zoom
]
# map matrix
keyboard.keymap = [
[
KC.BRIGHTNESS_DOWN, KC.BRIGHTNESS_UP, KC.LCMD(KC.Z), KC.LCMD(KC.LSFT(KC.Z)), # Row 1: brightness down, brightness up, undo, redo
KC.LCMD(KC.X), KC.LCMD(KC.C), KC.LCMD(KC.V), KC.L, # Row 2: selection (Cmd+X), transform (Cmd+C), HSB (Cmd+V), layer menu
KC.LCMD, KC.TAB, KC.G, KC.E # Row 3: Cmd, slide over, eyedropper, color menu
]
]
# start KMK!
if __name__ == '__main__':
keyboard.go()

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

48419
hackpads/N0PAD/cad/MX .STEP Normal file

File diff suppressed because it is too large Load diff

10992
hackpads/N0PAD/cad/N0PAD.step Normal file

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -0,0 +1,684 @@
ISO-10303-21;
HEADER;
/* Generated by software containing ST-Developer
* from STEP Tools, Inc. (www.steptools.com)
*/
FILE_DESCRIPTION(
/* description */ (''),
/* implementation_level */ '2;1');
FILE_NAME(
/* name */ 'bottom.step',
/* time_stamp */ '2024-11-24T15:49:04+01:00',
/* author */ (''),
/* organization */ (''),
/* preprocessor_version */ 'ST-DEVELOPER v20',
/* originating_system */ 'Autodesk Translation Framework v13.20.0.188',
/* authorisation */ '');
FILE_SCHEMA (('AUTOMOTIVE_DESIGN { 1 0 10303 214 3 1 1 }'));
ENDSEC;
DATA;
#10=MECHANICAL_DESIGN_GEOMETRIC_PRESENTATION_REPRESENTATION('',(#13),#603);
#11=SHAPE_REPRESENTATION_RELATIONSHIP('SRR','None',#610,#12);
#12=ADVANCED_BREP_SHAPE_REPRESENTATION('',(#14),#602);
#13=STYLED_ITEM('',(#619),#14);
#14=MANIFOLD_SOLID_BREP('Body1',#367);
#15=FACE_BOUND('',#69,.T.);
#16=FACE_BOUND('',#70,.T.);
#17=FACE_BOUND('',#71,.T.);
#18=FACE_BOUND('',#72,.T.);
#19=FACE_BOUND('',#75,.T.);
#20=FACE_BOUND('',#76,.T.);
#21=FACE_BOUND('',#77,.T.);
#22=FACE_BOUND('',#78,.T.);
#23=CIRCLE('',#388,1.45);
#24=CIRCLE('',#389,1.45);
#25=CIRCLE('',#391,1.45);
#26=CIRCLE('',#392,1.45);
#27=CIRCLE('',#394,1.45);
#28=CIRCLE('',#395,1.45);
#29=CIRCLE('',#398,1.45);
#30=CIRCLE('',#399,1.45);
#31=CYLINDRICAL_SURFACE('',#387,1.45);
#32=CYLINDRICAL_SURFACE('',#390,1.45);
#33=CYLINDRICAL_SURFACE('',#393,1.45);
#34=CYLINDRICAL_SURFACE('',#397,1.45);
#35=FACE_OUTER_BOUND('',#53,.T.);
#36=FACE_OUTER_BOUND('',#54,.T.);
#37=FACE_OUTER_BOUND('',#55,.T.);
#38=FACE_OUTER_BOUND('',#56,.T.);
#39=FACE_OUTER_BOUND('',#57,.T.);
#40=FACE_OUTER_BOUND('',#58,.T.);
#41=FACE_OUTER_BOUND('',#59,.T.);
#42=FACE_OUTER_BOUND('',#60,.T.);
#43=FACE_OUTER_BOUND('',#61,.T.);
#44=FACE_OUTER_BOUND('',#62,.T.);
#45=FACE_OUTER_BOUND('',#63,.T.);
#46=FACE_OUTER_BOUND('',#64,.T.);
#47=FACE_OUTER_BOUND('',#65,.T.);
#48=FACE_OUTER_BOUND('',#66,.T.);
#49=FACE_OUTER_BOUND('',#67,.T.);
#50=FACE_OUTER_BOUND('',#68,.T.);
#51=FACE_OUTER_BOUND('',#73,.T.);
#52=FACE_OUTER_BOUND('',#74,.T.);
#53=EDGE_LOOP('',(#239,#240,#241,#242));
#54=EDGE_LOOP('',(#243,#244,#245,#246));
#55=EDGE_LOOP('',(#247,#248,#249,#250));
#56=EDGE_LOOP('',(#251,#252,#253,#254,#255,#256,#257,#258));
#57=EDGE_LOOP('',(#259,#260,#261,#262));
#58=EDGE_LOOP('',(#263,#264,#265,#266));
#59=EDGE_LOOP('',(#267,#268,#269,#270));
#60=EDGE_LOOP('',(#271,#272,#273,#274));
#61=EDGE_LOOP('',(#275,#276,#277,#278));
#62=EDGE_LOOP('',(#279,#280,#281,#282));
#63=EDGE_LOOP('',(#283,#284,#285,#286));
#64=EDGE_LOOP('',(#287,#288,#289,#290,#291,#292,#293,#294));
#65=EDGE_LOOP('',(#295,#296,#297,#298));
#66=EDGE_LOOP('',(#299,#300,#301,#302));
#67=EDGE_LOOP('',(#303,#304,#305,#306));
#68=EDGE_LOOP('',(#307,#308,#309,#310,#311,#312,#313,#314,#315,#316,#317,
#318));
#69=EDGE_LOOP('',(#319));
#70=EDGE_LOOP('',(#320));
#71=EDGE_LOOP('',(#321));
#72=EDGE_LOOP('',(#322));
#73=EDGE_LOOP('',(#323,#324,#325,#326));
#74=EDGE_LOOP('',(#327,#328,#329,#330));
#75=EDGE_LOOP('',(#331));
#76=EDGE_LOOP('',(#332));
#77=EDGE_LOOP('',(#333));
#78=EDGE_LOOP('',(#334));
#79=LINE('',#505,#119);
#80=LINE('',#507,#120);
#81=LINE('',#509,#121);
#82=LINE('',#510,#122);
#83=LINE('',#514,#123);
#84=LINE('',#516,#124);
#85=LINE('',#518,#125);
#86=LINE('',#519,#126);
#87=LINE('',#521,#127);
#88=LINE('',#522,#128);
#89=LINE('',#525,#129);
#90=LINE('',#527,#130);
#91=LINE('',#529,#131);
#92=LINE('',#531,#132);
#93=LINE('',#532,#133);
#94=LINE('',#536,#134);
#95=LINE('',#538,#135);
#96=LINE('',#540,#136);
#97=LINE('',#541,#137);
#98=LINE('',#543,#138);
#99=LINE('',#544,#139);
#100=LINE('',#549,#140);
#101=LINE('',#555,#141);
#102=LINE('',#561,#142);
#103=LINE('',#564,#143);
#104=LINE('',#565,#144);
#105=LINE('',#570,#145);
#106=LINE('',#574,#146);
#107=LINE('',#576,#147);
#108=LINE('',#578,#148);
#109=LINE('',#580,#149);
#110=LINE('',#581,#150);
#111=LINE('',#584,#151);
#112=LINE('',#586,#152);
#113=LINE('',#587,#153);
#114=LINE('',#590,#154);
#115=LINE('',#592,#155);
#116=LINE('',#593,#156);
#117=LINE('',#595,#157);
#118=LINE('',#596,#158);
#119=VECTOR('',#411,10.);
#120=VECTOR('',#412,10.);
#121=VECTOR('',#413,10.);
#122=VECTOR('',#414,10.);
#123=VECTOR('',#417,10.);
#124=VECTOR('',#418,10.);
#125=VECTOR('',#419,10.);
#126=VECTOR('',#420,10.);
#127=VECTOR('',#423,10.);
#128=VECTOR('',#424,10.);
#129=VECTOR('',#427,10.);
#130=VECTOR('',#428,10.);
#131=VECTOR('',#429,10.);
#132=VECTOR('',#430,10.);
#133=VECTOR('',#431,10.);
#134=VECTOR('',#434,10.);
#135=VECTOR('',#435,10.);
#136=VECTOR('',#436,10.);
#137=VECTOR('',#437,10.);
#138=VECTOR('',#440,10.);
#139=VECTOR('',#441,10.);
#140=VECTOR('',#446,1.45);
#141=VECTOR('',#453,1.45);
#142=VECTOR('',#460,1.45);
#143=VECTOR('',#465,10.);
#144=VECTOR('',#466,10.);
#145=VECTOR('',#471,1.45);
#146=VECTOR('',#476,10.);
#147=VECTOR('',#477,10.);
#148=VECTOR('',#478,10.);
#149=VECTOR('',#479,10.);
#150=VECTOR('',#480,10.);
#151=VECTOR('',#483,10.);
#152=VECTOR('',#484,10.);
#153=VECTOR('',#485,10.);
#154=VECTOR('',#488,10.);
#155=VECTOR('',#489,10.);
#156=VECTOR('',#490,10.);
#157=VECTOR('',#493,10.);
#158=VECTOR('',#494,10.);
#159=VERTEX_POINT('',#503);
#160=VERTEX_POINT('',#504);
#161=VERTEX_POINT('',#506);
#162=VERTEX_POINT('',#508);
#163=VERTEX_POINT('',#512);
#164=VERTEX_POINT('',#513);
#165=VERTEX_POINT('',#515);
#166=VERTEX_POINT('',#517);
#167=VERTEX_POINT('',#524);
#168=VERTEX_POINT('',#526);
#169=VERTEX_POINT('',#528);
#170=VERTEX_POINT('',#530);
#171=VERTEX_POINT('',#534);
#172=VERTEX_POINT('',#535);
#173=VERTEX_POINT('',#537);
#174=VERTEX_POINT('',#539);
#175=VERTEX_POINT('',#546);
#176=VERTEX_POINT('',#548);
#177=VERTEX_POINT('',#552);
#178=VERTEX_POINT('',#554);
#179=VERTEX_POINT('',#558);
#180=VERTEX_POINT('',#560);
#181=VERTEX_POINT('',#567);
#182=VERTEX_POINT('',#569);
#183=VERTEX_POINT('',#573);
#184=VERTEX_POINT('',#575);
#185=VERTEX_POINT('',#577);
#186=VERTEX_POINT('',#579);
#187=VERTEX_POINT('',#583);
#188=VERTEX_POINT('',#585);
#189=VERTEX_POINT('',#589);
#190=VERTEX_POINT('',#591);
#191=EDGE_CURVE('',#159,#160,#79,.T.);
#192=EDGE_CURVE('',#161,#159,#80,.T.);
#193=EDGE_CURVE('',#162,#161,#81,.T.);
#194=EDGE_CURVE('',#160,#162,#82,.T.);
#195=EDGE_CURVE('',#163,#164,#83,.T.);
#196=EDGE_CURVE('',#163,#165,#84,.T.);
#197=EDGE_CURVE('',#166,#165,#85,.T.);
#198=EDGE_CURVE('',#164,#166,#86,.T.);
#199=EDGE_CURVE('',#160,#163,#87,.T.);
#200=EDGE_CURVE('',#165,#162,#88,.T.);
#201=EDGE_CURVE('',#167,#161,#89,.T.);
#202=EDGE_CURVE('',#168,#167,#90,.T.);
#203=EDGE_CURVE('',#169,#168,#91,.T.);
#204=EDGE_CURVE('',#169,#170,#92,.T.);
#205=EDGE_CURVE('',#166,#170,#93,.T.);
#206=EDGE_CURVE('',#171,#172,#94,.T.);
#207=EDGE_CURVE('',#171,#173,#95,.T.);
#208=EDGE_CURVE('',#174,#173,#96,.T.);
#209=EDGE_CURVE('',#172,#174,#97,.T.);
#210=EDGE_CURVE('',#168,#171,#98,.T.);
#211=EDGE_CURVE('',#173,#167,#99,.T.);
#212=EDGE_CURVE('',#175,#175,#23,.T.);
#213=EDGE_CURVE('',#175,#176,#100,.T.);
#214=EDGE_CURVE('',#176,#176,#24,.T.);
#215=EDGE_CURVE('',#177,#177,#25,.T.);
#216=EDGE_CURVE('',#177,#178,#101,.T.);
#217=EDGE_CURVE('',#178,#178,#26,.T.);
#218=EDGE_CURVE('',#179,#179,#27,.T.);
#219=EDGE_CURVE('',#179,#180,#102,.T.);
#220=EDGE_CURVE('',#180,#180,#28,.T.);
#221=EDGE_CURVE('',#172,#169,#103,.T.);
#222=EDGE_CURVE('',#170,#174,#104,.T.);
#223=EDGE_CURVE('',#181,#181,#29,.T.);
#224=EDGE_CURVE('',#181,#182,#105,.T.);
#225=EDGE_CURVE('',#182,#182,#30,.T.);
#226=EDGE_CURVE('',#183,#164,#106,.T.);
#227=EDGE_CURVE('',#184,#183,#107,.T.);
#228=EDGE_CURVE('',#184,#185,#108,.T.);
#229=EDGE_CURVE('',#185,#186,#109,.T.);
#230=EDGE_CURVE('',#159,#186,#110,.T.);
#231=EDGE_CURVE('',#187,#184,#111,.T.);
#232=EDGE_CURVE('',#188,#183,#112,.T.);
#233=EDGE_CURVE('',#187,#188,#113,.T.);
#234=EDGE_CURVE('',#189,#187,#114,.T.);
#235=EDGE_CURVE('',#190,#188,#115,.T.);
#236=EDGE_CURVE('',#189,#190,#116,.T.);
#237=EDGE_CURVE('',#185,#189,#117,.T.);
#238=EDGE_CURVE('',#186,#190,#118,.T.);
#239=ORIENTED_EDGE('',*,*,#191,.F.);
#240=ORIENTED_EDGE('',*,*,#192,.F.);
#241=ORIENTED_EDGE('',*,*,#193,.F.);
#242=ORIENTED_EDGE('',*,*,#194,.F.);
#243=ORIENTED_EDGE('',*,*,#195,.F.);
#244=ORIENTED_EDGE('',*,*,#196,.T.);
#245=ORIENTED_EDGE('',*,*,#197,.F.);
#246=ORIENTED_EDGE('',*,*,#198,.F.);
#247=ORIENTED_EDGE('',*,*,#199,.F.);
#248=ORIENTED_EDGE('',*,*,#194,.T.);
#249=ORIENTED_EDGE('',*,*,#200,.F.);
#250=ORIENTED_EDGE('',*,*,#196,.F.);
#251=ORIENTED_EDGE('',*,*,#197,.T.);
#252=ORIENTED_EDGE('',*,*,#200,.T.);
#253=ORIENTED_EDGE('',*,*,#193,.T.);
#254=ORIENTED_EDGE('',*,*,#201,.F.);
#255=ORIENTED_EDGE('',*,*,#202,.F.);
#256=ORIENTED_EDGE('',*,*,#203,.F.);
#257=ORIENTED_EDGE('',*,*,#204,.T.);
#258=ORIENTED_EDGE('',*,*,#205,.F.);
#259=ORIENTED_EDGE('',*,*,#206,.F.);
#260=ORIENTED_EDGE('',*,*,#207,.T.);
#261=ORIENTED_EDGE('',*,*,#208,.F.);
#262=ORIENTED_EDGE('',*,*,#209,.F.);
#263=ORIENTED_EDGE('',*,*,#210,.F.);
#264=ORIENTED_EDGE('',*,*,#202,.T.);
#265=ORIENTED_EDGE('',*,*,#211,.F.);
#266=ORIENTED_EDGE('',*,*,#207,.F.);
#267=ORIENTED_EDGE('',*,*,#212,.F.);
#268=ORIENTED_EDGE('',*,*,#213,.T.);
#269=ORIENTED_EDGE('',*,*,#214,.T.);
#270=ORIENTED_EDGE('',*,*,#213,.F.);
#271=ORIENTED_EDGE('',*,*,#215,.F.);
#272=ORIENTED_EDGE('',*,*,#216,.T.);
#273=ORIENTED_EDGE('',*,*,#217,.T.);
#274=ORIENTED_EDGE('',*,*,#216,.F.);
#275=ORIENTED_EDGE('',*,*,#218,.F.);
#276=ORIENTED_EDGE('',*,*,#219,.T.);
#277=ORIENTED_EDGE('',*,*,#220,.T.);
#278=ORIENTED_EDGE('',*,*,#219,.F.);
#279=ORIENTED_EDGE('',*,*,#221,.F.);
#280=ORIENTED_EDGE('',*,*,#209,.T.);
#281=ORIENTED_EDGE('',*,*,#222,.F.);
#282=ORIENTED_EDGE('',*,*,#204,.F.);
#283=ORIENTED_EDGE('',*,*,#223,.F.);
#284=ORIENTED_EDGE('',*,*,#224,.T.);
#285=ORIENTED_EDGE('',*,*,#225,.T.);
#286=ORIENTED_EDGE('',*,*,#224,.F.);
#287=ORIENTED_EDGE('',*,*,#195,.T.);
#288=ORIENTED_EDGE('',*,*,#226,.F.);
#289=ORIENTED_EDGE('',*,*,#227,.F.);
#290=ORIENTED_EDGE('',*,*,#228,.T.);
#291=ORIENTED_EDGE('',*,*,#229,.T.);
#292=ORIENTED_EDGE('',*,*,#230,.F.);
#293=ORIENTED_EDGE('',*,*,#191,.T.);
#294=ORIENTED_EDGE('',*,*,#199,.T.);
#295=ORIENTED_EDGE('',*,*,#231,.T.);
#296=ORIENTED_EDGE('',*,*,#227,.T.);
#297=ORIENTED_EDGE('',*,*,#232,.F.);
#298=ORIENTED_EDGE('',*,*,#233,.F.);
#299=ORIENTED_EDGE('',*,*,#234,.T.);
#300=ORIENTED_EDGE('',*,*,#233,.T.);
#301=ORIENTED_EDGE('',*,*,#235,.F.);
#302=ORIENTED_EDGE('',*,*,#236,.F.);
#303=ORIENTED_EDGE('',*,*,#237,.T.);
#304=ORIENTED_EDGE('',*,*,#236,.T.);
#305=ORIENTED_EDGE('',*,*,#238,.F.);
#306=ORIENTED_EDGE('',*,*,#229,.F.);
#307=ORIENTED_EDGE('',*,*,#198,.T.);
#308=ORIENTED_EDGE('',*,*,#205,.T.);
#309=ORIENTED_EDGE('',*,*,#222,.T.);
#310=ORIENTED_EDGE('',*,*,#208,.T.);
#311=ORIENTED_EDGE('',*,*,#211,.T.);
#312=ORIENTED_EDGE('',*,*,#201,.T.);
#313=ORIENTED_EDGE('',*,*,#192,.T.);
#314=ORIENTED_EDGE('',*,*,#230,.T.);
#315=ORIENTED_EDGE('',*,*,#238,.T.);
#316=ORIENTED_EDGE('',*,*,#235,.T.);
#317=ORIENTED_EDGE('',*,*,#232,.T.);
#318=ORIENTED_EDGE('',*,*,#226,.T.);
#319=ORIENTED_EDGE('',*,*,#223,.T.);
#320=ORIENTED_EDGE('',*,*,#218,.T.);
#321=ORIENTED_EDGE('',*,*,#215,.T.);
#322=ORIENTED_EDGE('',*,*,#212,.T.);
#323=ORIENTED_EDGE('',*,*,#210,.T.);
#324=ORIENTED_EDGE('',*,*,#206,.T.);
#325=ORIENTED_EDGE('',*,*,#221,.T.);
#326=ORIENTED_EDGE('',*,*,#203,.T.);
#327=ORIENTED_EDGE('',*,*,#237,.F.);
#328=ORIENTED_EDGE('',*,*,#228,.F.);
#329=ORIENTED_EDGE('',*,*,#231,.F.);
#330=ORIENTED_EDGE('',*,*,#234,.F.);
#331=ORIENTED_EDGE('',*,*,#214,.F.);
#332=ORIENTED_EDGE('',*,*,#217,.F.);
#333=ORIENTED_EDGE('',*,*,#220,.F.);
#334=ORIENTED_EDGE('',*,*,#225,.F.);
#335=PLANE('',#381);
#336=PLANE('',#382);
#337=PLANE('',#383);
#338=PLANE('',#384);
#339=PLANE('',#385);
#340=PLANE('',#386);
#341=PLANE('',#396);
#342=PLANE('',#400);
#343=PLANE('',#401);
#344=PLANE('',#402);
#345=PLANE('',#403);
#346=PLANE('',#404);
#347=PLANE('',#405);
#348=PLANE('',#406);
#349=ADVANCED_FACE('',(#35),#335,.F.);
#350=ADVANCED_FACE('',(#36),#336,.F.);
#351=ADVANCED_FACE('',(#37),#337,.F.);
#352=ADVANCED_FACE('',(#38),#338,.T.);
#353=ADVANCED_FACE('',(#39),#339,.T.);
#354=ADVANCED_FACE('',(#40),#340,.T.);
#355=ADVANCED_FACE('',(#41),#31,.F.);
#356=ADVANCED_FACE('',(#42),#32,.F.);
#357=ADVANCED_FACE('',(#43),#33,.F.);
#358=ADVANCED_FACE('',(#44),#341,.T.);
#359=ADVANCED_FACE('',(#45),#34,.F.);
#360=ADVANCED_FACE('',(#46),#342,.T.);
#361=ADVANCED_FACE('',(#47),#343,.T.);
#362=ADVANCED_FACE('',(#48),#344,.T.);
#363=ADVANCED_FACE('',(#49),#345,.T.);
#364=ADVANCED_FACE('',(#50,#15,#16,#17,#18),#346,.T.);
#365=ADVANCED_FACE('',(#51),#347,.T.);
#366=ADVANCED_FACE('',(#52,#19,#20,#21,#22),#348,.F.);
#367=CLOSED_SHELL('',(#349,#350,#351,#352,#353,#354,#355,#356,#357,#358,
#359,#360,#361,#362,#363,#364,#365,#366));
#368=DERIVED_UNIT_ELEMENT(#370,1.);
#369=DERIVED_UNIT_ELEMENT(#605,-3.);
#370=(
MASS_UNIT()
NAMED_UNIT(*)
SI_UNIT(.KILO.,.GRAM.)
);
#371=DERIVED_UNIT((#368,#369));
#372=MEASURE_REPRESENTATION_ITEM('density measure',
POSITIVE_RATIO_MEASURE(7850.),#371);
#373=PROPERTY_DEFINITION_REPRESENTATION(#378,#375);
#374=PROPERTY_DEFINITION_REPRESENTATION(#379,#376);
#375=REPRESENTATION('material name',(#377),#602);
#376=REPRESENTATION('density',(#372),#602);
#377=DESCRIPTIVE_REPRESENTATION_ITEM('Steel','Steel');
#378=PROPERTY_DEFINITION('material property','material name',#612);
#379=PROPERTY_DEFINITION('material property','density of part',#612);
#380=AXIS2_PLACEMENT_3D('',#501,#407,#408);
#381=AXIS2_PLACEMENT_3D('',#502,#409,#410);
#382=AXIS2_PLACEMENT_3D('',#511,#415,#416);
#383=AXIS2_PLACEMENT_3D('',#520,#421,#422);
#384=AXIS2_PLACEMENT_3D('',#523,#425,#426);
#385=AXIS2_PLACEMENT_3D('',#533,#432,#433);
#386=AXIS2_PLACEMENT_3D('',#542,#438,#439);
#387=AXIS2_PLACEMENT_3D('',#545,#442,#443);
#388=AXIS2_PLACEMENT_3D('',#547,#444,#445);
#389=AXIS2_PLACEMENT_3D('',#550,#447,#448);
#390=AXIS2_PLACEMENT_3D('',#551,#449,#450);
#391=AXIS2_PLACEMENT_3D('',#553,#451,#452);
#392=AXIS2_PLACEMENT_3D('',#556,#454,#455);
#393=AXIS2_PLACEMENT_3D('',#557,#456,#457);
#394=AXIS2_PLACEMENT_3D('',#559,#458,#459);
#395=AXIS2_PLACEMENT_3D('',#562,#461,#462);
#396=AXIS2_PLACEMENT_3D('',#563,#463,#464);
#397=AXIS2_PLACEMENT_3D('',#566,#467,#468);
#398=AXIS2_PLACEMENT_3D('',#568,#469,#470);
#399=AXIS2_PLACEMENT_3D('',#571,#472,#473);
#400=AXIS2_PLACEMENT_3D('',#572,#474,#475);
#401=AXIS2_PLACEMENT_3D('',#582,#481,#482);
#402=AXIS2_PLACEMENT_3D('',#588,#486,#487);
#403=AXIS2_PLACEMENT_3D('',#594,#491,#492);
#404=AXIS2_PLACEMENT_3D('',#597,#495,#496);
#405=AXIS2_PLACEMENT_3D('',#598,#497,#498);
#406=AXIS2_PLACEMENT_3D('',#599,#499,#500);
#407=DIRECTION('axis',(0.,0.,1.));
#408=DIRECTION('refdir',(1.,0.,0.));
#409=DIRECTION('center_axis',(-1.,0.,0.));
#410=DIRECTION('ref_axis',(0.,0.,-1.));
#411=DIRECTION('',(0.,0.,-1.));
#412=DIRECTION('',(0.,1.,0.));
#413=DIRECTION('',(0.,0.,1.));
#414=DIRECTION('',(0.,-1.,0.));
#415=DIRECTION('center_axis',(1.,0.,0.));
#416=DIRECTION('ref_axis',(0.,0.,1.));
#417=DIRECTION('',(0.,0.,1.));
#418=DIRECTION('',(0.,-1.,0.));
#419=DIRECTION('',(0.,0.,-1.));
#420=DIRECTION('',(0.,-1.,0.));
#421=DIRECTION('center_axis',(0.,0.,-1.));
#422=DIRECTION('ref_axis',(1.,0.,0.));
#423=DIRECTION('',(1.,0.,0.));
#424=DIRECTION('',(-1.,0.,0.));
#425=DIRECTION('center_axis',(0.,-1.,0.));
#426=DIRECTION('ref_axis',(1.,0.,0.));
#427=DIRECTION('',(1.,0.,0.));
#428=DIRECTION('',(0.,0.,1.));
#429=DIRECTION('',(-1.,0.,0.));
#430=DIRECTION('',(0.,0.,1.));
#431=DIRECTION('',(1.,0.,0.));
#432=DIRECTION('center_axis',(0.,1.,0.));
#433=DIRECTION('ref_axis',(-1.,0.,0.));
#434=DIRECTION('',(1.,0.,0.));
#435=DIRECTION('',(0.,0.,1.));
#436=DIRECTION('',(-1.,0.,0.));
#437=DIRECTION('',(0.,0.,1.));
#438=DIRECTION('center_axis',(1.,0.,0.));
#439=DIRECTION('ref_axis',(0.,1.,0.));
#440=DIRECTION('',(0.,-1.,0.));
#441=DIRECTION('',(0.,1.,0.));
#442=DIRECTION('center_axis',(0.,0.,1.));
#443=DIRECTION('ref_axis',(1.,0.,0.));
#444=DIRECTION('center_axis',(0.,0.,-1.));
#445=DIRECTION('ref_axis',(1.,0.,0.));
#446=DIRECTION('',(0.,0.,-1.));
#447=DIRECTION('center_axis',(0.,0.,-1.));
#448=DIRECTION('ref_axis',(1.,0.,0.));
#449=DIRECTION('center_axis',(0.,0.,1.));
#450=DIRECTION('ref_axis',(1.,0.,0.));
#451=DIRECTION('center_axis',(0.,0.,-1.));
#452=DIRECTION('ref_axis',(1.,0.,0.));
#453=DIRECTION('',(0.,0.,-1.));
#454=DIRECTION('center_axis',(0.,0.,-1.));
#455=DIRECTION('ref_axis',(1.,0.,0.));
#456=DIRECTION('center_axis',(0.,0.,1.));
#457=DIRECTION('ref_axis',(1.,0.,0.));
#458=DIRECTION('center_axis',(0.,0.,-1.));
#459=DIRECTION('ref_axis',(1.,0.,0.));
#460=DIRECTION('',(0.,0.,-1.));
#461=DIRECTION('center_axis',(0.,0.,-1.));
#462=DIRECTION('ref_axis',(1.,0.,0.));
#463=DIRECTION('center_axis',(-1.,0.,0.));
#464=DIRECTION('ref_axis',(0.,-1.,0.));
#465=DIRECTION('',(0.,1.,0.));
#466=DIRECTION('',(0.,-1.,0.));
#467=DIRECTION('center_axis',(0.,0.,1.));
#468=DIRECTION('ref_axis',(1.,0.,0.));
#469=DIRECTION('center_axis',(0.,0.,-1.));
#470=DIRECTION('ref_axis',(1.,0.,0.));
#471=DIRECTION('',(0.,0.,-1.));
#472=DIRECTION('center_axis',(0.,0.,-1.));
#473=DIRECTION('ref_axis',(1.,0.,0.));
#474=DIRECTION('center_axis',(0.,1.,0.));
#475=DIRECTION('ref_axis',(-1.,0.,0.));
#476=DIRECTION('',(-1.,0.,0.));
#477=DIRECTION('',(0.,0.,1.));
#478=DIRECTION('',(-1.,0.,0.));
#479=DIRECTION('',(0.,0.,1.));
#480=DIRECTION('',(-1.,0.,0.));
#481=DIRECTION('center_axis',(1.,0.,0.));
#482=DIRECTION('ref_axis',(0.,1.,0.));
#483=DIRECTION('',(0.,1.,0.));
#484=DIRECTION('',(0.,1.,0.));
#485=DIRECTION('',(0.,0.,1.));
#486=DIRECTION('center_axis',(0.,-1.,0.));
#487=DIRECTION('ref_axis',(1.,0.,0.));
#488=DIRECTION('',(1.,0.,0.));
#489=DIRECTION('',(1.,0.,0.));
#490=DIRECTION('',(0.,0.,1.));
#491=DIRECTION('center_axis',(-1.,0.,0.));
#492=DIRECTION('ref_axis',(0.,-1.,0.));
#493=DIRECTION('',(0.,-1.,0.));
#494=DIRECTION('',(0.,-1.,0.));
#495=DIRECTION('center_axis',(0.,0.,1.));
#496=DIRECTION('ref_axis',(1.,0.,0.));
#497=DIRECTION('center_axis',(0.,0.,1.));
#498=DIRECTION('ref_axis',(1.,0.,0.));
#499=DIRECTION('center_axis',(0.,0.,1.));
#500=DIRECTION('ref_axis',(1.,0.,0.));
#501=CARTESIAN_POINT('',(0.,0.,0.));
#502=CARTESIAN_POINT('Origin',(12.0000001788139,108.,13.));
#503=CARTESIAN_POINT('',(12.0000001788139,108.,13.));
#504=CARTESIAN_POINT('',(12.0000001788139,108.,8.00000011920929));
#505=CARTESIAN_POINT('',(12.0000001788139,108.,6.5));
#506=CARTESIAN_POINT('',(12.0000001788139,98.,13.));
#507=CARTESIAN_POINT('',(12.0000001788139,78.5,13.));
#508=CARTESIAN_POINT('',(12.0000001788139,98.,8.00000011920929));
#509=CARTESIAN_POINT('',(12.0000001788139,98.,6.5));
#510=CARTESIAN_POINT('',(12.0000001788139,108.,8.00000011920929));
#511=CARTESIAN_POINT('Origin',(32.0000004768372,108.,8.00000011920929));
#512=CARTESIAN_POINT('',(32.0000004768372,108.,8.00000011920929));
#513=CARTESIAN_POINT('',(32.0000004768372,108.,13.));
#514=CARTESIAN_POINT('',(32.0000004768372,108.,4.00000005960464));
#515=CARTESIAN_POINT('',(32.0000004768372,98.,8.00000011920929));
#516=CARTESIAN_POINT('',(32.0000004768372,108.,8.00000011920929));
#517=CARTESIAN_POINT('',(32.0000004768372,98.,13.));
#518=CARTESIAN_POINT('',(32.0000004768372,98.,4.00000005960464));
#519=CARTESIAN_POINT('',(32.0000004768372,78.5,13.));
#520=CARTESIAN_POINT('Origin',(12.0000001788139,108.,8.00000011920929));
#521=CARTESIAN_POINT('',(57.750000089407,108.,8.00000011920929));
#522=CARTESIAN_POINT('',(6.00000008940697,98.,8.00000011920929));
#523=CARTESIAN_POINT('Origin',(0.,98.,0.));
#524=CARTESIAN_POINT('',(0.,98.,13.));
#525=CARTESIAN_POINT('',(93.5,98.,13.));
#526=CARTESIAN_POINT('',(0.,98.,3.));
#527=CARTESIAN_POINT('',(0.,98.,0.));
#528=CARTESIAN_POINT('',(93.5,98.,3.));
#529=CARTESIAN_POINT('',(93.5,98.,3.));
#530=CARTESIAN_POINT('',(93.5,98.,13.));
#531=CARTESIAN_POINT('',(93.5,98.,0.));
#532=CARTESIAN_POINT('',(93.5,98.,13.));
#533=CARTESIAN_POINT('Origin',(93.5,0.,0.));
#534=CARTESIAN_POINT('',(0.,0.,3.));
#535=CARTESIAN_POINT('',(93.5,0.,3.));
#536=CARTESIAN_POINT('',(0.,0.,3.));
#537=CARTESIAN_POINT('',(0.,0.,13.));
#538=CARTESIAN_POINT('',(0.,0.,0.));
#539=CARTESIAN_POINT('',(93.5,0.,13.));
#540=CARTESIAN_POINT('',(0.,0.,13.));
#541=CARTESIAN_POINT('',(93.5,0.,0.));
#542=CARTESIAN_POINT('Origin',(0.,0.,0.));
#543=CARTESIAN_POINT('',(0.,98.,3.));
#544=CARTESIAN_POINT('',(0.,98.,13.));
#545=CARTESIAN_POINT('Origin',(98.500001475215,-5.00000007450581,0.));
#546=CARTESIAN_POINT('',(97.050001475215,-5.00000007450581,13.));
#547=CARTESIAN_POINT('Origin',(98.500001475215,-5.00000007450581,13.));
#548=CARTESIAN_POINT('',(97.050001475215,-5.00000007450581,0.));
#549=CARTESIAN_POINT('',(97.050001475215,-5.00000007450581,0.));
#550=CARTESIAN_POINT('Origin',(98.500001475215,-5.00000007450581,0.));
#551=CARTESIAN_POINT('Origin',(-5.00000007450581,103.00000153482,0.));
#552=CARTESIAN_POINT('',(-6.4500000745058,103.00000153482,13.));
#553=CARTESIAN_POINT('Origin',(-5.00000007450581,103.00000153482,13.));
#554=CARTESIAN_POINT('',(-6.4500000745058,103.00000153482,0.));
#555=CARTESIAN_POINT('',(-6.4500000745058,103.00000153482,0.));
#556=CARTESIAN_POINT('Origin',(-5.00000007450581,103.00000153482,0.));
#557=CARTESIAN_POINT('Origin',(98.5000014603138,103.00000153482,0.));
#558=CARTESIAN_POINT('',(97.0500014603138,103.00000153482,13.));
#559=CARTESIAN_POINT('Origin',(98.5000014603138,103.00000153482,13.));
#560=CARTESIAN_POINT('',(97.0500014603138,103.00000153482,0.));
#561=CARTESIAN_POINT('',(97.0500014603138,103.00000153482,0.));
#562=CARTESIAN_POINT('Origin',(98.5000014603138,103.00000153482,0.));
#563=CARTESIAN_POINT('Origin',(93.5,98.,0.));
#564=CARTESIAN_POINT('',(93.5,0.,3.));
#565=CARTESIAN_POINT('',(93.5,0.,13.));
#566=CARTESIAN_POINT('Origin',(-5.00000007450581,-5.00000007450581,0.));
#567=CARTESIAN_POINT('',(-6.45000007450581,-5.00000007450581,13.));
#568=CARTESIAN_POINT('Origin',(-5.00000007450581,-5.00000007450581,13.));
#569=CARTESIAN_POINT('',(-6.45000007450581,-5.00000007450581,0.));
#570=CARTESIAN_POINT('',(-6.45000007450581,-5.00000007450581,0.));
#571=CARTESIAN_POINT('Origin',(-5.00000007450581,-5.00000007450581,0.));
#572=CARTESIAN_POINT('Origin',(103.5,108.,0.));
#573=CARTESIAN_POINT('',(103.5,108.,13.));
#574=CARTESIAN_POINT('',(103.5,108.,13.));
#575=CARTESIAN_POINT('',(103.5,108.,0.));
#576=CARTESIAN_POINT('',(103.5,108.,0.));
#577=CARTESIAN_POINT('',(-10.,108.,0.));
#578=CARTESIAN_POINT('',(103.5,108.,0.));
#579=CARTESIAN_POINT('',(-10.,108.,13.));
#580=CARTESIAN_POINT('',(-10.,108.,0.));
#581=CARTESIAN_POINT('',(103.5,108.,13.));
#582=CARTESIAN_POINT('Origin',(103.5,-10.,0.));
#583=CARTESIAN_POINT('',(103.5,-10.,0.));
#584=CARTESIAN_POINT('',(103.5,-10.,0.));
#585=CARTESIAN_POINT('',(103.5,-10.,13.));
#586=CARTESIAN_POINT('',(103.5,-10.,13.));
#587=CARTESIAN_POINT('',(103.5,-10.,0.));
#588=CARTESIAN_POINT('Origin',(-10.,-10.,0.));
#589=CARTESIAN_POINT('',(-10.,-10.,0.));
#590=CARTESIAN_POINT('',(-10.,-10.,0.));
#591=CARTESIAN_POINT('',(-10.,-10.,13.));
#592=CARTESIAN_POINT('',(-10.,-10.,13.));
#593=CARTESIAN_POINT('',(-10.,-10.,0.));
#594=CARTESIAN_POINT('Origin',(-10.,108.,0.));
#595=CARTESIAN_POINT('',(-10.,108.,0.));
#596=CARTESIAN_POINT('',(-10.,108.,13.));
#597=CARTESIAN_POINT('Origin',(46.75,49.,13.));
#598=CARTESIAN_POINT('Origin',(46.75,49.,3.));
#599=CARTESIAN_POINT('Origin',(46.75,49.,0.));
#600=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#604,
'DISTANCE_ACCURACY_VALUE',
'Maximum model space distance between geometric entities at asserted c
onnectivities');
#601=UNCERTAINTY_MEASURE_WITH_UNIT(LENGTH_MEASURE(0.01),#604,
'DISTANCE_ACCURACY_VALUE',
'Maximum model space distance between geometric entities at asserted c
onnectivities');
#602=(
GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#600))
GLOBAL_UNIT_ASSIGNED_CONTEXT((#604,#606,#607))
REPRESENTATION_CONTEXT('','3D')
);
#603=(
GEOMETRIC_REPRESENTATION_CONTEXT(3)
GLOBAL_UNCERTAINTY_ASSIGNED_CONTEXT((#601))
GLOBAL_UNIT_ASSIGNED_CONTEXT((#604,#606,#607))
REPRESENTATION_CONTEXT('','3D')
);
#604=(
LENGTH_UNIT()
NAMED_UNIT(*)
SI_UNIT(.MILLI.,.METRE.)
);
#605=(
LENGTH_UNIT()
NAMED_UNIT(*)
SI_UNIT($,.METRE.)
);
#606=(
NAMED_UNIT(*)
PLANE_ANGLE_UNIT()
SI_UNIT($,.RADIAN.)
);
#607=(
NAMED_UNIT(*)
SI_UNIT($,.STERADIAN.)
SOLID_ANGLE_UNIT()
);
#608=SHAPE_DEFINITION_REPRESENTATION(#609,#610);
#609=PRODUCT_DEFINITION_SHAPE('',$,#612);
#610=SHAPE_REPRESENTATION('',(#380),#602);
#611=PRODUCT_DEFINITION_CONTEXT('part definition',#616,'design');
#612=PRODUCT_DEFINITION('FusionComponent','FusionComponent',#613,#611);
#613=PRODUCT_DEFINITION_FORMATION('',$,#618);
#614=PRODUCT_RELATED_PRODUCT_CATEGORY('FusionComponent',
'FusionComponent',(#618));
#615=APPLICATION_PROTOCOL_DEFINITION('international standard',
'automotive_design',2009,#616);
#616=APPLICATION_CONTEXT(
'Core Data for Automotive Mechanical Design Process');
#617=PRODUCT_CONTEXT('part definition',#616,'mechanical');
#618=PRODUCT('FusionComponent','FusionComponent',$,(#617));
#619=PRESENTATION_STYLE_ASSIGNMENT((#620));
#620=SURFACE_STYLE_USAGE(.BOTH.,#621);
#621=SURFACE_SIDE_STYLE('',(#622));
#622=SURFACE_STYLE_FILL_AREA(#623);
#623=FILL_AREA_STYLE('Steel - Satin',(#624));
#624=FILL_AREA_STYLE_COLOUR('Steel - Satin',#625);
#625=COLOUR_RGB('Steel - Satin',0.627450980392157,0.627450980392157,0.627450980392157);
ENDSEC;
END-ISO-10303-21;

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 MiB

Binary file not shown.

File diff suppressed because it is too large Load diff

4016
hackpads/N0PAD/cad/top.step Normal file

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,44 @@
print("RMS Titanic departing")
# ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠿⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢺⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠆⠜⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⠿⠿⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⣿⣿⣿⣿⣿
# ⣿⣿⡏⠁⠀⠀⠀⠀⠀⣀⣠⣤⣤⣶⣶⣶⣶⣶⣦⣤⡄⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿
# ⣿⣿⣷⣄⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⡧⠇⢀⣤⣶⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣾⣮⣭⣿⡻⣽⣒⠀⣤⣜⣭⠐⢐⣒⠢⢰⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⣏⣿⣿⣿⣿⣿⣿⡟⣾⣿⠂⢈⢿⣷⣞⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⣿⣽⣿⣿⣷⣶⣾⡿⠿⣿⠗⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠻⠋⠉⠑⠀⠀⢘⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⡿⠟⢹⣿⣿⡇⢀⣶⣶⠴⠶⠀⠀⢽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⡿⠀⠀⢸⣿⣿⠀⠀⠣⠀⠀⠀⠀⠀⡟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⡿⠟⠋⠀⠀⠀⠀⠹⣿⣧⣀⠀⠀⠀⠀⡀⣴⠁⢘⡙⢿⣿⣿⣿⣿⣿⣿⣿⣿
# ⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⠗⠂⠄⠀⣴⡟⠀⠀⡃⠀⠉⠉⠟⡿⣿⣿⣿⣿
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢷⠾⠛⠂⢹⠀⠀⠀⢡⠀⠀⠀⠀⠀⠙⠛⠿⢿
import board
from kmk.kmk_keyboard import KMKKeyboard
from kmk.keys import KC
from kmk.scanners import DiodeOrientation
from kmk.modules.encoder import EncoderHandler
keyboard = KMKKeyboard()
keyboard.col_pins = (board.GP6, board.GP29, board.GP28, board.GP27, board.GP26,)
keyboard.row_pins = (board.GP2, board.GP1, board.GP0, board.GP7,)
keyboard.encoder_handler.pins = (board.GP4, board.GP3, None, True, 2,)
keyboard.diode_orientation = DiodeOrientation.COL2ROW
keyboard.keymap = [
[KC.P7,][KC.P8,][KC.P9,][KC.NUMLOCK,]
[KC.P4,][KC.P5,][KC.P6,][KC.PMNS,]
[KC.P1,][KC.P2,][KC.P3,][KC.PPLS,]
[KC.P0,][KC.PENT,]
]
keyboard.encoder_handler.map = [ (KC.UP, KC.DOWN, KC.MSTP), ]
if __name__ == '__main__':
keyboard.go()

File diff suppressed because it is too large Load diff

After

Width:  |  Height:  |  Size: 451 KiB

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,83 @@
{
"board": {
"active_layer": 37,
"active_layer_preset": "All Layers",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "fffffff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "N0PAD.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View file

@ -0,0 +1,584 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"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.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"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.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"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.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "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_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"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.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_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "N0PAD.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "gerbers/",
"pos_files": "",
"specctra_dsn": "",
"step": "N0PAD-pcb-2.step",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"ba839921-44d7-4381-aaf4-a15d1c3227be",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load diff

Binary file not shown.

Binary file not shown.

BIN
hackpads/N0PAD/pcb/pcb.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 337 KiB

File diff suppressed because it is too large Load diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 206 KiB

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,44 @@
print("RMS Titanic departing")
# ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠿⠿⠿⠿⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⣿⠟⠋⠁⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⠁⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢺⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠆⠜⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⠿⠿⠛⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠉⠻⣿⣿⣿⣿⣿
# ⣿⣿⡏⠁⠀⠀⠀⠀⠀⣀⣠⣤⣤⣶⣶⣶⣶⣶⣦⣤⡄⠀⠀⠀⠀⢀⣴⣿⣿⣿⣿⣿
# ⣿⣿⣷⣄⠀⠀⠀⢠⣾⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⢿⡧⠇⢀⣤⣶⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣾⣮⣭⣿⡻⣽⣒⠀⣤⣜⣭⠐⢐⣒⠢⢰⢸⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⣏⣿⣿⣿⣿⣿⣿⡟⣾⣿⠂⢈⢿⣷⣞⣸⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⣿⣽⣿⣿⣷⣶⣾⡿⠿⣿⠗⠈⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⡿⠻⠋⠉⠑⠀⠀⢘⢻⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⣿⡿⠟⢹⣿⣿⡇⢀⣶⣶⠴⠶⠀⠀⢽⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⣿⣿⣿⡿⠀⠀⢸⣿⣿⠀⠀⠣⠀⠀⠀⠀⠀⡟⢿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
# ⣿⣿⣿⡿⠟⠋⠀⠀⠀⠀⠹⣿⣧⣀⠀⠀⠀⠀⡀⣴⠁⢘⡙⢿⣿⣿⣿⣿⣿⣿⣿⣿
# ⠉⠉⠁⠀⠀⠀⠀⠀⠀⠀⠀⠈⠙⢿⠗⠂⠄⠀⣴⡟⠀⠀⡃⠀⠉⠉⠟⡿⣿⣿⣿⣿
# ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⢷⠾⠛⠂⢹⠀⠀⠀⢡⠀⠀⠀⠀⠀⠙⠛⠿⢿
import board
from kmk.kmk_keyboard import KMKKeyboard
from kmk.keys import KC
from kmk.scanners import DiodeOrientation
from kmk.modules.encoder import EncoderHandler
keyboard = KMKKeyboard()
keyboard.col_pins = (board.GP6, board.GP29, board.GP28, board.GP27, board.GP26,)
keyboard.row_pins = (board.GP2, board.GP1, board.GP0, board.GP7,)
keyboard.encoder_handler.pins = (board.GP4, board.GP3, None, True, 2,)
keyboard.diode_orientation = DiodeOrientation.COL2ROW
keyboard.keymap = [
[KC.P7,][KC.P8,][KC.P9,][KC.NUMLOCK,]
[KC.P4,][KC.P5,][KC.P6,][KC.PMNS,]
[KC.P1,][KC.P2,][KC.P3,][KC.PPLS,]
[KC.P0,][KC.PENT,]
]
keyboard.encoder_handler.map = [ (KC.UP, KC.DOWN, KC.MSTP), ]
if __name__ == '__main__':
keyboard.go()

Binary file not shown.

53
hackpads/N0PAD/readme.md Normal file
View file

@ -0,0 +1,53 @@
# N0BUDGET N0PAD
## !!!IMPORTANT NOTICE!!!
### THIS HACKPAD WAS MADE DURING V1 BUT NOT ACCEPTED
### slack handle: spacevini8
## features
- pain
- 14 awesome keys!
- a knob! (not that kind, brits!)
- heisengberg! (look on the PCB!)
- and nothing else! because I'm lazy!
## cad model
it's literally just a brick!
[![it's a brick](https://github.com/spacevini8/N0PAD/blob/main/hackpads/N0PAD/cad/case/case.png?raw=true "it's a brick")](http://github.com/spacevini8/N0PAD/blob/main/hackpads/N0PAD/cad/case/case.png?raw=true "it's a brick")
made in fusion 360 (pain!)
## pcb
My pcb made in KiCad! With some random images, like heisenberg, democracy, stuff like that.
PCB:
[![jessie! we need to hack!](https://github.com/spacevini8/N0PAD/blob/main/hackpads/N0PAD/pcb/pcb.png?raw=true "jessie! we need to hack!")](http://github.com/spacevini8/N0PAD/blob/main/hackpads/N0PAD/pcb/pcb.png?raw=true "jessie! we need to hack!")
Schematic:
[![it's a schematic!](https://github.com/spacevini8/N0PAD/blob/main/hackpads/N0PAD/pcb/schematic.png?raw=true "it's a schematic!")](https://github.com/spacevini8/N0PAD/blob/main/hackpads/N0PAD/pcb/schematic.png?raw=true "it's a schematic!")
## firmware
it's made in KMK, that's kinda it really, I really don't know what I'm doing!
currently made to act as a number pad as I don't have one
# BOM:
- 1x Seeed XIAO RP2040 (obviously)
- 14x Cherry MX switches
- 3x PCB (blue)
- 15x Diodes
- 14x Keycaps (blank)
- 1x 3D Printed case
- 4x Screws
- 1x EC11 rotary encoder
## extra stuff
Please make the PCB blue if you can, ya know, because, heisenberg.

View file

@ -0,0 +1,4 @@
"Id";"Designator";"Footprint";"Quantity";"Designation";"Supplier and ref";
1;"SW6,SW9,SW1,SW4,SW7,SW2,SW5,SW3,SW8";"SW_Cherry_MX_1.00u_PCB";9;"SW_Push";;;
2;"D1,D2";"LED_SK6812MINI_PLCC4_3.5x3.5mm_P1.75mm";2;"SK6812MINI";;;
3;"U1";"XIAO-RP2040-DIP";1;"XIAO-RP2040-DIP";;;
Can't render this file because it has a wrong number of fields in line 2.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,584 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"apply_defaults_to_fp_fields": false,
"apply_defaults_to_fp_shapes": false,
"apply_defaults_to_fp_text": false,
"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.05,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"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.1,
"other_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"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.1,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "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_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"holes_co_located": "warning",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.2,
"min_microvia_drill": 0.1,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"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.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_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "Hackpad.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "",
"pos_files": "",
"specctra_dsn": "",
"step": "",
"svg": "",
"vrml": ""
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_export_filename": "",
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"dcdb37e6-78ac-4655-9eff-2f8fa35accc5",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,28 @@
# PANDAmonium Components Board
The PANDAmonium Components board is a panda themed macropad designed by me (kai pereira);
It's a simple 9 key layout with some fun LED's and silly design.
I'm really happy I did this project because it heavily inspired me to turn away from just software and build more hardware projects.
## What I want to use it for
I want to use my macropad to potentially make some complicated VIM motions like search and replace or smth and maybe for optimizing the browser experience.
## Features
- 9 keys
- RGB LED's
- Panda themed case
## Screenshots
![case](assets/pandamonium-case.png "Case")
![schematic](assets/pandamonium-schematic.png "Schematic")
![board](assets/pandamonium-board.png "Board")
## BOM
- 1x XIAO-RP2040-DIP
- 9x Cherry MX Switches
- 2x SK6812 MINI LED
Expanded BOM in /PCB/BOM.csv

Binary file not shown.

After

Width:  |  Height:  |  Size: 221 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 294 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 123 KiB

View file

@ -0,0 +1,26 @@
import board
from kmk.kmk_keyboard import KMKKeyboard
from kmk.scanners.keypad import KeysScanner
from kmk.keys import KC
from kmk.modules.macros import Press, Release, Tap, Macros
keyboard = KMKKeyboard()
macros = Macros()
keyboard.modules.append(macros)
PINS = [board.D1, board.D2, board.D3, board.D4, board.D5, board.D7, board.D8, board.D9, board.D10]
keyboard.matrix = KeysScanner(
pins=PINS,
value_when_pressed=False,
)
# I dont want to do macros quite yet because they're pretty complicated
keyboard.keymap = [
[KC.A, KC.DELETE, KC.MACRO("Hello world!"), KC.Macro(Press(KC.LCMD), Tap(KC.S), Release(KC.LCMD)),]
]
if __name__ == '__main__':
keyboard.go()

View file

@ -0,0 +1,45 @@
M48
; DRILL file {KiCad 8.0.8-8.0.8-0~ubuntu24.04.1} date 2025-02-20T07:28:28-0800
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2025-02-20T07:28:28-08:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,8.0.8-8.0.8-0~ubuntu24.04.1
; #@! TF.FileFunction,NonPlated,1,2,NPTH
FMAT,2
INCH
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
T1C0.0669
; #@! TA.AperFunction,NonPlated,NPTH,ComponentDrill
T2C0.1575
%
G90
G05
T1
X4.675Y-2.8125
X4.675Y-3.5625
X4.675Y-4.3125
X5.075Y-2.8125
X5.075Y-3.5625
X5.075Y-4.3125
X5.425Y-2.8125
X5.425Y-3.5625
X5.425Y-4.3125
X5.825Y-2.8125
X5.825Y-3.5625
X5.825Y-4.3125
X6.175Y-2.8125
X6.175Y-3.5625
X6.175Y-4.3125
X6.575Y-2.8125
X6.575Y-3.5625
X6.575Y-4.3125
T2
X4.875Y-2.8125
X4.875Y-3.5625
X4.875Y-4.3125
X5.625Y-2.8125
X5.625Y-3.5625
X5.625Y-4.3125
X6.375Y-2.8125
X6.375Y-3.5625
X6.375Y-4.3125
M30

View file

@ -0,0 +1,50 @@
M48
; DRILL file {KiCad 8.0.8-8.0.8-0~ubuntu24.04.1} date 2025-02-20T07:28:28-0800
; FORMAT={-:-/ absolute / inch / decimal}
; #@! TF.CreationDate,2025-02-20T07:28:28-08:00
; #@! TF.GenerationSoftware,Kicad,Pcbnew,8.0.8-8.0.8-0~ubuntu24.04.1
; #@! TF.FileFunction,Plated,1,2,PTH
FMAT,2
INCH
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T1C0.0350
; #@! TA.AperFunction,Plated,PTH,ComponentDrill
T2C0.0591
%
G90
G05
T1
X5.325Y-1.575
X5.325Y-1.675
X5.325Y-1.775
X5.325Y-1.875
X5.325Y-1.975
X5.325Y-2.075
X5.325Y-2.175
X5.925Y-1.575
X5.925Y-1.675
X5.925Y-1.775
X5.925Y-1.875
X5.925Y-1.975
X5.925Y-2.075
X5.925Y-2.175
T2
X4.725Y-2.7125
X4.725Y-3.4625
X4.725Y-4.2125
X4.975Y-2.6125
X4.975Y-3.3625
X4.975Y-4.1125
X5.475Y-2.7125
X5.475Y-3.4625
X5.475Y-4.2125
X5.725Y-2.6125
X5.725Y-3.3625
X5.725Y-4.1125
X6.225Y-2.7125
X6.225Y-3.4625
X6.225Y-4.2125
X6.475Y-2.6125
X6.475Y-3.3625
X6.475Y-4.1125
M30

View file

@ -0,0 +1,26 @@
import board
from kmk.kmk_keyboard import KMKKeyboard
from kmk.scanners.keypad import KeysScanner
from kmk.keys import KC
from kmk.modules.macros import Press, Release, Tap, Macros
keyboard = KMKKeyboard()
macros = Macros()
keyboard.modules.append(macros)
PINS = [board.D1, board.D2, board.D3, board.D4, board.D5, board.D7, board.D8, board.D9, board.D10]
keyboard.matrix = KeysScanner(
pins=PINS,
value_when_pressed=False,
)
# I dont want to do macros quite yet because they're pretty complicated
keyboard.keymap = [
[KC.A, KC.DELETE, KC.MACRO("Hello world!"), KC.Macro(Press(KC.LCMD), Tap(KC.S), Release(KC.LCMD)),]
]
if __name__ == '__main__':
keyboard.go()

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,9 @@
import board
from kmk.kmk_keyboard import KMKKeyboard as _KMKKeyboard
from kmk.scanners import DiodeOrientation
class KMKKeyboard(_KMKKeyboard):
col_pins = (board.D2, board.D3, board.D4, board.D5)
row_pins = (board.D1, board.D7)
diode_orientation = DiodeOrientation.ROW2COL

View file

@ -0,0 +1,103 @@
'''
KW-01 RGBar V1
Untested code for a 2x4 macropad using the XIAO RP2040.
Currently supports simple numpad function. Blocked on hardware assembly.
'''
import board
import neopixel
from screen_brightness_control import set_brightness, get_brightness
from kmk.kmk_keyboard import KMKKeyboard
from kmk.scanners.matrix import MatrixScanner, DiodeOrientation
from kmk.keys import KC
from kmk.modules.macros import Press, Release, Tap, Macros
from kmk.modules.encoder import EncoderHandler
# Initialize the NeoPixel chain
NUM_PIXELS = 8
pixels = neopixel.NeoPixel(board.D6, NUM_PIXELS, auto_write=False)
keys_pressed = []
# Define colors for each key
colors = [
(255, 0, 0), # Red
(0, 255, 0), # Green
(0, 0, 255), # Blue
(255, 255, 0), # Yellow
(0, 255, 255), # Cyan
(255, 0, 255), # Magenta
(255, 255, 255),# White
(128, 0, 128) # Purple
]
# Encoder rotation
def encoder_handler(direction):
SCREEN_BRIGHTNESS = get_brightness()
if direction == 1:
# Increase brightness
print("Increase brightness")
SCREEN_BRIGHTNESS += 1
set_brightness(SCREEN_BRIGHTNESS)
elif direction == -1:
# Decrease brightness
print("Decrease brightness")
SCREEN_BRIGHTNESS -= 1
set_brightness(SCREEN_BRIGHTNESS)
# Neopixel lighting
def update_keys():
for i in range(NUM_PIXELS):
if i in keys_pressed:
pixels[i] = colors[i]
else:
pixels[i] = (0, 0, 0)
pixels.show()
def press(key):
keys_pressed.append(key.index)
update_keys()
return Press(key)
def release(key):
keys_pressed.remove(key.index)
update_keys()
return Release(key)
keyboard = KMKKeyboard()
macros = Macros()
keyboard.modules.append(macros)
# Matrix definitions
ROW_PINS = [board.D1, board.D7]
COL_PINS = [board.D2, board.D3, board.D4, board.D5]
# Matrix scanner
keyboard.matrix = MatrixScanner(
cols=COL_PINS,
rows=ROW_PINS,
diode_orientation=DiodeOrientation.ROW2COL
)
# Encoder definition
ENCODER_PINS = (board.D9, board.D10)
# Encoder handler
encoder = EncoderHandler(ENCODER_PINS, encoder_handler)
keyboard.modules.append(encoder)
# Here you define the buttons corresponding to the matrix
# Look here for keycodes: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/keycodes.md
# And here for macros: https://github.com/KMKfw/kmk_firmware/blob/main/docs/en/macros.md
keyboard.keymap = [
[KC.N1, KC.N2, KC.N3, KC.N4],
[KC.N5, KC.N6, KC.N7, KC.N8]
]
macros.press = press
macros.release = release
# Start kmk!
if __name__ == '__main__':
keyboard.go()

View file

@ -0,0 +1 @@
KMK port stand-in code awaiting hardware testing.

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,83 @@
{
"board": {
"active_layer": 48,
"active_layer_preset": "",
"auto_track_width": true,
"hidden_netclasses": [],
"hidden_nets": [],
"high_contrast_mode": 0,
"net_color_mode": 1,
"opacity": {
"images": 0.6,
"pads": 1.0,
"tracks": 1.0,
"vias": 1.0,
"zones": 0.6
},
"selection_filter": {
"dimensions": true,
"footprints": true,
"graphics": true,
"keepouts": true,
"lockedItems": false,
"otherItems": true,
"pads": true,
"text": true,
"tracks": true,
"vias": true,
"zones": true
},
"visible_items": [
0,
1,
2,
3,
4,
5,
8,
9,
10,
11,
12,
13,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
26,
27,
28,
29,
30,
32,
33,
34,
35,
36,
39,
40
],
"visible_layers": "803feff_ffffffff",
"zone_display_mode": 0
},
"git": {
"repo_password": "",
"repo_type": "",
"repo_username": "",
"ssh_key": ""
},
"meta": {
"filename": "Hackpad Circuit Schematic.kicad_prl",
"version": 3
},
"project": {
"files": []
}
}

View file

@ -0,0 +1,582 @@
{
"board": {
"3dviewports": [],
"design_settings": {
"defaults": {
"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,
"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,
"dimension_precision": 4,
"dimension_units": 3,
"dimensions": {
"arrow_length": 1270000,
"extension_offset": 500000,
"keep_text_aligned": true,
"suppress_zeroes": false,
"text_position": 0,
"units_format": 1
},
"fab_line_width": 0.09999999999999999,
"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_text_italic": false,
"other_text_size_h": 1.0,
"other_text_size_v": 1.0,
"other_text_thickness": 0.15,
"other_text_upright": false,
"pads": {
"drill": 0.762,
"height": 1.524,
"width": 1.524
},
"silk_line_width": 0.09999999999999999,
"silk_text_italic": false,
"silk_text_size_h": 1.0,
"silk_text_size_v": 1.0,
"silk_text_thickness": 0.09999999999999999,
"silk_text_upright": false,
"zones": {
"min_clearance": 0.5
}
},
"diff_pair_dimensions": [],
"drc_exclusions": [],
"meta": {
"version": 2
},
"rule_severities": {
"annular_width": "error",
"clearance": "error",
"connection_width": "warning",
"copper_edge_clearance": "error",
"copper_sliver": "warning",
"courtyards_overlap": "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_symbol_mismatch": "warning",
"footprint_type_mismatch": "ignore",
"hole_clearance": "error",
"hole_near_hole": "error",
"invalid_outline": "error",
"isolated_copper": "warning",
"item_on_disabled_layer": "error",
"items_not_allowed": "error",
"length_out_of_range": "error",
"lib_footprint_issues": "warning",
"lib_footprint_mismatch": "warning",
"malformed_courtyard": "error",
"microvia_drill_out_of_range": "error",
"missing_courtyard": "ignore",
"missing_footprint": "warning",
"net_conflict": "warning",
"npth_inside_courtyard": "ignore",
"padstack": "warning",
"pth_inside_courtyard": "ignore",
"shorting_items": "error",
"silk_edge_clearance": "warning",
"silk_over_copper": "warning",
"silk_overlap": "warning",
"skew_out_of_range": "error",
"solder_mask_bridge": "error",
"starved_thermal": "error",
"text_height": "warning",
"text_thickness": "warning",
"through_hole_pad_without_hole": "error",
"too_many_vias": "error",
"track_dangling": "warning",
"track_width": "error",
"tracks_crossing": "error",
"unconnected_items": "error",
"unresolved_variable": "error",
"via_dangling": "warning",
"zones_intersect": "error"
},
"rules": {
"max_error": 0.005,
"min_clearance": 0.0,
"min_connection": 0.0,
"min_copper_edge_clearance": 0.5,
"min_hole_clearance": 0.25,
"min_hole_to_hole": 0.25,
"min_microvia_diameter": 0.19999999999999998,
"min_microvia_drill": 0.09999999999999999,
"min_resolved_spokes": 2,
"min_silk_clearance": 0.0,
"min_text_height": 0.7999999999999999,
"min_text_thickness": 0.08,
"min_through_hole_diameter": 0.3,
"min_track_width": 0.0,
"min_via_annular_width": 0.09999999999999999,
"min_via_diameter": 0.5,
"solder_mask_to_copper_clearance": 0.005,
"use_height_for_length_calcs": true
},
"teardrop_options": [
{
"td_onpadsmd": true,
"td_onroundshapesonly": false,
"td_ontrackend": false,
"td_onviapad": true
}
],
"teardrop_parameters": [
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_round_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_rect_shape",
"td_width_to_size_filter_ratio": 0.9
},
{
"td_allow_use_two_tracks": true,
"td_curve_segcount": 0,
"td_height_ratio": 1.0,
"td_length_ratio": 0.5,
"td_maxheight": 2.0,
"td_maxlen": 1.0,
"td_on_pad_in_zone": false,
"td_target_name": "td_track_end",
"td_width_to_size_filter_ratio": 0.9
}
],
"track_widths": [],
"tuning_pattern_settings": {
"diff_pair_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 1.0
},
"diff_pair_skew_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
},
"single_track_defaults": {
"corner_radius_percentage": 80,
"corner_style": 1,
"max_amplitude": 1.0,
"min_amplitude": 0.2,
"single_sided": false,
"spacing": 0.6
}
},
"via_dimensions": [],
"zones_allow_external_fillets": false
},
"ipc2581": {
"dist": "",
"distpn": "",
"internal_id": "",
"mfg": "",
"mpn": ""
},
"layer_presets": [],
"viewports": []
},
"boards": [],
"cvpcb": {
"equivalence_files": []
},
"erc": {
"erc_exclusions": [],
"meta": {
"version": 0
},
"pin_map": [
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
1,
0,
1,
2
],
[
0,
1,
0,
0,
0,
0,
1,
1,
2,
1,
1,
2
],
[
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2
],
[
1,
1,
1,
1,
1,
0,
1,
1,
1,
1,
1,
2
],
[
0,
0,
0,
1,
0,
0,
1,
0,
0,
0,
0,
2
],
[
0,
2,
1,
2,
0,
0,
1,
0,
2,
2,
2,
2
],
[
0,
2,
0,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
0,
2,
1,
1,
0,
0,
1,
0,
2,
0,
0,
2
],
[
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2,
2
]
],
"rule_severities": {
"bus_definition_conflict": "error",
"bus_entry_needed": "error",
"bus_to_bus_conflict": "error",
"bus_to_net_conflict": "error",
"conflicting_netclasses": "error",
"different_unit_footprint": "error",
"different_unit_net": "error",
"duplicate_reference": "error",
"duplicate_sheet_names": "error",
"endpoint_off_grid": "warning",
"extra_units": "error",
"global_label_dangling": "warning",
"hier_label_mismatch": "error",
"label_dangling": "error",
"lib_symbol_issues": "warning",
"missing_bidi_pin": "warning",
"missing_input_pin": "warning",
"missing_power_pin": "error",
"missing_unit": "warning",
"multiple_net_names": "warning",
"net_not_bus_member": "warning",
"no_connect_connected": "warning",
"no_connect_dangling": "warning",
"pin_not_connected": "error",
"pin_not_driven": "error",
"pin_to_pin": "warning",
"power_pin_not_driven": "error",
"similar_labels": "warning",
"simulation_model_issue": "ignore",
"unannotated": "error",
"unit_value_mismatch": "error",
"unresolved_variable": "error",
"wire_dangling": "error"
}
},
"libraries": {
"pinned_footprint_libs": [],
"pinned_symbol_libs": []
},
"meta": {
"filename": "Hackpad Circuit Schematic.kicad_pro",
"version": 1
},
"net_settings": {
"classes": [
{
"bus_width": 12,
"clearance": 0.2,
"diff_pair_gap": 0.25,
"diff_pair_via_gap": 0.25,
"diff_pair_width": 0.2,
"line_style": 0,
"microvia_diameter": 0.3,
"microvia_drill": 0.1,
"name": "Default",
"pcb_color": "rgba(0, 0, 0, 0.000)",
"schematic_color": "rgba(0, 0, 0, 0.000)",
"track_width": 0.2,
"via_diameter": 0.6,
"via_drill": 0.3,
"wire_width": 6
}
],
"meta": {
"version": 3
},
"net_colors": null,
"netclass_assignments": null,
"netclass_patterns": []
},
"pcbnew": {
"last_paths": {
"gencad": "",
"idf": "",
"netlist": "",
"plot": "../Production/",
"pos_files": "",
"specctra_dsn": "",
"step": "Hackpad Circuit Schematic.step",
"svg": "",
"vrml": "Hackpad Circuit Schematic.wrl"
},
"page_layout_descr_file": ""
},
"schematic": {
"annotate_start_num": 0,
"bom_fmt_presets": [],
"bom_fmt_settings": {
"field_delimiter": ",",
"keep_line_breaks": false,
"keep_tabs": false,
"name": "CSV",
"ref_delimiter": ",",
"ref_range_delimiter": "",
"string_delimiter": "\""
},
"bom_presets": [],
"bom_settings": {
"exclude_dnp": false,
"fields_ordered": [
{
"group_by": false,
"label": "Reference",
"name": "Reference",
"show": true
},
{
"group_by": true,
"label": "Value",
"name": "Value",
"show": true
},
{
"group_by": false,
"label": "Datasheet",
"name": "Datasheet",
"show": true
},
{
"group_by": false,
"label": "Footprint",
"name": "Footprint",
"show": true
},
{
"group_by": false,
"label": "Qty",
"name": "${QUANTITY}",
"show": true
},
{
"group_by": true,
"label": "DNP",
"name": "${DNP}",
"show": true
}
],
"filter_string": "",
"group_symbols": true,
"name": "Grouped By Value",
"sort_asc": true,
"sort_field": "Reference"
},
"connection_grid_size": 50.0,
"drawing": {
"dashed_lines_dash_length_ratio": 12.0,
"dashed_lines_gap_length_ratio": 3.0,
"default_line_thickness": 6.0,
"default_text_size": 50.0,
"field_names": [],
"intersheets_ref_own_page": false,
"intersheets_ref_prefix": "",
"intersheets_ref_short": false,
"intersheets_ref_show": false,
"intersheets_ref_suffix": "",
"junction_size_choice": 3,
"label_size_ratio": 0.375,
"operating_point_overlay_i_precision": 3,
"operating_point_overlay_i_range": "~A",
"operating_point_overlay_v_precision": 3,
"operating_point_overlay_v_range": "~V",
"overbar_offset_ratio": 1.23,
"pin_symbol_size": 25.0,
"text_offset_ratio": 0.15
},
"legacy_lib_dir": "",
"legacy_lib_list": [],
"meta": {
"version": 1
},
"net_format_name": "",
"page_layout_descr_file": "",
"plot_directory": "",
"spice_current_sheet_as_root": false,
"spice_external_command": "spice \"%I\"",
"spice_model_current_sheet_as_root": true,
"spice_save_all_currents": false,
"spice_save_all_dissipations": false,
"spice_save_all_voltages": false,
"subpart_first_id": 65,
"subpart_id_separator": 0
},
"sheets": [
[
"cd369e69-d5f6-4093-9f57-c9ccd4282edf",
"Root"
]
],
"text_variables": {}
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,5 @@
(sym_lib_table
(version 7)
(lib (name "OPL")(type "KiCad")(uri "${KIPRJMOD}/OPL_Kicad_Library-master/Seeed Studio XIAO Series Library/Seeed_Studio_XIAO_Series.kicad_sym")(options "")(descr ""))
(lib (name "1N4148")(type "KiCad")(uri "C:/Users/kalew/Downloads/1N4148/1N4148.kicad_sym")(options "")(descr ""))
)

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show more