Robot(3)2016年03月18日

制御ソフト

コントローラーにはWiFiモジュールESP-01を使用していますが、ソフトウエアの開発はArduino開発環境で行えます。このロボットアームコントローラーにはWiFiアクセスポイント、WEBサーバー、WEBサービス(ここがサーボ制御指示を受け取ります)の3機能とサーボ制御のファームウエアを内蔵させました。これでWiFi接続できるスマホやタブレットからでもWEBブラウザさえあればロボットアームが操作することができます。
サーボ制御のファームウエア
WiFiモジュールESP-01のハードウエアではGPIOが2個しか出力されていませんので2個のサーボしか制御できません。そこでI2Cという通信方式を使用してPCA9685サーボドライバーICで制御できるサーボ数を拡張します。このドライバーICを使用することでサーボをドライバーIC1個につき16台まで動作させることができます。サーボ制御ドライバーはAdafruteが公開しているライブラリーが使用できます。あとは急激な動作をしないようにプログラムで制御することでサーボの基本動作とします。実際には現在の位置から指定位置まで1度刻みで一定時間間隔のインターバルをもたせた連続動作にすることで実現しています。

// 引数はサーボ番号、移動先、移動元
void servo_write(int n, int ang, int npos){
  int degrees;
  uint16_t pulselen;

  if (npos < ang) {
    for (degrees = npos + 1; degrees <= ang; 
                 degrees++) {
      pulselen = map(degrees, 0, 180, SERVOMIN, 
             SERVOMAX);
      pwm.setPWM(n, 0, pulselen);
      delay(10);
    }
  } else if (npos > ang) {
    for (degrees = npos - 1; degrees >= ang; 
                  degrees--) {
      pulselen = map(degrees, 0, 180, SERVOMIN, 
             SERVOMAX);
      pwm.setPWM(n, 0, pulselen);
      delay(10);
    }
  }
}
ユーザーインターフェース
WiFi動作はアクセスポイントモードにしているのでインターネットに接続しているWiFi環境は必要ありません。スマホやタブレット、PCから作成したSSIDにWiFi接続すると専用のネットワークに接続され、192.168.4.1にアクセスするとプログラムに内蔵したWEBサーバーがロボットアーム制御のためのHTML画面を表示します。WiFiモジュールESP-01はArduinoと比較すると格段と高機能です。32ビットMPU、WiFi機能以外に搭載メモリーがたくさんあるので画面のHTMLはすべてプログラムに直接書き込んでいます。LCD表示機能を追加してもまだメモリーに余裕があるので画面をもう少しリッチに仕上げることができそうです。このHTML画面はjavascriptのXMLHttpRequestを使用したシングルページアプリケーション構成になっています。ページ移動をせず画面上のスライダー値をWiFiモジュールESP-01に各サーボの制御情報として送信し指定のサーボを動作させます。また、動作ログを記録しており、ログから自動実行スクリプトを作成し、一連のサーボ制御情報を自動実行する機能(シーケンサー)も組み込んでいます。このシーケンサーは作成されたスクリプトを1行づつ非同期処理で順次WiFiモジュールESP-01に送信することで実現します。

コメント

トラックバック

このエントリのトラックバックURL: http://azss.asablo.jp/blog/2016/03/18/8052589/tb

※なお、送られたトラックバックはブログの管理者が確認するまで公開されません。