JBR-001 開源 3D 列印桌上型機器人概覽
簡介 (TL;DR)
JBR-001 是一款完全開源、可 3D 列印的桌上型機器人,以 Arduino UNO Q 為核心,配備三個伺服馬達、攝影機、距離感測器、蜂鳴器以及 8×13 點陣顯示器,讓愛好者能夠進行邊緣 AI、電腦視覺和物理互動的實驗。
什麼是 JBR-001?
JBR-001 是一個緊湊的 3D 列印機器人平台,專為機器人技術、感知和邊緣 AI 的快速原型設計而開發。所有機械零件、韌體和 CAD 檔案均以開源授權發布,且物料清單由廉價的現成組件組成:
- Arduino UNO Q(中央控制器)
- 用於攝影機連接的 USB-C 集線器
- 一個攝影機模組(朝前)
- Modulino 距離感測器(朝後)
- Modulino 蜂鳴器(音訊回饋)
- 三個伺服馬達(頭部和兩隻手臂)
- 用於伺服馬達的外部 5 V/2 A 電源供應器
- GitHub 上提供的完整 STL 檔案
該機器人可以向使用者打招呼、顯示跳動的心臟動畫、透過距離感測器偵測物體,並在板載執行電腦視覺模型。
核心架構與接線
Arduino UNO Q 驅動所有周邊設備並執行電腦視覺模型的推論。關鍵接線規則如下:
- 頭部伺服馬達 → pin 9
- 左臂伺服馬達 → pin 10
- 右臂伺服馬達 → pin 11
- 所有伺服馬達 → 外部 5 V 電源(切勿直接由 UNO Q 供電)
- 外部電源接地 ↔ UNO Q 接地(共地參考)
- Modulino 距離感測器與蜂鳴器 → UNO Q 引腳(如接線圖所示)
- 攝影機 → USB-C 集線器 → UNO Q
重要提示: 將伺服馬達電源直接連接到 UNO Q 會導致電壓驟降和動作不穩定;請務必使用專用電源並共地。
機械組裝
機器人的主體由 3D 列印零件組成,用於容納電子元件和伺服馬達。組裝步驟:
- 列印所有 STL 檔案。
- 安裝頭部伺服馬達(水平旋轉)和手臂伺服馬達(垂直運動),確保軸心對齊。
- 將攝影機安裝在頭部,距離感測器安裝在後部。
- 在關閉外殼前,將線纜穿過列印的通道。
- 固定 Arduino UNO Q 並連接外部電源。
專案頁面上提供完整的影片教學。
顯示動畫(心跳)
8×13 LED 矩陣在閒置時會顯示跳動的心臟。兩個點陣陣列(heartSmall 和 heartLarge)在計時狀態機中渲染,該狀態機在更新時不會阻塞感測器讀取:
unsigned long heartbeatTimer = 0;
int heartbeatStep = 0;
void heartbeat() {
unsigned long now = millis();
switch (heartbeatStep) {
case 0: matrix.renderBitmap(heartLarge,8,13); heartbeatTimer=now; heartbeatStep=1; break;
case 1: if (now-heartbeatTimer>=120) { matrix.renderBitmap(heartSmall,8,13); heartbeatTimer=now; heartbeatStep=2; }
case 2: if (now-heartbeatTimer>=100) { matrix.renderBitmap(heartLarge,8,13); heartbeatTimer=now; heartbeatStep=3; }
case 3: if (now-heartbeatTimer>=160) { matrix.renderBitmap(heartSmall,8,13); heartbeatTimer=now; heartbeatStep=4; }
case 4: if (now-heartbeatTimer>=700) { heartbeatStep=0; }
}
}
這種非阻塞設計讓機器人可以同時監控距離感測器和攝影機。
使用蜂鳴器的音訊回饋
當距離感測器偵測到附近物體時,簡單的四音調旋律會提供友好的問候:
void playHello() {
buzzer.tone(523,120); delay(150);
buzzer.tone(659,120); delay(150);
buzzer.tone(784,180); delay(210);
buzzer.tone(1047,250); delay(270);
}
開發人員可以用自訂的音調序列替換該旋律,以標示不同的機器人狀態。
近接感測
後部的距離感測器會持續回報距離。典型的互動模式如下:
if (distanceSensor.available()) {
float d = distanceSensor.get();
if (d < DETECTION_DISTANCE && !objectDetected) {
objectDetected = true;
playHello();
}
if (d > RESET_DISTANCE) objectDetected = false;
}
調整 DETECTION_DISTANCE 和 RESET_DISTANCE 以調整反應靈敏度。
伺服馬達控制準則
伺服馬達透過標準的 Servo.write(angle) 呼叫來驅動。建議做法:
- 將運動限制在列印關節的機械範圍內(避免 0-180° 的全範圍掃描)。
- 使用小幅度、具表現力的動作(例如 10-30° 的頭部轉動)以呈現自然行為。
- 務必使用外部電源為伺服馬達供電並保持共地。
邊緣 AI:在 UNO Q 上執行電腦視覺
攝影機將 96×96(或類似)的影格傳送至 Arduino UNO Q,由 Edge Impulse 生成的模型執行推論。工作流程如下:
- 資料集獲取 – 使用 VisionDatasets.com 下載合成資料集(例如 Arduino Modulino 影像)。
- Edge Impulse 匯入 – 透過提供的 API 金鑰直接上傳資料集。
- 模型訓練 – 設定影像分類脈衝(impulse);Edge Impulse 會處理訓練和驗證。
- 部署 – 將模型匯出為 C++ 函式庫並整合到 JBR-001 韌體中。
- 推論迴圈 – 擷取影格、執行
run_classifier(),並根據預測類別採取行動。
因此,機器人可以識別特定物體(例如不同的 Modulino)並觸發協調動作,例如轉動頭部、舉起手臂、播放聲音或變更顯示內容。
應用範例:Modulino 識別
作者訓練了一個模型來區分多種 Arduino Modulino 板。當 Modulino 出現在機器人前方時,會發生以下序列:
- 攝影機擷取影像。
- Edge Impulse 模型預測 Modulino 類別。
- 韌體將該類別對應至特定行為(例如:轉頭 + 舉手 + 嗶聲)。
由於資料集包含多種光照、姿勢和背景,模型可以推廣應用於真實場景。
擴充 JBR-001
該平台刻意設計為模組化:
- 更換攝影機以獲得更高解析度或紅外線功能。
- 增加感測器(例如溫度、IMU),連接至閒置的 UNO Q 引腳。
- 更換顯示器為更大的矩陣或 OLED,以獲得更豐富的 UI。
- 訓練新模型,使用 VisionDatasets.com 或自訂影像識別任何物體集合。
- 程式設計自訂行為,在 Arduino IDE 或 PlatformIO 中利用相同的非阻塞迴圈結構。
社群反應
Hacker News 的討論串強調了幾個使用者的觀點:
- 對開源性質和適合家庭的組裝體驗表示熱情(salamachinas 的評論)。
- 對 UNO Q 的成本和有限的相容板供應表示擔憂(mrheosuper)。
- 與早期的開源套件(如 Otto DIY)進行比較,指出商業化的趨勢(phil42)。
- 對機器人的美學和實用性發表了輕鬆的評論(shevy-java, krisoft)。
這些評論強調了該專案的教育價值,以及保持硬體價格實惠且真正開源的重要性。
結論
JBR-001 證明了功能齊全、具備 AI 能力的桌上型機器人,可以使用廉價的 3D 列印零件和單一 Arduino UNO Q 板來建構。其開源設計、完整的韌體範例以及與 Edge Impulse 的無縫整合,使其成為學習機器人技術、電腦視覺和邊緣 AI 的理想沙盒。
Sources
相關
- 專案
- 專案
- 專案
- 專案
- 專案