mirror of
https://github.com/Proteus-Typer/model-a.git
synced 2025-07-13 12:49:44 +00:00
Initial import
This commit is contained in:
144
dimensions.py
Normal file
144
dimensions.py
Normal file
@ -0,0 +1,144 @@
|
||||
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)
|
Reference in New Issue
Block a user