mirror of
https://github.com/Proteus-Typer/model-a.git
synced 2024-09-07 21:43:36 +00:00
147 lines
3.4 KiB
Python
147 lines
3.4 KiB
Python
import math
|
|
|
|
import components.audio_plug as audio_plug
|
|
import components.usb_hub as usb_hub
|
|
import components.keyboard as keyboard
|
|
import components.screen_pillars as screen_pillars
|
|
|
|
## Standard things (TODO move to separate file)
|
|
|
|
# M3 threaded insert sizes
|
|
ti_radius = 2.35
|
|
ti_depth = 6.25
|
|
|
|
# M3 hex nut dimensions
|
|
m3_hn_diam = 5.5
|
|
m3_hn_hole = 3
|
|
m3_hn_thickness = 2.5
|
|
|
|
# Dimensions for countersunk M4 screws
|
|
m4_top = 9
|
|
m4_bottom = 4
|
|
|
|
## Keyboard dimensions
|
|
keyboard.kbd_height = 95.5
|
|
keyboard.kbd_width = 305
|
|
keyboard.kbd_back_thickness = 19
|
|
keyboard.kbd_front_thickness = 12
|
|
# Pythagoras
|
|
keyboard.kbd_actual_height = (
|
|
keyboard.kbd_height**2
|
|
- (keyboard.kbd_back_thickness - keyboard.kbd_front_thickness) ** 2
|
|
) ** 0.5
|
|
keyboard.kbd_angle = (
|
|
math.acos(keyboard.kbd_actual_height / keyboard.kbd_height) * 180 / math.pi
|
|
)
|
|
keyboard.kbd_pillar_positions = [
|
|
(19, 16),
|
|
(142.5, 25.5),
|
|
(keyboard.kbd_width - 20, 16),
|
|
(23.5, 79.5),
|
|
(145.5, 82.5),
|
|
(keyboard.kbd_width - 19, 79.5),
|
|
]
|
|
keyboard.kbd_pillar_offset_1 = 5.5
|
|
keyboard.kbd_pillar_radius_1 = 5
|
|
keyboard.kbd_pillar_offset_2 = 2.5
|
|
keyboard.kbd_pillar_radius_2 = 2.4
|
|
keyboard.kbd_screw_radius = 1.1
|
|
keyboard.init()
|
|
|
|
## Screen dimensions
|
|
# Whole screen size
|
|
scr_w = 231
|
|
scr_h = 65
|
|
scr_thickness = 5.5
|
|
# Visible screen size
|
|
vis_w = 219
|
|
vis_h = 55
|
|
|
|
|
|
## Dimensions for the base of the computer
|
|
|
|
# Thickness of the outer material
|
|
shell_t = 3
|
|
|
|
# Size of the base
|
|
width = keyboard.kbd_width + 2 * shell_t
|
|
height = 159
|
|
base_thickness = 30 + shell_t # 30 inside
|
|
|
|
|
|
# These are placed where convenient, and are used to join the top and bottom
|
|
# parts of the case.
|
|
# Measured from back-left corner OUTSIDE
|
|
mounting_pillar_positions = [
|
|
(6, 6),
|
|
(6, 43),
|
|
(120, 6),
|
|
(170, 6),
|
|
(width - 6, 6),
|
|
(width - 6, 43),
|
|
(120, 48),
|
|
(170, 48),
|
|
]
|
|
|
|
# Offset for the USB port from back-left corner
|
|
# of the case to left side of the hub
|
|
usb_offset_x = width - audio_plug.item_w - usb_hub.item_w
|
|
|
|
# CPU holder position from back-left corner of the case
|
|
cpu_offset_x = 177
|
|
cpu_offset_y = 2
|
|
|
|
# Battery holder position from back-left corner of the case
|
|
battery_offset_x = 15
|
|
battery_offset_y = 3
|
|
|
|
# HDMI out hole from back-left corner of the case
|
|
hdmi_out_offset_x = 138
|
|
|
|
## Dimensions for the Tandy lid
|
|
|
|
# Size of the whole object
|
|
tl_height = 66
|
|
tl_height_bottom = 59
|
|
tl_full_thickness = 48 # Will be shorter after construction
|
|
# Screen angle
|
|
tl_scr_angle = 20
|
|
|
|
|
|
## Dimensions for the hinged lid
|
|
|
|
# This is a constant used to control how far back the hinges go
|
|
# when open. It's arbitrary and can be adjusted experimentally
|
|
# printing small samples
|
|
hl_hinge_slant = shell_t + 2
|
|
|
|
hl_bezel_width = m3_hn_diam + 2
|
|
hl_bezel_height = 1
|
|
hl_bezel_thickness = 2
|
|
|
|
hl_hinge_radius = 5.5
|
|
hl_screw_radius = 1.5 # M3
|
|
hl_ring_radius = 5 # M3
|
|
hl_hinge_offset = max(p[1] for p in mounting_pillar_positions) + 6
|
|
hl_hinge_width = 25
|
|
# Base + this lid
|
|
hl_full_thickness = 43
|
|
|
|
|
|
## Dimensions for the simple lid
|
|
sl_lip_thickness = 1.5
|
|
sl_height = (
|
|
max([y for _, y in mounting_pillar_positions]) + 6 + shell_t + sl_lip_thickness
|
|
)
|
|
sl_thickness = shell_t
|
|
sl_front_lip = 8
|
|
|
|
## Dimensions for pillars that connect base and lids
|
|
screen_pillars.pillar_width = 12
|
|
screen_pillars.pillar_height = 12
|
|
screen_pillars.screw_head_radius = 3
|
|
screen_pillars.screw_radius = 1.8
|
|
screen_pillars.screw_head_depth = (
|
|
base_thickness - 13
|
|
) # (screw thread length - threaded insert depth)
|