工業製造
産業用モノのインターネット | 工業材料 | 機器のメンテナンスと修理 | 産業プログラミング |
home  MfgRobots >> 工業製造 >  >> Manufacturing Technology >> 製造プロセス

DIY火星忍耐ローバーレプリカ–Arduinoベースのプロジェクト

このチュートリアルでは、火星のパーサヴィアランスローバーのレプリカを作成した方法を紹介します。もちろん、現在火星を探索している本物のローバーに触発されて、このテクノロジーを愛するすべての人、学生、メーカー、メカトロニクス、ロボット工学の愛好家などがこのビデオの指示に簡単に従うことができるようにこのローバーを設計しました。独自の火星探査車を構築します。

次のビデオを見るか、以下のチュートリアルを読むことができます。

概要

このローバーの主な機能を見てみましょう。ロッカーボギーサスペンションを採用しているため、ローバーは起伏のある地形をスムーズに走行し、6つの車輪すべてを常に地面に接触させたまま、車輪の直径の最大2倍のサイズの岩などの障害物を登ることができます。各ホイールには、ローバーを前後に駆動する独立したDCモーターがあります。

4つのコーナーホイールには、個別のステアリングサーボモーターがあります。ローバーを効率的に操縦し、カーブを走行するときにタイヤが滑らないようにするために、アッカーマンステアリングジオメトリを実装しています。このジオメトリを使用すると、回転半径に応じて各ホイールの速度と角度を計算できます。

これは、回転するときに、内側のステアリングホイールが外側のホイールに比べて大きな角度になることを意味します。同時に、内輪の速度は外輪に比べて遅くなります。

ローバーを制御するために、私はローバーにコマンドを送信する安価な商用RC送信機を使用しています。ローバーには、コマンドを受信して​​Arduinoボードに送信する適切なRCレシーバーがあります。はい、この火星探査車の頭脳は実際にはArduino MEGAボードであり、すべてを簡単に接続するために、ArduinoMEGAボードの上に簡単に取り付けることができるカスタムPCBを作成しました。

ローバーは、カメラユニットに配置されたFPVカメラも備えています。ステッピングモーターとサーボモーターを使って制御し、スマートフォンでリアルタイム動画を受信して​​います。

ここで注意したいのは、パーツの多くは実際には機能していないか、実際のローバーの外観と一致するように存在しているということです。また、ロボットアームがありませんが、今後の動画でこのローバーにアームを作成して機能を追加する予定です。

それでも、ローバーの設計、電子部品の接続、Arduinoボードのプログラミングから始めて、それを構築するプロセスを説明しましょう。

DIY火星探査車3Dモデル

この火星探査車は、実際にはこの動画のスポンサーである3DEXPERIENCESolidworksを使用して設計しました。

3DEXPERIECE Solidworksは、3DEXPERIECEプラットフォームを介して取得するクラウド機能を備えたSolidworksのバージョンです。ここではすべてがクラウドを介して機能するため、あなたやチームの誰もがいつでも、世界中のどこからでもデータやモデルにアクセスできます。 3DEXPERIECEプラットフォームには、多くの便利な生産性およびデータ管理アプリも含まれています。

たとえば、プロジェクト計画アプリは、タスクを整理し、期限を設定し、進捗状況を追跡するための優れた方法です。 3Dマークアップアプリを使用すると、ノートブック、タブレット、さらにはスマートフォンなど、あらゆるデバイスからモデルを表示、探索、メモを取ることができます。

ブラウザ内で実行される、SOLIDWORKSxDesignと呼ばれる別のクラウドベースの3Dモデラーもあります。 Solidworksと組み合わせて使用​​することも、単独で使用することもでき、いつでも、どこでも、どのデバイスでもモデリングに最適です。

それでも、ここにいる多くの人にとっておそらく最もエキサイティングなニュースは、今年の後半から、年間わずか99ドルで入手できる3DEXPERIECESolidworksのメーカーバージョンが登場することです。このような教育コンテンツを後援してくれたSolidworksに大いに感謝します。

SOLIDWORKSと3DEXPERIENCEプラットフォームが機能するかどうかを知りたい場合は、以下のリンクを確認してください。

私の特別なリンクで3DEXPERIENCEを無料でお試しください:www.solidworks.com/HTMTryNow

3DEXPERIENCE SOLIDWORKSの詳細:www.solidworks.com/HTMLearnMore

3DEXPERIENCE SOLIDWORKS for Makers:www.solidworks.com/htm

では、モデルに戻って、ローバーをどのように設計したかを説明しましょう。私の目標は、このローバーを実際の火星の忍耐力のあるローバーにできるだけ近づけることでした。 NASAの公式ウェブサイトにMarsPerseveranceRoverの3Dモデルがあるので、それをダウンロードしてBlenderで開きました。

ローバーの正面図、上面図、側面図を3枚撮り、Solidworksにインポートしました。ホイールのサイズを直径130mmにしたかったので、この寸法に合わせて写真を拡大縮小しました。

次に、ここから、幅、長さ、高さ、車輪間の距離、ロッカーボギーサスペンションの寸法など、すべての主要な寸法を取得しました。

これらの寸法と、使用する予定のDCモーターとサーボに応じて、外観をできるだけオリジナルに近づけながら、3D印刷と組み立てが簡単にできるように、ローバーパーツを設計しました。

ロッカーボギーサスペンションには20mmの丸いアルミニウムプロファイルを使用していますが、ベースフレームには20mmのTスロットアルミニウムプロファイルを使用しています。

この3Dモデルを見つけてダウンロードしたり、Thangsのブラウザで調べたりすることができます。

そして、3Dプリントに必要なSTLファイルは次のとおりです。

MarsRoverレプリカパーツの3Dプリント

3D印刷には、古いCrealityCR-10と新しいCR-10V33Dプリンターを使用しました。柔軟な素材でホイールを印刷したい場合は、CR-10 V3と同じように、直接押出機を備えたプリンターが必ず必要になります。

これらの3Dプリンターはどちらも、比較的手頃な価格でありながら、優れた印刷品質を提供します。興味のある方は、こちらへのリンクをご覧ください。

  • CrealityCR-10……Amazon/Banggood
  • CrealityCR-10V3……Amazon/Banggood /AliExpress

参照:初心者とメーカーに最適な低価格のオシロスコープ– 2021アップデート

パーツを3D印刷するときは、スライスソフトウェアで水平方向の拡張機能を使用することが重要です。 –0.1mmの値を使用しました。この機能は、印刷時のフィラメントの膨張を補正します。

たとえば、パーツに直径20mmの穴がある場合、実際の3Dプリントパーツの穴は約19.8mmになり、組み立てることができません。

それでも、ここにすべての3Dプリントパーツがあります。

正直なところ、印刷の量は少しおかしいですが、ローバーのユニークな外観を得る唯一の方法です。ただし、このローバーの機能部分のみを印刷することを選択した場合は、印刷時間を半分に短縮できます。

DIY火星探査車の部品リスト

このDIYマーズローバーを組み立てるために必要なコンポーネントのリストは次のとおりです。電子部品のリストは、以下の記事の回路図セクションにあります。

  • Tスロットアルミニウムプロファイル20x20mm………..アマゾン /バンググッド /AliExpress
  • Tスロットプロファイルコーナーブラケット……………..…Amazon /バンググッド /AliExpress
  • アルミ丸管20mm………………。 アマゾン / AliExpress
  • ロッドエンドジョイント8mm…………………………………..アマゾン /バンググッド / AliExpress
  • 8xベアリング608RS–8x22x7mm……..……Amazon /バンググッド /AliExpress
  • 8xベアリング626RS–6x19x6mm…………。…Amazon /バンググッド /AliExpress
  • 5xベアリング625RS–5x16x5mm……………Amazon /バンググッド /AliExpress
  • M3ボルトさまざまな長さ…………………………アマゾン /バンググッド /AliExpress
  • 4xサーボホーン…………………………………………。 アマゾン /バンググッド / AliExpress

また、さまざまな長さのM4、M5、およびM6ボルトが必要です。必要なボルトとナットの完全なリストを以下で確認できます。

ボルトとナットは地元の金物店から入手することもできます。

ローバーの組み立て

これで、ローバーの組み立てを開始できます。まず、アルミニウムプロファイルを準備する必要があります。金属製のハンドソーを使用して、サイズに合わせてカットしました。

次の寸法のベース用に10個のTスロットプロファイルとロッカーボギーサスペンション用に8個のラウンドプロファイルが必要です。

Tスロットプロファイルフレームを組み立てるために、適切なTスロットコーナーブラケットといくつかのボルトとナットを使用しています。上部フレームと下部フレームの準備ができたら、側面にロッカージョイントの3D印刷パーツを挿入し、前面と背面にいくつかの3D印刷ブラケットを挿入することで、ベースを完成させることができます。それらを所定の位置に固定するには、M3ボルトとTスロットナットが必要です。

ロッカージョイントにはM5ボルトとナットを使用しました。フロントプロファイルからロッカージョイントまでの距離は134mmである必要があります。

ロッカーボギーサスペンションの組み立て

次に、ロッカーボギーサスペンションのメインベアリングを所定の位置に挿入します。次に、M8ボルトを使用してベースに取り付けられるロッカージョイントシャフトがあります。

シャフトには、ベースに固定するために使用されるM8ナットを挿入できるスロットがあります。シャフトの穴は7.5mmなので、ボルトとシャフトをしっかりと接続します。このようにして、ボルト自体がローバーの重量の一部を支えるため、実際に3Dプリントシャフトを補強します。ローバーの全重量がロッカーシャフトで支えられているため、これはアセンブリ全体の中で最もストレスのかかる部分です。パーツの印刷方法は、パーツの強度にとって非常に重要です。

最初はこのシャフトをより簡単な方法で印刷しました。サポート材は必要ありませんが、印刷に失敗しました。

このように、主応力はそれほど強くない層に作用しますが、壁の輪郭に応力が作用するパーツを横向きに印刷すると、パーツははるかに強くなり、破損しなくなります。

それでも、今はロッカーボギーサスペンションをホイールジョイントとモーターマウントと一緒に組み立て、後でこれらのサブアセンブリをロッカーシャフトに取り付けます。

20mmの丸いプロファイルが入るパーツの穴は、ぴったりとフィットするように寸法が決められているため、場合によっては、ラスプまたはサンディングペーパーを使用してフィットさせる必要があります。

これらの部品を適切に組み立てるために、正確な位置に丸いプロファイルに穴を開ける必要があります。この目的のために、最初にプロファイルに直線をマークします。

次に、マーキングラインがパーツの穴を通過するようにプロファイルを3Dプリントパーツに挿入できます。次に、そのパーツの両側にプロファイルをドリルする必要がある場所にマークを付けることができます。

プロファイルの反対側で、同じ手順を繰り返す必要があります。

2.5mmのドリルを使用して穴を開け、次にM3ボルトを使用して、部品を締めるために使用するプロファイルにねじを作成しました。

アルミプロファイルはボルトよりも柔らかいので、ボルト自体で簡単に糸を作ることができます。穴を開けるためのこの方法に従うことは非常に重要であり、最終的にすべての部品が相互に相対的な位置に配置されます。

ボギージョイントには、2つのベアリングとM8ボルトも使用します。

ロッカーボギーサスペンションの配置が完了したら、ステアリングホイールジョイントの組み立てを続けることができます。ハンドルジョイント部分は、ボルトで固定された2つの部分で構成されています。

実際のジョイントやサーボマウント部とDCモーターマウント部の接続には、2つのベアリングとM6ボルトを使用します。

ボルトの上面または頭にサーボホーンを取り付ける必要があります。これは、この3DプリントカプラーといくつかのM3ボルトを使用して行います。

カプラーには六角形のスロットがあり、そこからサーボの動きがボルトに伝達されます。下側では、ジョイントの他の部分をねじ込むことができます。

この接続はM6ナットで固定します。これでステアリングホイールのジョイントは完成ですが、後で実際に下部に別のM6ナットを追加して、もう1つのナットに締める必要があることに気付きます。

これを行う必要があるのは、サーボからの動きがナット自体を使用してDCモーターマウント部分に伝達され、別のナットで締めないと、ジョイント全体が緩むためです。

同じ手順がもう一方のコーナージョイントにも当てはまります。このアセンブリを平らな面に置き、3つのモーターマウントすべてを平らにするか、すべてを互いに平行にすると、すべてが正しく接続されたことがわかります。

もちろん、反対側の組み立てにも同じ方法を使用しています。ただし、ここで、一部のパーツは同じように見えますが、同じパーツではなく、実際にはミラーリングされていることに注意してください。

次に、これらのサブアセンブリをベースフレームまたはシャーシのロッカージョイントシャフトに挿入する必要があります。ただし、その前に、シャフトに真ちゅう製のねじ山インサートを挿入する必要があります。

はんだごてを使用すると、簡単に所定の位置に挿入できるため、サスペンションサブアセンブリを固定するための信頼性の高いネジ穴が得られます。そのためには4本のM4ボルトが必要です。

両側に取り付けると、シャーシが自由に落下または回転することがわかります。ですから、ロッカーボギーサスペンションが適切に機能するために、実際には何かが欠けています。それが違いです。

ディファレンシャルでは、2つのロッカーが相互に接続され、ローバーシャ​​ーシが接続されます。この構成では、一方の側が回転すると、もう一方の側が反対方向に回転するため、ホイールの接触がほぼ等しくなります。

シャーシには、両方のロッカーの平均ピッチ角があります。

ディファレンシャルの組み立てに必要なすべての部品は次のとおりです。

デフバーはかなり長いので、3枚をボルトで固定して、小型の3Dプリンターでも3Dプリントできるようにしました。ディファレンシャルバーは、2つのベアリングとM8ボルトで作られたジョイントでシャーシの中央で回転します。

ディファレンシャルとロッカーを接続するには、ロッドエンドボールジョイントが必要です。 M8ロッドエンドボールジョイントを使用していますが、長さ50mmのM8ねじ山も必要です。ねじ山付きロッドは、片側にM8ナットが付いた3D印刷部品に入り、反対側ではロッドエンドボールジョイントに入ります。

ここでは、3Dプリントされたディファレンシャルリンクとロッドエンドの間の距離を調整する必要があります。これは、シャーシを水平に保つために約20mmである必要があります。ディファレンシャルリンクとロッカーレバーの接続には、2つのベアリングとM5ボルトを使用しています。

反対側でもこの手順を繰り返し、これでロッカーボギーサスペンションが完成します。一方が上がると、もう一方が下がり、その逆も同様です。

これにより、すべての車輪が常に地面に接触するようになります。シャーシの動きが脚の半分になるか、シャーシの平均ピッチ角が両方のロッカーになります。

参照:Arduinoロボットアームとメカナムホイールプラットフォームの自動操作

火星探査車用のモーターの組み立て

では、次にDCモーターの取り付けに進みましょう。私が使用しているモーターは直径37mm、12Vで動作し、出力50RPMのギアボックスを備えています。

後で私は50RPMがこのローバーには少し多すぎることに気づきましたが、20または10RPMバージョンを選択することをお勧めします。

ホイールをモーターに取り付けるために、これらのシャフトカプラーを作成しました。

ここでは、カプラーをシャフトに固定するために使用されるM3ネジ山インサートと、ホイールをカプラーに固定するためのM4ナ​​ットを取り付ける必要があります。ナットを挿入するときは、接着剤を追加してしっかりと固定するか、代わりにねじ山を使用する必要があります。

次に、ホイールを取り付けます。ホイールは2つの部分で構成されています。 1つは柔軟なフィラメントで印刷したホイールですが、そうである必要はありません。もう1つは、通常のPLAで印刷されたリムです。

リムにはホイールにフィットするスロットがあり、モーターからの動力がホイールに伝達されます。スロットに接着剤を数滴追加して、スロットをより安全にすることができます。最後に、4本のM4ボルトを使用して、ホイールをシャフトカプラーまたはDCモーターに取り付けることができます。

では、次にステアリングサーボモーターを取り付けます。トルク25kgcm、動作電圧4.8〜6.8Vの高トルクデジタルサーボを使用しています。サーボを所定の位置に固定するために、サーボマウントの3Dプリント部分のM3ネジ山インサートに挿入される4本のM3ボルトを使用します。

カメラユニットの組み立て

次に、カメラユニットを組み立てます。カメラのパンにはNEMA17ステッピングモーターを使用することにしましたが、他のタイプのモーターを使用してこれを変更できます。

モーターの動きは、3Dプリントシャフトカプラーでモーターに接続されたM5ネジ付きロッドを使用して上部に伝達され、反対側では、ベアリングと2つのナットを使用してネジ付きロッドを可動要素に固定します。カメラを傾けるために、ステアリングホイールに使用しているものと同じサーボを使用しています。

ここにあるカメラユニットの部品の多くは機能しておらず、実際のローバーの外観に合わせるためだけに存在しています。これらの部品を組み立てるには、さまざまなM3ボルトといくつかのねじ山付きインサートが必要です。

ただし、ここでは実際のFPVカメラもインストールします。カメラユニットの筐体に取り付けるためのカスタムホルダーを作りました。カメラは、スナップフィットカバーで閉じる上部から簡単にアクセスできます。これがカメラユニットの最終的な外観です。

このカメラサブアセンブリ全体をシャーシの右前隅に取り付けました。

この時点で、実際には機能していないが実際のローバーの外観に一致するだけの残りの3D印刷部品の組み立てを続行するか、電子部品を接続してローバーを機能させることができます。最初にすべての3D印刷部品を組み立ててから、電子機器を組み立てることにしました。

残りのローバーを組み立てる

さっきも言ったように、以下のパーツはローバーの見た目を合わせるためのものなので、組み立て方については詳しく説明しません。 3Dモデルからすべてを接続する必要があることがわかります。

私は実際にこれらの部品の設計に多大な労力を費やし、すべてが見栄えがするように細部に注意を払っています。

これらの部品も非常に大きく、3Dプリントするのに時間がかかります。

これが私がそれらをどのようにインストールしたかを簡単に示しています。

ローバーの中央にある最後の2つのトップパネルは、ローバーにスナップフィットするように設計されています。

これらは実際にはフードとして機能し、電子部品がこの領域に配置されるため、簡単に取り外すことができます。

電子部品ホルダーは、2つの3D印刷された部品がボルトで固定されており、シャーシの下部フレームに取り付けられています。

電子機器

了解しました。これで、電子機器を続行できます。まず、各モーターに必要なワイヤーの量を測定する必要があります。適切なモーターコネクタがなかったため、ワイヤーをモーターに直接はんだ付けしました。コネクタを分離するために熱収縮チューブを使用しました。

いくつかの結束バンドの助けを借りて、私たちはワイヤーを導き、きれいに保つことができます。

サーボモーターの場合、サーボ延長ワイヤーを使用して、ワイヤーを電子機器コンパートメントまで延長できます。電子機器のマウント部分には、ローバーの真ん中を取得するためにワイヤーを通すことができるスロットがあります。

全体的に、配線は目に見える部分の後ろを通る配線でかなりきれいになっていると思います。

参照:スカラロボット|独自のArduinoベースのロボットを構築する方法

DIY火星探査車の回路図

ここで、このローバーの回路図を見て、すべてを接続する必要がある方法を見てみましょう。

このプロジェクトに必要なコンポーネントは、以下のリンクから入手できます。

  • DCモーター12V37mm……。………………。…
  • デジタルサーボ25kg……………………………。
  • DRV8871DCモータードライバー………………。
  • ステッピングモーター–NEMA17…………………
  • A4988ステッピングドライバー………………..…..…
  • ArduinoMEGA……………………。…..………
  • DC-DCバックコンバーター……………………。
  • 3SLiPoバッテリー………………………..………..
  • XT60コネクタ………………………………
  • FLYSKYRC送信機…………………..
  • FPVカメラとビデオ送信機…。 アマゾン /バンググッド / AliExpress
  • あなたが選んだFPVレシーバー

6つのDCモーターを駆動するために、PWM制御と最大3.6Aのピーク電流をサポートする6つのDRV8871DCモータードライバーを使用しています。 DCモーターの動作電圧は12Vで、定格電流は1A、ストール電流は3Aです。ローバーに電力を供給するために、約12Vを供給する3SLiPoバッテリーを使用しています。

一方、サーボには4.8〜6.8Vが必要であるため、12Vを6Vに変換するDC-DCコンバータが必要です。使用しているサーボは非常に強力で、ストール電流が約2Aであるため、コンバータは約8Aの電流を処理できる必要があります。カメラユニットのステッピングモーターの駆動には、A4988またはDR8825ステッピングドライバーを使用できます。 2つの抵抗を使用して、バッテリー電圧を監視できる単純な分圧器を作成できます。

RCレシーバーはバックコンバーターからの6ボルトで電力を供給され、FPVカメラとそのビデオトランスミッターはバッテリーからの12Vで電力を供給されます。

カスタムPCB

電子部品を整理しておくために、このDIY火星探査車用のカスタムPCBを設計しました。

このPCBは、Arduino MEGAボードの上に直接接続できるため、実際にはArduinoMEGAシールドとして機能します。モータードライバーに加えて、3.3V電圧レギュレーターとそのモジュールを使用してローバーを制御したい場合に備えて専用のNRF24L01接続、およびDHT22センサー、コンパス、I2C、シリアル通信、12V、5Vの接続を含めました、3.3VおよびGND接続。実際、私はローバーの機能をアップグレードするためにこのPCBを将来的に保証しました。

PCBWayにPCBを注文しました。ここでは、ガーバーファイルをアップロードし、PCBのプロパティを選択して、リーズナブルな価格で注文するだけです。

Arduinoボードと一致させるために青に選択したPCBの色を除いて、デフォルトのプロパティは変更しませんでした。以下のガーバーファイルをダウンロードするか、PCBWayプロジェクト共有コミュニティからPCBを直接注文することもできます。

このDIYマーズローバーPCBのガーバーファイルをダウンロードできます:

それにもかかわらず、数日後にPCBが到着しました。 PCBの品質は素晴らしく、すべてがデザインとまったく同じです。

すべてにラベルが付けられているため、PCBの組み立ては非常に簡単です。 Arduino MEGA接続用にPCBの下部にあるピンヘッダーをはんだ付けすることから始め、次に上面に進みました。私は実際にすべての接続にピンヘッダーを使用しました。これは、何かが正しく機能しない場合に変更を加える柔軟性を提供するためです。とにかく今は使用しないので、3.3V電圧レギュレータといくつかの無料のArduinoピンをはんだ付けしませんでした。

PCBアセンブリが完成したら、2本のボルトを使用してArduinoボードを電子機器マウント部品に固定し、PCBを追加しました。

次に、各モーターをドライバーに接続し、PCBに配置しました。サーボは適切なサーボピンと、1/8のステッピング解像度を選択するために1つのジャンパーを使用したステッパードライバーに接続されます。

無線通信には、FLYSKY RC送信機と受信機を使用しています。これらは、非常に手頃な価格で、うまく機能します。

レシーバーをArduinoに接続するには、VCC、GND、および信号ピンの3本のワイヤーが必要なため、サーボ延長ケーブルを使用できます。受信機は、I-BUSとシリアルポートを介してArduinoと通信します。受信機から送信機にデータを送り返したい場合、この場合はバッテリー電圧を監視するために、受信機のセンサーI-BUSを別のArduinoシリアルポートに接続する必要もあります。

降圧コンバーターは2本のボルトで固定されています。LiPoバッテリーを固定するために、2本の輪ゴムを使用しているので、充電のためにバッテリーを簡単に取り外すことができます。

電源スイッチは、ローバーの右後部のパネルにあります。ローバーが完全に接続されている場合、それらを流れる電流が数アンペアに達する可能性があるため、これらの接続には20ゲージのワイヤーを使用しました。 Make sure you double check your connections with these wires because if you connect something wrong you might fire up things.

Lastly, we can connect the FPV camera to a 12V power supply and connect video signal wire to the video transmitter which also needs to be powered with 12V. With this we are done with the electronics.

We can put back the cover panels in place and we are done with this DIY Mars Rover. Actually, we are almost done, as we need to give life to this machine now, or program the Arduino.

Programming the DIY Mars Rover – Arduino Code

Here you can download the Arduino code for this DIY Mars Rover project:

Code overview

So, using the IBusBM library we read incoming data from the RC Transmitter.

// Reading the data comming from the RC Transmitter
  IBus.loop();
  ch0 = IBus.readChannel(0);
  ch1 = IBus.readChannel(1);
  ch2 = IBus.readChannel(2);
  ch3 = IBus.readChannel(3);
  ch6 = IBus.readChannel(6);Code language: Arduino (arduino)

Then we convert these values into a turning radius to right value, turning radius to left value and rover speed from 0 to 100%.

// Convertign the incoming data
  // Steering right
  if (ch0 > 1515) {
    r = map(ch0, 1515, 2000, 1400, 600); // turining radius from 1400mm to 600mm
  }
  // Steering left
  else if (ch0 < 1485) {
    r = map(ch0, 1485, 1000, 1400, 600); // turining radius from 600mm to 1400mm
  }
  // Rover speed in % from 0 to 100
  s = map(ch2, 1000, 2000, 0, 100); // rover speed from 0% to 100%Code language: Arduino (arduino)

We use the turning radius “r” value for calculating the steering wheels angles as well as the speed of the wheels.

void calculateMotorsSpeed() {
  // if no steering, all wheels speed is the same - straight move
  if (ch0 > 1485 && ch0 < 1515) {
    speed1 = speed2 = speed3 = s;
  }
  // when steering, wheels speed depend on the turning radius value
  else {
    // Outer wheels, furthest wheels from turning point, have max speed
    // Due to the rover geometry, all three outer wheels should rotate almost with the same speed. They differe only 1% so we asume they are the same.
    speed1 = s;
    // Inner front and back wheels are closer to the turing point and have lower speeds compared to the outer speeds
    speed2 = s * sqrt(pow(d3, 2) + pow((r - d1), 2)) / (r + d4);
    // Inner middle wheel is closest to the turning point, has the lowest speed
    speed3 = s * (r - d4) / (r + d4);
  }

  // speed value from 0 to 100% to PWM value from 0 to 255
  speed1PWM = map(round(speed1), 0, 100, 0, 255);
  speed2PWM = map(round(speed2), 0, 100, 0, 255);
  speed3PWM = map(round(speed3), 0, 100, 0, 255);
}

void calculateServoAngle() {
  // Calculate the angle for each servo for the input turning radius "r"
  thetaInnerFront = round((atan((d3 / (r + d1)))) * 180 / PI);
  thetaInnerBack = round((atan((d2 / (r + d1)))) * 180 / PI);
  thetaOuterFront = round((atan((d3 / (r - d1)))) * 180 / PI);
  thetaOuterBack = round((atan((d2 / (r - d1)))) * 180 / PI);
}Code language: Arduino (arduino)

As I mentioned earlier, we are using the Ackerman steering geometry for calculating them. These values are then used for controlling the servos using the ServoEasing library which provides smoother servo movements.

// Servo motors
    servoW1.startEaseTo(97 - thetaOuterFront);
    servoW3.startEaseTo(97 + thetaOuterBack);
    servoW4.startEaseTo(94 - thetaInnerFront);
    servoW6.startEaseTo(96 + thetaInnerBack);Code language: Arduino (arduino)

For controlling the DC motors using the analogWrite() function which actually sends PWM signal to the DC motor drivers.

// Motor Wheel 1 - Left Front
      analogWrite(motorW1_IN1, speed2PWM);   // PWM value
      digitalWrite(motorW1_IN2, LOW); // ForwardCode language: Arduino (arduino)

Overall, the code is not that complicated as the rover itself doesn’t have complicated functions. However, I do plan in future videos to add more functions to this rover, like GPS navigation, various sensors, robotic arm, soil collecting mechanism and so on.

I hope you enjoyed this project and learned something new.以下のコメントセクションで質問をして、Arduinoプロジェクトコレクションを確認してください。


製造プロセス

  1. ローバー
  2. 可聴周波数検出器
  3. Tech-TicTacToe
  4. ArduinoとNokia5110ディスプレイを備えたDIY電圧計
  5. Arduinoカウントダウンタイマー
  6. RCポルシェカー(Arduinoプロジェクト)
  7. Arduinoに基づくスマートエネルギーモニター
  8. RFIDを使ったDIYのアイデア
  9. Arduinoカラー検出
  10. DIYArduino高さ測定機
  11. DIYArduinoベースのパルス誘導金属探知機