IoTで遠隔操作する自作ロボットアーム:Arduino MKR1000とSimulink、ThingSpeak活用
プロジェクト概要
既存のオープンソース設計に頼らず、完全にゼロからロボットアームを設計・製作・プログラミングするプロジェクトです。ハードウェア設計とプログラミングの両面をカバーしますが、特にサーボ角度制御だけでなく、IoTを通じた遠隔精密制御に焦点を当てています。完成品の動作動画はこちらで確認できます。
Arduino MKR1000をSimulinkでプログラミングし、ThingSpeak(MATLAB解析機能付きオープンIoTプラットフォーム)を介して、事実上どこからでもロボットアームを操作できるようにしました。
必要なハードウェア
- 15" × 20" 1/8インチ合板
- Arduino MKR1000
- GS9025MGサーボ ×5
- 2.1mmブレッドボード対応DCバレルジャック
- 6V DCバレルジャック電源
- ジャンパーワイヤー
- 2N2222Aトランジスタ ×3
- M2ナット ×10、M2×10ネジ ×10
- M3ナット ×40、M3×25ネジ ×40
使用ソフトウェア
- MATLAB
- Simulink
- MATLAB Support Package for Arduino Hardware
- Simulink Support Package for Arduino Hardware
- MATLAB Support Package for ThingSpeak
設計
コストを抑えるため、ホビーサーボ(GS-9025MG)向けに設計しました。マイクロサーボのトルクが限られるため、最終的な重量とサイズに制約があります。最初1/4インチ合板で試作しましたが重すぎたため、アーム長を短くし1/8インチ合板に変更して解決しました。設計はFusion 360で行い、DXFファイルとして出力してレーザーカットしました。
電源は壁面コンセントからの継続的なDC供給が必要です。バッテリーパックでは電流消費が大きく、すぐに消耗してしまうためです。
モーター制御では、Arduino MKR1000のPWMピンは4つしかありませんが、5つのサーボを制御する必要がありました。そこで1つのPWMピンで2つのサーボを制御し、デジタルピンで切り替えて片方ずつ動作させる工夫をしました。回路図と配線図を参照してください。
プログラミング
プログラミングは2段階で行いました:
- プロトタイピング段階:組み立て後、スライダーと定数ブロックでサーボを特定角度に動かし、指令角度と実角度のバイアス、各サーボの可動範囲を把握しました。2D平面運動の逆運動学を用いて、XY座標から必要なサーボ角度を算出します。運動学の解説はこちらが参考になります。
- 精密制御段階:ThingSpeakチャネルからX、Y座標を読み取り、MATLAB Functionブロックでサーボ角度に変換して指令します。順運動学で現在位置を監視するブロックも追加しました。SimulinkのExternal Modeを使用すると、Arduino上で実行中のシステムをリアルタイム監視できます。灰色の雲アイコンのブロックがThingSpeak読み取りブロックで、チャネルID、データフィールド番号、API読み取りキーを指定してデータを取得します。
ThingSpeakチャネルの作成と使用
- ThingSpeakにアクセス
- 右上の「Sign in」からMathWorksアカウントでログイン
- ダッシュボードで「New Channel」をクリック
- 必要なフィールドを設定(X、Y座標など)
- 「Save Channel」で保存
- MATLABコマンドウィンドウまたはMATLAB Mobileアプリからデータ書き込み:
thingSpeakWrite(chID, [x y ...], 'WriteKey', APIKEY, 'Fields', [1 2 ...])
モデルの実行
Simulinkで「Model Configuration Parameters」→「Hardware Implementation」→「Hardware Board」をArduino MKR1000に設定。「Target Hardware Resources」→「WiFi Properties」でWi-Fi認証情報を入力。緑の実行ボタンでExternal Mode、青のデプロイボタンでハードウェアへ書き込み。実行後、MATLABまたはMATLAB MobileからThingSpeakに新しいデータを書き込むと、ロボットアームが動きます。
コードリポジトリ
MATLAB Central File Exchangeで公開されています。
製造プロセス
- Arduinoと1Sheeldで作る万能Androidリモコン──IR制御で家電を一括操作
- スマート貯金箱を作ろう:Arduino Nanoでコインアクセプターを制御
- Arduino電源制御センター:N-FET/P-FET/リレー/RTC搭載キット
- ArduinoとMAX30100で作るリアルタイムIoT心拍数モニター
- ESP8266・Arduino・超音波センサーで作るスマートIoTジャー:リアルタイム中身監視
- Arduino駆動3Dプリントロボットアームの製作:ステップバイステップガイド
- FirmataとXbox OneコントローラーでArduinoローバーをシームレス操作
- DIY Arduino加湿器コントローラー:リレーを用いた安全な高電圧制御
- Arduinoベースのヌンチャク操作6自由度ロボットアームキット
- スマートなArduino制御ロボットアームの製作:簡単DIYチュートリアル
- Arduino IoT CloudとAlexaでテレビを音声操作:ステップバイステップガイド