スタジオ ミュウ

エクセル(VBA)を使ってロボット制御

LED計測制御 | LEDグループ学習 | メロディのプログラム | RCサーボの制御 | モーターのPWM制御
MYUロボ-II | MYU-USB転送ソフト | MYU USB BASIC | USBドリトル | C アセンブラMYUUSB-1基板 | MYUUSB命令一覧
転送ソフト(232C) | MYU BASIC(232C) | 構造化ドリトル | エクセルで制御 | エクセルで計測 | MYUアセンブラ | MYUROBO-1A基板 | MYUロボ(232C)命令一覧 | ドリトル命令一覧

■MYU-527 ミュウロボ基本セット(RS-232C) 3,456円(8%税込)
■MYU-528 ミュウロボベルト基本セット(RS-232C) 3,456円(8%税込)
■MYU-529 3軸ミュウロボ基本セット(RS-232C) 4,212円(8%税込)
■MYU-530 ミュウロボ制御基板(RS-232C・2モーター用) 2,376円(8%税込)
■MYU-531 ミュウロボ制御基板(RS-232C・3モーター用) 2,592円(8%税込)

●エクセルのVBA
エクセルのVBA(Visual Basic for Aplication)を使ったミュウロボの制御転送ソフトです。VBAを使って制御プログラムをエクセルの表に書いたり、それをミュウロボに転送して実行したりできます。また、転送ケーブルをつなげたままリモコン操作もできます。
VBAのソースは公開していますので新しい機能を追加したり、startup.txtを編集して命令をカスタマイズできます。

エクセルでロボット制御(excel.zip)はここからダウンロード(44K)できます。(2009/7/9版)

●よくある質問
Q、パソコンにRS-232Cポートがありません?
A、変換ケーブルが必要です。Googleで"USB RS232 変換"と検索してみてください。
変換ケーブルは1,000円-5,000円ぐらいです。
※変換ケーブルは付属の専用ドライバをインストールする必要があります。

●VBAの起動
excel.zipを展開してmyuexcelホルダーを開き'エクセルでロボット制御.xls'をダブルクリックするとエクセルが立ち上がります。
エクセル2000の場合、ツール>マクロ>Visual Basicで立ち上げ、F-5で動作します。
エクセル2007の場合、[開発]タグ、Visual Basicをクリックして立ち上げ、F-5で動作します。
※エクセル2007は、Excelオプションの基本設定で[開発]タブをリボンに表示するにチェックを入れ、[開発]タブを押した後、マクロのセキュリティの設定ですべてのマクロを有効にするにチェックを入れる必要があります。


命令リスト
  ミュウロボで使われる命令リストです。
  命令をクリックすると解説ボックスにその命令の説明が表示され、命令ボックスに反映されます。
解説ボックス
  命令リスト内の命令をクリックすると命令の解説が表示されます。
[表クリア]ボタン
  エクセルの表をクリアします。
[行移動↑]、[行移動↓]ボタン
  エクセルの表の行が移動します。
[行書き込み]ボタン
  命令、引数、コメントボックスの内容をエクセルの表に書き込みます。
[転送]ボタン
  エクセルの表の制御プログラムをミュウロボCodeに変換して送信します。
[行挿入]ボタン
  1行挿入します。
[行削除]ボタン
  1行削除します。
COMポート設定ドロップダウンリスト
  COMポートを設定します。
命令、第1引数、第2引数、コメントボックス
  ミュウロボの命令、引数を編集して[行書き込み]ボタンを押すことで表に反映させます。
リモート操作
  PCとミュウロボを転送ケーブルを接続したままリモート内のボタンを押すとリモコン操作ができます。

◆命令のカスタマイズ
startup.txtを編集すると命令をカスタマイズすることができます。
1つの命令は、命令名,命令Code,命令の引数の数+1,命令の解説とコンマで区切られ1行で構成されています。
これを編集することで命令の名前を変えたり、命令リストの並び順を変更するなどのことができます。
※命令Codeはミュウロボ命令一覧ミュウアセンブラ一覧をご覧ください。


●制御プログラム
ミュウロボ基本セットを素材に簡単なプログラムから・・・
まず簡単なプログラムを作ってみます。VBAを立ち上げ命令リストの"前進"をクリックします。すると命令ボックスに"前進"が表示されます。次に第1引数ボックスに"10"と入力し[行書き込み]ボタンを押します。
同様に"右回り"をクリック、第1引数を"5"と入力し[行書き込み]ボタンを押します。

ミュウロボ基本セット
プログラムはこのようにして作っていきます。VBAを終了して表に直接命令を書くこともできます。命令には引数のないもの、引数が1つのもの、引数が2つのものがあります。詳しくはこちらをご覧ください。
このプログラムの動作は前進を1秒行い右回り0.5秒です。次にパソコンと基板とを転送ケーブルで接続し、[転送]ボタンを押すとプログラムが転送されます。'ピ'・・と音がして転送が始まり最後に'ピピ'と鳴れば転送終了です。転送ケーブルを抜きリミットスイッチを押すとプログラムが実行されます。
転送されたプログラムは電源を切っても覚えています。ロボットの電源を入れリミットスイッチを押すと何回でも実行できます。

次に上のプログラムの上下に次の命令を追加します。
[行移動↑]ボタンを2回押し行を移動します。[行挿入]ボタンを押し1行空の行を挿入、命令リストの"アンカー"をクリック、第1引数ボックスに"10"と入力し[行書き込み]ボタンを押します。
[行移動↓]ボタンを2回押し、命令リストの"ジャンプ"をクリック、第1引数ボックスに"10"と入力し[行書き込み]ボタンを押します。

◆アンカーとジャンプ
プログラムは命令を順に実行しますが、ジャンプ命令はその流れを変えることができます。ジャンプ命令は引数と同じアンカー番号の所へジャンプします。
上の例では前進と右回りを繰返し実行しますからロボットは多角形を描くように動きます。
※アンカーは番号(1から127)を宣言するだけでなにも実行しません。
※アンカー番号の重複(同じアンカー番号を付けること)は禁止です。
※上のように繰り返すプログラムをループプログラムと呼びます。
※コメントを残しておくと後からプログラムの内容が理解しやすくなります。
※エクセルの表を保存することで制御プログラムも保存できます。

◆入力ポートによる条件ジャンプ:入力ありジャンプと入力なしジャンプ
MYUROBO-1基板は入力ポートを4個持っています。入力ありジャンプと入力なしジャンプは、入力ポートの状態によって指定したアンカー番号にジャンプします。

入力ありジャンプ 第2引数の入力ポート(1-4)がON状態(Low)なら第1引数のアンカー番号にジャンプ
入力なしジャンプ 第2引数の入力ポート(1-4)がOFF状態(High)なら第1引数のアンカー番号にジャンプ

MYUROBO-1基板のIn1には標準でリミットスイッチが接続されています。下の例は入力ポートの状態を調べ、前方のリミットスイッチが障害物を感知したら後退して向きを変えるプログラムです。3種類のプログラムとも同じ動きをします。


MYUロボ命令の引数を省略すると引数が 0 にセットされます。
※上の例の前進のように引数を省略すると前進の信号を出した後、待ち時間なしで次の命令を実行できます。

◆ブロックについて(サブルーチン)
プログラムで何回も同じ処理をすることがあります。この部分をサブルーチン(部品)化するとプログラムが見やすくコンパクトになります。
ブロックは、ブロックはじめからブロックおわりまでの間に制御プログラムを書きサブルーチンとなります。
下は前のプログラムにメロディのブロックを追加したものです。最初と障害物を感知した時、動作します。

※ブロックは1から127までのブロック番号をつけ他のブロックと区別します。
※ブロックはプログラム内のどこに在ってかまいませんが、そのままではなにも実行しません。ブロック実行やブロック繰り返し命令を使うことで動作し処理の終わりとともに呼ばれた場所に戻ります。
※ブロック番号の重複(同じブロック番号を付けること)は禁止ですがアンカー番号との重複は可能です。
※ブロック内から他のブロックの呼出しは深さ8レベルまで可能です。688タイプは20レベル、ミュウロボ2基板は10レベルまで可能
※ブロック内のジャンプは可能ですが飛び出しジャンプは禁止です。ブロックの途中からの抜け出しはブロック脱出を使います。

※startup.txtを編集(例えば、'前進'を'FF'に変える)すると命令をカスタマイズすることができます。
※いろいろなロボットの工作例はこちら
※メロディなど音階の設定はこちら
※ゆっくり前進したいなどモーターのスピードをコントロールするにはこちら
※RCサーボの制御はこちら

◆ミュウロボ制御基板のエラーについて
ミュウロボ制御基板では以下の場合、エラーとなり警告音を鳴らし続けます。
1、127バイト以上の転送。
CPUがPIC16F688の場合は255バイト
2、深さ8レベル以上のブロック呼び出し。
CPUがPIC16F688の場合は22レベル
3、アンカー番号の見つからないジャンプ、ブロック番号の見つからないブロックの呼び出し。
4、IXの値が12以上でIXMを使った場合。
CPUがPIC16F688の場合は32
5、16F688専用の命令をPIC16F630に転送したとき。
※エラーの場合は一旦電源を切りプログラムを修正してから再転送してください。


●エクセル VBA プログラム
Excel VBAの知識を身につけるとフォームのレイアウトを変えたり新しい機能を追加するなどのことが簡単にできます。
ここでは、新しい[ボタン]を追加する方法を説明します。

@VBAを起動し(UserForm)をクリックするとツールボックスが表れます。ツールボックス内のコマンドボタンをクリックします。
Aそのまま(UserForm)の好きな場所をクリックするとコマンドボタンが配置されます。配置された後でも移動できます。
Bコマンドボタンのプロパティを変更します。まず、オブジェクト名を'Cmd_prg'とします。
C次にCaptionを'前進して右回り'とします。

これで[ボタン]のレイアウトは終わりです。次に[ボタン]のコード(プログラム)を書きます。
[ボタン]をダブルクリックするか、[ボタン]上で右クリックしてコードの表示を選びます。
ここに[ボタン]のプログラムを書きますが、以下のようにしてください。

Private Sub Cmd_prg_Click()
  Opencom       'COMポートを開く
  Writecom 2      '前進命令
  Sleep 1000      '1秒待つ
  Writecom 10     '右回り命令
  Sleep 500      '0.5秒待つ
  Writecom 0      '停止命令
  Closecom       'COMポートを閉じる
End Sub

Private Sub Cmd_prg_Click() は、オブジェクト名'Cmd_prg'をクリックした時、動作するプログラムです。
まず、Opencom 命令でCOMポートを開きます。Writecom 2 はCOMポートに'2'を出力します。'2'はMYUロボの前進のCodeで詳しくはこちらをご覧ください。
Sleep 1000 で1秒間待ち、右回りのコードを送信、0.5秒待って停止信号を送り、COMポートを閉じます。
F-5を押してプログラムを実行し、新しく作った[ボタン]を押してみてください。リモコン操作でロボットが動くはずです。
引数を変えたり新しい命令を追加してみてください。VBAの情報は簡単に入手できます。いろいろなコントロールを使ったプログラムに挑戦してください。