Compare commits

8 Commits

Author SHA1 Message Date
459021ff83 Playing with screen mount parameters, angle to 20 degrees 2023-01-27 16:11:28 -03:00
4f2c1e35f6 Redesigned screen holder for 30 degree screen 2023-01-27 15:43:54 -03:00
1e89b41995 Redesigned screen holder for 30 degree screen 2023-01-27 15:32:04 -03:00
37d96b0e4f Bring the keyboard 1.5 mm lower INTO the case 2023-01-27 13:16:09 -03:00
b85ba1f3e1 2-level kbd mounting pillars 2023-01-27 11:23:04 -03:00
a6d3f32797 larger hole for kbd mounting screws 2023-01-27 11:16:40 -03:00
92291013c6 Smaller kbd pillars, fix base splitting 2023-01-26 15:11:16 -03:00
d048e19cec Starting rev 2
* Adjusted sizes and other parameters for the new 65% keyboard
* Commented battery holder (waiting on the 18650 charger)
2023-01-26 11:08:58 -03:00
8 changed files with 212765 additions and 200407 deletions

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

@ -8,8 +8,8 @@ from cadquery2 import exporters
shell_t = 3
# Size of the kbd board
kbd_height = 98
kbd_width = 286
kbd_height = 95.5
kbd_width = 305
kbd_angle = 5
# Size of the whole object
@ -22,22 +22,32 @@ ti_radius = 2.35
ti_depth = 6.25
# Positions are determined by measuring the keyboard
kbd_pillar_positions = [
(18.25, -16),
(142.5, -25.5),
(kbd_width - 20, -16),
(23.5, -79.5),
(145.5, -82.5),
(kbd_width - 19, -79.5),
]
# mounting holes
kbd_pillars = (
cq.Sketch()
.push(
[
(19, -16.5),
(133, -16.5),
(247.5, -16.5),
(24, -86),
(142.5, -91),
(261.5, -86),
]
.push(kbd_pillar_positions)
.circle(2.2, mode="a")
# Holes for self-tapping screws
.circle(1.1, mode="s")
)
.circle(6, mode="a")
# Holes for M3 threaded inserts
.circle(ti_radius, mode="s")
kbd_lower_pillars = (
cq.Sketch()
.push(kbd_pillar_positions)
.circle(4, mode="a")
# Holes for self-tapping screws
.circle(1.1, mode="s")
)
# These are placed where convenient, and are used to join the top and bottom
@ -60,24 +70,24 @@ mounting_pillars = (
screw_holes = cq.Sketch().push(mounting_pillar_positions).circle(3, mode="a")
battery_holder = (
cq.Sketch()
.polygon(
[(-67, 5), (0, 5), (0, -12), (-67, -12), (-67, 5)],
mode="a",
)
.trapezoid(83, 83, 90, mode="a")
.trapezoid(80, 80, 90, mode="s")
.polygon(
[(-67, 3), (0, 3), (0, -10), (-67, -10), (-67, 3)],
mode="s",
)
# Cutout for the
.polygon(
[(-67, 30), (0, 30), (0, 12), (-67, 12), (-67, 30)],
mode="s",
)
)
# battery_holder = (
# cq.Sketch()
# .polygon(
# [(-67, 5), (0, 5), (0, -12), (-67, -12), (-67, 5)],
# mode="a",
# )
# .trapezoid(83, 83, 90, mode="a")
# .trapezoid(80, 80, 90, mode="s")
# .polygon(
# [(-67, 3), (0, 3), (0, -10), (-67, -10), (-67, 3)],
# mode="s",
# )
# # Cutout for the
# .polygon(
# [(-67, 30), (0, 30), (0, 12), (-67, 12), (-67, 30)],
# mode="s",
# )
# )
power_in = cq.Sketch().circle(5, mode="a")
@ -100,10 +110,10 @@ def model():
.faces(">Z")
.shell(-shell_t)
# Battery holder
.workplaneFromTagged("mid_height")
.center(-width / 2 + shell_t + 65, height / 2 - shell_t - 45)
.placeSketch(battery_holder)
.extrude(-height / 2)
# .workplaneFromTagged("mid_height")
# .center(-width / 2 + shell_t + 65, height / 2 - shell_t - 45)
# .placeSketch(battery_holder)
# .extrude(-height / 2)
# Power cable inlet
.faces("<X")
.workplane(centerOption="CenterOfBoundBox")
@ -129,8 +139,13 @@ def model():
.center(-width / 2 + shell_t, kbd_height - height / 2 + shell_t)
.transformed(rotate=cq.Vector(kbd_angle, 0, 0))
.tag("sloped")
.workplane(offset=-1.5)
.placeSketch(kbd_pillars)
.extrude(-1000)
.workplaneFromTagged("sloped")
.workplane(offset=-4.5)
.placeSketch(kbd_lower_pillars)
.extrude(-1000)
# Remove the excess extrusion
.workplaneFromTagged("mid_height")
.transformed(offset=cq.Vector(0, 0, -thickness / 2))
@ -157,7 +172,7 @@ def model():
if __name__ == "__main__":
left_cutout = cq.Sketch().polygon(
[(0, 0), (160, 0), (160, -100), (135, -100), (135, -200), (0, -200), (0, 0)],
[(0, 0), (width / 2, 0), (width / 2, -height), (0, -height), (0, 0)],
mode="a",
)
@ -175,13 +190,11 @@ if __name__ == "__main__":
right_cutout = cq.Sketch().polygon(
[
(160, 0),
(width / 2, 0),
(width, 0),
(width, -height),
(135, -height),
(135, -100),
(160, -100),
(160, 0),
(width / 2, -height),
(width / 2, 0),
],
mode="a",
)

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -12,8 +12,9 @@ from modelo import (
# Size of the whole object
width = kbd_width + 2 * shell_t
height = 59
thickness = 62 # Will be shorter after construction
height = 66
height_bottom = 59
thickness = 48 # Will be shorter after construction
# Visible screen size
vis_w = 220
@ -26,6 +27,9 @@ scr_h = 65
scr_thickness = 5.5
screen_cutout = cq.Sketch().trapezoid(scr_w, scr_h, 90, mode="a")
# Screen angle
scr_angle = 20
# Circuit board and cable hole.
# This is in the back of the screen, and is a bit shorter in height than the
# screen. It's wider so it removes enough material to make the shape simpler.
@ -36,7 +40,7 @@ board_cutout = cq.Sketch().trapezoid(
mode="a",
)
kbd_cable_hole = cq.Sketch().trapezoid(15, 6, 90, mode="a").vertices().fillet(1)
kbd_cable_hole = cq.Sketch().trapezoid(20, 9, 90, mode="a").vertices().fillet(1)
# The last mounting pillar is handled specially
x, y = mounting_pillar_positions[-1]
@ -57,9 +61,9 @@ def model():
.workplane()
.tag("mid_height")
.box(width, height, thickness)
# The screen goes at a 45 degree angle
# The screen goes rotated
.faces(">Z")
.transformed(rotate=(45, 0, 0))
.transformed(rotate=(scr_angle, 0, 0))
# Move the screen "lower" so it doesn't interfere
# so much with the back
.center(0, -2)
@ -84,6 +88,30 @@ def model():
.workplane(offset=21)
.placeSketch(cq.Sketch().trapezoid(1000, 1000, 90, mode="a"))
.cutBlind(100)
# Fillet top of the object
.edges(">Z and |X")
.fillet(2.5)
# Make bottom smaller to fit with base
.faces(">X")
.workplane(centerOption="CenterOfBoundBox")
.center(-height / 2, -thickness / 2)
.placeSketch(
cq.Sketch()
.polygon(
[
(height_bottom, 0),
(height_bottom, thickness / 3),
(height, thickness - 21),
(height, thickness),
(height + 5, thickness + 5),
(height + 5, 0),
(height_bottom, 0),
]
)
.vertices()
.fillet(3)
)
.cutBlind(-1000)
# Make it hollow
.faces("<Z")
# Can't be exactly shell_t because cq fails
@ -93,19 +121,16 @@ def model():
.workplane(offset=-scr_thickness, centerOption="CenterOfBoundBox")
.placeSketch(board_cutout)
.cutBlind(-6)
# Fillet top of the object
.edges(">Z and |X")
.fillet(5)
# Make small hole for the keyboard cable
.faces(">Y")
.workplane(offset=-5, centerOption="CenterOfBoundBox")
.center(-width / 2 + 134, -24)
.center(-width / 2 + 134, -44)
.placeSketch(kbd_cable_hole)
.cutBlind(-1000)
# Pillars to join with bottom half
.workplaneFromTagged("mid_height")
.workplane(offset=-thickness / 2, centerOption="CenterOfBoundBox")
.center(-width / 2, height / 2)
.center(-width / 2, height_bottom - height / 2)
.placeSketch(mounting_pillars)
.extrude(10)
)
@ -116,7 +141,7 @@ if __name__ == "__main__":
print("Exporting")
exporters.export(model(), "screen_mount.stl")
offset_width = -133
offset_width = -width / 2
right_side = (
model()

File diff suppressed because it is too large Load Diff