后伸悬臂 ARM_LEN 46 → 56, 后壳跟着后移 10mm。这一页是完整的装配说明:七件三视图、衔接面怎么接、 每颗螺丝多大、热熔螺母怎么装。
原来是 hull 三个圆 = 纯三角形,几何感太强。 真猫耳的形状特征是两条曲线的组合:外缘饱满外凸、内缘弧度略小 —— 这一强一弱的不对称才是猫耳和三角形的根本区别。现在用二次贝塞尔重画轮廓。
| 版本 | 参数 | 结果 |
|---|---|---|
| v1 | 外凸 0.30 / 内凹 0.16,控制点在 h×0.5 | 弧度过头 —— 整个变成半圆,耳尖被吃掉 |
| v2 | 收到 0.13 / 0.07,但用了 offset(−r) offset(+r) 倒圆 | 耳尖被磨掉 —— 变成水滴/钟形。猫耳的辨识度恰恰在那个尖 |
| v3 | 去掉 offset,只在耳根叠小圆;外凸 0.11、内缘也给 0.05 正弧 | 对了。只鼓外缘会让耳朵整体歪向一侧像帆,两侧都给弧才自然 |
耳高 34→38(加弧度后视觉变矮,补回来)。
还踩了一个连通性的坑:耳朵前倾 14° + 外撇 14° 之后,根部飘离了底座平面 —— 实测 4 个连通体(两只耳 + 两个底座各自独立)。修法是让耳朵整体下沉 CAT_SINK = 2.0 埋进底板,并把底板加宽到覆盖耳根。 复验2 个连通体(左右各一只)、check_mesh PASS ✓
操作者问「我的音响四个角上有铰孔,这个孔有被用上吗?不然怎么穿螺丝」。 查下来:没用上 —— SPK_HOLE_SPAN 这个常量只定义了, 全文再没被任何几何引用过。原设计是让喇叭靠耳罩与头壳夹持,不用螺丝。
| 孔中心距 | 来源 | |
|---|---|---|
| 原值 | 43 | 照片目测(仓库里自己标着「装之前请量」) |
| 实测 | 41.5 | 操作者卡尺 |
差 1.5mm —— 按目测值做柱子必然对不上。所以之前操作者说「用不上就别管」时, 没有硬做是对的:那一步做了就是白打一个 55g 的件。
实测:短径 4mm、长径 6mm,长轴指向喇叭中心。 这是厂家给的安装容差 —— 柱心距只要落在 41.5±1 就能装上。 短径 4 也直接决定了螺丝规格:M3(Ø3)单边留 0.5mm,正好。
| 参数 | 值 | 理由 |
|---|---|---|
| 柱心间距 | 41.5 | 实测值,四角布置 |
| 柱外径 / 内孔 | Ø6.0 / Ø2.5 | M3 自攻底孔,壁厚 1.75 |
| 柱高 | 4.0 | 喇叭框厚 25,柱子埋在角孔里,压不到振膜 |
| 让开磁体 | ✓ | 磁体 Ø40(半径 20),柱心到中心 29.3 |
这四个柱是可选的:不拧螺丝时喇叭仍靠夹持工作,和以前完全一样。 但侧窗打通后背面少了支撑,若装完发现喇叭晃或有共振,拧上 4 颗 M3×8 即可 —— 不用重打耳罩。多出的料只有 0.4 cm³。
耳罩现在 45.0 cm³ ≈ 56 g(原始 62.0 cm³ / 77 g,仍省 27%)
做的时候踩的坑:第一版把柱子放进 difference() 的 union 侧,结果口袋的挖除(从 y=POD_WALL 起整块掏掉 50.4×50.4) 把柱子连根削平 —— 实测柱区只剩 y 2.1..2.6,一层皮。 正确做法是在挖完口袋之后再 union,让柱子长在已经挖好的口袋底上。 复验柱区 y 2.6..6.6,完整 4mm ✓
操作者看图后提了三个疑问。三个全部属实,其中两个会让零件根本装不上。
dovetail_prism 里写成 rotate([-90,0,0]) 再 linear_extrude —— 旋转之后拉伸方向和轮廓所在平面对不上, 燕尾被拉到了错误方向。求交实测残留 1.535 cm³(正好是槽该在的位置)。
已重写:轮廓画在 x-z 平面,用 rotate([90,0,0]) 把拉伸方向摆到 y。复验求交为空 ✓
8 个耳罩螺母孔一个都没打出来。钻孔用 rotate([0, sx>0 ? 90 : -90, 0]), 而 OpenSCAD 的 cylinder 默认沿 +z,rotate([0,90,0]) 是把轴转到 +x —— 从 x=+61.5 往 +x 钻,方向朝壳外,根本没进壳。两边都反了。
之前左右那两个孔看着"通",纯属巧合 —— 它们正好落在侧窗边缘被窗吃掉了。
已改成 sx>0 ? -90 : 90。复验八个孔求交全空 ✓
| 体积 | 重量 | |
|---|---|---|
| 原来 | 62.0 cm³ | 77 g |
| 四角挖除后 | 55.1 cm³ | 68 g(仅省 11%) |
| 再掏空口袋外围 | 44.6 cm³ | 55 g(省 28%) |
外形 67×67×29.6 装 50mm 喇叭,口袋周围每边 8.6mm 全是实心料。 只挖四角不够,真正的大头是口袋外围那一圈。现在从贴壳面往里掏 20mm, 只保留:外缘 3mm 边框 + 四个孔位周围 R7.5 的柱 + 口袋自身的壁。 受力全在孔柱上,削掉的部分不承力。
这三个 bug 里有两个是"看起来通、实际堵着"。我试过的其他验证方法全部失效:
唯一可靠的是:拿一块填满目标区域的探针与零件求交,交集为空 = 真通。 这一轮所有"通透性"结论都是这么验的。
操作者问「为什么我看到前后两个头壳的侧面还是实体」。他是对的。 我上一轮只验了源码里的窗口参数,没在成品 STL 上验证通透性。
根因:侧窗在 shell_common() 里确实挖开了, 但紧接着 internal_bosses() 又 union 了一块 耳罩补强垫 70×70×3 贴在内壁上 —— 而侧窗只有 46×46, 完全落在垫子范围内,挖开又被填回去了。
实锤(拿一块填满窗口、贯穿侧壁厚度的探针与壳求交):
| 窗口内的材料 | |
|---|---|
| 修改前 | 6.075 cm³ 实心堵着 |
| 修改后 | 空 —— 完全打通 ✓ |
修法:补强垫改成环形,只保留四个螺母柱周围一圈,中间让开侧窗。 螺母柱的补强作用一点没丢(受力全在柱子周围)。前后壳都已复验:求交为空。
顺带记一条方法论:我试过的两种验证方法都不可靠 —— 截面法(窗内窗外点数一样,因为把窗框边也数进去了)、正交侧视渲染(那是轮廓剪影不是表面)。 判断「通没通」只能用布尔求交:交集为空 = 真通。
相机窗上沿在 z = +13,间隙取 15mm(1~2cm 的中值),开口中心 z = 33,占 z 28..38, 居中、圆角 2.5(直角开口在壳上是应力集中点,也不好看)。离壳顶还有 34mm。
布尔求交复验:开口内材料 = 空 ✓ 顶点实测 x ±10.0 / z 28.0..38.0,与设计值精确一致 ✓
| 参数 | 值 | 为什么 |
|---|---|---|
| 耳高 / 耳根宽 | 34 / 32 | 高宽比 ≈1.06。第一版 42/30(比 1.4)装上去像恶魔角不像猫;真猫耳接近 1.0 |
| 耳尖圆角 | R4.0 | 1.6 太尖 —— 圆钝才可爱 |
| 前倾 / 外撇 | 14° / 14° | 竖直的耳朵呆板;不外撇像兔子不像猫 |
| 耳片厚 / 内耳窝 | 3.4 / 凹 1.2 | 前倾后最大悬垂约 25°,不用支撑 |
操作者问得对,量下来第一版有两个毛病:
| 第一版 | 现在 | |
|---|---|---|
| 槽口尺寸 | 12 × 34 ×2 | 9 × 26 ×2 |
| 占顶面比例 | 7.9% | 4.6% |
| 两槽间距 / 中心 | 46 / y=−14(偏中偏后) | 78 / y=+2(两侧肩部、靠前) |
位置那条比尺寸更重要:原来间距只有 46、中心偏后,猫耳插上去是 「头顶正中偏后的两根天线」,不像耳朵。挪到 x ±39(头宽 121 的两侧肩部)才对。 同时让开了顶部散热槽(y 方向间隔 7.4mm、x 方向 2.25mm,都验算过)。
五件全部 check_mesh PASS。六项干涉检查全空。 核心连接件 core_link 仍然一个字节没动。
板不是两块,是三块,尺寸差别很大:
| 板 | 尺寸 | 孔距 | 摆法 |
|---|---|---|---|
| 蓝牙板 | 85 × 25 | 长向 73(实测) | 竖装,板面朝后,靠一块从后壁长出来的立板承托 |
| 竖插小板 | 长 19.5 | — | 插在蓝牙板背面、与之垂直,跟着蓝牙板走,无独立固定点,但给它留了 19.5mm 净空 |
| HU-004 | 70 × 28 | 长向 60(实测) | 平放在底面,四柱高 8mm(板底离壳内底 8mm,下面能过线) |
并排:85 + 70 = 155 > 腔内净宽 116.2 ✗
前后:25 + 28 + 间隙 = 56,但实心底面只有 30mm 深(y −56..−26,再往前是云台叉臂开口) ✗
腔内高度有 95mm 之前完全没用上。所以 HU-004 躺底面、蓝牙板竖起来,分两层。
蓝牙板贴后部竖装还有个附带好处:天线离金属件远,信号更好。
你给的 73 和 60 都是长向孔距。短向(板宽方向)的孔距还没有, 所以四个柱位都做成 ±4mm 的腰形槽,装的时候能对得上。
HU_SPAN_S = 20(暂估) BT_SPAN_S = 17(暂估) BOARD_SLOT = 4
量到之后把两个 *_SPAN_S 填实、BOARD_SLOT 改 0,就变成精准圆孔。
操作者已经在打 V12_core_link(+10mm 那版),所以这轮的约束是 只能改壳,不能改梁。
仓库件与 Space 上已发布件 md5 一致:7a271bddd4316e78ccb2970d13fb7074
git 中该文件无未提交改动 ✓
过程中确实撞上了:蓝牙板的立板侵入核心件的两条后伸悬臂 0.515 cm³ (x ±32.2..39.2 / y −48..−45 / z 6.5..21.5)。 解决办法是让立板避让,不是改梁 —— 在立板和侧肋上开了两个沿 y 贯穿的通槽。 复验 立板 ∩ core_link = 空 ✓
五个都是先看连通体数量、再看网格边界边才发现的 —— 渲染图上悬空的柱子和长好的看起来一模一样。
五项干涉:clash / 禁区 / 桥∩壳 / 耳罩∩壳 / 耳罩∩相机 全空 ✓
立板 ∩ core_link 空 ✓
网格:shell_rear PASS(watertight / 单壳 / 0 边界边)· shell_front PASS ✓
先更正一个我说错的判断。我起初说「喇叭背腔几乎为零」, 实测不对:壳侧壁本来就有散热开窗,和喇叭背面重叠 30.4 × 28.2 = 857 mm²,占喇叭背面 2540mm² 的 34%。
真正的问题是没对正:侧窗中心在 z = +22(壳几何中心), 而喇叭中心在 z = +8,差 14mm —— 喇叭上半边通、下半边闷着。
| 改前 | 改后 | |
|---|---|---|
| 窗中心 | z=+22(壳中心) | z=+8(喇叭中心) |
| 窗尺寸 | 30.7 × 34 | 46 × 46 |
| 喇叭背面开通比例 | 34%(偏上半边) | 整个背面 |
46 是上限:耳罩固定孔在 ±29,孔柱 11×12 的内缘在 23.5,46/2 = 23 —— 刚好让开 0.5mm。
意义:喇叭背面直通头内约 890 cm³ 的大腔,等于给它配了个大密闭箱, 低音会明显好转、大音量不易失真。顺便把走线也解决了 —— 线可以直接从背腔进头内,不必挤耳罩底部那个 12×8mm 的小口。
两块板各四根柱。柱高 8mm —— 板底离壳内底 8mm,下面能过线。 柱顶烫 M3 热熔螺母,板用 M3×6 加尼龙垫片压住。
| 参数 | 值 | 说明 |
|---|---|---|
| BOARD_XC | ±30 | 左右各一块 |
| BOARD_YC | −42 | 都在后壳侧 |
| BOARD_SPAN_X / Y | 40 × 26 | ★ 待你给实际孔距 |
| BOARD_POST_H / D | 8 / Ø7 | 柱高 / 柱径 |
跨距 40×26 是暂定值,把板的实际长宽和固定孔间距给我,改两个数即可。
做这个踩了两个坑,都写进源码注释了:
两次都是先看连通体数量再看图才发现的 —— 渲染图上悬空的柱子看起来和长好的一模一样。
操作者:「头顶上做两个卡扣,可以插打印的帽子之类的」。做成燕尾滑槽:
| 参数 | 值 |
|---|---|
| 槽口宽(顶面,窄边) | 12 mm |
| 槽底宽(里面,宽边) | 17 mm |
| 深 / 长 | 6 / 34 mm |
| 两槽中心距 | 46 mm |
| 配合间隙 / 定位凸点 | 0.25 / 0.6 mm |
用法:配件从后往前推入,燕尾锁住上下和左右,只剩前后一个自由度; 槽底那颗 0.6mm 弹性凸点在到位时「咔」一下定位。拔的时候直接往后抽。
为什么不用磁铁:磁铁要埋、要对极性、贴不牢容易掉;燕尾是纯打印件,零外购。
六项干涉:clash / 禁区 / 桥∩壳 / 耳罩∩壳 / 耳罩∩相机 全空 ✓
chk_cradle 0.0013 cm³ 零厚贴面(已知遗留,非本次引入)
网格:shell_rear / shell_front / top_key 全部 PASS、单实体 ✓
受力路径一个字节没动 —— 三项都只改壳,核心连接件与法兰、悬臂、后横梁全部不变。
核心连接件 core_link 不用重打(如果你已经在打 +10mm 那版的话)。
连接链条,从机器人往外:
贴合面本身不靠螺丝抗弯。整机 350g 绕安装螺丝的最坏力矩只有 0.32 kgf·cm, 是由法兰的贴合面以力偶顶住的,接触压强约 0.012 MPa —— PLA 抗压是 50 MPa 量级。 螺丝只负责把两个面压在一起。
下面每张图都是 1mm = 6px 的等比示意(不是网图,避免失真)。 头型建议用内六角圆柱头(cap head):头径小、能沉进凸台、拧的时候不打滑。
| 编号 | 规格 | 数量 | 拧进哪里 |
|---|---|---|---|
| ② | 与相机原螺丝同规格,长度 = 原长 + 法兰厚 间隙孔按 Ø3.4(M3) 做;若手绘那个 4.5 是孔径 → 改 M4 |
2 | 相机自身的安装螺纹孔 |
| ③ | M3 × 10 | 4 | 后横梁的热熔螺母 |
| ④ | M3 × 12 | 4 | 后壳接缝面的热熔螺母 |
| ⑤ | M3 × 8 | 2 | 前壳内底凸台 |
| ⑥ | M3 × 8 | 1 | 后壳内底 |
| ⑦ | M3 × 35 | 4 | 壳侧壁(每边 2 颗,穿过耳罩) |
要买的是「M3 热熔螺母 / heat-set insert,外径 Ø4.0、长 6mm」, 外壁有滚花(菱形或竖纹都行),黄铜色。不要买外径 5.0 的那种 —— 模型上的孔是 Ø4.2。
怎么烫:烙铁调 200~230°C,换上和螺母内孔差不多的头(或直接用尖头顶住螺母上端面), 垂直压进 Ø4.2 的孔,慢,感到到底就停,趁塑料没凝固前用平面(比如钢尺)压一下让端面齐平。 歪了就废 —— 螺母歪 2° 后面螺丝就对不上另一件的过孔。可以先在 V12_fit_test 上练两颗。
84.5 × 56.0 × 30.2 mm ≈15 g PLA+
121.0 × 58.3 × 99.8 mm ≈67 g PLA+ / PETG
本次只有前两个要重打,其余五件几何未变。
| 件 | 重量 | 材料 | 摆放 |
|---|---|---|---|
| core_link | 15 g | PLA+(唯一受力件) | 按建模朝向:件的 Z 朝上、U 形开口朝上 —— 悬臂长轴躺在层平面里,弯矩不拉层间 |
| shell_rear | 67 g | PLA+ / PETG | 开口朝上平放 |
| shell_front | 37 g | PLA+ / PETG | 开口朝上平放 |
| ear_pod ×2 | 42 g/个 | PLA+ / PETG | 口袋朝上 |
| cradle | 3 g | PLA+ | 平放 |
| cable_clip | 0.5 g | PLA+ | 平放 |
装完必测:torque on,把 pitch 停在最费力的角度读 Present_Load, 别超 80%。手臂上已经因为持续过载掉过一次扭矩。