デュアルスピード ギアボックスを備えた高性能 3D プリント RC 戦車を構築する
このチュートリアルでは、クリーンなオールブラックのデザイン、クールな LED 照明、デュアルスピード ギアボックスを備えた 3D プリント RC 戦車やラジコン装軌車両の野獣をどのように構築したかを説明します。そうです。この戦車用にギアボックスを特別に設計したので、地形や用途に応じて低速または高速のギアを選択でき、より高いトルクまたはより高速な速度を得ることができます。
次のビデオを見るか、以下のチュートリアルを読むことができます。
概要
私をフォローしている方は、少し前にすでに 3D プリントした RC 戦車を構築していたことをご存知かもしれません。これはクールでしたが、少しパワー不足でした。そのため、このビルドでは各トラックに 200 W DC モーターを使用しており、このギアボックスと組み合わせることで、戦車はあらゆる地形を征服したり、バーンアウトやドーナツを楽しんだりするのに十分なパワーを備えています。
楽しむということで、ライト用にアドレス指定可能な LED ストリップを取り付けました。これにより、素晴らしい光効果を作成する無限の可能性が得られます。このビデオでは、ポリス ライトのストロボ エフェクトを作成しました。これは、特に夜間にストロボを使用して走り回るのにとてもクールです。
サスペンションに関しては、タンクは両側で 3 つのコイル スプリングとショックアブソーバーで支えられ、それぞれに 2 つのロードホイールが付いています。これにより、トラックと地形の間の良好な接触面を維持しながら、車両は平坦でない地形でもスムーズに走行し、障害物を乗り越えることができます。
もちろん、すべて 3D プリントされており、3D ファイルはダウンロードできるので、自分で構築することもできます。
戦車の制御には、コマンドを送信する安価な市販の RC 送信機を使用しています。
戦車には、コマンドを受信してマイクロコントローラーに送信する適切な RC 受信機があります。このプラットフォームの頭脳は Atmega2560 マイクロコントローラー ベースのボードであり、すべてを簡単に接続するために、ボードの上部に簡単に取り付けることができるカスタム PCB を作成しました。
それでも、デザイン、3D プリント、電子コンポーネントの組み立てと接続、マイクロコントローラーのプログラミングに始まり、この RC 戦車を構築するプロセス全体を説明しますので、ベルトを締めてください。
ラジコン戦車の設計
この戦車は Onshape を使用して設計しました。
Onshape は、私がプロジェクトに使用しているプロフェッショナル グレードのクラウド ネイティブ 3D CAD および PDM システムです。
機械エンジニアと製品デザイナーは Onshape をチェックすることをお勧めします。あなたとあなたの会社は、https://Onshape.pro/HowtoMechatronics
で Onshape Professional を最大 6 か月間無料で使用できます。設計の最初の入力パラメータは、DC モーターまたはその寸法と RPM でした。これらのモーターは非常に大きく、回転数は 3000 RPM です。この戦車には RPM が高すぎるため、速度を 2 つの異なる値に下げるギアボックスを設計しました。
このギアボックスは、車のマニュアル トランスミッションと同じように機能します。手動で動かす代わりに、サーボ モーターの助けを借りて動かされるギア シフターがあり、2 つの出力ギア セットのどちらを最終出力として接続するかを選択できます。
ギアボックスの初期減速比は 1.88:1 で固定されており、さらに 2.76:1 の減速を行うロー ギアまたは 1:1 の比率を有するハイ ギアを選択できます。つまり、低速ギアでは合計減速は 5.2、つまり約 570RPM となり、高速ギアではわずか 1.88 減速、つまり約 1600RPM になります。
ギアボックスの仕組みについては、このビデオの後半で組み立てる様子で詳しく説明します。
タンク設計の次の入力パラメーターは、入手した RC ショックアブソーバーでした。伸長時の長さは 70mm、トラベル量は 15mm です。ロードホイールの垂直移動距離をもう少し長くしたかったので、この構成でロードホイールを配置し、22 mm の垂直移動距離を取得しました。
それに加えて、これは一対の車輪が移動軸に取り付けられた台車システムであるため、車輪はその軸の周りを回転することができ、したがって追加の垂直移動を行うことができます。明らかに、これにより乗り心地がよりスムーズになり、トラックとその下の路面との接触が向上します。
フロントロードホイールをよく見ると、フロントのアイドラーホイールと接続されて、トラックに動的な張力を与えていることがわかります。フロントロードホイールが上がると、トラックの円周が小さくなり、張力が緩みます。
この設定では、そのような事態が発生すると、アイドラーホイールが前方に押し出されて履帯に張力が加わります。この接続により、このボルトと距離ナットを調整することで、静的にトラックに張力を与えることもできます。
裏側にはスプロケットがあり、3つのパーツから構成されています。シャフトカプラーとスプロケットの左右部分が 3 本の M3 ボルトで接続されています。
ここでスプロケットの重要な寸法はピッチです。これはトラックのピッチと一致する必要があるためです。ここではピッチは 11mm で、歯数が 20 のスプロケットを選択したため、スプロケットのピッチ直径は約 69mm になりました。スプロケットのサイズのアイデアは、履帯が戦車本体からはみ出さないように十分な大きさにすることでした。
11mmピッチは、実際にはトラックリンクの設計によって定義されました。線路リンクの目標は、できるだけコンパクトにして、3D プリンターで作成できる十分な強度を備えながら、追加のパーツまたはピンを 1 つ追加するだけで次のリンクに接続できるようにすることでした。
それに加えて、3D プリントの際、パーツにサポート材を一切使用しないようにしたいと考えていましたが、実際にこのデザインでそれを実現することができました。
トラック リンクを相互に接続するために、直径 2 mm のピンを使用する予定だったので、トラック リンクが自由に回転できるように、片側の寸法を 2.1 mm に設定してしっかりとフィットさせ、もう一方の側を 2.4 mm の緩めにフィットさせました。
スプロケットの歯は、外側の円筒形状でトラックリンクと噛み合います。トラック リンク シリンダーの半径は 4.4 mm、スプロケットの半径は 4.9 mm で、適切に動作するように緩くフィットします。
すべてが接続される本体は、2 つのギアボックスに適合するのに十分な大きさでなければならず、もちろん電子機器とバッテリー用のスペースも必要でした。これらすべての結果、タンク全体の寸法は 547x397mm になりました。これはかなり大きく、通常の 3D プリンターのベッドよりも大きいため、300mm ベッドの 3D プリンターで印刷できるように、大きなパーツを 2 つのセクションに分割しました。 220mm の小型 3D プリンタで印刷する場合は、モデルを 4 つのセクションに分割する必要があることに注意してください。そのバージョンも 3D ファイルで提供します。
タンクを組み立てるには、さまざまな M3 および M4 のボルトとナット、いくつかのネジ付きインサートとベアリングが必要です。このプロジェクトに必要なすべてのコンポーネントの完全なリストは以下にあります。もちろん、3D プリントに必要な 3D モデルと STL ファイルも見つけることができます。
3D モデルおよび STL ダウンロード ファイル
Onshape を使用すると、この RC 戦車の 3D モデルをウェブブラウザで直接表示できます。
この RC 戦車/ロボット プラットフォームの 3D モデルと、3D プリント用の STL ファイルを Cults3D から入手できます。
3D プリント
この戦車のほとんどのパーツの印刷には、Creality Ender-3 V3 Plus 3D プリンターを使用しました。
3D プリントの場合、水平方向の拡張機能を使用することが重要です。私が使用した新しい Creality Print スライサーでは、X-Y 輪郭補正と呼ばれています。これらの設定をデフォルトのままにすると、通常、プリントの外形寸法と穴が元のモデルより小さくなり、組み立てに問題が生じる可能性があります。
Creality Print スライサーでは、X-Y 輪郭補正に –0.07 の値を使用し、X-Y 穴補正機能にプラス 0.07 の値を使用しました。もちろん、テスト プリントをいくつか行って、どの値が 3D プリンタで最良の結果をもたらすかを確認する必要があります。
トラック リンクの 3D プリントでは、ビルド プレートの接着としてラフトを使用しました。これは、ベースのベッド プレートとの接触面が少し小さく、プリンターのベッドの接着があまり良くない場合はうまく接着しない可能性があるためです。
Creality Ender-3 V3 Plus のビルド プレートは 300x300mm なので、戦車本体を 2 つの部分に分けてプリントできます。 2 つのセクションに分かれていても、パーツは依然としてかなり大きく、3D プリンターの限界まで押し上げられます。しかし、Creality Ender-3 V3 Plus はなんとかそれを処理し、これらの大きなパーツを素晴らしい仕事で印刷しました。
大容量かつ高速な 3D プリンターを探している人には、この 3D プリンターをお勧めします。これは最大 600mm/s の速度に達することができる CoreXZ 3D プリンターで、頑丈なフレームにより非常に優れた印刷品質を提供します。この 3D プリンターを提供してくれた Creality に感謝します。
Creality Ender-3 V3 Plus – USA ストアをチェックしてください:https://shrsl.com/4rtkk; EU ストア:http://shrsl.com/4rtkm;アマゾン:https://amzn.to/3VjEoRH
RC タンクの組み立て
ここに 3D プリントされたすべての部品があるので、戦車の組み立てを開始できます。正直に言うと、3D プリントはたくさんあります。すべてを印刷するには数日かかります。時間だけでなく、フィラメントのスプールも数本必要です。
トラック リンクだけでも、合計 214 トラック リンクがあるため、約 500 g と 3D プリントに 30 時間かかります。水槽本体に必要なフィラメントは約1kg、ここのように2つに分けた場合は500g、1つあたり約12~18時間程度かかります。また、パーツの多くはサポート付きで 3D プリントする必要があるため、クリーニングにある程度の時間を費やす必要があります。
部品表
この RC 戦車プロジェクトを組み立てるのに必要なコンポーネントのリストは次のとおりです。電子部品のリストは、この記事の回路図セクションの下にあります。
M3x10mm – 10
M3x16mm – 20
M3x20mm – 10
M3x25mm – 10
M3x30mm – 10
M3x16mm 皿穴 – 20
M4x16mm – 10
M4x35mm – 20
M4x40mm – 20
M5x40mm – 2 M3 ロックナット – 50
M4 ロックナット – 40
M5 ナット – 6
開示:これらはアフィリエイト リンクです。 Amazon アソシエイトとして、 私は対象商品を購入することで収入を得ています。
電子機器 – RC タンク回路図
RC タンクの電子機器を見て、それがどのように機能するかを説明しましょう。この RC タンクの頭脳は、ATmega2560 マイクロコントローラー ベースのボードです。
このプロジェクトに必要なコンポーネントは、以下のリンクから入手できます。
– 1k x1
– 2k x1
– 240 x1アマゾン | AliExpress コンデンサ
– 0.1μF×1
– 1μF×1
– 400μF×1
アマゾン | AliExpress
開示:これらはアフィリエイト リンクです。 Amazon アソシエイトとして、 私は対象商品を購入することで収入を得ています。
カスタム PCB 設計
電子部品を整理しておくために、RC タンク用のカスタム PCB を設計しました。この PCB は、その上に直接取り付けられる ATmega2560 マイクロコントローラーベースのボードと互換性があります。
PCBWay に PCB を注文しました。ここでは、ガーバー ファイルをアップロードし、PCB のプロパティを選択して、手頃な価格で注文するだけです。
PCB の色を青に選択したことを除いて、デフォルトのプロパティは何も変更しませんでした。 PCBWay プロジェクト共有コミュニティからガーバーを見つけてダウンロードでき、そこから PCB を直接注文することもできます。
RC タンクの組み立てを完了する
このセクションでは、すべてを接続してこの RC 戦車を完成させる方法を説明します。
このセクションはまだ作成中です。
RC タンクのプログラミング – Arduino コード
このセクションでは、RC タンクの背後にある Arduino コードがどのように機能するかを説明します。ここでコードをダウンロードできます:
コードの概要
そこで、IBusBM ライブラリを使用して、RC トランスミッターから受信データを読み取ります。
// Reading the data comming from the RC Transmitter
IBus.loop();
ch0 = IBus.readChannel(0); // ch0 - left and right;
ch1 = IBus.readChannel(1); // ch1 - forward and backward;
ch6 = IBus.readChannel(6); // ch6 - Gear shifter
ch7 = IBus.readChannel(7); // ch7 - Police light strobe effect
ch8 = IBus.readChannel(8); // ch8 - All white LEDs
ch9 = IBus.readChannel(9); // ch9 - Left and Right white LEDsCode language: JavaScript (javascript) 右のジョイスティック、チャンネル 0 と 1 はタンクの動きの制御に使用され、左側のロッカー スイッチ、つまりチャンネル 6 はギアをシフトするためのサーボの制御に使用され、他の 3 つのロッカー スイッチは LED の制御に使用されます。
受信データは、DC モーターの PWM 制御に適した 0 ~ 255 の値に変換されます。
// convert the incoming date into suitable PWM value
steeringValue = map(ch0, 1000, 2000, -205, 205); // 0 to 205 range because then I add +50 in order to avoid low PWM values as to motors won't start if so
motorSpeed = map(ch1, 1000, 2000, -205, 205);
motorSpeed = abs(motorSpeed);
leftMotorSpeed = 50 + motorSpeed + steeringValue; // 50 + (0-205) + (0 - 205 ) = 50 - 255 so this range from 50 to 255 is used as PWM value
rightMotorSpeed = 50 + motorSpeed - steeringValue;
leftMotorSpeed = constrain(leftMotorSpeed, 0, 255); // constrain the PWM value from 0 to 255
rightMotorSpeed = constrain(rightMotorSpeed, 0, 255);
// if PWM is lower than 52, set PWM value to 0
if (leftMotorSpeed < 52) {
leftMotorSpeed = 0;
}
if (rightMotorSpeed < 52) {
rightMotorSpeed = 0;
}
Code language: JavaScript (javascript) analogWrite() 関数を適切に使用して、PWM 値をドライバーとモーターに送信します。
// if right joystick goes up > move forward
if (ch1 > 1510 && ch1 < 2000) {
digitalWrite(M1_RPWM, 0);
analogWrite(M1_LPWM, leftMotorSpeed);
digitalWrite(M2_RPWM, 0);
analogWrite(M2_LPWM, rightMotorSpeed);
}
// if right joystick goes down > move backward
if (ch1 > 1000 && ch1 < 1490) {
analogWrite(M1_RPWM, leftMotorSpeed);
digitalWrite(M1_LPWM, 0);
analogWrite(M2_RPWM, rightMotorSpeed);
digitalWrite(M2_LPWM, 0);
}
// if right joystick is in the middle, don't move
if (ch1 > 1490 && ch1 < 1510) {
if (leftMotorSpeed < 50 && rightMotorSpeed < 50) {
digitalWrite(M1_LPWM, 0);
digitalWrite(M1_RPWM, 0);
digitalWrite(M2_LPWM, 0);
digitalWrite(M2_RPWM, 0);
}
// if right joystick move just left or right, without going up or down, move the tank left or right (in place)
else if (ch0 < 1490 || ch0 > 1510) {
analogWrite(M1_RPWM, rightMotorSpeed);
analogWrite(M1_LPWM, leftMotorSpeed);
analogWrite(M2_RPWM, leftMotorSpeed);
analogWrite(M2_LPWM, rightMotorSpeed);
}
}Code language: JavaScript (javascript) サーボ モーターとギアのシフトについては、使用しているサーボに応じて値を調整する必要があります。
//======= Gear shift ====
if (ch6 == 2000) {
myservo.write(140);
}
if (ch6 == 1000) {
myservo.write(40);
}Code language: JavaScript (javascript) ライト制御に関しては、どのロッカーが切り替えられているかを確認し、それに応じて必要に応じて各 LED を個別に点灯するように指示します。
//===== LIGHTS Control ===
// Front and back lights LEDs control
if (ch9 == 2000) {
frontLeds[0] = CRGB (255, 255, 255);
frontLeds[1] = CRGB (255, 255, 255);
frontLeds[2] = CRGB (255, 255, 255);
frontLeds[3] = CRGB (255, 255, 255);
frontLeds[4] = CRGB (255, 255, 255);
frontLeds[5] = CRGB (0, 0, 0);
frontLeds[6] = CRGB (0, 0, 0);
frontLeds[7] = CRGB (0, 0, 0);
frontLeds[8] = CRGB (0, 0, 0);
frontLeds[9] = CRGB (0, 0, 0);
frontLeds[10] = CRGB (0, 0, 0);
frontLeds[11] = CRGB (255, 255, 255);
frontLeds[12] = CRGB (255, 255, 255);
frontLeds[13] = CRGB (255, 255, 255);
frontLeds[14] = CRGB (255, 255, 255);
frontLeds[15] = CRGB (255, 255, 255);
backLeftLeds[0] = CRGB ( 255, 0, 0);
backLeftLeds[1] = CRGB ( 255, 0, 0);
backLeftLeds[2] = CRGB ( 255, 0, 0);
backRightLeds[0] = CRGB ( 255, 0, 0);
backRightLeds[1] = CRGB ( 255, 0, 0);
backRightLeds[2] = CRGB ( 255, 0, 0);
}
if (ch9 != ch9State) {
if (ch9 == 1000) {
FastLED.clear();
}
ch9State = ch9;
FastLED.show();
}
// Front and back lights LEDs control
if (ch8 == 1500) {
frontLeds[0] = CRGB (255, 255, 255);
frontLeds[1] = CRGB (255, 255, 255);
frontLeds[2] = CRGB (255, 255, 255);
frontLeds[3] = CRGB (255, 255, 255);
frontLeds[4] = CRGB (255, 255, 255);
frontLeds[5] = CRGB (255, 255, 255);
frontLeds[6] = CRGB (255, 255, 255);
frontLeds[7] = CRGB (255, 255, 255);
frontLeds[8] = CRGB (255, 255, 255);
frontLeds[9] = CRGB (255, 255, 255);
frontLeds[10] = CRGB (255, 255, 255);
frontLeds[11] = CRGB (255, 255, 255);
frontLeds[12] = CRGB (255, 255, 255);
frontLeds[13] = CRGB (255, 255, 255);
frontLeds[14] = CRGB (255, 255, 255);
frontLeds[15] = CRGB (255, 255, 255);
backLeftLeds[0] = CRGB ( 255, 0, 0);
backLeftLeds[1] = CRGB ( 255, 0, 0);
backLeftLeds[2] = CRGB ( 255, 0, 0);
backRightLeds[0] = CRGB ( 255, 0, 0);
backRightLeds[1] = CRGB ( 255, 0, 0);
backRightLeds[2] = CRGB ( 255, 0, 0);
}
....and so on...Code language: JavaScript (javascript) ポリス ライトのストロボ エフェクトはコーディングに時間がかかりましたが、非常にクールな仕上がりになりました。
3D プリントされた戦車のテスト
コードをアップロードしたら、ロボット プラットフォームと RC 送信機の電源を入れてテストすることができます。送信機のディスプレイでは、LiPo バッテリーの電圧、受信機と送信機の電圧を確認できます。
ここでは、走行中のギアシフトの仕組みも確認できます。左側のロッカースイッチを使用すると、モーターの動作中にギアを切り替えることができます。実際そうなんですよね。
他の 3 つのロッカー スイッチを使用して、タンクのライトを制御します。 4つの異なるモードがあります。両側に白色の 5 つの LED、第 2 モードではすべて白色 LED が点灯、第 3 モードではすべて白色 LED が点滅、そしてもちろん、最もクールなモードである警察ライトのストロボ効果があります。戦車はこれらのライト モードのいずれかをオンにしても移動できます。
ただし、ここで簡単にメモします。 LED は LM350 電圧レギュレータからの 5V を介して電力を供給されるため、特に全白色 LED モードが使用されている場合はかなり熱くなる可能性があります。各 LED は白色の場合約 50~60mA の電流を消費します。つまり、ほぼ約 1A の電流になります。
LM350 は最大 3A の電流を処理できますが、そのためには適切な大規模な冷却が必要です。カスタム PCB 上の間違った場所に配置したため、適切なヒートシンクを追加できませんでした。ただし、ステッパー ドライバーから小さなヒートシンクをいくつか追加してみました。
これらは少しは役に立ちますが、それでもすべての白色 LED が長時間点灯すると、電圧レギュレータが過熱してしまいます。しかし、他のすべてのモードでは問題ないので、そのままにしておきました。この問題を解決したい場合は、定格電流 8A の別の降圧コンバータを追加できます。この降圧コンバータは 12V 出力端子から電力を供給でき、設定した 5 または 6V 出力は PCB の 6V 端子に接続でき、LED への電力供給に 6V レールを使用できます。
それでも、このビデオを楽しんでいただき、何か新しいことを学んでいただければ幸いです。この RC 戦車の組み立てと運転を楽しんでください。先ほども述べたように、今後のビデオでこの戦車にいくつかのアップグレードを行う予定です。その上にロボットアームを追加したり、除雪機などを作ることもできます。それでは、楽しみにしていてください。
製造プロセス