完全3Dプリント戦車:多用途履帯ロボットプラットフォームの製作
概要
このチュートリアルでは、無線操縦履帯車両、ロボットプラットフォーム、または戦車と呼べる超クールなマシンをスクラッチから設計・製作し、完全3Dプリント可能にした過程を紹介します。全てプリントして自分で組み立てられます。
目標は、多様な地形を走破し、様々な用途に対応できる汎用プラットフォームを作ること。連続履帯システムが最適解:車体重量を広い面積に分散させ、優れたグリップ力を発揮し、軟地/泥/雪でのスタックリスクを低減します。
泥上での走行性能は良好(雪上テストは未実施、将来動画でロボットアームやタレット搭載時に期待)。ロボットアーム搭載なら把持/移動作業、カメラ搭載で視覚検査、Nerfダーツ発射タレット+既存LED照明で遊び用途など多彩な展開が可能。
サスペンション:クリスティ方式
各ロードホイールに個別のサスペンション(スプリング+ショックアブソーバー)を持つクリスティサスペンションを採用。不整地でも滑らかに走行し、障害物を乗り越えながら履帯と地面の接地面を維持。
制御システム
安価な市販RC送信機で操作。プラットフォーム側のRC受信機がコマンドを受信しマイクロコントローラーへ。頭脳はATmega2560ベース基板、カスタムPCBを基板上にマウントして全接続を整理。
設計プロセス
SOLIDWORKSで設計(本動画のスポンサー)。
— スポンサーセクション —
業界最高峰のプロフェッショナルグレード設計ツールが、メイカー向けに年額$99(月額$9.99)で利用可能。3DEXPERIENCE SOLIDWORKS for Makersは学習、DIYプロジェクトに最適。3DEXPERIENCE SOLIDWORKS Professional(ローカル動作)、クラウド/ローカル保存、「xDesign」ブラウザーCAD、「xShape」フリーフォームCAD、「Visualize Connected」フォトリアルレンダリング、「NC Shop Floor Programmer」CAM機能を含む。特別20%オフリンク:https://www.solidworks.com/makers20 詳細:https://discover.solidworks.com/3dexperience-solidworks-makers
— 本題に戻る —
最初の入力パラメータは手持ちのRCショックアブソーバー(8個、伸長41mm、ストローク11mm)。片側4ロードホイール。ロードホイール垂直ストロークを16mmに拡大する機構を考案。ショックアブソーバー/ロードホイールリンクの接合点をピボット点に近づければストローク拡大可能だが、スプリング力が低下しより強力なスプリングが必要になる。SOLIDWORKSでシンプルなシミュレーションを行い、反力を確認しつつコンパクトさも両立するこの機構を採用。
フロントロードホイールはアイドラーホイールと連結し動的履帯張力を実現。ロードホイール上昇で履帯周長縮小→張力緩和時にアイドラーが前進して張力維持。ボルトと距離ナットで静的張力調整も可能。
リアスプロケットは3パーツ構成(シャフトカプラー、左右スプロケット、M3ボルト3本)。キー寸法はピッチ:履帯リンクと一致させる必要あり。ピッチ11mm、歯数12でピッチ直径約42mm。
履帯リンク設計
可能な限りコンパクトに、追加部品(ピン)1個で次リンク接続、3Dプリントで十分な強度、サポート材不要を目標に設計達成。ピン径2mmに対し片側2mm(タイト)、反対側2.3mm(ルーズ)で自由回転。スプロケット歯はリンクピン形成部(直径8.8mm)に噛み合い、スプロケット側9.1mmでルーズフィット。
スプロケット、アイドラー、ロードホイールを囲む閉ループスケッチをアセンブリ環境で作成し、SOLIDWORKS「チェーンコンポーネントパターン」機能で全履帯リンクを自動生成。
プラットフォーム残り部分(ベース、LED収容サイド、トップカバー)をモダンでクールなスタイルで設計。全長約400×300mmで一般的な3Dプリンターを超えるため、全パーツを2分割(ブラケットとM3ボルトで連結)。
3DモデルとSTLダウンロード
RC戦車/ロボットプラットフォームの3DモデルとSTLファイルはCults3Dからダウンロード。
3Dプリント設定
スライサーの「水平展開」と「穴水平展開」で寸法精度確保。デフォルトでは外形/穴ともに小さくなる傾向。水平展開+0.02mm、穴水平展開+0.04mmを使用(テストプリントで最適値決定)。ベアリング/ボルトとの組み立てには正確な寸法が必須。履帯リンクはベッド接地面小さいためラフト推奨(特に大量プリント時)。
組み立て
プリント時間:ベース各セクション約22時間、全156履帯リンク約96時間、総計約200時間。2台のプリンターで約100時間。
機械部品表
- RCショックアブソーバー 8個 ……………………… Amazon / AliExpress
- スプリング 8個 ……………………………………… Amazon / AliExpress
- ボールベアリング 624 (4×13×5mm) 40個 …… Amazon / AliExpress
- M3ネジインサート ………………………………… Amazon / AliExpress
- M3/M4ボルト・ナット …………………………… Amazon / AliExpress
ボルト: M4×40mm - 8; M4×35mm - 2; M4×30mm - 8; M4×25mm - 2; M3×25mm - 16; M3×20mm - 8; M3×16mm - 10; M3×12/14mm - 32; M3×10mm - 8; M3×8mm - 14
ナット: M4 - 25; M3 - 30
ワッシャー: M4 - 30
注: アフィリエイトリンクを含みます。
組み立て手順
- ベース組み立て: 2分割ベースをブラケットとM3ボルト/ナットで連結。サイドブラケットはM3×5mmスレッドインサート(ベース側壁に埋め込み)で固定し、外壁をフラットに(履帯が近接通過するため)。ショックアブソーバーブラケットをM3ボルトで固定。
- ロードホイールピボット: ベアリング(外径13mm、内径4mm)を各ロードホイールに2個使用。ピンはM4×30mmボルト。ベアリングとアームの間にワッシャー、内側からナイロンナットで固定。締め付けは適度に(きつすぎ/緩すぎ注意)。
- ショックアブソーバー取り付け: 付属M1.4ボルトで固定(小型ドライバーがない場合ペンチで代用)。機構は完璧に動作。
- ロードホイール取り付け: ロードホイールはサポート材回避で2分割。2mmスチールロッド(履帯リンクピンと共用、真鍮溶接ロッドで柔らかくニッパーで切断容易)3本(約23mm)で連結。同ベアリングを両側に、M4ボルト/ワッシャー/ナイロンナットで固定。ホイールは自由回転かつシャフトガタなしが理想。
- 他ロードホイールも同様。フロントのみ動的張力用レバー付きアームだが取り付け同一。
- アイドラー機構: 3Dプリント3パーツ、ボルト、距離ナットで構成。第1リンク固定前に背面にM4ナイロンナット設置(後でアイドラーホイール取り付け用)。2mm銅ロッドでピン接続。第2リンク(アイドラー側)にM3×15mm距離ナットをM3ボルトで固定。反対側にM3×20mmボルト+ナットで距離ナットへ挿入。この構成でアイドラーとロードホイールアーム距離を調整し、静的/動的履帯張力を両立。M4ボルトでアイドラーホイール固定。
- スプロケット組み立て: モーター取り付け先行。ベースは37mm径モーター(センター/オフセット軸両対応)受け入れ可能。12V DCモーター(20-1000RPM、用途により選択)をM3ボルト6本で固定。シャフトカプラーにスレッドインサート設置、挿入しM3グリブネジ固定。スプロケット左右2セクションをM3ボルト3本で連結。駆動系完成。
- 履帯組み立て(意外と楽しい): サポート材なしで即使用可能な履帯リンク。2mmピン(真鍮溶接ロッド)で連結。外側穴はタイトフィット(力要するが脱落防止)、内側穴はルーズフィット(自由回転)。コーヒーでも飲みながら数時間かけて連結(片側78リンク、ロッド約3.5m/ピン長約43mm)。スプロケット、ロードホイール、アイドラーに巻き付け、最後のピンでループ閉合。78リンクで張力は適切(最後のロードホイールがわずかに上昇)。スプリング弱いためショックアブソーバーナットで調整試みるも不十分→全ショックアブソーバーのスプリングを強化版に交換(分解→強力スプリング挿入→再組み立て。スプリングが純正より太いためM4ワッシャー併用)。全ロードホイールが位置保持可能に。駆動系完成。
- 距離ナットで履帯張力微調整可能。トップ緩み部分はショックアブソーバーブラケットで支持。モーター通電テスト:完璧な動作。多数の3Dプリントパーツが一体となって動く感動。
- 反対側も同様に組み立て。プラットフォーム80%完成。サイドパネル(主に見た目用)をブラケット/M3ボルトで取り付け。トップカバーで覆う(今回は見た目優先設計。将来ロボットアーム/タレット搭載時にトップ再設計予定)。
電子回路図
電子部品表
- 12V DCモーター 50-500RPM ×2 …………… Amazon / AliExpress
- DRV8871 DCモータードライバー …………… Amazon / AliExpress
- Arduino MEGA ………………………………… Amazon / AliExpress
- 3S LiPoバッテリー …………………………… Amazon / AliExpress
- XT60コネクター ……………………………… Amazon / AliExpress
- FLYSKY RC送信機 …………………………… Amazon / AliExpress
注: アフィリエイトリンクを含みます。
2モーター駆動にDRV8871×2(PWM制御、ピーク3.6A対応)。モーター12V駆動、3S LiPo(約12V)で全系給電。LM350 5Vレギュレーター搭載(将来サーボ接続用等、今回はRC受信機と一部LED給電に使用)。LED:5mm白色/赤色。後部:片側赤色2個(テールライト)、前部:片側白色3個(ヘッドライト)、トップカバー前部:白色6個(ハイビーム)。直列/並列組み合わせで配線、順方向電圧/電流から抵抗値計算(ヘッドライト:左右各3直列×2並列、各ライン150Ω)。汎用NPNトランジスター(200mA定格)でLED点灯制御。バッテリー電圧監視用簡易分圧回路(12V→5V未満→マイコンアナログ入力)。プログラムで実電圧換算し、受信機経由で送信機ディスプレイ表示。
カスタムPCB設計
配線量多いためカスタムPCB設計。ATmega2560基板に直接マウント可能。3.3VレギュレーターとNRF24L01接続用ランド(将来用)、12V/5V/6Vレール、サーボ接続用デジタルピン配置(6Vレールは外部バックコンバーター給電想定)。PCBWay発注(色ホワイトのみ変更)。ガーバーファイルはPCBWayプロジェクト共有から。到着品質良好、設計通り。組み立てはラベル通りで簡単。底面ピンヘッダー(ATmega2560接続)から開始、上面へ。小型部品(抵抗、トランジスター)→大型部品(LED、電源コネクター)順。全接続ピンヘッダー化で変更柔軟に対応。外部バックコンバーター/3.3Vレギュレーター接続は未実装(今回不使用)。白基板で美しくクリーンな仕上がり。
最終組み立て
- マイコン基板をM3ボルトで固定、カスタムPCBを上面にマウント。
- LED設置:サイドパネルに5mm LEDホルダーで固定。回路図通り各ライン直列ハンダ付け(カソード黒線、アノード赤線)。サイドパネル小穴からPCBへ配線。ホルダーはタイトフィットでクリーンな外観。
- ハイビームLEDはトップフロントカバー直付け。
- PCBにXH2.54mmデュポンメスコネクター実装(圧着ペンチ必要だが未所持でラジオペンチで代用、問題なし)。各LEDラインをラベル通りコネクター接続。
- モーターはコネクター不備で直ハンダ。DRV8871ドライバーボード経由でPCB接続。
- 無線通信:FLYSKY RC送受信機(安価・高性能)。受信機-マイコンはジャンパーワイヤー3本(VCC、GND、Signal、I-BUSシリアル通信)。バッテリー電圧送信用にセンサーI-BUSを別シリアルポートへ接続。
- LiPoバッテリー接続(適切なコネクターで12V端子へ。隣のON/OFF端子にスイッチ接続)。
- 重要: 電源投入前、RC受信機を外し、LM350トリマーで5Vに調整してから接続。
- トップバックカバー装着で完成。
プログラミング
/* 3D Printed Tracked Robot Platform - Arduino Code by Dejan, www.HowToMechatronics.com
Libraries: IBusBM: https://github.com/bmellink/IBusBM */
#include
#define motorLeft_IN1 4
#define motorLeft_IN2 5
#define motorRight_IN1 6
#define motorRight_IN2 7
IBusBM IBus;
IBusBM IBusSensor;
int ch0, ch1, ch6, ch8 = 0;
int motorSpeed, steeringValue, leftMotorSpeed, rightMotorSpeed = 0;
int ledBlinkPeriod = 50;
int isOn = LOW;
unsigned long time_now = 0;
void setup() {
Serial.begin(115200);
IBus.begin(Serial1, IBUSBM_NOTIMER); // サーボI-BUS
IBusSensor.begin(Serial2, IBUSBM_NOTIMER); // センサーI-BUS
IBusSensor.addSensor(IBUSS_INTV); // 電圧センサー追加
// DCモーター制御 - 初期停止
digitalWrite(motorLeft_IN1, LOW); // PWM
digitalWrite(motorLeft_IN2, LOW); // 前進
digitalWrite(motorRight_IN1, LOW); // PWM
digitalWrite(motorRight_IN2, LOW); // 前進
digitalWrite(46, LOW);
digitalWrite(47, LOW);
digitalWrite(48, LOW);
}
void loop() {
IBus.loop(); // RC送信機データ読み取り
ch0 = IBus.readChannel(0); // ch0 - 左右
ch1 = IBus.readChannel(1); // ch1 - 前進/後進
ch6 = IBus.readChannel(6); // ch6 - ヘッドライト
ch8 = IBus.readChannel(8); // ch8 - ハイビーム
// PWM値変換
steeringValue = map(ch0, 1000, 2000, -185, 185); // 0-185範囲(+70でモーター始動PWM確保)
motorSpeed = map(ch1, 1000, 2000, -185, 185);
motorSpeed = abs(motorSpeed);
leftMotorSpeed = 70 + motorSpeed + steeringValue; // 70-255範囲
rightMotorSpeed = 70 + motorSpeed - steeringValue;
leftMotorSpeed = constrain(leftMotorSpeed, 0, 255);
rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);
if (leftMotorSpeed < 72) leftMotorSpeed = 0;
if (rightMotorSpeed < 72) rightMotorSpeed = 0;
// 前進
if (ch1 > 1510 && ch1 < 2000) {
analogWrite(motorLeft_IN1, leftMotorSpeed);
digitalWrite(motorLeft_IN2, LOW);
analogWrite(motorRight_IN1, rightMotorSpeed);
digitalWrite(motorRight_IN2, LOW);
}
// 後進
if (ch1 > 1000 && ch1 < 1420) {
digitalWrite(motorLeft_IN1, LOW);
analogWrite(motorLeft_IN2, leftMotorSpeed);
digitalWrite(motorRight_IN1, LOW);
analogWrite(motorRight_IN2, rightMotorSpeed);
}
// 中立
if (ch1 > 1420 && ch1 < 1520) {
if (leftMotorSpeed < 75 && rightMotorSpeed < 75) {
digitalWrite(motorLeft_IN1, LOW);
digitalWrite(motorLeft_IN2, LOW);
digitalWrite(motorRight_IN1, LOW);
digitalWrite(motorRight_IN2, LOW);
} else {
// その場旋回
analogWrite(motorLeft_IN1, leftMotorSpeed);
digitalWrite(motorLeft_IN2, LOW);
analogWrite(motorRight_IN1, rightMotorSpeed);
digitalWrite(motorRight_IN2, LOW);
}
}
// LED制御
if (ch6 > 1500) { digitalWrite(47, HIGH); digitalWrite(48, HIGH); }
else { digitalWrite(47, LOW); digitalWrite(48, LOW); }
if (ch8 == 1500) { digitalWrite(46, HIGH); }
else if (ch8 == 2000) {
if (millis() >= time_now + ledBlinkPeriod) {
time_now += ledBlinkPeriod;
isOn = (isOn == HIGH) ? LOW : HIGH;
digitalWrite(46, isOn);
}
} else { digitalWrite(46, LOW); }
// バッテリー電圧監視・送信
int sensorValue = analogRead(A0);
float voltage = sensorValue * (5.00 / 1023.00) * 3.02; // 5V読み取り値を12V換算
IBusSensor.loop();
IBusSensor.setSensorMeasurement(1, voltage * 100);
}
コード概要
IBusBMライブラリでRC送信機データ読み取り。右ジョイスティック(ch0, ch1)で移動、ロッカースイッチch6, ch8でLED制御。入力を0-255 PWM値へ変換。analogWrite()でドライバー/モーターへ出力。コードはプラットフォーム機能がシンプルなため複雑ではありません。
テスト走行
コード書き込み後、電源投入テスト。送信機ディスプレイにLiPo電圧、受信機/送信機電圧表示。右ジョイスティックで移動制御。左ロッカースイッチでヘッド/テールライト、右3wayロッカースイッチでハイビーム(常時点灯/点滅の2モード)。
課題と改善点:
- 搭載モーター(888RPM、500mA未満定格)がアンダーパワー。ジョイスティックほぼ全開でやっと動き出し、手で簡単に履帯を止められる。サスペンションと履帯のテンション/抵抗が大きい。
- より大型モーター(1280RPM)に交換も試したが、減速比が小さく同等結果。決して悪くはなく、走行自体は良好。LED点滅しながらバーンアウト/ドーナツは最高に楽しい。
- 屋外走行で即座に故障。原因:アンダーパワーモーター+履帯リンク設計不良(スプロケット歯噛み合い部に泥詰まり)。リンク反対側に開口部追加で泥排出、スプロケットを0.2mmオフセットでルーズフィット化して再組み立て。屋外走行可能になったが、モーター非力でスタック/登坂不能。
- 推奨:500RPM以下、定格1-2A以上のモーター。20RPMモーターでは実戦車並みの登坂力だが遅すぎ。楽しむなら50RPM(低速用途)、500RPM(高速用途)が適切。
お楽しみいただけたら幸いです。質問はコメント欄へ。購読とArduinoプロジェクトコレクションもチェックしてください。
製造プロセス
- Mubeaアイアンワーカーマシン向けプレミアムパンチ、ダイ、ブレード - メルボルンの信頼サプライヤー
- CNC工作機械:現代産業における精密加工とカスタマイズ
- カーボンキャプチャー&ストレージ(CCS)技術:地球を守りエネルギー効率を高める
- 熱間圧延炭素鋼ストリップの酸化スケール除去:効率的なピックリング技術
- 精密部品加工の精度を保証する:エキスパートのヒントとベストプラクティス
- スタートアップのための適切な製造業者選び:大手より中小が重要な理由
- 農業・養鶏向けプレミアム六角ワイヤーネット機械
- AFSウィスコンシン地域学生鋳造コンペティション:2月開催の大学チーム招待大会
- 管理者・スタッフ必読:倉庫安全ガイドライン完全版
- 電動ウォーターポンプが信頼できる給水に果たす必須の役割
- ハンマーの種類完全ガイド:DIY・作業用途別18種類+機械駆動3種類