3 Commits

8 changed files with 1213 additions and 32 deletions

View File

@@ -3,7 +3,7 @@
## Introduction ## Introduction
This project is about autonomous SBC case creation. It utilizes the SBC Model Framework project to automatically generate cases based on the data for any of the 61 current SBC contained within the framework. This allows legacy, current and future SBC to have multiple cases available on day one of their inclusion in the framework. There are multiple base case designs(shell, panel, stacked, tray, tray-sides, round, hex, snap, fitted) available and each allows for different styles within the design. This project is about autonomous SBC case creation. It utilizes the SBC Model Framework project to automatically generate cases based on the data for any of the 62 current SBC contained within the framework. This allows legacy, current and future SBC to have multiple cases available on day one of their inclusion in the framework. There are multiple base case designs(shell, panel, stacked, tray, tray-sides, round, hex, snap, fitted) available and each allows for different styles within the design.
All case openings are created automatically based on SBC data and the dimensions of any case design can be expanded in any axis allowing for the creation of larger cases. If you reposition the SBC in a case, you will see i/o openings created or removed appropriately based on its proximity to the case geometry. These cases might be useful for prototypes or other in house uses to quickly and easily create standard, specialized and custom SBC cases thru different case designs, styles and accessories. All case openings are created automatically based on SBC data and the dimensions of any case design can be expanded in any axis allowing for the creation of larger cases. If you reposition the SBC in a case, you will see i/o openings created or removed appropriately based on its proximity to the case geometry. These cases might be useful for prototypes or other in house uses to quickly and easily create standard, specialized and custom SBC cases thru different case designs, styles and accessories.
@@ -103,9 +103,9 @@ Template creation and i/o panel layouts in a dxf format can be easily created an
### Case Designs and Styles ### Case Designs and Styles
The case naming convention for standard cases in the configuration file follow the basic form of “sbc”_”design”_”style” e.g. c4_shell or c4_tray_vu5. The case naming convention for standard cases in the configuration file follow the basic form of “sbc”_”design”_”style” e.g. c4_shell or c4_tray_vu5.
#### Current Case Count 446 #### Current Case Count 457
##### Hardkernel - 182 ##### Hardkernel - 194
**Odorid-C1+ cases** - 16 : c1+_shell, c1+_panel, c1+_panel_lcd3.5, c1+_desktop_lcd3.5, c1+_stacked, c1+_tray, c1+_tray_sides, c1+_tray_vu5, **Odorid-C1+ cases** - 16 : c1+_shell, c1+_panel, c1+_panel_lcd3.5, c1+_desktop_lcd3.5, c1+_stacked, c1+_tray, c1+_tray_sides, c1+_tray_vu5,
c1+_tray_vu7, c1+_shell_boombox, c1+_panel_boombox, c1+_tray_boombox, c1+_round, c1+_hex, c1+_snap, c1+_fitted c1+_tray_vu7, c1+_shell_boombox, c1+_panel_boombox, c1+_tray_boombox, c1+_round, c1+_hex, c1+_snap, c1+_fitted
@@ -129,6 +129,8 @@ c4_tray_vu7, c4_shell_boombox, c4_panel_boombox, c4_deskboom_lcd3.5, c4_tray_boo
**Odorid-N2LQ cases** - 9 :n2lq_shell, n2lq_panel, n2lq_stacked, n2lq_tray, n2lq_tray_sides, n2lq_tray_vu5, n2lq_tray_vu7, n2lq_snap, n2lq_fitted **Odorid-N2LQ cases** - 9 :n2lq_shell, n2lq_panel, n2lq_stacked, n2lq_tray, n2lq_tray_sides, n2lq_tray_vu5, n2lq_tray_vu7, n2lq_snap, n2lq_fitted
**Odorid-M1S cases** - 12 : m1s_shell, m1s_shell_nvme, m1s_shell_ups, m1s_panel, m1s_stacked, m1s_tray, m1s_tray_ups, m1s_tray_vu5, m1s_tray_vu7, m1s_tray_sides, m1s_snap, m1s_fitted
**Odorid-M1 cases** - 12 : m1_panel, m1_tray, m1_tray_drive, m1_tray_sides, m1_tray_vu5, m1_tray_vu7, m1_snap, m1_fitted, m1_fitted_drivebox2.5, m1_fitted_drivebox3.5, m1_fitted_pizzabox, m1_fitted_drivebox3.5v **Odorid-M1 cases** - 12 : m1_panel, m1_tray, m1_tray_drive, m1_tray_sides, m1_tray_vu5, m1_tray_vu7, m1_snap, m1_fitted, m1_fitted_drivebox2.5, m1_fitted_drivebox3.5, m1_fitted_pizzabox, m1_fitted_drivebox3.5v
**Odorid-XU4 cases** - 11 : xu4_shell, xu4_panel, xu4_stacked, xu4_tray, xu4_tray_sides, xu4_tray_vu5, xu4_tray_vu7, xu4_round, xu4_hex, xu4_snap, xu4_fitted **Odorid-XU4 cases** - 11 : xu4_shell, xu4_panel, xu4_stacked, xu4_tray, xu4_tray_sides, xu4_tray_vu5, xu4_tray_vu7, xu4_round, xu4_hex, xu4_snap, xu4_fitted

View File

@@ -5073,7 +5073,691 @@
"vu_rotation": "[15, 0, 0]", "vu_rotation": "[15, 0, 0]",
"wallthick": "2" "wallthick": "2"
}, },
"m1_panel": { "m1s_shell": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "m1s_shell",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 8, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "3",
"case_design": "shell",
"case_ext_standoffs": "false",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "0",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "0",
"case_style": "none",
"cooling": "hex_8mm",
"exhaust_vents": "vent",
"fillet": "0",
"floorthick": "1.5",
"gap": "2.5",
"gpio_opening": "none",
"indents": "true",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1s_shell_nvme": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "m1s_shell_nvme",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 8, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "3",
"case_design": "shell",
"case_ext_standoffs": "false",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "3",
"case_offset_tz": "0",
"case_offset_x": "11",
"case_offset_y": "0",
"case_style": "none",
"cooling": "hex_8mm",
"exhaust_vents": "vent",
"fillet": "0",
"floorthick": "1.5",
"gap": "2.5",
"gpio_opening": "none",
"indents": "true",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "8",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "2",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1s_shell_ups": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "m1s_shell_ups",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 12, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 8, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "3",
"case_design": "shell",
"case_ext_standoffs": "true",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "3",
"case_offset_tz": "13",
"case_offset_x": "42",
"case_offset_y": "65",
"case_style": "none",
"cooling": "hex_8mm",
"exhaust_vents": "vent",
"fillet": "0",
"floorthick": "2",
"gap": "2.5",
"gpio_opening": "none",
"indents": "true",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "37",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 25, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1s_panel": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "m1s_panel",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 7, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "0",
"case_design": "panel",
"case_ext_standoffs": "false",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "0",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "0",
"case_style": "none",
"cooling": "hex_8mm",
"exhaust_vents": "vent",
"fillet": "0",
"floorthick": "2",
"gap": "2.5",
"gpio_opening": "none",
"indents": "true",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "1",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 20, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1s_stacked": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "m1s_shell",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 7, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "3.5",
"case_design": "stacked",
"case_ext_standoffs": "false",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "0",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "0",
"case_style": "none",
"cooling": "hex_8mm",
"exhaust_vents": "none",
"fillet": "0",
"floorthick": "2",
"gap": "1.5",
"gpio_opening": "none",
"indents": "false",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "true",
"sidethick": "1",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 20, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1s_tray": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "none",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 7, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "3",
"case_design": "tray",
"case_ext_standoffs": "false",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "8.5",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "0",
"case_style": "none",
"cooling": "hex_8mm",
"exhaust_vents": "vent",
"fillet": "2",
"floorthick": "2",
"gap": "2.5",
"gpio_opening": "none",
"indents": "true",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 20, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1s_tray_nvme": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "m1s_tray_nvme",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 7, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "3",
"case_design": "tray",
"case_ext_standoffs": "false",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "8.5",
"case_offset_tz": "0",
"case_offset_x": "24",
"case_offset_y": "0",
"case_style": "none",
"cooling": "hex_8mm",
"exhaust_vents": "vent",
"fillet": "2",
"floorthick": "2",
"gap": "2.5",
"gpio_opening": "none",
"indents": "true",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "15",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 20, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1s_tray_sides": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "none",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 7, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "0",
"case_design": "tray",
"case_ext_standoffs": "false",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "8.5",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "0",
"case_style": "sides",
"cooling": "hex",
"exhaust_vents": "vent",
"fillet": "2",
"floorthick": "2",
"gap": "2.5",
"gpio_opening": "none",
"indents": "true",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 20, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1s_tray_vu5": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "none",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 7, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "3.5",
"case_design": "tray",
"case_ext_standoffs": "false",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "8.5",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "0",
"case_style": "vu5",
"cooling": "hex_8mm",
"exhaust_vents": "vent",
"fillet": "2",
"floorthick": "2",
"gap": "2.5",
"gpio_opening": "none",
"indents": "true",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 20, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1s_tray_vu7": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "none",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 7, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "3.5",
"case_design": "tray",
"case_ext_standoffs": "false",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "8.5",
"case_offset_tz": "0",
"case_offset_x": "34",
"case_offset_y": "0",
"case_style": "vu7",
"cooling": "hex_8mm",
"exhaust_vents": "vent",
"fillet": "2",
"floorthick": "2",
"gap": "2.5",
"gpio_opening": "none",
"indents": "true",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "34",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "2",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 20, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1s_snap": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "m1s_snap",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 7, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "3.5",
"case_design": "snap",
"case_ext_standoffs": "false",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "0",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "0",
"case_style": "none",
"cooling": "hex_8mm",
"exhaust_vents": "vent",
"fillet": "0",
"floorthick": "2",
"gap": "2.5",
"gpio_opening": "none",
"indents": "true",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "1",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 20, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1s_fitted": {
"$fn": "90",
"accessory_highlight": "false",
"accessory_name": "m1s_fitted",
"adjust": "0.01",
"bottom_ext_standoff": "[6.25, 5, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"bottom_front_left": "0",
"bottom_front_right": "0",
"bottom_rear_left": "0",
"bottom_rear_right": "0",
"bottom_standoff": "[6.25, 7, 3.6, 10, 4, 1, 0, 0, 0, 4.5, 5.1]",
"c_fillet": "3.5",
"case_design": "fitted",
"case_ext_standoffs": "false",
"case_ffn": "90",
"case_fn": "360",
"case_offset_bz": "0",
"case_offset_tz": "0",
"case_offset_x": "0",
"case_offset_y": "0",
"case_style": "none",
"cooling": "hex_8mm",
"exhaust_vents": "vent",
"fillet": "0",
"floorthick": "2",
"gap": "2.5",
"gpio_opening": "none",
"indents": "true",
"lip": "5",
"lower_bottom": "0",
"move_front": "0",
"move_leftside": "0",
"move_rear": "0",
"move_rightside": "0",
"pcb_loc_x": "0",
"pcb_loc_y": "0",
"pcb_loc_z": "0",
"raise_top": "0",
"sata_punchout": "false",
"sbc_bottom_standoffs": "true",
"sbc_highlight": "false",
"sbc_model": "m1s",
"sbc_off": "false",
"sbc_top_standoffs": "false",
"sidethick": "1",
"sidewall_support": "false",
"tol": "0.25",
"top_ext_standoff": "[6.25, 18, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"top_front_left": "0",
"top_front_right": "0",
"top_rear_left": "0",
"top_rear_right": "0",
"top_standoff": "[6.25, 20, 2.5, 10, 4, 4, 0, 1, 0, 4.5, 5.1]",
"view": "model",
"vu_rotation": "[15, 0, 0]",
"wallthick": "2"
},
"m1_panel": {
"$fn": "90", "$fn": "90",
"accessory_highlight": "false", "accessory_highlight": "false",
"accessory_name": "m1_panel", "accessory_name": "m1_panel",

File diff suppressed because one or more lines are too long

View File

@@ -482,6 +482,67 @@ accessory_data = [
"sub","vent",25,25,44,"top",[0,0,0],["case",false,false,false],10,2,4,6,6,"horizontal",1, // sub vent "sub","vent",25,25,44,"top",[0,0,0],["case",false,false,false],10,2,4,6,6,"horizontal",1, // sub vent
"sub","vent",25,50,44,"top",[0,0,0],["case",false,false,false],10,2,4,6,6,"horizontal",1], // sub vent "sub","vent",25,50,44,"top",[0,0,0],["case",false,false,false],10,2,4,6,6,"horizontal",1], // sub vent
// Odroid-M1S
["m1s_shell",
"sub","vent_hex",10,29,-1,"bottom",[0,0,0],["sbc",true,true,false],21,5,8,5,1.5,"horizontal",1, // vent opening
"sub","rectangle",73.5,5.5,3.5,"top",[0,0,45],["sbc",true,true,true],11,3,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",5.5,56,3.5,"top",[0,0,0],["sbc-case_z",true,true,true],3,11,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",81.5,56,3.5,"top",[0,0,0],["sbc-case_z",true,true,true],3,11,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",17.5,12,3.5,"top",[0,0,0],["sbc-case_z",true,true,true],11,3,15,0,0,"vertical",[1,1,1,1]], // standoff trim
["m1s_shell_nvme",
"add1","access_port",-7.5,28,-0.01,"bottom",[0,0,0],["sbc",true,true,false],105,30,1.5,0,0,"landscape",0, // access port
"model","access_cover",-7.5,28,-0.01,"bottom",[0,0,0],["sbc",true,true,false],105,30,1.5,0,0,"landscape",0, // access port cover
"platter","access_cover",-20,0,0,"bottom",[0,0,90],["case",false,false,false],105,30,1.5,0,0,"landscape",0, // access port cover
"sub","vent_hex",37,5,-1,"bottom",[0,0,0],["sbc",false,false,false],11,3,5,5,1.5,"horizontal",1, // vent opening
"sub","vent_hex",0,5,-1,"bottom",[0,0,0],["sbc",false,false,false],7,3,5,5,1.5,"horizontal",1, // vent opening
"sub","vent_hex",87,5,-1,"bottom",[0,0,0],["sbc",false,false,false],3,3,5,5,1.5,"horizontal",1, // vent opening
"sub","vent_hex",21,60,-1,"bottom",[0,0,0],["sbc",false,false,false],20,1,5,5,1.5,"horizontal",1, // vent opening
"sub","rectangle",73.5,5.5,3.5,"top",[0,0,45],["sbc-case_z",true,true,true],11,3,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",5.5,56,3.5,"top",[0,0,0],["sbc-case_z",true,true,true],3,11,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",81.5,56,3.5,"top",[0,0,0],["sbc-case_z",true,true,true],3,11,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",17.5,12,3.5,"top",[0,0,0],["sbc-case_z",true,true,true],11,3,15,0,0,"vertical",[1,1,1,1]], // standoff trim
["m1s_shell_ups",
"sub","vent_hex",0,5,17,"top",[0,0,0],["case",false,false,true],9,21,8,5,1.5,"horizontal",1, // vent opening
"model","hk_m1s_ups",-1,122.5,5,"bottom",[0,0,270],["sbc",false,false,false],0,0,0,0,0,"",0, // hk m1s ups
"sub","slot",-45,17.5,8.5,"bottom",[90,0,90],["sbc",true,true,true],4.25,6.125,12,0,0,"",[.25,.25,.25,.25], // usb-c opening
"add2","standoff",2.5,11,0,"bottom",[0,0,0],["sbc",false,false,false],0,0,0,0,0,0,[5.75,5,3.6,10,4,1,0,0,0,4.5,5.1], // standoff
"add2","standoff",27.5,11,0,"bottom",[0,0,0],["sbc",false,false,false],0,0,0,0,0,0,[5.75,5,3.6,10,4,1,0,0,0,4.5,5.1], // standoff
"add2","standoff",2.5,119,0,"bottom",[0,0,0],["sbc",false,false,false],0,0,0,0,0,0,[5.75,5,3.6,10,4,1,0,0,0,4.5,5.1], // standoff
"add2","standoff",27.5,119,0,"bottom",[0,0,0],["sbc",false,false,false],0,0,0,0,0,0,[5.75,5,3.6,10,4,1,0,0,0,4.5,5.1], // standoff
"add1","access_port",-4,28,-0.01,"bottom",[0,0,0],["sbc",true,true,false],105,30,2,0,0,"landscape",0, // access port
"model","access_cover",-4,28,-0.01,"bottom",[0,0,0],["sbc",true,true,false],105,30,2,0,0,"landscape",0, // access port cover
"platter","access_cover",-10,16.25,0,"bottom",[0,0,90],["case",false,false,false],105,30,2,0,0,"landscape",0, // access port cover
"add2","button",2,33.5,21,"top",[0,0,0],["sbc-case_z",false,false,true],10,0,23.5,0,0,"recess",0, // button
"model","button_top",2,33.5,21,"top",[0,0,0],["sbc-case_z",false,false,true],10,0,23.5,0,0,"recess",0, // button top
"platter","button_top",-20,0,0,"top",[0,0,0],["case",false,false,false],10,0,23.5,0,0,"recess",0, // button top
"sub","rectangle",73.5,5.5,3.5,"top",[0,0,45],["sbc",true,true,true],11,3,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",5.5,56,3.5,"top",[0,0,0],["sbc",true,true,true],3,11,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",81.5,56,3.5,"top",[0,0,0],["sbc",true,true,true],3,11,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",17.5,12,3.5,"top",[0,0,0],["sbc",true,true,true],11,3,15,0,0,"vertical",[1,1,1,1]], // standoff trim
["m1s_panel",
"sub","vent_hex",10,29,-1,"bottom",[0,0,0],["sbc",true,true,false],21,5,8,5,1.5,"horizontal",1], // vent opening
["m1s_tray_nvme",
"add1","access_port",-12,26.25,-0.01,"bottom",[0,0,180],["sbc",true,true,false],102,30,2,0,0,"landscape",0, // access port
"model","access_cover",-12,26.25,-0.01,"bottom",[0,0,180],["sbc",true,true,false],102,30,2,0,0,"landscape",0, // access port cover
"platter","access_cover",-88,26.25,0,"bottom",[0,0,0],["case",false,false,false],102,30,2,0,0,"landscape",0, // access port cover
"sub","vent_hex",30,5,-1,"bottom",[0,0,0],["sbc",true,true,false],11,3,5,5,1.5,"horizontal",1, // vent opening
"sub","vent_hex",-10,5,-1,"bottom",[0,0,0],["sbc",true,true,false],7,3,5,5,1.5,"horizontal",1, // vent opening
"sub","vent_hex",79,5,-1,"bottom",[0,0,0],["sbc",true,true,false],3,3,5,5,1.5,"horizontal",1, // vent opening
"sub","rectangle",73.5,5.5,3.5,"top",[0,0,45],["sbc",true,true,true],11,3,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",5.5,56,3.5,"top",[0,0,0],["sbc",true,true,true],3,11,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",81.5,56,3.5,"top",[0,0,0],["sbc",true,true,true],3,11,15,0,0,"vertical",[1,1,1,1], // standoff trim
"sub","rectangle",17.5,12,3.5,"top",[0,0,0],["sbc",true,true,true],11,3,15,0,0,"vertical",[1,1,1,1]], // standoff trim
["m1s_snap",
"sub","vent_hex",10,29,-1,"bottom",[0,0,0],["sbc",true,true,false],21,5,8,5,1.5,"horizontal",1], // vent opening
["m1s_fitted",
"sub","vent_hex",10,29,-1,"bottom",[0,0,0],["sbc",true,true,false],21,5,8,5,1.5,"horizontal",1], // vent opening
// Odroid-M1 // Odroid-M1
["m1_panel", ["m1_panel",
"sub","vent",29,20,-1,"bottom",[0,0,0],["sbc",true,true,false],2,15,8,5,12,"horizontal",1, // vent opening "sub","vent",29,20,-1,"bottom",[0,0,0],["sbc",true,true,false],2,15,8,5,12,"horizontal",1, // vent opening

View File

@@ -54,6 +54,11 @@
vent_panel_hex(x, y, thick, cell_size, cell_spacing, border, borders), vent_panel_hex(x, y, thick, cell_size, cell_spacing, border, borders),
added nut_holder(nut, style, dia_x, dia_y, height), fixed access_port and access_cover 180 rotation added nut_holder(nut, style, dia_x, dia_y, height), fixed access_port and access_cover 180 rotation
in portrait and landscape, added h3_port_extender_holder(part,offset), cableholder_spacer() in portrait and landscape, added h3_port_extender_holder(part,offset), cableholder_spacer()
20231115 Version 2.0.5 added hex vent and new component openings
20231211 Version 2.0.6 added vu8s, hk_m1s_case_holes, hk_m1s_ups(), proto_m1s(), proto_ups(), battery_clip(bat_dia = 18.4),
battery(type), pcb_pad(pads = 1, style = "round"), led(ledcolor = "red"), m_insert(type="M3", icolor = "#ebdc8b"),
usbc().
see https://github.com/hominoids/SBC_Case_Builder see https://github.com/hominoids/SBC_Case_Builder
@@ -127,11 +132,22 @@
h3_port_extender_holder(part,offset) h3_port_extender_holder(part,offset)
hk_pwr_button(mask = false) hk_pwr_button(mask = false)
keyhole(keysize, mask = false) keyhole(keysize, mask = false)
vent_hex(cells_x, cells_y, cell_size, cell_spacing, orientation) vent_hex(cells_x, cells_y, thickness, cell_size, cell_spacing, orientation)
vent_panel_hex(x, y, thick, cell_size, cell_spacing, border, borders); vent_panel_hex(x, y, thick, cell_size, cell_spacing, border, borders);
dsub(dsubsize, mask = false) dsub(dsubsize, mask = false)
nut_holder(nut, style, dia_x, dia_y, height) nut_holder(nut, style, dia_x, dia_y, height)
cableholder_spacer() cableholder_spacer()
hk_m1s_case_holes
hk_m1s_ups()
proto_m1s()
proto_ups()
battery_clip(bat_dia = 18.4)
battery(type)
pcb_pad(pads = 1, style = "round")
led(ledcolor = "red")
m_insert(type="M3", icolor = "#ebdc8b")
usbc()
*/ */
use <./lib/fillets.scad>; use <./lib/fillets.scad>;
@@ -247,6 +263,9 @@ module add(type,loc_x,loc_y,loc_z,face,rotation,size_x,size_y,size_z,data_1,data
if(type == "hk_lcd35") { if(type == "hk_lcd35") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk35_lcd(); translate([loc_x,loc_y,loc_z]) rotate(rotation) hk35_lcd();
} }
if(type == "hk_m1s_ups") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_m1s_ups();
}
if(type == "hk_uart") { if(type == "hk_uart") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_uart(); translate([loc_x,loc_y,loc_z]) rotate(rotation) hk_uart();
} }
@@ -315,6 +334,9 @@ module add(type,loc_x,loc_y,loc_z,face,rotation,size_x,size_y,size_z,data_1,data
if(type == "nut_holder") { if(type == "nut_holder") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) nut_holder(data_1, data_2, size_x, size_y, size_z); translate([loc_x,loc_y,loc_z]) rotate(rotation) nut_holder(data_1, data_2, size_x, size_y, size_z);
} }
if(type == "standoff") {
translate([loc_x,loc_y,loc_z]) rotate(rotation) standoff(data_4);
}
} }
@@ -1790,6 +1812,80 @@ module u_bracket() {
} }
} }
// hk vu8s lcd display
module hk_vu8s() {
body_size = [202, 133, 1.70];
glass_size = [195.5, 131, 1.75];
lcd_size = [183.5,114, body_size[2] + 1];
view_size = [172.5, 107.5, .1];
rb = 5.25; // body edge radius
lcd_clearance = [0.15, 0.1, 0];
pcb_size = [14,24,1.6];
hole = 4.31;
spacer_size = [5.5, 1.75+body_size[2], 2.5, 5.5, 1, 0, 1, 1, 0, 0, 0];
$fn = 90;
adj = .01;
// "body"
color([0.1,0.1,0.1])
difference(){
union() {
slab(body_size, rb);
translate([(8.25/2),-1.74-(8.25/2),0]) rotate([0,0,90]) slot(8.25,10+(8.25/2),body_size[2]);
translate([body_size[0]-(8.25/2),-1.74-(8.25/2),0]) rotate([0,0,90]) slot(8.25,10+(8.25/2),body_size[2]);
translate([(8.25/2),body_size[1]-10,0]) rotate([0,0,90]) slot(8.25,10.75+(8.25/2),body_size[2]);
translate([body_size[0]-(8.25/2),body_size[1]-10,0]) rotate([0,0,90]) slot(8.25,10.75+(8.25/2),body_size[2]);
}
lcd_space = lcd_size + 2*lcd_clearance;
// corner holes
translate([4, -5, -1]) cylinder(d=hole, h=5);
translate([4, 143-5, -1]) cylinder(d=hole, h=5);
translate([202-4, -5, -1]) cylinder(d=hole, h=5);
translate([202-4, 143-5, -1]) cylinder(d=hole, h=5);
translate([3.5, 3.5, -1]) cylinder(d=hole, h=5);
translate([3.5, body_size[1]-3.5, -1]) cylinder(d=hole, h=5);
translate([111, 3.5, -1]) cylinder(d=hole, h=5);
translate([111.5, body_size[1]-3.5, -1]) cylinder(d=hole, h=5);
}
// standoffs
color([0.6,0.6,0.6]) {
translate([4, 3.75, body_size[2]+adj]) standoff(spacer_size);
translate([3.75, 128.25, body_size[2]+adj]) standoff(spacer_size);
translate([111.5, 4, body_size[2]+adj]) standoff(spacer_size);
translate([111.25, 128.75, body_size[2]+adj]) standoff(spacer_size);
}
// LCD panel
color([0.6, 0.6, 0.65])
translate([10, 9, body_size[2]-lcd_size[2]]+lcd_clearance)
cube(lcd_size);
// Front glass
// It's actually thinner and glued, but for the sake of simplicity...
color([0.2, 0.2, 0.2], 0.9)
translate([3, 1.25, body_size[2] + 0.01])
slab(glass_size, rb);
// view area
color("dimgrey", 0.9)
translate([14, 12.5, body_size[2] + glass_size[2]- 0.01])
slab(view_size, .1);
// PCB stub
color([0.1,0.1,0.1])
translate([body_size[0]-25, body_size[1]-30, -2])
cube([7,7,.1]);
color([0.1,0.1,0.1])
translate([body_size[0]-50, body_size[1]-35, -2])
cube([4,5,.1]);
}
// ODROID M1 2.5" SATA HDD mounting kit // ODROID M1 2.5" SATA HDD mounting kit
module m1_hdmount() { module m1_hdmount() {
$fn = 30; $fn = 30;
@@ -2549,11 +2645,11 @@ module hdmi_open(hdmi_style) {
if(hdmi_style == "hdmi_a") { if(hdmi_style == "hdmi_a") {
union() { union() {
difference() { difference() {
translate([.25,-5,1]) cube([15,8,5.5]); translate([0,-5,1.25]) cube([15.5,8,5.75]);
translate([0.5,-5.2,.5]) rotate ([-90,0,0]) cylinder(d=3, h=13.5,$fn=30); translate([0.5,-5.2,.5]) rotate ([-90,0,0]) cylinder(d=3, h=13.5,$fn=30);
translate([15,-5.2,.5]) rotate ([-90,0,0]) cylinder(d=3, h=13.5,$fn=30); translate([15,-5.2,.5]) rotate ([-90,0,0]) cylinder(d=3, h=13.5,$fn=30);
} }
translate([2,-5,.5]) cube([11.5, 8, .5]); translate([1.75,-5,.5]) cube([12, 8, 1]);
} }
} }
if(hdmi_style == "hdmi_micro") { if(hdmi_style == "hdmi_micro") {
@@ -2593,8 +2689,8 @@ module microusb_open() {
translate([0,0,.5])rotate([90,0,0]) translate([0,0,.5])rotate([90,0,0])
hull() { hull() {
translate([6,1.5,-5]) cylinder(d=3.5,h=9); translate([6,1.5,-5]) cylinder(d=3.5,h=12);
translate([1,1.5,-5]) cylinder(d=3.5,h=9); translate([1,1.5,-5]) cylinder(d=3.5,h=12);
} }
} }
@@ -3183,6 +3279,10 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick,
place(loc_x+10.5,loc_y,loc_z,18,17.5,rotation,side) place(loc_x+10.5,loc_y,loc_z,18,17.5,rotation,side)
cube([19,12,27]); cube([19,12,27]);
} }
if(type == "rj45_low_profile" && rotation == 0) {
place(loc_x,loc_y-6,loc_z-3.5,15,8,rotation,side)
cube([14.75,8,12.25]);
}
// micro usb opening // micro usb opening
if(class == "usb2" && type == "micro" && rotation == 0 && side == "top") { if(class == "usb2" && type == "micro" && rotation == 0 && side == "top") {
place(loc_x,loc_y-3,loc_z,8,3,rotation,side) microusb_open(); place(loc_x,loc_y-3,loc_z,8,3,rotation,side) microusb_open();
@@ -3244,8 +3344,8 @@ module mask(loc_x,loc_y,loc_z,rotation,side,class,type,wallthick,gap,floorthick,
} }
// single horizontal usb opening // single horizontal usb opening
if(type == "single_horizontal_a" && rotation == 0) { if(type == "single_horizontal_a" && rotation == 0) {
place(loc_x-.5,loc_y-6,loc_z,15,7.5,rotation,side) place(loc_x-.75,loc_y-6,loc_z,15,7.5,rotation,side)
cube([15,8,7.5]); cube([15.5,8,8]);
} }
if(type == "single_horizontal_a" && rotation == 90) { if(type == "single_horizontal_a" && rotation == 90) {
place(loc_x-6,loc_y-.5,loc_z,15,7.5,rotation,side) place(loc_x-6,loc_y-.5,loc_z,15,7.5,rotation,side)
@@ -4010,3 +4110,273 @@ module cableholder_spacer() {
translate([3,20,-1]) rotate([0,0,45]) cube([2,6,9]); translate([3,20,-1]) rotate([0,0,45]) cube([2,6,9]);
} }
} }
module hk_m1s_case_holes(type="landscape") {
if(type == "portrait") {
cylinder(d=3, h=6);
translate([0,107,0]) cylinder(d=3, h=6);
translate([58,0,0]) cylinder(d=3, h=6);
translate([58,107,0]) cylinder(d=3, h=6);
}
else {
cylinder(d=3, h=6);
translate([0,58,0]) cylinder(d=3, h=6);
translate([107,0,0]) cylinder(d=3, h=6);
translate([107,58,0]) cylinder(d=3, h=6);
}
}
// hk m1s ups
module hk_m1s_ups() {
pcb_size = [115,32,1.62];
adj = .01;
$fn = 90;
difference() {
union() {
color("#008066") slab(pcb_size,4);
color("#fee5a6") translate([3.5,3.5,-.1]) cylinder(d=5.5, h=pcb_size[2]+.2);
color("#fee5a6") translate([3.5,pcb_size[1]-3.5,-.1]) cylinder(d=5.5, h=pcb_size[2]+.2);
color("#fee5a6") translate([pcb_size[0]-3.5,3.5,-.1]) cylinder(d=5.5, h=pcb_size[2]+.2);
color("#fee5a6") translate([pcb_size[0]-3.5,pcb_size[1]-3.5,-.1]) cylinder(d=5.5, h=pcb_size[2]+.2);
}
color("#fee5a6") translate([3.5,3.5,-1]) cylinder(d=4, h=4);
color("#fee5a6") translate([3.5,pcb_size[1]-3.5,-1]) cylinder(d=4, h=4);
color("#fee5a6") translate([pcb_size[0]-3.5,3.5,-1]) cylinder(d=4, h=4);
color("#fee5a6") translate([pcb_size[0]-3.5,pcb_size[1]-3.5,-1]) cylinder(d=4, h=4);
}
// battery and clips
color("silver") translate([15,5,pcb_size[2]]) rotate([0,0,270]) battery_clip();
color("silver") translate([80,16,pcb_size[2]]) rotate([0,0,90]) battery_clip();
translate([13.25,10.5,pcb_size[2]+10.4]) rotate([0,90,0]) battery("18650_convex");
translate([86.75,.5,pcb_size[2]]) momentary45x15();
translate([97.5,-1,pcb_size[2]]) usbc();
translate([35,28,pcb_size[2]]) led("DodgerBlue");
translate([40,28,pcb_size[2]]) led("DodgerBlue");
translate([45,28,pcb_size[2]]) led("DodgerBlue");
translate([50,28,pcb_size[2]]) led("DodgerBlue");
translate([113,8,pcb_size[2]]) rotate([0,0,90]) led("green");
translate([113,16,pcb_size[2]]) rotate([0,0,90]) led();
translate([113,21,pcb_size[2]]) rotate([0,0,90]) led();
translate([78,29,pcb_size[2]]) rotate([0,0,270])header(7);
translate([78,31.5,pcb_size[2]]) rotate([0,0,270])header(7);
}
// prototype board, ups footprint
module proto_ups() {
pcb_size = [115,32,1.62];
adj = .01;
$fn = 90;
union() {
difference() {
union() {
color("#008066") slab(pcb_size,4);
color("#fee5a6") translate([3.5,3.5,-.1]) cylinder(d=5.5, h=pcb_size[2]+.2);
color("#fee5a6") translate([3.5,pcb_size[1]-3.5,-.1]) cylinder(d=5.5, h=pcb_size[2]+.2);
color("#fee5a6") translate([pcb_size[0]-3.5,3.5,-.1]) cylinder(d=5.5, h=pcb_size[2]+.2);
color("#fee5a6") translate([pcb_size[0]-3.5,pcb_size[1]-3.5,-.1]) cylinder(d=5.5, h=pcb_size[2]+.2);
}
color("#fee5a6") translate([3.5,3.5,-1]) cylinder(d=4, h=4);
color("#fee5a6") translate([3.5,pcb_size[1]-3.5,-1]) cylinder(d=4, h=4);
color("#fee5a6") translate([pcb_size[0]-3.5,3.5,-1]) cylinder(d=4, h=4);
color("#fee5a6") translate([pcb_size[0]-3.5,pcb_size[1]-3.5,-1]) cylinder(d=4, h=4);
}
// pads
for(r=[5:2.54:30]) {
translate([10,r,pcb_size[2]+adj]) pcb_pad(38);
}
}
}
// prototype board, m1s footprint
module proto_m1s() {
pcb_size = [90,65,1.62];
adj = .01;
$fn = 90;
union() {
difference() {
union() {
color("#008066") slab(pcb_size,2);
color("#fee5a6") translate([3.5,3.5,-.1]) cylinder(d=4.5, h=pcb_size[2]+.2);
color("#fee5a6") translate([pcb_size[0]-3.5,3.5,-.1]) cylinder(d=4.5, h=pcb_size[2]+.2);
color("#fee5a6") translate([17.5,52.5,-.1]) cylinder(d=4.5, h=pcb_size[2]+.2);
color("#fee5a6") translate([67.5,55.1,-.1]) cylinder(d=4.5, h=pcb_size[2]+.2);
}
color("#fee5a6") translate([3.5,3.5,-1]) cylinder(d=3, h=4);
color("#fee5a6") translate([pcb_size[0]-3.5,3.5,-1]) cylinder(d=3, h=4);
color("#fee5a6") translate([17.5,52.5,-1]) cylinder(d=3, h=4);
color("#fee5a6") translate([67.5,55.1,-1]) cylinder(d=3, h=4);
}
// pads
for(r=[7:2.54:32]) {
translate([10,r,pcb_size[2]+adj]) pcb_pad(28);
}
}
}
module battery_clip(bat_dia = 18.4) {
mat = .38;
width = 9.5;
tab = 8.9;
bat_holder = bat_dia+2*mat;
adj = .1;
translate([-5.5,0,10.5]) {
difference() {
translate([0,width,0]) rotate([90,0,0]) cylinder(d=bat_holder, h=9.5);
translate([0,width+adj,0]) rotate([90,0,0]) cylinder(d=bat_dia, h=10.5);
translate([mat/2-11.1/2,-adj,mat-1.3-bat_dia/2]) cube([11.1-mat,width+2*adj,3]);
translate([0,width+adj,0]) rotate([90,-45,0]) cube([bat_dia,bat_dia,bat_holder]);
}
difference() {
translate([-11.1/2,0,-1.3-bat_dia/2]) cube([11.1,width,3]);
translate([mat-11.1/2,-adj,mat/2-1.3-bat_dia/2]) cube([11.1-2*mat,width+2*adj,3]);
}
difference() {
translate([-(tab/2),-3.5,-1-bat_dia/2]) rotate([-5,0,0]) cube([tab,3.5,10]);
translate([-(tab/2)-adj,-3.5+mat,mat-1-bat_dia/2]) rotate([-5,0,0]) cube([tab+2*adj,3.5+mat,10]);
}
translate([0,-2.225,0]) rotate([85,0,0]) cylinder(d=tab, h=mat);
difference() {
translate([0,-2.75,0]) sphere(d=3);
translate([-5,-2.75,-5]) rotate([85,0,0]) cube([tab,10,10]);
}
}
}
module battery(type) {
adj = .01;
if(type == "18650") {
difference() {
cylinder(d=18.4, h=65);
translate([0,0,65-4]) difference() {
cylinder(d=18.5, h=2);
cylinder(d=17.5, h=3);
}
}
}
if(type == "18650_convex") {
difference() {
cylinder(d=18.4, h=68);
translate([0,0,65-4]) difference() {
cylinder(d=18.5, h=2);
cylinder(d=17.5, h=3);
}
translate([0,0,65-adj]) difference() {
cylinder(d=18.5, h=3+2*adj);
cylinder(d=14.4, h=3+2*adj);
}
}
}
if(type == "21700") {
difference() {
cylinder(d=21, h=70);
translate([0,0,70-4]) difference() {
cylinder(d=21.1, h=2);
cylinder(d=20.1, h=3);
}
}
}
}
// single row pcb pad
module pcb_pad(pads = 1, style = "round") {
adjust = .01;
$fn = 90;
pad_size = 1.25;
size_y = 2.54;
size_x = 2.54 * (pads-1);
union() {
for (i=[0:2.54:size_x]) {
if(style == "round") {
difference() {
color("#fee5a6") translate ([i,0,0]) cylinder(d=pad_size, h=.125);
color("dimgray") translate([i,0,-adjust]) cylinder(d=.625, h=.125+2*adjust);
}
}
if(style == "square") {
difference() {
color("#fee5a6") translate ([i-pad_size/2,-pad_size/2,0]) cube([pad_size, pad_size, .125]);
color("dimgray") translate([i,0,-adjust]) cylinder(d=.625, h=.125+2*adjust);
}
}
}
}
}
module led(ledcolor = "red") {
color(ledcolor) cube([3,1.5,.4]);
color("silver") cube([.5,1.5,.5]);
color("silver") translate([2.5,0,0]) cube([.5,1.5,.5]);
}
module m_insert(type="M3", icolor = "#ebdc8b") { //#f4e6c3, #ebdc8b
odiam = type == "M3" ? 4.2 : 3.5;
idiam = type == "M3" ? 3 : 2.5;
iheight = 4;
difference() {
color(icolor,.6) cylinder(d=odiam, h=iheight);
color(icolor,.6) translate([0,0,-1]) cylinder(d=idiam, h=iheight+2);
}
for(bearing = [0:10:360]) {
color(icolor) translate([-.25+(odiam/2)*cos(bearing),-.25+(odiam/2)*sin(bearing),iheight-1.5])
rotate([0,0,0]) cube([.5,.5,1.5]);
}
}
module usbc() {
$fn=90;
adj = .01;
// usbc horizontal type
size_x = 9;
size_y = 7;
dia = 3.5;
diam = 3.75;
rotate([90, 0, 0]) translate([dia/2, dia/2, -size_y]) union() {
difference () {
color("silver")
hull() {
translate([0,0,0]) cylinder(d=dia,h=size_y);
translate([size_x-dia,0,0]) cylinder(d=dia,h=size_y);
}
color("silver") translate([0,0,1])
hull() {
translate([0,0,0]) cylinder(d=3,h=size_y+.2);
translate([size_x-dia,0,0]) cylinder(d=3,h=size_y+.2);
}
}
color("black") translate([0,-1.2/2,.1]) cube([5.5,1.2,6]);
}
}

Binary file not shown.

Binary file not shown.