Design notes
M5Stack 社製 StackChan (SKU K151) の頭部に被せるキャップと、キャップ上面のスロットに差し込む装飾 35 セットです。動物の耳 (ねこ・いぬ・うさぎ・くま・きつね・ねずみ・パンダ・かえる・ぶた・ひつじ)、角・触角・羽・リボン・王冠・花・帽子などの小型の装飾に加え、大きな翼と尻尾を付け替えられます。翼・垂れ耳・たてがみ・花びらをキャップと一体にした変形キャップも 4 種あります。頭部そのものを豆腐・プリン・おにぎりなどに見立て、醤油・カラメル・海苔・葉などの上に乗る部分だけを被せる被せ物が 6 種あります。ほかに、家や食べ物の形をした大型の被り物 (シェル) が 11 種あり、キャップの代わりに頭部全体を覆います。
すべて単色の FDM 印刷を前提とし、サポートは不要です。キャップは頭部へはめ込み、側面の LEGO 互換穴に入る突起で保持します。首振りとうなずきの全可動範囲で、胴体・台座・机に当たらないことを検証しています。シェルは重いため、うなずきの上向き角度に部品ごとの上限があります。
実機での印刷・装着は未確認です。 寸法は M5Stack 公開の筐体データから求めた設計値です。未検証事項は後述します。

構成
| 部品 | ファイル | 数 | 印刷向き |
|---|---|---|---|
| キャップ | stl/cap.stl | 1 | 上面を下にして印刷 |
| 変形キャップ | stl/cap-<名前>.stl | 1 | 上面を下にして印刷。キャップの代わりに使う |
| 被せ物 | stl/drape-<名前>.stl | 1 | 上面を下にして印刷。キャップの代わりに使い、装飾を併用できる |
| 装飾 | stl/<セット名>.stl | セットごと | 平置き。1 ファイルに左右分を配置済み |
| シェル | stl/shell-<名前>.stl | 1 | 背面を下にして印刷。キャップの代わりに使い、装飾は付けない |
キャップは共通で、装飾だけを差し替えます。変形キャップにも同じスロットがあり、装飾を併用できます。装飾は厚さ 3.2 mm (大きな翼は 2.0〜2.4 mm、尻尾は 4.8 mm) の板で、下端のタブ (12 × 3.2 × 2.7 mm) をキャップのスロットへ差し込みます。タブ両端の 0.25 mm の突起が圧入代になります。印刷時に上を向く面が、装着時には前を向きます。この面に浮き彫りまたは彫り込みの模様があります。


装飾の一覧
位置は「列-スロット」で表します。質量は PLA (1.24 g/cm³) を 100% 充填した場合の値です。
| 列 | y | スロット |
|---|---|---|
| 前列 | 12 mm | 左右 x = ±16 mm、中央 x = 0 |
| 後列 | 32 mm | 左右 x = ±16 mm、中央 x = 0 |
| 翼 | 44 mm | 左右 x = ±16 mm |
| 尻尾 | 40.7 mm | x = 0。y 方向に長いスロット |
| セット | ファイル | 部品 | 位置 | 質量 |
|---|---|---|---|---|
| ねこ耳 | cat-ears.stl | 2 | 前列左右 | 1.5 g |
| いぬ耳 (垂れ耳) | dog-ears.stl | 2 | 前列左右 | 2.7 g |
| うさぎ耳 | rabbit-ears.stl | 2 | 前列左右 | 3.4 g |
| くま耳 | bear-ears.stl | 2 | 前列左右 | 2.0 g |
| きつね耳 | fox-ears.stl | 2 | 前列左右 | 1.9 g |
| ねずみ耳 | mouse-ears.stl | 2 | 前列左右 | 3.2 g |
| パンダ耳 | panda-ears.stl | 2 | 前列左右 | 1.8 g |
| かえるの目 | frog-eyes.stl | 2 | 前列左右 | 2.3 g |
| ぶた耳 | pig-ears.stl | 2 | 前列左右 | 1.2 g |
| ひつじの角 | sheep-horns.stl | 2 | 前列左右 | 2.3 g |
| あくまの角 | devil-horns.stl | 2 | 前列左右 | 1.0 g |
| ハートの触角 | heart-antennae.stl | 2 | 前列左右 | 1.5 g |
| まるい触角 | ball-antennae.stl | 2 | 前列左右 | 1.4 g |
| 天使の羽 | angel-wings.stl | 2 | 後列左右 | 2.1 g |
| リボン | ribbon.stl | 1 | 前列中央 | 1.6 g |
| 王冠 | crown.stl | 1 | 前列中央 | 1.7 g |
| 花 | flower.stl | 1 | 前列中央 | 1.8 g |
| 双葉 | sprout.stl | 1 | 前列中央 | 1.0 g |
| アホ毛 | ahoge.stl | 1 | 前列中央 | 0.7 g |
| 星の触角 | star-wand.stl | 1 | 前列中央 | 1.0 g |
| 魔女の帽子 | witch-hat.stl | 1 | 前列中央 | 1.5 g |
| サンタ帽 | santa-hat.stl | 1 | 前列中央 | 2.4 g |
| ひよこ | chick.stl | 1 | 前列中央 | 1.6 g |
| ユニコーンの角 | unicorn-horn.stl | 1 | 前列中央 | 0.7 g |
| 薬味 (しょうがとネギ) | yakumi.stl | 1 | 前列中央 | 1.1 g |
| さくらんぼ | cherry.stl | 1 | 前列中央 | 1.0 g |
| 梅干し | umeboshi.stl | 1 | 前列中央 | 0.9 g |
| 天使の輪 | halo.stl | 1 | 後列中央 | 1.0 g |
キャップは 12.5 g です。
前列と後列の 6 か所は同じ寸法で、小型の装飾はどれにも差せます。表の位置は、カタログ画像と検証で用いた標準配置です。左右の部品は鏡像なので、模様を前に向けると左右が決まります。
大型の装飾と変形キャップ


| 名前 | ファイル | 方式 | 位置 | 質量 | 大きさ |
|---|---|---|---|---|---|
| こうもりの翼 (畳んだ形) | cap-bat-wings.stl | 変形キャップ | 側面 | 27.5 g | 側面に垂れる膜、下端 z = -50 |
| ロップイヤー | cap-lop-ears.stl | 変形キャップ | 側面 | 17.7 g | 長さ約 48 mm |
| ライオンのたてがみ | cap-lion-mane.stl | 変形キャップ | 顔の左右 | 23.0 g | 全幅 105 mm |
| 花びらの縁取り | cap-petal-frame.stl | 変形キャップ | 顔の左右 | 23.3 g | 全幅 105 mm |
| 大きな天使の翼 | large-angel-wings.stl | 装飾 2 枚、厚さ 2.0 mm | 翼左右 | 7.9 g | 全幅約 135 mm、キャップ上 37 mm |
| ドラゴンの翼 | dragon-wings.stl | 装飾 2 枚、厚さ 2.4 mm | 翼左右 | 7.5 g | 全幅約 137 mm、キャップ上 36 mm |
| ねこの尻尾 | cat-tail.stl | 装飾、厚さ 4.8 mm | 尻尾 | 1.7 g | キャップ上 32 mm |
| きつねの尻尾 | fox-tail.stl | 装飾、厚さ 4.8 mm | 尻尾 | 4.0 g | キャップ上 42 mm |
| あくまの尻尾 | devil-tail.stl | 装飾、厚さ 4.8 mm | 尻尾 | 1.5 g | キャップ上 33 mm |
| ドラゴンの尻尾 | dragon-tail.stl | 装飾、厚さ 4.8 mm | 尻尾 | 2.1 g | キャップ上 32 mm |
| ヤシの木 | palm-tree.stl | 装飾、厚さ 2.0 mm | 前列中央 | 2.1 g | 全幅 41 mm、キャップ上 50 mm |
形状は次の制約から決めています。
- 変形キャップの一体部分は、キャップ上面より下に限ります。天板を下にして印刷するため、上面より上の形状は造形できません。輪郭が下へ向かって外側に広がる角度は 45° 以内です。
- 側面の板はスカートから 1.6 mm 離し、保持用の舌片がたわめるようにしています。板は頭部シェルの範囲 (y ≥ 1) に限り、CoreS3 側面のポートを覆いません。顔の左右の板は CoreS3 前面より前にあり、画面とカメラを覆いません。
- 上を向くと、頭部の後ろ側が台座の上へ倒れます。後方へ張り出す形状は台座や机に当たるため、大きな翼はキャップ上面の後端 (y = 44 mm) に立て、尻尾は後ろで立ち上がって頭の上へ前向きに巻く形にしています。
- 小型の装飾と同じく、上を向く翼・尻尾は別部品として平置きで印刷します。
- ヤシの木は、組み合わせ時のモーメント上界 (後述) を上限以下に保つため、板厚を 2.0 mm としています。
頭部を食べ物に見立てる被せ物

白い頭部を豆腐・プリン・おにぎりなどに見立て、上に乗る部分だけを被せます。構造はキャップに部品を足した変形キャップで、保持用の突起、LED の窓、装飾用のスロットはキャップと同じです。上面は全面がキャップの天板なので、上面全体が醤油や海苔などで覆われた形になります。単色で印刷し、醤油なら茶色、海苔なら黒の材料を使う想定です。
| 名前 | ファイル | 見立て | 形状 | 組み合わせる装飾 | 最下端 | 質量 |
|---|---|---|---|---|---|---|
| 醤油 | drape-soy-sauce.stl | 豆腐 | 側面に長さの異なる垂れ 8 本 | 薬味 | z = -34 | 15.2 g |
| カラメル | drape-caramel.stl | プリン | 側面にそろった短い垂れ 10 本 | さくらんぼ | z = -16 | 14.6 g |
| 海苔の帯 | drape-nori-band.stl | おにぎり | 上面から左右へ巻く幅 26 mm の帯 | 梅干し | z = -40 | 18.6 g |
| 巻き海苔 | drape-nori-wrap.stl | 海苔巻き (画面が切り口) | 側面全体を覆う海苔 | — | z = -52 | 25.1 g |
| 桜の葉 | drape-sakura-leaf.stl | 桜餅 | 右側面を包む葉。葉脈は V 溝 | — | z = -47 | 16.7 g |
| パンの耳 | drape-crust.stl | 食パン (画面が断面) | 顔の上と左右を囲む耳 | — | z = -55 | 16.5 g |
質量は 100% 充填の値です。家は、頭部を壁に見立てて屋根だけを被せる形にしました。屋根は天板より上に張り出すため、上面を下にする印刷向きでは造形できません。そこで、シェルと同じ構造で作っています (次節の shell-house-roof)。
形状は次の制約から決めています。
- 垂れは側壁に沿って下がり、下端は膨らんだしずく形です。しずくの上側の斜面は 50° で、天板を下にした印刷でもサポートは不要です。隣り合う垂れの間は 2.6 mm 以上空けています。これより狭いと、外形の丸め処理が隙間を上向きの凹面で埋め、印刷時にオーバーハングになるためです。
- 保持用の舌片 (y = 13.3〜26.3) には垂れを付けません。舌片のたわみを妨げないためです。海苔と葉は、側壁から 1.6 mm 離した板として天板から吊ります。
- 背面には、キャップのリップ (z = -3.5) より下に何も付けられません。上を向くと、胴体が頭部の背面のすぐ後ろを通るためです。試作した垂れは、下端 z = -5.6 で上向き 84° のときに胴体に当たりました。背面は、上縁の厚い層 (z = -2 まで) だけにしています。
- うなずき軸より後ろで、軸より下にある点は、軸から 31.5 mm 以内に収めます。上を向いたときに台座に当たらないためです。
- 被せ物はいずれも、うなずきの全範囲 (0〜87°) で胴体・台座・机から 1.0 mm 以上離れています。モーメントは最大 40.6 g·cm です。
家と食べ物のシェル

正面の輪郭を、頭部の後端から顔の直前まで奥行方向へ押し出した被り物です。キャップの代わりに頭部へはめ込みます。正面の模様は浮き彫り (0.8 mm) と彫り込み (0.8 mm) です。
| 名前 | ファイル | 正面の模様 | 全幅 | 頭頂からの高さ | 質量 (印刷設定) | 上向き許容角 |
|---|---|---|---|---|---|---|
| 家 | shell-house.stl | 屋根の縁、丸窓、煙突 | 76 mm | 44 mm | 40.5 g | 66° |
| 家の屋根 (頭部が壁) | shell-house-roof.stl | 屋根の縁、妻の通気口 | 76 mm | 39 mm | 32.5 g | 87° |
| 醤油をかけた豆腐 | shell-tofu.stl | 上面から垂れる醤油、気泡 | 72 mm | 26 mm | 37.4 g | 87° |
| プリン | shell-pudding.stl | 垂れたカラメル、さくらんぼ、皿 | 92 mm | 39 mm | 43.3 g | 70° |
| 海苔巻き | shell-norimaki.stl | 海苔の縁、米粒 | 84 mm | 34 mm | 41.5 g | 82° |
| 桜餅 | shell-sakuramochi.stl | 桜の葉と葉脈 | 80 mm | 37 mm | 41.4 g | 74° |
| オムライス | shell-omurice.stl | ケチャップの線、皿 | 95 mm | 28 mm | 41.8 g | 87° |
| 三角おにぎり | shell-onigiri-triangle.stl | 海苔 | 88 mm | 49 mm | 39.3 g | 87° |
| 丸おにぎり | shell-onigiri-round.stl | 海苔 | 80 mm | 44 mm | 48.2 g | 49° |
| シュウマイ | shell-shumai.stl | 上の具、皮のひだ | 72 mm | 32 mm | 35.5 g | 87° |
| 食パン | shell-bread.stl | パンの耳 | 76 mm | 43 mm | 50.9 g | 44° |
奥行はいずれも 64.4 mm (y = -15.4〜49.0) です。質量は後述の印刷設定 (外周 2 本、充填率 10%) での推定値です。
- 保持はキャップと同じ方式です。左右の側壁にスリットで区切った舌片 (厚さ 1.6 mm) があり、内側の突起 (高さ 0.6 mm) が側面中央の LEGO 互換穴に入ります。突起の上下はなだらかな斜面で、押し込むと舌片が外側へたわみます。背面の壁 (厚さ 2.0 mm) は z = -3.5 まで下がり、頭部の後端にかかります。
- 顔の前、CoreS3 の左右 (|x| < 33)、CoreS3 上面の 0.9 mm 上までは材料を置きません。画面、カメラ、側面のポートは覆いません。
- 頭部上面の LED 導光バーとタッチセンサー (推定位置) は覆われます。LED の光は外から見えません。
- キャップのスロットはないため、装飾は付けられません。
上向き許容角
シェルは 32〜51 g あり、上を向くと重心がうなずき軸の後方へ移ります。generate.py は、0° から 1° ずつ上へ回し、胴体・台座・机から 1.0 mm 以上離れていることと、重力モーメントが上限 150 g·cm 以下であることを確かめます。両方を満たす最大の角度を許容角として validation.json の allowed_pitch_deg に記録し、30° 未満の場合は異常終了します。許容角が 87° 未満のものはすべてモーメントで制限されており、干渉はうなずきの全範囲で生じません。
許容角が 87° 未満のシェルを使う場合は、公式ファームウェアの pitch の上限 (hal_servo.cpp の angleLimit の上限値 870、0.1° 単位) を許容角の 10 倍以下に下げてください。上限は設計上の目安であり、超えてもただちに故障するわけではありませんが、サーボの負荷と発熱が増えます。
可動範囲と干渉
うなずき軸は x 方向で、頭部座標の y = 18.4 mm、z = -27.0 mm にあります。頭部シェル左右の側壁内側にあるアーム受け座の円弧から求めました (当てはめ誤差 0.003 mm)。うなずきの範囲は、正面を水平に見る姿勢を 0° として上向きに 0〜87° です。首振りは ±128° です。範囲は公式ファームウェアの設定値です (m5stack/StackChan firmware/main/hal/hal_servo.cpp、pitch angleLimit 30〜870 (0.1° 単位)、yaw angleLimit ±1280)。0 点は校正画面の「StackChan looking straight forward.」の姿勢です。
generate.py は、各部品と、キャップに装着した各セットの表面を 1 mm 以下の間隔で点に分けます。うなずきを 1° 刻みで回し、次の障害物から 1.0 mm 以上離れていることを確かめます。
- 胴体 (ServoBody とカバー): 高さ 3 mm ごとの帯で表したシルエットです。頭部の天板と CoreS3 の上にある点は、頭部シェルが間にあるため対象外です。
- 台座: 首振りで回るため、首振り軸からの距離ごとの上面高さで表します。半径 24 mm まで z = -57.8、28 mm まで -58.8、36.8 mm まで -60.9 です。
- 机: z = -70.5 (製品高さ)。
いずれも M5_Hardware の StackChan-ServoBody.stl、StackChan-ServoCover.stl、StackChan-ServoSideCover.stl、StackChan-Base.stl から計測しました。これらの部品は互いに共通の組立座標で収録されていますが、頭部シェル (MainBody) とは y 方向の位置がずれています。z は組立位置のままで、ServoBody のピンの高さは受け座から求めたうなずき軸と 0.4 mm 以内で一致しました。y はピンをうなずき軸に合わせて決め、首振り軸は台座の軸受け中心から y = 19.2 mm としました。
公式 STL を用いたローカルの照合も行いました。
- 頭部シェルを上向きに 0〜87° 回すと、ServoBody との干渉は 0 でした。下向きでは 10° で干渉します。この結果から、軸の位置と回転方向の判断を確かめています。
- キャップ、変形キャップ 4 種、大型の装飾 6 種の表面点を、うなずき 0〜87° (1° 刻み) と首振り ±128° (4° 刻み) の全組み合わせで照合しました。ServoBody と台座 (いずれも voxel 化) の内部に入る点は 0 でした。
公式 STL を含めないため、この照合は CI では実行しません。
サーボの負荷
うなずき用サーボは Feetech の SCS 系です。ファームウェアは SCSCL ドライバを使い、販売店の仕様では SCS0009 の定格トルクは 0.7 kg·cm (ストール 2.3 kg·cm) です。キャップと装飾がうなずき軸まわりに加える重力モーメントの上限を、定格の約 2 割の 150 g·cm としました。
- 装着した各構成 (キャップ + 1 セット、変形キャップ単体) は、うなずき範囲での最大モーメントが上限以下であることを検査します。最大は大きな天使の翼の 70.8 g·cm です。シェルは単体で、許容角までの範囲を検査します (後述)。
- 組み合わせの上界も検査します。最も重い変形キャップに、スロットの各群で最も重い装飾を 1 つずつ加え、各部品の最大モーメントを足し合わせます。上界は 144.4 g·cm です。干渉して同時に付けられない組み合わせも含めた値なので、実際のどの組み合わせもこれ以下になります。
頭部と CoreS3 自体の負荷は含みません。上限は設計上の目安であり、実機での負荷は測定していません。
組み合わせ
耳と中央の装飾は同時に付けられます。中央の装飾を後列中央に差せば、どの耳とも干渉しません。前列中央に並べたときに干渉しない組み合わせは次のとおりです。validation.json の conflicting_pairs は、別々のスロットに差したときに重なる組を自動判定した結果です。同じスロットを使う組は同時に付けられないため、一覧には含めていません。
| 耳など | 前列中央に併用できる装飾 |
|---|---|
| ねこ耳 | 王冠、双葉、アホ毛、ユニコーンの角 |
| いぬ耳、パンダ耳、ぶた耳、ひつじの角、あくまの角 | 双葉、アホ毛、星の触角、ユニコーンの角、ヤシの木、さくらんぼ、梅干し |
| ハートの触角、まるい触角 | 双葉、アホ毛、星の触角、ユニコーンの角、さくらんぼ、梅干し |
| きつね耳 | 双葉、アホ毛、ユニコーンの角 |
| くま耳 | 双葉、星の触角、ユニコーンの角、ヤシの木、さくらんぼ、梅干し |
| うさぎ耳 | 星の触角、ユニコーンの角、梅干し |
| ねずみ耳 | 星の触角、ユニコーンの角、さくらんぼ、梅干し |
| かえるの目 | ユニコーンの角 |
| 天使の羽 (後列) | 前列中央の全装飾 |
薬味は幅が広く、前列中央ではどの耳とも重なります。耳と併用する場合は後列中央に差します。
そのほかに、次の組は重なります。
- こうもりの翼のキャップ: いぬ耳、ドラゴンの翼
- ロップイヤーのキャップ: いぬ耳
- 被せ物の醤油、カラメル、海苔の帯、巻き海苔、桜の葉: いぬ耳
- 被せ物の醤油、カラメル、巻き海苔: ドラゴンの翼
- 天使の輪 (後列中央): 尻尾 4 種
取り付け
- キャップの前縁 (左右の側壁がない側) を CoreS3 の画面側に向けます。
- 頭部の上から真下へ押し込みます。側壁内側の突起 (高さ 0.6 mm) が、側面中央の LEGO 互換穴に入って止まります。突起は側壁のスリットで区切った舌片の上にあり、舌片が外側へたわみます。
- 後縁のリップ (幅 32 mm、高さ 3.8 mm) が頭部の後端にかかり、前方向へのずれを止めます。
- 装飾のタブをスロットへ差し込みます。外すときは装飾の根元をつまんで真上に引きます。
キャップ上面の左右の細長い窓は、頭部上面の LED 導光バーの位置に合わせてあります。LED の光は装着後も見えます。
寸法
単位は mm です。座標は頭部中心を x = 0、頭部シェル (MainBody) の前面を y = 0、頭部上面を z = 0 とします。
| 項目 | 値 | 出典 |
|---|---|---|
| 頭部の幅・高さ | 54.0 × 54.0 | MainBody の実測 |
| 頭部シェルの奥行 | 46.7 (側壁は 44.7 まで) | MainBody の実測 |
| CoreS3 前面の位置 | y = -14.8 | 製品奥行 61.5 から算出 |
| 上面と側面の稜の半径 | 約 4.5 | MainBody 断面の実測 |
| 側面の LEGO 互換穴 | 片側 3 個、y = 11.8 / 19.8 / 27.8、z = -10.0、直径 6.4 | MainBody の実測 |
| 上面の LED 導光スロット | x = ±25.5、y = 5.5〜35.0、幅 1.6 | MainBody の実測 |
| キャップ外形 | 57.8 × 59.6 × 16.3 | 設計値 |
| 頭部とのすき間 | 0.3 (CoreS3 上面は 0.9) | 設計値 |
| 天板 / 側壁の厚さ | 3.0 / 1.6 | 設計値 |
| 側壁の下端 | z = -13.0 | 設計値 |
| スロット | 12.3 × 3.4、深さ 3.0 (貫通) | 設計値 |
| 装飾の厚さ | 3.2、模様を含めて 4.0 | 設計値 |
出典
- m5stack/M5_Hardware (commit
a240115c94b19ecf647f229c47fa9a8ce46ccdc4、MIT License) のStackChan-MainBody.stlを計測しました。この STL は本リポジトリに含めず、計測値だけをhead.pyに記録しています。 - M5Stack 公式ドキュメント StackChan (K151): 製品サイズ 54.0 × 70.5 × 61.5 mm。
- 前後の向きは、m5stack/StackChan の製品画像
app/assets/lateral_image.pngと照合して決めました。CoreS3 は MainBody の y = 0 側にあり、LEGO 互換穴は前寄り上部、面取りは後下部にあります。
印刷
- 材料は PLA を想定しています。層高 0.2 mm、サポートなしで印刷します。
- キャップは STL のとおり、上面を造形面に置きます。側壁は上向きになります。
- 装飾は STL のとおり平置きにします。STL の上側の面に模様があり、装着時に前を向きます。尻尾は模様の面が右側面を向きます。
- 被せ物はキャップと同じく、上面を造形面に置きます。海苔・葉・パンの耳の板は根元だけで天板とつながるため、ブリムの使用を推奨します。
- シェルは STL のとおり、背面を造形面に置きます。正面が最上層になり、模様は最後の数層で造形されます。外周 2 本 (0.45 mm 幅)、充填率 10%、上下面 4〜5 層を想定しており、質量と許容角はこの設定で見積もっています。充填率を上げると質量が増え、許容角が下がります。印刷高さは 64.4〜65.2 mm です。
- 変形キャップは印刷高さが最大 64 mm になります。側面や前面の板は根元だけで天板とつながるため、最初の数層が造形面から剥がれないよう、ブリムの使用を推奨します。
- こうもりの翼の指骨は外面の V 溝です。溝の壁が 45° なので、サポートなしで印刷できます。
- 天板のスロットの角は、1 層目のはみ出しで狭くなることがあります。スライサーの elephant foot 補正を有効にするか、タブが入らない場合は
cap.pyのSLOT_LENGTHとSLOT_WIDTHを広げて再生成します。 - 頭部へのはまりがきつい場合は
cap.pyのCLEARANCEを、突起の保持が強すぎる場合はDETENT_HEIGHTを調整します。シェルも同じ値を参照します。
検証
generate.py は次を検査し、1 つでも満たさない場合は異常終了します。結果は validation.json に記録します。
- 各部品が有効な単一ソリッドであること。
- 印刷向きで最下点が z = 0 にあり、造形面に接していること。
- 45° より緩いオーバーハングの面積が 1 mm² 以下であること (サポート不要の判定)。現状の最大はシェルの 0.07 mm² です。
- キャップと変形キャップが、頭部の包絡形状 (
head.pyのenvelope) と干渉しないこと。突起が側面穴に入り込んでいること (計 1.64 mm³)。 - うなずきの全範囲で、胴体・台座・机から 1.0 mm 以上離れていること。うなずき軸まわりの重力モーメントが上限以下であること (前 2 節)。
- 被せ物にもキャップと同じ検査 (頭部との干渉、突起の係合、うなずきの掃引、モーメント) を行います。
- シェルが頭部の包絡形状と干渉せず、突起が側面穴に入り込んでいること (計 1.22 mm³)。上向き許容角が 30° 以上であること (前節)。
- 装飾の本体がタブの上を覆っていること。装着位置で、本体がキャップに食い込まないこと。タブの圧入代が想定範囲にあること (各 0.15 mm³)。装飾と頭部の間が 0.5 mm 以上離れていること。
加えて、公式の StackChan-MainBody.stl をローカルで点群として照合しました。キャップ材料の内部に入る点は 76,747 点中 0、頭部上面とキャップ下面の最小距離は 0.3 mm でした。公式 STL を含めないため、この照合は CI では実行しません。
画像はすべて render.py が CAD モデルから描画します。頭部と台座は文脈を示すための簡略形状で、印刷用ではありません。
未検証事項
- 実機での印刷、装着、保持力を確認していません。突起の高さ 0.6 mm と舌片のたわみ量は計算上の値です。
- シェルの質量は、表面積 × 0.9 mm の外殻と残りの体積の 10% から求めた推定値です。スライサーの実際の充填形状とは異なります。シェルの舌片の幅は内側で約 13 mm、外側で約 9 mm です (キャップは 10 mm)。
- CoreS3 の上面が MainBody の上面と同じ高さにあることは、製品画像からの判断です。CoreS3 の上側は 0.6 mm の逃げを設けて覆っています。
- 公式ファームウェアには、3 区画とスワイプを扱う頭部タッチのドライバ (
hal_head_touch.cpp、Si12T) があります。センサーの位置は確認していません。名称から頭部上面と推定され、その場合はキャップがタッチ操作を妨げる可能性があります。 - サーボへの負荷は計算値で、実機では測定していません。うなずき用サーボの型番は、ファームウェアのドライバと他者の解析による推定です。
- 胴体と台座の位置は、公式 STL の座標と頭部シェルとの整合から推定しています。実機での可動範囲は個体の校正値によって変わります。
- 公式 STL と照合したのは MainBody だけです。CoreS3 本体の外形は製品寸法から推定しています。
再生成
リポジトリの README の Nix またはコンテナの手順で、他の設計と同時に再生成・検査できます。この設計だけを再生成する場合は次を実行します。
nix develop --command .venv/bin/python stackchan-hats/generate.py
nix develop --command .venv/bin/python stackchan-hats/render.py
STL は三角形の順序を正規化して書き出すため、同じ環境ではバイト単位で同一になります。
| ファイル | 内容 |
|---|---|
head.py | 頭部の計測値と包絡形状、可動範囲と障害物、掃引検査 |
cap.py | キャップの形状、スロットとタブの寸法 |
toppers.py | 装飾の 2D 輪郭と模様の定義 |
integral.py | 変形キャップの一体部分 |
generate.py | STL 出力と検査 |
render.py | 画像の描画 |
License: CC BY-SA 4.0。本設計は独立したアクセサリーであり、M5Stack の公式製品ではありません。M5Stack および StackChan は各権利者の商標または製品名です。