工作坊 3 — 韌體與基礎機械設計(PCB 外殼)
投影片:Workshop 3: getting things made(工作坊 3:把東西做出來)。今天沒有人要學一套 CAD 軟體(computer-aided design,電腦輔助設計:畫零件用的程式):Claude Code 寫出幾何形狀;你負責訂規格、看、核對數字、切片與做決定。
- 設備檢查——你的筆電裝好 VS Code 與 Claude Code,OpenSCAD 與 Bambu Studio 已安裝並開啟過一次,班級儲存庫(repository)已更新,帶開發板(dev board)與一條 USB-C 資料線。
- 把東西做出來:製造選單——取得零件的兩條路:自己做(Bambu P1S FDM 列印、雷射切割機、手工具)或向外下單(CNC 加工、鈑金、樹脂與金屬列印、放電加工);一般的時程、費用與公差。
- 讓 3D 列印件與切割件做得成功的訣竅——層方向與 45° 規則、壁厚與公差、螺母槽(nut in a pocket)、材料、切片軟體、雷射。
- 從構想到檔案——依製造方式來設計;檔案格式(STEP、STL/3MF、DXF);五套 CAD 軟體的比較;讀懂 OpenSCAD(零件是一段由形狀、移動與組合構成的短程式);AI 設計循環:訂規格、產生、看、量、切片、測試。
- 外殼——我們一起做,用 OpenSCAD 與 Claude Code,分八步:訂規格 · 回答 Claude 的問題 · 產生 · 看 · 核對數字 · 修正並讓它成為你的 · 匯出與切片 · 測試片與你的檔案。
- 把整門課串起來——專案 3 就是你的儀器:使用班級板的韌體與 App,裝在你的外殼裡;你的第一個韌體驅動程式與 App 面板在模擬模式下執行;一個很棒的專案網站,展示 App 做什麼、怎麼用、能做什麼(一個儲存庫、一個網站、一張卡片);成果發表;由 AI 替你算圖製作影片的選項。
- 這是最後一場工作坊——接下來,動手做。
硬性截止:10月9日(五)下午 2 點。3D 列印/雷射切割用的最終外殼檔案必須在那時交付製造。
先修條件:OpenSCAD 2021.01 與 Bambu Studio 已安裝並開啟過一次(設定步驟 11)。請帶筆電與你的開發板。
詳細計畫(依上方工作坊大綱)
電路板已經下單(9月28日送出,約 10月16日回來),所以韌體端的一切都在開發板上以模擬模式(SIM mode)執行(這種建置讓韌體(firmware,微控制器(microcontroller)上的程式)假造硬體,讓應用程式在光板上就能跑)。你要為你儀器的韌體寫好第一個驅動程式與它的應用程式面板、接上一條警報規則,並設計外殼。
韌體與應用程式——一個驅動程式與它的面板
區塊驅動程式介面
每個驅動程式是一個資料夾 firmware/src/blocks/<section>_<name>/,實作 name() / begin() / loop() / handle(cmd, reply) / status(out)。你從 blocks/template/ 開始。
通訊協定
WebSocket(手機網頁與板子之間的即時雙向連線)訊息:進來的是 {block, cmd, args},出去的是 {block, status};每個驅動程式一個面板模組 host/pwa/panels/<section>.js;instrument.py(你電腦上的 Python 程式)在 Python 端鏡射同一組指令。
模擬模式
SIM 旗標假造硬體,讓整個應用程式在一塊光板的開發板上就能跑——你搶在電路板之前開工,板子到了再把旗標關掉。
每個面板一條警報規則
驅動程式的狀態 → 基底警報引擎 → 模組輸出+通知:A「AI1 超過門檻」或「看不到自由感應衰減」· B「輸出削波」或「看到 TRIG 邊緣」· C「光耦計數跳動」或「某路模組輸出忘了關」。
E11:模擬模式下的驅動程式+面板。先選出你的儀器最需要的那部分電路板——你在工作坊 2 參與的那個區塊是很自然的起點,但不是必須。/tutor L3:把範本複製到 blocks/<section>_<name>/;填入該區塊的指令(A read_all、set_range、capture · B set_dc、sine、pulse、dio · C module、module_all、opto_reset);讓 SIM 分支回傳合理的數值;加上面板與一條警報規則;燒錄(flash:經 USB 把韌體寫進板子);在手機上看到面板有反應;開拉取請求(pull request:請求把你的修改併入共用專案;會先有人審查)。家教(tutor)產生骨架;你替指令命名、寫 SIM 數值,並在燒錄前解釋一次訊息的往返。彼此對話的區塊會兩兩配對(B ↔ A:從 AO1 輸出的波形在輸入端量到;B ↔ C:一個脈衝去切換一路模組輸出)。面板能在模擬模式下控制區塊且拉取請求已開啟即完成。
外殼——專案 3 的一部分
列印件與切割件的訣竅
螺母槽就是固定方式:M3 螺母滑進一個 5.8 mm 的六角槽、深 2.5 mm,螺絲把它鎖緊。壁厚 2 mm;孔加大 0.3 mm(印出來的孔會偏小);層與層之間是最弱的方向,所以讓受力沿著層走;45° 是不加支撐還印得出來的最陡懸空角。先印一片測試片(test coupon):它告訴你這台印表機的配合尺寸。PCB 前面板本身就是儀器的正面,所以前蓋就是一塊在面板零件位置開孔的平板。
你自己的設計
規格由你自己寫,依據外殼簡報(brief):外殼要裝什麼、列印規則、要交的檔案,以及兩塊板子的模型。這些模型 hardware/release/class-board.stl 與 front-panel.stl(旁邊有 STEP 版本)是用 kicad-cli 從最終的 KiCad 電路板匯出的,只保留接頭、LED 與模組,所以每個尺寸都來自電路板,沒有一個來自尺。請 Claude 在寫程式碼之前先問你問題。先在 OpenSCAD 中一次開一塊板子(一行 import())好好看它;沒有範例外殼可抄,因為設計是你自己的。
輸出
housing.scad、base.stl、cover.stl、coupon.stl(STL:3D 列印檔)、cover.dxf(DXF:雷射切割圖)與一張螢幕截圖,放在 docs/students/<name>/housing/,在截止前交出。由所方負責列印與切割。
E12:你的外殼。在共用螢幕上,同時在你自己的 Claude Code 工作階段中、旁邊開著 OpenSCAD:依簡報寫出你的規格、回答 Claude 的問題、讓它寫出 housing.scad、看它並在主控台(console)核對數字、修正並讓它成為你的、匯出各零件並在 Bambu Studio 切片、加上測試片、從原始檔控制(Source Control)面板提交。用你已經會的其他 CAD 軟體做的設計也歡迎,只要裝得下板子並趕上截止。檔案放進你的資料夾即完成。
接下來——這是最後一場工作坊:E11–E12
外殼檔案在 10月9日(五)下午 2 點前;驅動程式+面板的拉取請求;接著是你的儀器:它的韌體、App 與專案網站;約 10月16日領取電路板與外殼並組裝;10月26–30日發表。改進你的 App、動手做、玩得開心。需要協助:先問家教(tutor),再寄電子郵件至 s.p.bennetts@g.iams.sinica.edu.tw。
- E11 驅動程式+面板的拉取請求。完成所有指令、繪出一個狀態值、一條接到基底警報引擎的警報規則(驅動程式狀態的門檻 → 模組輸出 → 通知)、CI 綠燈(持續整合(CI):GitHub 對每個拉取請求自動執行的建置通過);由一位同學審查。
- E12 外殼檔案放到
docs/students/<name>/housing/——10月9日(五)下午 2 點前。 - 打造你的儀器:它的韌體、應用程式與一個很棒的專案網站(App 做什麼、怎麼用、範例、示範、影片或動畫);閱讀 workbook 第 3 章。
成果發表與展示
- 約 10月16日(五):領取製作完成的 PCB 與外殼。
- 組裝你的 ESP32、PCB 與外殼。燒錄不帶
SIM的你自己的版本、打開你的 App、看到你的儀器驅動真實硬體(例如 A:AI1 上的一個電壓與接收器的 I、Q · B:從 AO1 輸出正弦波進 AI1、一條 TTL 線與 TRIG 方向 · C:一路模組輸出切換、一次光耦計數與 OLED 上的一行狀態)。 - 測試並改進你的韌體與應用程式。
- 10月26–30日:發表並展示你的專案、應用程式、網站與影片——每人約 15 分鐘。例如,做一支影片介紹你的應用程式與你的儀器。
- 專案網站與專案牆:每個專案都有自己的公開儲存庫與專案網站(GitHub Pages)。專案 3——你的儀器:韌體、App 與外殼——是一個儲存庫、一個網站,而這個網站值得用心:App 做什麼、怎麼用、能做什麼,給使用者的範例與展現其能力的示範——螢幕截圖、量到了什麼、影片或動畫、很棒的介面——並連到你在
class-board-2026的拉取請求與班級儲存庫(你的儲存庫可放外殼的 CAD 匯出檔、照片與影片);在專案牆上是一張卡片。全部都在班級專案牆上。
展示由你自己安排:你的儀器、你的 App 與你的網站實際運作,用最能呈現它們的順序;想規劃的話,請家教幫你。
教材
- 投影片:Workshop 3: getting things made(PDF)。影片錄影不會上線。
- GitHub 上的 workbook:第 3 章 — 工作坊 3 · 第 4 章 — 成果發表與展示 · 第 B 章 軟體如何運作(自學)。
- 班級儲存庫(repository)中:PROTOCOL.md · blocks/template(含 SIM 分支與警報引擎的鉤子(hook))· panels/template.js · 外殼簡報 · 範例規格 · hardware/release(參考檔
housing.scad與電路板網格)· workbook 第 C 章 §C.6 的速查表。 - 家教:班級儲存庫中的
/tutor L3與/tutor HW3。 - 另請參閱「把東西做出來」的資源。