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

ローカルおよびリモートのプログラム可能なロボットアーム

コンポーネントと消耗品

>
Arduino Mega 2560
× 1
ArduinoUNO用のSainSmartDIY3軸制御パレタイジングロボットアームモデルMEGA2560
× 1
MeArmDIYロボットアームキット
× 1
AdafruitRGBバックライトLCD-16x2
× 1
Androidデバイス
× 1
ロータリーポテンショメータ(汎用)
10Kohm
× 4
SparkFunプッシュボタンスイッチ12mm
× 3
LED(汎用)
赤、青、緑、黄
× 4

アプリとオンラインサービス

>
Arduino IDE
MIT App Inventor 2

このプロジェクトについて

<図>

このチュートリアルの目的は、産業用ロボットの基本機能をシミュレートして、ロボットアームの制御とプログラミングのためのプロジェクトを段階的に開発することです。

ステップ1:仕様

<図>

ロボットには2つの基本的な機能があります:

  • プログラム :アームの位置を3次元で記録します(各記録は「ステップ」です)
  • 実行 :「プログラム」に記録された位置を順番に実行します。ロボットは、コマンド「ABORT」が使用されるまでプログラムを実行します。

主な特徴:

  • このプロジェクトは、3または4 DOF(「自由度」)でロボットを制御するために使用できます。
  • ロボットは「ローカル」モードと「リモート」モード(Androidデバイスを介した最後のモード)で制御できます
  • プログラムフェーズ中に、ユーザーは制御モードを「LOCAL」から「REMOTE」に、またはその逆に変更できます。
  • ユーザーへの情報は、色付きのLED、2行のLEDディスプレイ、およびサウンド(ブザー)を通じて提供されます。
  • サウンドアラームはリモートでトリガーすることもできます。

ステップ2:プロジェクト

<図>

前のステップのブロック図は、このプロジェクトで使用される「部品表」を示しています。

利用可能なArduinoポート(I / O)の数を気にしないために、ArduinoMEGAを選択しました。たとえば、UNOは問題なく機能しますが、ポート拡張方式を使用する必要があります。たとえば74138デコーダーなど、インターネット上で簡単に見つけることができるいくつかのオプションがあります。

ここでは、最初のプロトタイプが「ローカルモード」でプログラムされています。

Bluetoothネットワークには、HC-06が使用されます。

リモートモード」に使用されるAndroidアプリ "は、Androidデバイスをベースにしたこの種のアプリ用の強力な単一プラットフォームであるツールMIT Appinventor2を使用して開発されました。このアプリは、GoogleストアのMJRoBotArduinoロボットアームコントロールから無料でダウンロードできます。

以下のビデオでは、リモートプログラミングを使用した最終的なプロジェクトを理解できます。

ステップ3:プロジェクト開発

<図> <図>

ロボットアームは、それらが持つ「関節」または「自由度」(DOF)の数に従って分類できます。

  • ベース "、または" ウエスト "、通常、使用するサーボのタイプに応じて、アームを180°または360°回転させることができます(このプロジェクトでは、180°のサーボが使用されました)。
  • 」 "、は腕を垂直に「上げるまたは下げる」責任があります。
  • エルボー 「腕を「前進または後退」させます。
  • "または" グリッパー 「「グラブシングス」を開いたり閉じたりすることで機能します。

ステップ4:回路

<図>

サーボモーターは、Arduinoに直接接続されたジョイントを駆動するために使用されます。トルクと精度を高めるために、ベースで使用されている「ステッピングモーター」を参照してください。サーボの適切な選択は非常に重要です(残念ながら、私のSanSmart 3DOF AARMに付属しているMG995のように、構造が非常に貧弱な安価な中国のサーボがあります)。しかし、このプロジェクトの提案はうまくいきました。

サーボのDC電源は、Arduinoやその他のコンポーネントから分離する必要があります。 5または6Vの外部電源は問題なく動作するはずです(適切な電圧範囲を確認するには、サーボのデータシートを確認してください)。一般的な方法は、VCCとGNDの間に470uFのコンデンサを使用して、サーボ内部のDCモーターによって生成されるノイズを最小限に抑えることです。必ずすべての「アース」(Arduino GNDピンを備えた外部電源)を接続してください。

サーボに問題があり、振動が大きい場合は、コードの「遅延」を調整してください。新しいコマンドを受信する前に、サーボが特定のポイントに到達する時間を確保することが重要です。また、サーボがデジタルかアナログかを確認する価値があります。まるでそれらが機械的に類似しているかのように、デジタルは300Hzの周波数で動作し、アナログは50Hzで動作します。標準のArduinoライブラリ「 Servo.h "はアナログサーボ用に開発されており、デジタルサーボでより適切に機能するように、必要に応じて変更できます。

上の図は完全な回路を示しています。

ステップ5:コード

プロジェクトは複雑ではありませんが、多くの変数があります。最も賢明なのは、それらを明確に定義し、コメントを一意のファイルに残すことです。

ArmDefine.h

このファイルは、最小、最大、および初期サーボの角度も設定する必要があります。このチュートリアルに含まれているコードには、プロジェクトでテストしたロボットアームの2つのパラメーターセットが含まれています(もちろん、定数のグループのみを使用する必要があります):

  // MeArm 4-DOF#define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxShou 180 #define maxElbw 150 #define midGrip 30#define midBase 87#define midShou 138#define midElbw 100 / * SS 3-DOF#define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150#define maxShou 155 #define maxElbw 0 #define midGrip 100#define midBase 90#define midShou 90#define midElbw 0 * /  

腕の種類ごとに異なるパラメータのセットがあり、自分に合ったものを見つけることが重要です。私が提案するのは、最初はポテンショメータ(ポット)がその中間点に留まり、PWM出力のマッピングがデフォルト値に設定されていることです: Max =255 Min =0 および Mid =126 ( " #defines 次に、ポットを1つずつ変化させ始め、シリアルモニター(またはLCD)で、アームが適切に機能する最小値と最大値を追跡します。これらは、設定( ArmDefine.hで元の値を変更)

ロボットが再生する必要のある座標(またはステップ)のセットを「記録」するために、データ配列を使用します。

  int GripPosition [100]; int basePosition [100]; int shouPosition [100]; int elbwPosition [100]; int positionIndex =0; //記録されたタスクに使用される位置配列で使用されるインデックス 

「保存された」位置を保持しておらず、「ロボット」プログラムの終了時に、インデックスがゼロに戻り、ロボットは新しいシーケンスの記録を待機することに注意してください(プログラムは失われます)。または、たとえば、これらのデータ配列をArduinoEEPROMに保持することもできます。そうすることで、プログラムが再度実行されるか、複数のプログラムが保存される可能性があります。

ステップ6:プログラムロジック

メインブロック(「ループ」)は非常に単純です:

「プログラム」(一連のステップ)を実行するコマンドが使用されたかどうかを確認してください。

  • その場合は、実行します。
  • それ以外の場合、「プログラム」は完全ではなく、新しいステップを作成する必要があります。
  • 「新しい位置」が定義されている場合は、それをプログラムに追加します。
  • 最初に、Androidデバイスからシリアルバッファに到着するメッセージをチェックします。
  • 次に、制御モードが「ローカル」か「リモート」かを確認します(デフォルトはローカル)。
  • 最初に戻って、手順1をもう一度実行します。
  void loop(){checkBTcmd(); defineLocalRemote(); execTaskCmd =digitalRead(execTaskPin); if(execTaskCmd ==|| HIGH command =="runon"){RunProgram(); } else recArmPosition(); command ="";}  

関数 checkBTcmd() BTモジュールから到着する個々の文字を使用して文字列を組み立てます。この文字列は変数「 コマンド」に渡されます "。

関数 defineLocalRemote() 変数「 コマンド」を考慮します 「モードをリモートに変更するコマンドが1つ受信されたか、またはその逆かを確認します。アラームコマンドもここで分析されます。プログラムロジックの場合、Androidデバイスで「アラーム」がトリガーされた場合、アームは必ずリモートに移動する必要があります。モード。

関数 RunProgram() 準備を実行し、LEDをオン/オフにするなど、特に関数を呼び出します: ExecuteTask() 。後者は、一連のステップの実行ロジックを含む関数です。この関数は「 positionIndex 」を増やします "ツールを使用して、位置データを1つずつ腕に送信します: armPosition(グリップ、ベース、肩、肘)

最後に、実際にサーボに命令して「ステップ」を書き込む関数は、 recArmPosition()です。 。 Androidコマンドの受信に応じて、この関数は、ポットまたはAndroidアプリの「スライダー」を通過できるサーボの位置を定義します。この関数は、位置が変わるたびに、 armPosition を使用して座標をサーボに送信します。 機能(グリップ、ベース、ショルダー、エルボー)。ポットまたはスライダーの実際の位置の読み取りとそれに対応するサーボのアクティブ化は、コマンド「SAVE」または「PROGRAM」がトリガーされるまでに行われます。その時点で、配列の位置インデックスがインクリメントされ、ステップが保存されます。

理解を簡単にするために、すべてのコードはその特定の機能に基づいていました。 「セットアップ "、" ループ "および上記の関数は事実上すべてファイルに含まれています: MJRoBot_Arm_Robot_Task_Prgm.ino

BTコマンドの読み取りなどのより一般的な関数: void checkBTcmd() ;サウンドジェネレータ: ビープ音を鳴らさない(int pin、int freq、long ms) およびデバウンス: ブールデバウンス(intピン) ;ファイルにあります: General_Functions.ino

重要な事実:Arduinoは16Mhzのクロックに基づいて命令を実行するため、コントロールボタンは1秒間に数百回または数千回も読み取られると予想されるため、記録ステップを設定する「デバウンス」ボタンを作成することが重要です。 。

4番目の最後のファイルは次のとおりです。 Arm_Ctrl_and_Display.ino

このファイルには、ポテンショメータの読み取り関数が含まれています。 bool readPotenciometers() ; Androidスライダーの読み取り: bool readSliders() ;サーボの配置: void armPosition(int Gripp、int Basee、int Shoulder、Elbow int) 。ファイルに含まれるその他の機能は、LCD、シリアルモニター、アラームなどのデータ表示用です。

ビデオは、 Androidアプリを介してリモートでプログラムされているロボットアーム4DOF「meArm」を示しています 。

プロジェクトの完全なソースコードはGITHUBにあります:

https://github.com/Mjrovai/MJRoBot-Programmed-Arm

またはここ:

F49C85FIL8CVX0P.ino FC4OQJNIL8CVX1C.h FBYPQAMIL8CVX1D.ino F2SBAXVIL8CVX1E.ino

ステップ7:結論

<図>

いつものように、このプロジェクトが、他の人がエレクトロニクス、ロボット工学、IoTのエキサイティングな世界で自分の道を見つけるのに役立つことを願っています!その他のプロジェクトについては、私のブログMJRoBot.org

をご覧ください。

世界の南からのサルド!次のチュートリアルでお会いしましょう!

ありがとう

マルセロ

コード

  • コードスニペット#1
  • コードスニペット#2
  • コードスニペット#3
コードスニペット#1 Arduino
 // MeArm 4-DOF#define minGrip 15 #define minBase 0 #define minShou 60 #define minElbw 60 #define maxGrip 45 #define maxBase 170#define maxShou 180 #define maxElbw 150 #define midGrip 30#define midBase 87# define midShou 138#define midElbw 100 / * SS 3-DOF#define minGrip 75 #define minBase 5 #define minShou 5 #define minElbw 0 #define maxGrip 125 #define maxBase 150#define maxShou 155 #define maxElbw 0 #define midGrip 100# midBase 90#define midShou 90#define midElbw0を定義します* / 
コードスニペット#2 Arduino
 int GripPosition [100]; int basePosition [100]; int shouPosition [100]; int elbwPosition [100]; int positionIndex =0; //記録されたタスクに使用される位置配列で使用されるインデックス
コードスニペット#3 Arduino
 void loop(){checkBTcmd(); defineLocalRemote(); execTaskCmd =digitalRead(execTaskPin); if(execTaskCmd ==|| HIGH command =="runon"){RunProgram(); } else recArmPosition();コマンド="";} 
Github
https://github.com/Mjrovai/MJRoBot-Programmed-Armhttps://github.com/Mjrovai/MJRoBot-Programmed-Arm

回路図

ロボットアーム
https://github.com/Mjrovai/MJRoBot-Programmed-Arm/blob/master/Arm_Robot_Task_Program_Man_BT_16_fev_16/Arm%20Robot%20Diagram.png

製造プロセス

  1. Arduino、1Sheeld、Androidを使用したユニバーサルリモコン
  2. 製造におけるロボットアームとその利点
  3. ロボットマニピュレータとロボットアームの違い
  4. LCDアニメーションとゲーム
  5. Arduinoとスマートフォンを使用したDIY電圧計
  6. IoTを使用してロボットアームをリモート制御する
  7. Arduino3Dプリントロボットアーム
  8. Nunchuk制御ロボットアーム(Arduino付き)
  9. ArduinoとNokia5110ディスプレイを備えたDIY電圧計
  10. Arduinoを使用したシンプルでスマートなロボットアーム
  11. Python3とArduinoコミュニケーション