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

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

このチュートリアルでは、Arduinoベースのスカラロボットを構築する方法を学びます。ロボットの設計から、ロボットを制御するための独自のグラフィックユーザーインターフェイスの開発まで、ロボットを構築するプロセス全体を紹介します。

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

概要

ロボットには4つの自由度があり、4つのNEMA17ステッピングモーターで駆動されます。さらに、この場合、エンドエフェクタまたはロボットグリッパーを制御するための小さなサーボモーターがあります。このスカラロボットの頭脳は、モーターを制御するためのCNCシールドと4つのA4988ステッピングドライバーとペアになっているArduinoUNOボードです。

処理開発環境を使用して、フォワードキネマティクスコントロールとインバースキネマティクスコントロールの両方を備えたグラフィックユーザーインターフェイスを作成しました。フォワードキネマティクスを使用すると、各ロボットジョイントを手動で移動して、目的の位置を取得できます。左側のスライダーを使用して、各関節の角度を設定できます。エンドエフェクタの最終的な位置であるX、Y、Zの値が計算され、画面の右側に印刷されます。

一方、逆運動学を使用すると、エンドエフェクタの目的の位置を設定でき、プログラムは、ロボットがその目的の位置に到達するように、各関節の角度を自動的に計算します。

私は実際に、同じ画面で両方の方法を同時に使用できるようにプログラムを作成しました。ジョイントの角度とエンドエフェクタのX、Y、Z値が接続され、常に画面に表示されます。

もちろん、ロボットは自動的に動作することもできます。プログラムの「保存」ボタンを使用して、ロボットの各動きまたは位置を保存できます。次に、「実行」ボタンを押すと、ロボットは、最初の動きから最後の動きまで、保存された動きをループで繰り返し実行します。ユーザーインターフェースから移動速度と加速度を調整することもできます。

スカラロボット3Dモデル

まず、3Dモデルを見てみましょう。

このビデオのスポンサーでもある3DEXPERIENCESOLIDWORKSを使用して、このスカラロボットを設計しました。

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

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

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

したがって、このような教育コンテンツを後援してくれたSolidworksに大いに感謝します。 SOLIDWORKSと3DEXPERIENCEプラットフォームが機能するかどうかを知りたい場合は、以下のリンクを確認してください。

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

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

では、モデルに戻って、このデザインを思いついた経緯を説明しましょう。ロボットの私の目標は、ほとんどの部品を3Dプリントすることでした。したがって、ここに表示されるものはすべて、小さな印刷ベッドを備えた3Dプリンターでも3D印刷できます。 GT2プーリーも3Dプリント可能です。パラメトリックデザインを使用して作成したので、必要に応じてサイズを簡単に変更できます。歯の数を変更するだけで、すべての寸法が自動的に更新され、プーリーが適切なサイズになります。

最初のジョイントでは、これらのカスタム設計されたプーリーを使用して2段階で達成される20:1の減速比があります。ここで使用している2つのGT2ベルトは、長さが200mmと300mmの閉ループです。ロボットのジョイントは、2つのスラストベアリングと1つのラジアルベアリングで構成されています。

2番目のジョイントについては、同じ方法で達成された16:1の削減率があり、3番目のジョイントは4:1の削減率であり、1段階の削減だけです。ジョイントは中空なので、モーターやマイクロスイッチからのワイヤーを通過させるために使用できます。ベルトごとに、アイドラープーリーを取り付けて張力をかけることができるスロットがあります。

ロボットグリッパーはMG996Rサーボモーターで駆動され、グリッパーの端を簡単に変更してさまざまなグリップサイズを実現できます。ロボットのZ軸は、8mmの親ねじで駆動され、アームアセンブリ全体が4本の10mmの滑らかなロッドとリニアボールベアリング上をスライドします。ロボットの高さは、滑らかなロッドの長さ(この場合は40cm)に依存します。この構成に合わせるには、親ねじを2cm短くする必要があります。そうでない場合は、スペーサーナットを使用してZモーターを2cm上げることができます。

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

Thangsでアセンブリ3Dモデルをダウンロードします。

3D印刷用のSTLファイル:

3Dロボット部品の印刷

さて、パーツの3Dプリントに進むことができます。 Creality CR-10 3Dプリンターを使用してすべてのパーツを印刷しました。これは、手頃な価格で非常に優れた3Dプリンターです。前述したように、パーツは、Ender3などの小型の3Dプリンターにも適合するように設計されています。

ほとんどの部品には、PLA +素材、青い素材、およびプーリーとグリッパーに通常のPLAを使用しました。すべての部品を60mm/sの印刷速度で印刷するのに約120時間かかりました。ベースは約32時間かかった印刷の最大の部分でした。ただし、印刷速度を上げると、間違いなくパーツをより速く印刷できます。

参照:初心者とメーカーに最適な3Dプリンター[2021アップデート]

これがすべての3Dプリントパーツです。

ここで簡単に説明します。スライシングソフトウェアで-0.1mmの水平方向の拡張を有効にしてすべてを印刷しました。これにより、部品の寸法がより正確になり、ベアリング、ロッド、ボルトなどの他の機械部品との適合性が向上します。

ロボットの組み立て

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

  • 4xスムーズロッドシャフト–10mm400mm………Amazon /バンググッド /AliExpress
  • 1x親ねじ–8mm400mm…………………Amazon /バンググッド /AliExpress
  • 4xリニアベアリング10mm…………………..……。 アマゾン /バンググッド /AliExpress
  • 1xスラストボールベアリング40x60x13mm…..…Amazon /AliExpress
  • 2xスラストボールベアリング35x52x12mm…..…Amazon /AliExpress
  • 5xラジアルボールベアリング8x22x7mm……………。 アマゾン /バンググッド /AliExpress
  • さまざまな長さのM3、M4、M5のボルトとナット

このプロジェクトに必要なボルトのサイズは次のとおりです。

ベースから組み立てを開始します。ここではまず、内径35mm、外径47mmのラジアル玉軸受を挿入します。

次に、内径40mm、外径60mmの最初のスラストベアリングになります。このベアリングはプーリーとベースの間にあります。

ベースの反対側には、ジョイントカプラーと一緒に同じサイズの別のスラストベアリングを使用しています。

次に、55mmの長さの4本のM4ボルトを使用して、プーリーと上部を結合できます。ここではセルフロックナットを使用して適切に締め、ジョイントが頑丈で自由に回転できるようにする必要があります。

次に、ミドルプーリーを取り付ける必要があります。このプーリーは、300mmGT2ベルト付きのジョイントプーリーとペアになっています。このプーリーの取り付けには、ベースの上部と下部に2つの608ボールベアリングを使用しています。次に、45mm M8ボルト、ワッシャー、およびセルフロックナットを使用して、プーリーを所定の位置に固定できます。

次に、このジョイントにステッピングモーターを取り付ける必要があります。ステッパーは200mmベルトのミドルプーリーとペアになります。ベースに固定するには、4本のM3ボルトが必要です。

ボルトを締める前に、ベルトをできるだけ伸ばす必要があります。ここで簡単に説明しますが、実際には、中央のプーリーのM8ボルトを、ベース内に収まるように下部のヘッドに交換しました。

この時点で、ベルトが十分に締まっていることを確認する必要があります。そうでない場合は、いくつかのアイドラープーリーを使用してそれらをよりしっかりと締めることができます。ここでは、35mmM5ボルトといくつかのナットを使用して締め付けプーリーを作成しています。

ベルト両側のスロットに取り付けることができるので、ベルトを好きなだけ締めることができます。結局、両側のベルトを締めてしまいました。これで、最初のジョイントが完成します。

このジョイントのマイクロスイッチの取り付けに移りました。所定の位置に固定する前に、ワイヤーをはんだ付けしました。後でそれを行うには少しきついからです。マイクロスイッチを所定の位置に固定するには、20mmのM3ボルトとナットが必要です。

ジョイントカプラーが通過するので、スイッチを閉じるために、スイッチを固定するために1本のボルトだけを使用することになりました。もう一方の穴には、短いボルトを挿入して下側に接着しました。そうすれば、スイッチは十分に安全であり、適切に機能します。

では、次にZ軸の組み立てを開始できます。まず、ジョイントカプラーの上部に、Z軸の底板部分を固定する必要があります。

その上に、滑らかなロッド用の4つのクランプを固定できます。次に、滑らかなロッドを所定の位置に挿入できます。それらはしっかりとはまり、ジョイントカプラー部分まで完全に下がる必要があります。いくつかのM4ボルトとナットを使用して、クランプでロッドを締めることができます。

この時点で、親ねじのベアリングを挿入する必要があります。このセクションを終了するには、単純なカバーをスライドさせるだけで、すべてが非表示になり、ロボットがすっきりと見えます。

次に、ロボットの最初のアームの組み立てに進みます。アームは、ボルトで固定された2つのパーツで構成されます。最初の部分は、滑らかなロッドをスライドするリニアベアリングを取り付ける必要がある場所です。それらを所定の位置に挿入するのは、かなりきつくフィットするため、少し難しい場合があります。

実際、これはプリンタがパーツをどれだけ正確に印刷できるかに依存します。したがって、パーツを印刷するときに水平展開機能を使用して、プリンターに合わせて調整することをお勧めします。私の場合、2つのベアリングを完全に下げることはできませんでしたが、大したことではありません。

これで、腕の2つの部分をペアにすることができます。そのために、25mmのM5ボルトを4本使用します。

次に、2番目のステッピングモーターを取り付けることができます。ここでは、20歯の3DプリントGT2プーリーを使用します。このプーリーは、前述のパラメトリックデザインを使用して作成しましたが、非常にうまく機能します。ここでも、親ねじナットを所定の位置に固定する必要があります。

次に、2番目のジョイントのベルトとプーリーを取り付けます。ここでは、400mmのベルトと300mmの長さのベルトが必要です。それらを取り付ける手順は、最初のジョイントで説明した手順とほとんど同じです。

ここで2番目と3番目のジョイントには、実際には最初のジョイントに比べて小さいベアリングを使用しています。ラジアルボールベアリングの内径は30mm、外径は42mm、スラストベアリングの内径は35mm、外径は52mmです。

2番目のジョイントカプラーを取り付ける前に、六角形のスロットに6本の20mmM4ボルトを挿入する必要があります。

これらは、2番目のアームをジョイントに取り付けるために使用されます。必要に応じて、ベルトに張力をかけるために、アイドラープーリーで前に説明したのと同じ方法を使用できます。最後に、2番目のマイクロスイッチを所定の位置に固定し、アーム番号1の組み立てが完了しました。

2番目のアームをジョイントカプラーに取り付け続けました。ここでは、前に取り付けたジョイントカプラーのボルトを使用して、2番目のアームの上部を固定します。

この時点で、ジョイントのバックラッシュの量をテストしたいと思いました。確かに、ベルトのせいで多少の反発が予想されましたが、実際には、ジョイントの2つの部分の間ではるかに多くの遊びがありました。問題は、ボルトが入る穴がボルト自体よりもわずかに大きいことであることに気づきました。この問題を解決するには、ボルトと穴をしっかりと合わせる必要があります。

そこで、私の場合は4.5mmのドリルで穴を広げ、M4ボルトの代わりにM5ボルトを使ってジョイントの2つの部分を固定しました。ただし、3Dモデルを更新して、穴が3.5mmになり、M4ボルトを使用してこれら2つのパーツを結合できるようにしました。私も最初の関節に戻って同じことをしました。これで、ベルトから得られる小さなバックラッシュを除いて、関節の遊びはほとんどなくなりました。

さて、これで2番目のアームの組み立てを続行できます。ここではまず、3番目のジョイントにステッピングモーターを取り付ける必要があります。

この場合、アームが少し軽くなるように、小さいステッピングモーターを使用しています。それでも、これはNEMA 17ステッピングモーターですが、長さが24cm短くなっています。

繰り返しになりますが、3番目のジョイントのベルトとプーリーの取り付け手順は同じですが、ここでは400mmベルトを使用した1段階の減速のみを使用しています。次に、このアームの下部を上部に取り付ける前に、モーターとマイクロスイッチを接続し、それらのワイヤーを2番目のジョイントに通す必要があります。

この時点で、エンドエフェクターのワイヤーも挿入する必要があります。私の場合、3本のワイヤーが必要なグリッパーのサーボモーターを駆動するために使用するステッピングモーターから4本のワイヤーケーブルを挿入しました。

次に、下部を固定するためのM4ナ​​ットを上腕のスロットに挿入する必要があります。

それらをマージする直前に、可動部分から離れるように、それらのフックの下にワイヤーを通す必要があります。

2番目のジョイントから出ているワイヤーは実際にはプーリーのナットに引っかかる可能性があるため、ワイヤーをナットから離して保持するための単純なワイヤーホルダーを作成しました。

可動部品との接触を避けるために、ワイヤーをアームの片側を通過するように配置する必要があります。最後に、最初のアームのカバーを挿入できます。

カバーはスナップフィットジョイントでアームに固定されています。これで、ロボットアームの組み立てが完了しました。

次に、このアセンブリ全体をZ軸ロッドに挿入できます。

次に、ロッドの上端を保持するZ軸トッププレートを準備する必要があります。ここでは、最初にZ軸用のマイクロスイッチを取り付け、クランプ用のをプレートに取り付けます。

天板を取り付ける前に、まず下のような簡単なカバーを挿入して、クランプ、ボルト、マイクロスイッチを隠しました。次に、クランプを使用してトッププレートをロッドに挿入して締めます。

次に、親ねじを所定の位置に挿入する必要があります。

持っていたものが少し長かったので、金属製の手のこぎりで38cmにカットしました。次に、4番目のステッピングモーターを所定の位置に取り付けることができます。ここでは、モーターを親ねじに接続するために5mmから8mmのシャフトカプラーを使用する必要があります。

最後に、ワイヤーをカバーに通し、2本のボルトを使用してトッププレートに固定します。

では、次にケーブル管理を行うことができます。ワイヤーをまとめて混乱を解消するためにケーブルスリーブを使用しました。そのためにいくつかの結束バンドも使用しました。

ワイヤーをケーブルスリーブに入れる前に、何も間違って接続しないように、それぞれにマークを付けることをお勧めします。

今残っているのは、ロボットのエンドエフェクターを作ることです。実際に、あらゆる種類のエンドエフェクタを作成してロボットに取り付けることができます。 MG996Rサーボモーターで駆動するシンプルなグリッパーを作ることにしました。グリッパーは、2つの側面がスライドする2本の6mmロッドに基づいています。

2つのスライド側は、サーボホーン、いくつかの3D印刷リンク、およびM3ボルトとナットでサーボに接続されています。グリッパーアセンブリ全体にM3ボルトとナットを使用しました。このプロジェクトに必要なボルトとナットの完全なリストは、実際にはWebサイトの記事にあります。ボルトとナットを固定するためのスペースは非常に狭いので、これらの部品のいくつかを組み立てるには神経が必要です。

ただし、この設計の良いところは、グリッパーの端を簡単に変更できることです。それらは、より広くまたはより狭くすることができ、またはそれらは特定の形状を有することができる。いくつかのM4ボルトとナットを使用して、グリッパーをロボットアームに取り付けることができます。

最後に、サーボモーターを以前に取り付けたワイヤーに接続できます。

これで、スカラロボットアームは完全に組み立てられました。残っているのは、このプロジェクトの電子部品を接続することです。

スカラロボット回路図

そのため、ArduinoUNOボードをCNCシールドと4つのA4988ステッパードライブと組み合わせて使用​​します。

これはロボットであり、より複雑に見えますが、このプロジェクトに必要なすべての電子機器です。 Arduino UNOの代わりに、ArduinoMEGAをRAMPS3Dプリンターコントローラーボードと組み合わせて使用​​することもできます。

それでも、ロボットのベースに簡単に取り付けることができるArduinoUNOのケースを3Dプリントしました。ステッパーを駆動するために1/4ステップの解像度を使用するので、適切なピンにいくつかのジャンパーを配置しました。これで、ステッピングモーターとマイクロスイッチをCNCシールドに接続できます。

このスカラロボットの回路図と、すべてを接続する方法を次に示します。

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

  • ステッピングモーター–NEMA17………………
  • A4988ステッピングドライバー…………………..…
  • ArduinoCNCシールド………………………。 アマゾン /バンググッド /AliExpress
  • ArduinoUno………………………………..…
  • MG996Rサーボモーター…………………。…。
  • リミットスイッチ…………………………………。 アマゾン /バンググッド /AliExpress
  • DC電源…………………………。 Amazon / Banggood /AliExpress

ロボットに電力を供給するためには、最低4Aを供給できる12V電源が必要ですが、12V6A電源をお勧めします。もちろん、これはステッピングドライバーの現在の制限がどのように設定されているかによって異なります。可能な限り、最低レベルに設定することをお勧めします。

最後に、ドライブのヒートシンクを空けたまま、ケース内のすべてのワイヤーを絞り、カバーを追加しました。

アセンブリの仕上げ

これでスカラロボットが完成しました。ベースを何かに固定する必要があります。そのために、20mmのダニの木片を使用します。ロボットベースの下側には、固定用の12個の穴があります。そこで、ロボットの台座の絵を印刷して、木の穴を開けました。

下側では、フラットヘッドボルトを使用して木の表面と同じ高さになるように皿穴をあけます。ベーススロットにM4ナットを挿入し、木製ベースをロボットベースに固定しました。

理想的には、ロボットを所定の位置に固定するために、ロボットをテーブルにボルトで固定するか、その目的でクランプを使用します。

これで、スカラロボットは完全に完成しました。ただし、このビデオに残っているのは、ロボットがどのように機能するかを確認することです。

参照:スマートフォン制御付きDIYArduinoロボットアーム

スカラロボットのしくみ

ロボットの位置と向きを制御する方法は2つあり、それは順運動学または逆運動学を使用しています。

順運動学は、与えられた関節角度からエンドエフェクタの位置と方向を見つける必要がある場合に使用されます。

一方、逆運動学は、エンドエフェクタの特定の位置の関節角度を見つける必要がある場合に使用されます。ほとんどの場合、ロボットがツールを特定の場所または特定のX、Y、Z座標に配置する必要があるため、この方法はロボット工学でより理にかなっています。

逆運動学では、与えられた座標に従って関節角度を計算できます。

順運動学と逆運動学の両方に使用する方程式は、三角法の規則と式に基づいています。

スカラロボットのプログラミング–Arduinoと処理コード

記事の下部に、Arduinoと処理コードの両方があります。

処理開発環境で記述されたコードで方程式がどのように表示されるかを次に示します。

// FORWARD KINEMATICS
void forwardKinematics() {
  float theta1F = theta1 * PI / 180;   // degrees to radians
  float theta2F = theta2 * PI / 180;
  xP = round(L1 * cos(theta1F) + L2 * cos(theta1F + theta2F));
  yP = round(L1 * sin(theta1F) + L2 * sin(theta1F + theta2F));
}Code language: Arduino (arduino)

したがって、順運動学では、ロボットの2つのアーム、theta1とtheta2の設定された関節角度、およびそれらの長さL1とL2に従って、エンドエフェクタのX値とY値を計算します。

一方、逆運動学では、与えられた位置またはX座標とY座標に従って、関節角度theta2とtheta1を計算します。

/ INVERSE KINEMATICS
void inverseKinematics(float x, float y) {
  theta2 = acos((sq(x) + sq(y) - sq(L1) - sq(L2)) / (2 * L1 * L2));
  if (x < 0 & y < 0) {
    theta2 = (-1) * theta2;
  }
  
  theta1 = atan(x / y) - atan((L2 * sin(theta2)) / (L1 + L2 * cos(theta2)));
  
  theta2 = (-1) * theta2 * 180 / PI;
  theta1 = theta1 * 180 / PI;

 // Angles adjustment depending in which quadrant the final tool coordinate x,y is
  if (x >= 0 & y >= 0) {       // 1st quadrant
    theta1 = 90 - theta1;
  }
  if (x < 0 & y > 0) {       // 2nd quadrant
    theta1 = 90 - theta1;
  }
  if (x < 0 & y < 0) {       // 3d quadrant
    theta1 = 270 - theta1;
    phi = 270 - theta1 - theta2;
    phi = (-1) * phi;
  }
  if (x > 0 & y < 0) {       // 4th quadrant
    theta1 = -90 - theta1;
  }
  if (x < 0 & y == 0) {
    theta1 = 270 + theta1;
  }
  
  // Calculate "phi" angle so gripper is parallel to the X axis
  phi = 90 + theta1 + theta2;
  phi = (-1) * phi;

  // Angle adjustment depending in which quadrant the final tool coordinate x,y is
  if (x < 0 & y < 0) {       // 3d quadrant
    phi = 270 - theta1 - theta2;
  }
  if (abs(phi) > 165) {
    phi = 180 + phi;
  }

  theta1=round(theta1);
  theta2=round(theta2);
  phi=round(phi);
  
  cp5.getController("j1Slider").setValue(theta1);
  cp5.getController("j2Slider").setValue(theta2);
  cp5.getController("j3Slider").setValue(phi);
  cp5.getController("zSlider").setValue(zP);
}Code language: Arduino (arduino)

位置がどの象限に設定されているかに応じて、これらの「if」ステートメントを使用して関節角度を調整します。ロボットのこの構成では、実際には2つのリンクだけで逆運動学を計算しています。私が「ファイ」と呼ぶ3番目の角度は、グリッパーの向きを設定するために使用されます。

グラフィックユーザーインターフェイスは、ProcessingIDEのcontrolP5ライブラリを使用して作成されます。このライブラリを使用すると、ボタン、スライダー、テキストフィールドなどを簡単に作成できます。

たとえば、左側のスライダーを使用して関節の角度を制御し、テキストフィールドを使用して、ロボットを移動させたい位置を入力できます。プログラムでここで実行する各アクションで、シリアルポートを介してArduinoボードにデータを送信します。

if (gripperValuePrevious != gripperValue) {
    if (activeIK == false) {     // Check whether the inverseKinematics mode is active, Executre Forward kinematics only if inverseKinematics mode is off or false
      gripperAdd = round(cp5.getController("gripperValue").getValue());
      gripperValue=gripperAdd+50;
      updateData();
      println(data);
      myPort.write(data);
    }
  }Code language: Arduino (arduino)

このデータには、関節角度、グリッパー値、速度と加速度の値、および保存ボタンと実行ボタンのどちらをクリックしたかを知るためのインジケーターが含まれています。

public void updateData() {
  data = str(saveStatus)
    +","+str(runStatus)
    +","+str(round(cp5.getController("j1Slider").getValue())) 
    +","+str(round(cp5.getController("j2Slider").getValue()))
    +","+str(round(cp5.getController("j3Slider").getValue()))
    +","+str(round(cp5.getController("zSlider").getValue()))
    +","+str(gripperValue)
    +","+str(speedSlider)
    +","+str(accelerationSlider);
}Code language: Arduino (arduino)

このすべてのデータは、Arduinoで1つの長い文字列として提供されます。したがって、ここでは、最初にその文字列からデータを抽出し、それを個別の変数に入れる必要があります。

if (Serial.available()) {
    content = Serial.readString(); // Read the incomding data from Processing
    // Extract the data from the string and put into separate integer variables (data[] array)
    for (int i = 0; i < 10; i++) {
      int index = content.indexOf(","); // locate the first ","
      data[i] = atol(content.substring(0, index).c_str()); //Extract the number from start to the ","
      content = content.substring(index + 1); //Remove the number from the string
    }
    /*
     data[0] - SAVE button status
     data[1] - RUN button status
     data[2] - Joint 1 angle
     data[3] - Joint 2 angle
     data[4] - Joint 3 angle
     data[5] - Z position
     data[6] - Gripper value
     data[7] - Speed value
     data[8] - Acceleration value
    */Code language: Arduino (arduino)

これらの変数を使用して、ロボットでアクションを実行できます。たとえば、[保存]ボタンを押すと、現在の関節角度の値が別の配列に保存されます。

// If SAVE button is pressed, store the data into the appropriate arrays
    if (data[0] == 1) {
      theta1Array[positionsCounter] = data[2] * theta1AngleToSteps; //store the values in steps = angles * angleToSteps variable
      theta2Array[positionsCounter] = data[3] * theta2AngleToSteps;
      phiArray[positionsCounter] = data[4] * phiAngleToSteps;
      zArray[positionsCounter] = data[5] * zDistanceToSteps;
      gripperArray[positionsCounter] = data[6];
      positionsCounter++;
    }Code language: Arduino (arduino)

[実行]ボタンをクリックすると、保存されているステップなどが実行されます。

ステッピングモーターの制御には、AccelStepperライブラリを使用しました。これは、複数のステッパーを同時に制御するための優れたライブラリですが、このようなロボットの制御に関しては、いくつかの制限があります。複数のステッパーを制御する場合、ライブラリは加速と減速を実装できません。これは、ロボットのスムーズな操作に重要です。

stepper1.moveTo(stepper1Position);
  stepper2.moveTo(stepper2Position);
  stepper3.moveTo(stepper3Position);
  stepper4.moveTo(stepper4Position);

  while (stepper1.currentPosition() != stepper1Position || stepper2.currentPosition() != stepper2Position || stepper3.currentPosition() != stepper3Position || stepper4.currentPosition() != stepper4Position) {
    stepper1.run();
    stepper2.run();
    stepper3.run();
    stepper4.run();
  }Code language: Arduino (arduino)

I still managed to implement acceleration and deceleration with the library, but they are not as smooth as I wanted to be.

Here are full Arduino and Processing codes for this Arduino SCARA robot project:

Wrap up

So finally, once we upload the code to the Arduino, we can run the processing program, connect the power and the scara robot will start moving to its home position.

From there on, we can do whatever we want the it. We can play around manually or set it to work automatically. Of course, we can attach any kind of end-effector and make cool stuff with it. For example, we can even attach a 3D printer hot end to the robot and so make the robot a 3D printer, or attach a laser head and make it a laser cutter. I do plan try these two ideas, so make sure you subscribe to my channel so you don’t miss them in some of my future videos.

Before this video ends, I would like to give you few more notes about this project. I found the robot to be not as rigid as I expected.

I guess the problem is that almost the entire SCARA robot, the Z-axis and the arms are supported only by the first joint. The whole weight and the inertial forces generated when moving, can make quite a stress to base where the first joint is located, and as it’s just a plastic it tends to bend a little bit. Also, these belts are not backlash free so we reduce the robot rigidity with that too. However, I think the overall project is good enough so you to learn how SCARA robots work, and gives you the courage to build one for yourself.

Feel free to ask any question in the comments section below and check my Arduino Projects Collection.


製造プロセス

  1. レゴEV3のハッキング:独自のオブジェクトセンサー「目」を作成する
  2. ArduinoとRaspberryPiを使用してインターネット制御のビデオストリーミングロボットを構築する
  3. ホワイトペーパー:ロボットの可能性を見つける方法
  4. ロボットの主サウロンの作り方
  5. Arduinoエネルギーモニターとデータロガーを構築する方法
  6. IRリモコンをハックする方法
  7. 究極のガイド:適切なスカラロボットを選択する方法
  8. Littlearm 2C:3DプリントされたArduinoロボットアームを構築する
  9. Arduinoベースの自動ドア開口部の作り方
  10. 自宅でジェスチャ制御ロボットを作る方法
  11. 自動化ロードマップを7つのステップで構築する方法