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 驅動所有周邊設備並執行電腦視覺模型的推論。關鍵接線規則如下:

  1. 頭部伺服馬達 → pin 9
  2. 左臂伺服馬達 → pin 10
  3. 右臂伺服馬達 → pin 11
  4. 所有伺服馬達 → 外部 5 V 電源(切勿直接由 UNO Q 供電)
  5. 外部電源接地 ↔ UNO Q 接地(共地參考)
  6. Modulino 距離感測器與蜂鳴器 → UNO Q 引腳(如接線圖所示)
  7. 攝影機 → USB-C 集線器 → UNO Q

重要提示: 將伺服馬達電源直接連接到 UNO Q 會導致電壓驟降和動作不穩定;請務必使用專用電源並共地。


機械組裝

機器人的主體由 3D 列印零件組成,用於容納電子元件和伺服馬達。組裝步驟:

  1. 列印所有 STL 檔案。
  2. 安裝頭部伺服馬達(水平旋轉)和手臂伺服馬達(垂直運動),確保軸心對齊。
  3. 將攝影機安裝在頭部,距離感測器安裝在後部。
  4. 在關閉外殼前,將線纜穿過列印的通道。
  5. 固定 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 生成的模型執行推論。工作流程如下:

  1. 資料集獲取 – 使用 VisionDatasets.com 下載合成資料集(例如 Arduino Modulino 影像)。
  2. Edge Impulse 匯入 – 透過提供的 API 金鑰直接上傳資料集。
  3. 模型訓練 – 設定影像分類脈衝(impulse);Edge Impulse 會處理訓練和驗證。
  4. 部署 – 將模型匯出為 C++ 函式庫並整合到 JBR-001 韌體中。
  5. 推論迴圈 – 擷取影格、執行 run_classifier(),並根據預測類別採取行動。

因此,機器人可以識別特定物體(例如不同的 Modulino)並觸發協調動作,例如轉動頭部、舉起手臂、播放聲音或變更顯示內容。


應用範例:Modulino 識別

作者訓練了一個模型來區分多種 Arduino Modulino 板。當 Modulino 出現在機器人前方時,會發生以下序列:

  1. 攝影機擷取影像。
  2. Edge Impulse 模型預測 Modulino 類別。
  3. 韌體將該類別對應至特定行為(例如:轉頭 + 舉手 + 嗶聲)。

由於資料集包含多種光照、姿勢和背景,模型可以推廣應用於真實場景。


擴充 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

相關

  • 專案
  • 專案
  • 專案
  • 專案
  • 專案