MYUROBO転送ソフト (myurobo.exe)
ホーム | パーツ | 工作例 | ロボコン | ロボット教室 | ロボット制御
メロディのプログラム | センサープログラム | RCサーボの制御 | 入出力プログラム | モーターのPWM制御 | LEDの制御 | 計測と制御
MYU BASIC | 構造化ドリトル | エクセルで制御 | エクセルで計測 | ミュウアセンブラ | 688基盤 | MYUROBO2基板
ミュウロボ命令一覧 | ミュウアセンブラ一覧 | 構造化ドリトル制御命令一覧
◆触覚を使ったロボットの説明はこちら!
●MYUROBO転送ソフト (myurobo.exe) MYUROBOプログラム | 入出力プログラム | LEDの制御
myurobo.exeは簡単な操作で制御プログラムを作っていくことができます。命令は命令リストに表示されていてクリックすると解説ボックスに説明が表示されます。ダブルクリックすると編集ボックスに反映され制御プログラムを作っていくことができます。
ミュウロボに転送ケーブルを接続したままリモート内のボタンを押すとリモコン操作ができます。また、記録開始ボタンを押してからリモコン操作すると編集ボックスにその操作が自動的にプログラムされていく機能もあります。
そのほか命令のカスタマイズや定義、ジャンプ命令やサブルーチン、タイマー・演算機能など複雑なプログラムも可能です。
※命令の説明はミュウロボ命令一覧ミュウアセンブラ一覧をご覧ください。

MYUROBO転送ソフト (myurobosetup.zip) はここからダウンロード(1M V1.15 2010/3/21版)できます。
※V1.15 WINAPI版、保存拡張子対応
※V1.14 リモコンボタン追加、転送速度の改善
※V1.13 鍵盤追加、CD-ROM・USBメモリ・サーバーなどから起動可能
※V1.12+ COMポート設定変更
※V1.1 DEFINE、16進、2進、リテラル入力追加、また引数を省略した場合、引数が0になるようにした。これは'前進,0'の意味が解り難いとの意見が多く引数を省略した書き方で同じ結果になるようにした。
◆Visual Basicを使った転送ソフトの開発は、こちら
●起動方法
ダウンロードしたmyurobosetup.zipを展開しmyuroboホルダをCD-ROM・ハードディスク・サーバー・USBメモリなどにコピーしてください。ホルダ中のmyurobo.exeを実行するとMYUROBO転送ソフトが起動します。myurobo.exeを直接実行するのでインストール制限のある学校などでも使えます。
またsetup.exeを実行するとインストールされます。正常にインストールされた場合、Windowsスタート->すべてのプログラム->myurobo->myuroboをクリックすると転送ソフトが立ち上がります。ディスクトップにもmyuroboのショートカットが出来ます。

●よくある質問
Q、Vistaで起動できません。
A、アイコン上で右ボタンを押し「管理者としてこのプログラムを実行する」→許可で実行できます。
 または「コントロールパネル」→「ユーザーアカウント」→「ユーザーアカウント制御の有効化または無効化」→「ユーザーアカウント制御(UAC)を使って・・・」のチェックを外すと普通に立ち上がります。
Q、パソコンにRS-232Cポートがありません?
A、変換ケーブルが必要です。Googleで"USB RS232 変換"と検索してみてください。
変換ケーブルは1,000円-5,000円ぐらいです。
※変換ケーブルは付属の専用ドライバをインストールする必要があります。

●プログラム
MYUROBO転送ソフトを立ち上げてください。編集ボックス内でプログラムを作っていきます。
読込ボタンを押してmyusample2.txtを読み込んでください。下の画面になります。
PCとミュウロボ制御基板とを転送ケーブルで接続し、転送ボタンを押すとプログラムが転送されます。'ピ'・・と音がして転送が始まり最後に'ピピ'と鳴れば転送終了です。転送ケーブルを抜きリミットスイッチを押すとプログラムが実行されます。

編集ボックス
  転送プログラムを編集する場所です。
命令リスト
  ミュウロボで使われる命令リストです。
  命令をクリックすると解説ボックスにその命令の説明が表示されます。
  命令をダブルクリックすると編集ボックスに反映され制御プログラムを作っていくことができます。
解説ボックス
  命令リスト内の命令をクリックすると命令の解説が表示されます。
読込ボタン
  制御プログラムを読み込みます。拡張子は.txt
保存ボタン
  編集ボックスの制御プログラムを保存します。拡張子は.txt
クリアボタン
  編集ボックス内をクリアします。
転送ボタン
  編集ボックス内の制御プログラムをミュウロボCodeに変換して送信します。
COMポート設定ドロップダウンリスト
  COMポートを設定します。
リモートモード
  PCとミュウロボを転送ケーブルを接続したままリモート内のボタンを押すとリモコン操作ができます。
トレースモード
  記録開始ボタンを押してからリモコン操作すると編集ボックスにその操作の手順が記録されます。
  記録停止ボタンを押した後、ミュウロボに転送すればリモコン操作を再現できます。

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


●はじめてのMYUROBOプログラミング 触覚を使ったロボットの説明はこちら!
ミュウロボ基本セットを素材に簡単なプログラムを作ってみます。
myurobo.exeを立ち上げ命令リストの"前進"をクリックしてください。下の解説ボックスに説明が表示されます。
続けて"前進"をダブルクリックしてください。引数入力用ダイアログが現れます。"10"と入力し改行キーを押します。
同様に"右回り"をダブルクリック、引数を5と入力します。

前進,10
右回り,5

プログラムはこのようにして作っていきます。MYUROBO転送ソフトは最初に命令、コンマ、引数の順で書いていきます。命令には引数のないもの、引数が1つのもの、引数が2つのものがあります。詳しくはこちらをご覧ください。
このプログラムの動作は前進を1秒行い右回り0.5秒です。次にパソコンと基板とを転送ケーブルで接続し、転送ボタンを押すとプログラムが転送されます。'ピ'・・と音がして転送が始まり最後に'ピピ'と鳴れば転送終了です。転送ケーブルを抜きリミットスイッチを押すとプログラムが実行されます。
プログラムは編集ボックスに直接書いても同じ結果となります。コンマや引数は全角文字も使えます。
転送されたプログラムは電源を切っても覚えています。ロボットの電源を入れリミットスイッチを押すと何回でも実行できます。

次に上のプログラムの上下に次の命令を追加してください。
アンカー,10    //アンカー番号10
  前進,10
  右回り,5
ジャンプ,10    //アンカー番号10へジャンプ

◆アンカーとジャンプ
プログラムは命令を順に実行しますが、ジャンプ命令はその流れを変えることができます。ジャンプ命令は引数と同じアンカー番号の所へジャンプします。
上の例では前進と右回りを繰返し実行しますからロボットは多角形を描くように動きます。
※アンカーは番号(1から127)を宣言するだけでなにも実行しません。
※アンカー番号の重複(同じアンカー番号を付けること)は禁止です。
※上のように繰り返すプログラムをループプログラムと呼びます。またアンカーとジャンプの間の命令は段落をつけると見やすくなります。
※//以下は次の行までコメントが書けます。コメントを残しておくと後からプログラムの内容が理解しやすくなります。
※プログラムは保存ボタンを押してファイル名を指定し保存するようにしてください。
※MYUROBOファイルの拡張子は'.txt'ですのでWINDOWSのメモ帳でもプログラムを編集できます。

◆リモコンとトレースモード
パソコンと基盤を転送ケーブルで接続したままMYUROBO転送ソフトのリモートボタンを押すとリモコン操作ができます。
記録開始ボタンを押してからリモコン操作すると編集ボックスにその操作のプログラムが自動的に記録されます。
記録停止ボタンを押した後、プログラムを転送し実行することでリモコン操作を再現できます。(トレースモード)

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

入力ありジャンプ,m,n  //入力ポートn(1-4)が入力あり(ON)ならアンカー番号mにジャンプ
入力なしジャンプ,m,n  //入力ポートn(1-4)が入力なし(OFF)ならアンカー番号mにジャンプ

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

前進,10        //最初に1秒前進
アンカー,10      //アンカー番号10
  前進
  リミットスイッチ  //スイッチが押されるまで直前の命令(前進)を実行
  後退,10
  左回り,10
ジャンプ,10      //アンカー番号10へジャンプ

前進,10            //最初に1秒前進
アンカー,10          //アンカー番号10
  入力ありジャンプ,11,1 //リミットスイッチ(入力ポート1)が押されたらアンカー番号11にジャンプ
  前進
ジャンプ,10          //アンカー番号10へジャンプ
アンカー,11          //アンカー番号11
  後退,10
  左回り,10
ジャンプ,10          //アンカー番号10へジャンプ

前進,10           //最初に1秒前進
アンカー,10         //アンカー番号10
  前進           //引数を省略すると0にセットされ待ち時間なしで次の命令を実行できる
  入力なしジャンプ,10,1 //リミットスイッチ(入力ポート1)が押されていない場合、アンカー番号10にジャンプ
  後退,10
  左回り,10
ジャンプ,10        //アンカー番号10へジャンプ

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

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

ブロック実行,10    //ブロック番号10の呼び出し
アンカー,10      //アンカー番号10
  前進
  リミットスイッチ  //スイッチが押されるまで直前の命令(前進)を実行
  ブロック実行,10  //ブロック番号10の呼び出し
  後退,10
  左回り,10
ジャンプ,10      //アンカー番号10へジャンプ
ブロックはじめ,10   //ブロック番号10、停止してメロディ
  停止,10
  電子音,2,48 電子音,2,46 電子音,2,44 電子音,2,42
  電子音,2,40 電子音,2,38 電子音,2,36 電子音,2,34
ブロックおわり

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

◆DEFINE(定義)
DEFINEは複数の命令や引数を1つの言葉で定義することができます。第1引数で名前を定義して第2引数から次の行までの命令に置き換えます。
下は前のプログラムをDEFINEを使って見やすくしたものです。まったく同じ動作をします。
※定義名は数字以外で始まり半角アルファベット、全角文字、数字が使えますが半角と全角の混在は禁止です。

DEFINE,メロディ,10
DEFINE,ループ,10
DEFINE,Uターン,ブロック実行,メロディ 後退,10 左回り,10
ブロック実行,メロディ
アンカー,ループ
  前進        //前進の信号を出す
  リミットスイッチ  //スイッチが押されるまで直前の命令(前進)を実行
  Uターン
ジャンプ,ループ
ブロックはじめ,メロディ   //停止してメロディ
  停止,10
  電子音,2,48 電子音,2,46 電子音,2,44 電子音,2,42
  電子音,2,40 電子音,2,38 電子音,2,36 電子音,2,34
ブロックおわり

◆ミュウアセンブラを使った演算
ミュウアセンブラを使うと変数演算やタイマー・ポート命令など細かい制御が出来ます。下のプログラムはリミットスイッチが障害物を感知した回数をカウントし、3回ごとにメロディを2回鳴らすというものです。ミュウアセンブラ一覧はこちら!

DEFINE,メロディ,10
DEFINE,ループ,10
DEFINE,Uターン,ブロック実行,メロディ 後退,10 左回り,10
CLA                //Aレジスタの値を0にします
ブロック実行,メロディ
アンカー,ループ
  前進             //前進の信号を出す
  リミットスイッチ       //スイッチが押されるまで直前の命令(前進)を実行
  INCA             //Aレジスタの値を1増やす
  CMP,3            //Aレジスタと3を比較
  JNZ,20            //等しくない場合、アンカー20にジャンプ
  ブロック実行,メロディ
  CLA             //Aレジスタの値を0にします
アンカー,20
  Uターン
ジャンプ,ループ
ブロックはじめ,メロディ     //停止してメロディ
  停止,10
  電子音,2,48 電子音,2,46 電子音,2,44 電子音,2,42
  電子音,2,40 電子音,2,38 電子音,2,36 電子音,2,34
ブロックおわり

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

◆16進数、2進数やリテラル入力例
前進,H'0A'    //16進入力 10進数の10と同じ
前進,B'1010'   //2進入力 10進数の10と同じ
前進,"@"     //リテラル入力 @の文字コードは64なので、前進,64 となる

◆パワーオンスタートについて
パワーオンスタート命令がプログラムの先頭に入っていると基板のスイッチONとともにプログラムがスタートします。この状態で新しいプログラムを転送するには、一旦スイッチを切り、転送ケーブルを接続してから基盤のスイッチを入れれば新しいプログラムを転送できます。
ところがパソコンの中には、この方法で転送できないものがあります。この対応についてはこちら

◆MYUROBOエラーについて
myurobo.exeでは転送ボタンを押した時、エラーチェックを行います。
文法エラーがあった場合、ダイヤログが現れエラー部分が表示され転送は中止されます。

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


●入出力プログラム
ミュウロボ制御基板はPIC16F630を使って入出力をコントロールしています。ポートAはRA5以外入力用、ポートCは出力に設定されています。

<PIC16F630>
動作電圧 2.0V-5.5V
内部クロック 4MHz
タイマー1 125KHz
RA ポートA
RC ポートC

<入力ポート>
RA4 In1(リミットスイッチ)
RA3 シリアル信号入力用
RA2 In4
RA1 In3
RA0 In2

<出力ポート>
RA5 LEDと圧電ブザー用
RC5 S3,M2R
RC4 S2,M3L
RC3 S1,M3R
RC2 S6,M1L
RC1 S5,M1R
RC0 S4,M2L

◆基板の入力ポート:In1-In4
In1からIn4はセンサーなどを接続する入力ポートです。In1にはリミットスイッチが標準で接続されています。これらの入力ポートはプルアップされていて入力が無い状態ではHighとなっています。
myurobo.exeには入力ポートの状態によってプログラムの流れを変える条件ジャンプが2つ用意されています。

入力ありジャンプ,m,n  //入力ポートn(1-4)が入力あり(ON)ならアンカー番号mにジャンプ
入力なしジャンプ,m,n  //入力ポートn(1-4)が入力なし(OFF)ならアンカー番号mにジャンプ

アンカー,10        //アンカー番号10
  入力なしジャンプ,10,1 //リミットスイッチ(入力ポート1)が押れていなければアンカー番号10にジャンプ
  ブザー,1
ジャンプ,10        //アンカー番号10へジャンプ

上のプログラムはリミットスイッチが接続されているIn1を調べ押されたらブザーを鳴らします。
※リミットスイッチは標準で入力ポート1(In1)に接続されています。

◆基板の出力ポート:S1-S6
S1からS6はRCサーボを制御するポートですが右図のように抵抗を介してLEDを光らせることもできます。またモータードライバー(SANYO LB1638)が接続されていてDCモーターの制御が可能です。
MYUROBO命令には"前進","右回り","停止"などのモーター制御命令、ポート出力命令などがある他、PA(ポートA)やPC(ポートC)に直接値を入力する方法もあります。
※モーター制御命令などの出力命令は、出力命令以外の命令の間も出力状態を維持します。前進の後、ブザー命令を実行するとブザーを鳴らしながら前進します。

ポート出力,m,n   //第1引数m(0-255)x0.1秒だけ 第2引数のデータn(0-255)をポートに出力する

ポート出力命令は、出力する時間とPIC16F630のポートCの下位6ビットとポートAの5ビット目を組み合わせた値を指定します。前進(5)とモーター左(16)を同時実行するには、それそれの値を加えた値(21)をポートに出力します。


PA,出力データ(0-255) PC,出力データ(0-255) PA(ポートA)やPC(ポートC)に直接値を出力する。
時間,時間(0-255)                    第1引数の時間(0-255) x 0.1秒だけ待つ

上の表を参考に PC,5 を実行すると前進します。次に 時間,10 と続けると 前進,10 と同じ動作となります。
また、2進表記を使うとビット操作が解りやすくなります。前進とモーター左を同時実行するには、RC0,RC2,RC4 のビットを 1 にすることなので PC,B'10101' と書くことで可能となります。

◆2進数と16進数
コンピュータデータの最小単位はビットです。1か0、ONかOFFかです。
これが8つ集まった単位がバイトとなります。
1バイトはB'00000000'からB'11111111'までの数、0から255までの数字を扱います。
16進数は4ビットを0からFの1文字で表しますから1バイトは上位4ビット、下位4ビットの2文字で表現します。
上の表から後退を2進数で表すとB'00100010'となり10進数では34となります。
これを16進では左表からH'22'と表します。
ポート出力命令や下のLED制御ではビットごとのデータを扱うので2進数や16進数を使うと便利です。

MYUROBO転送ソフの16進表記
・H'10' (10進数の16)

MYUROBO転送ソフトの2進表記
・B'10000' (10進数の16)


●ブレッドボードを使ったLEDの制御
ブレッドボードを使うと電子回路の実験が簡単にできます。ミュウロボ制御基板側には電子部品店で売られているシングルピンソケット(メス)を半田付けしてありブレッドボードのLEDとはジャンパー線を使って上右図の配線をしてあります。
基板で使われているPIC16F630はポートCが出力にセットされていて抵抗を介してLEDを直接点灯させることができます。

<ポート出力命令を使ってLEDを光らせる>
ポート出力命令は、出力する時間とPIC16F630のポートCの下位6ビット(RC0-RC5)とポートAの5ビット目を組み合わせた値を指定します。
※右上図の配線の場合、各LEDはポートCの値によって光ったり消えたりします。

ポート出力,m,n   //第1引数m(0-255)x0.1秒だけ 第2引数のデータn(0-255)をポートに出力する

◆2進数を理解する
右図は、10進数と2進数の比較表です。2進数の'1'はLEDの点灯、'0'は消灯となります。
ポート出力命令の第2引数を'5'とした場合、右表から2進数では'0101'となりますからLEDは1つおきに光ります。
逆に'1010'と光らせるには、ポート出力命令の第2引数を10進数の'10'と指定します。
下のプログラムは0.1秒ごとLEDを交互に光らせたものです。

//LEDを1つおき交互に光らせる
アンカー,10    //アンカー番号10
  ポート出力,1,B'0101'   //ポートCにB'0101'(5)を0.1秒間出力
  ポート出力,1,B'1010'   //ポートCにB'1010'(10)を0.1秒間出力
ジャンプ,10    //アンカー番号10へジャンプ

◆2進数・16進数の表記方法
B'1010'と書くと2進数を表記できます。これは右表から10進数の10です。16進表記では H'A'となります。

※上のプログラムはLED4個を交互に光らせているものです。値を変えることでLED6個の制御ができます。

<ポートCに直接値をセットしてLEDを光らせる>
ポートC(PC)に値を入力後、時間命令(wait)を実行することでLEDを光らせることができます。

PC,n   //ポートCにn(0-255)を出力、m(0-255)x0.1秒だけ待つ
時間,m

下のプログラムは0.1秒ごとLEDの2進数を1づつ増やすというものです。Aレジスタの値を1づつ増やしポートCに出力しています。
※Aレジスタを利用すると値の加減算や論理演算などができます。
※下のプログラムでは、INCA や APC などのミュウアセンブラ命令を使っています。ミュウアセンブラ一覧はこちら!

//0.1秒ごとにポートCの値を1づつ増やす
アンカー,10    //アンカー番号10
  INCA     //Aレジスタの値を1増やす
  APC      //Aレジスタの値をポートCに出力
  時間,1    //0.1秒の待ち時間
ジャンプ,10    //アンカー番号10へジャンプ

MYUROBO-1基板には入力ポートを4個持っています。In1には標準でリミットスイッチが接続されています。下のプログラムはリミットスイッチを押した時、ポートCの値を1減らし離すと1増やすよう上のプログラムを改良したものです。

//リミットスイッチを押した時、ポートCの値を1減らし離すと1増やす
アンカー,10    //アンカー番号10
  入力ありジャンプ,20,1 //リミットスイッチ(入力ポート1)が押されたらアンカー番号20にジャンプ
  INCA     //Aレジスタの値を1増やす
  ジャンプ,30  //アンカー番号30にジャンプ
アンカー,20    //アンカー番号20
  DECA     //Aレジスタの値を1減らす
アンカー,30    //アンカー番号30
  APC      //Aレジスタの値をポートCに出力
  時間,1    //0.1秒の待ち時間
ジャンプ,10    //アンカー番号10へジャンプ

コンピュータで扱う値の最小単位はビットです。2進数の'1'と'0'、LEDのONかOFFです。これが8つ集まった単位がバイト(0-255)となります。
下はAレジスタを使ったいろいろな演算命令です。計算結果を2進数(ビット)で表示してます。

演算の中にはビットを右シフト(RRA)や左シフト(RLA)する命令があります。
※右シフトすると値は半分に、左シフトすると値は倍になります。
下のプログラムはシフト命令を利用してリミットスイッチを押している間LEDが下か上へ、離している間上から下へ点灯するようにしてあります。

//LED Shift リミットスイッチを押している間LEDが下か上へ離している間上から下へ点灯する
PC,1
アンカー,10
 時間,1     //0.1秒のウエイト
 入力ありジャンプ,30,1
 PCA  //リミットスイッチOffで左シフト
 CMP,32
 JNZ,20
 PC,1
 ジャンプ,10
アンカー,20
 PCA
 CLC
 RLA
 APC
 ジャンプ,10
アンカー,30
 PCA  //リミットスイッチOnで右シフト
 CMP,1
 JNZ,40
 PC,32
 ジャンプ,10
アンカー,40
 PCA
 CLC
 RRA
 APC
 ジャンプ,10