スタジオ ミュウ

MYUROBO-1A基板(RS-232C)

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)命令一覧 | ドリトル命令一覧

<MYUROBO-1A基板を使った製品>
■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%税込)

<主な仕様>
動作電圧: 2.5V-5.5V
内部クロック:8MHz タイマー1:250KHz
ユーザープログラムサイズ:255bytes 変数エリア:80bytes サブルーチンの深さ:20
ラジコン用サーボモーター6個まで制御可能、またメロディのプログラムも可能
デジタルポート:入力4BIT + 出力6BIT
アナログ入力:4チャンネル(8/10BIT)
シリアルポート:9600bps StopBit=1 ノンパリティ フロー制御無
16BIT符号付四則演算、デバッグ機能、タイマー割込みなど
※搭載しているPICは16F688と同じ機能
※触覚センサー・3P転送ケーブル付き

■アナログ計測が可能
距離や加速度・温度など各種センサーの値を8ビットまたは10ビットで計測できます。

■パソコンとの通信が双方向で可能
基板に接続したセンサーの計測値をパソコンで表示するなどリアルタイム計測が可能です。

・MYUROBO-1A基板のソフトは、MYUROBO転送ソフトMYU BASIC構造化ドリトルExcelなど

※RS-232ChタイプはパソコンにRS-232C端子が必要、無い場合はUSB変換ケーブルが必要、Windows8対応のUSB変換ケーブルはこちら

センサーを使った計測と制御

【デジタル入力(触覚センサー)】
MYUROBO-1A基板は入力ポートを4個(In1-In4)持っています。デジタル入力の場合、各ポートはソフトプルアップされHighとなっていて触覚がなにかに触れると入力ポートのIn2(右)またはIn3(左)がアースされLowになり壁などを感知できます。
触覚センサーの制御プログラムは、MYU BASIC構造化ドリトルMYUROBO転送ソフトの解説をご覧ください。
基板の回路図はこちら ※In1はタクトスイッチに接続されています。

【アナログ入力(距離センサー)】
MYUROBO-1A基板の入力ポートIn1-In4はアナログ入力とすることができます。デジタル入力が有るか無いか'1'か'0'を返すのに対し、アナログ入力は入力電圧を8BIT(0-255)または10BIT(0-1023)の値として返します。
アナログ入力は、AN命令を実行することで可能になります。
※距離や加速度・温度などのセンサーを使った計測が可能です。
右はIn4に距離センサーを接続してあります。

◆距離センサー(GP2Y0A21YK0F)
動作電圧は4.5V〜5.5V、測定可能距離は約10cm〜80cm
センサーは壁までの距離によって出力電圧が変化します。それを基板の入力ポートに接続し距離を計測します。


◆アナログ値のリアルタイム計測
(MYU BASICとMYUROBO転送ソフト)

基板とPCを転送ケーブルで接続、MYU BASICおよびMYUROBO転送ソフトを立ち上げ計測/リモートボタンを押すと右のダイヤログが現れリアルタイム計測が出来ます。 AN4計測ボタンを押してください。壁までの距離によってアナログ値がリアルタイムで変化するのが解ります。制御プログラムのしきい値設定などの参考にできます。
MYU BASICのリアルタイム計測はこちらMYUROBO転送ソフトはこちら
エクセルを使ってもリアルタイム計測が可能です。詳しくはエクセルで計測をご覧ください。
※MYUROBO-1A基板のPICは688と同じです。CPU選択を688にしてください。

下はドリトル用リアルタイム計測プログラムです。
計測ボタンを押すと8BITアナロク計測が行われ、結果が左に表示されます。

//AN4のリアルタイムアナログ計測(構造化ドリトルV2.1)
値表示=フィールド!作る。
ロボ太=MYU!"com1"作る。
ロボ太:計測=「ロボ太! ひらけごま
 74 出力 0.01 待つ  //AN命令CODE ※CODEについてはこちらをご覧ください。
 4 出力 0.01 待つ   //In4のアナログ値をAレジスタにセット
 221 出力 0.1 待つ。 //DECRS命令(Aレジスタの値を10進シリアル出力)
 値表示!(ロボ太!(ロボ太!データ数?)値?)書く。
 ロボ太!とじろごま。」。
計測ボタン=ボタン!"計測" 作る -200 220 位置。
計測ボタン:動作=「ロボ太!計測」。

下は実際の計測結果です。これらを参考に制御プログラムを作ります。

◆距離センサーの計測結果

距離 cm 7 8 9 10 12 15 20 25 30 40 50 60 70 80
アナログ値 166 178 171 163 141 115 89 73 62 48 39 34 31 30


◆距離センサーを使った制御プログラム
計測結果を参考にプログラムしていきます。下は前方の壁までの距離を測り一定の位置で止まるプログラムです。
※距離センサーを使った迷路脱出ロボットはこちら!

//一定の距離で止まるロボット(構造化ドリトルV2.1)
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
「!
  4 AN           //In4のアナログ値(8BIT)→Aレジスタ
  「!60 未満のA」なら   //壁が遠い場合
    「!前進」
  そうでなければ「!100 未満のA」なら
    「!停止」
  そうでなければ   //壁に近づきすぎたら
    「!後退」実行
」繰り返す
おわりロボット」。
ロボ太!転送命令。
//一定の距離で止まるロボット(MYU BASIC)
Byte A         //変数Aの宣言
Do
  A=AN(4)      //In4のアナログ値を8BITで取得
  If A<60 Then   //壁が遠い場合
    前進
  ElseIf A<100 Then
    停止
  Else       //壁に近づきすぎたら
    後退
  ENdIf
Loop

//一定の距離で止まるロボット(myurobo.exe)
アンカー,10
  AN,4     //In4のアナログ値(8BIT)→Aレジスタ
  CMP,60
  JNC,20    //壁が遠い場合
    前進
    ジャンプ,10
アンカー,20
  CMP,100
  JNC,30
    停止
    ジャンプ,10
アンカー,30   //壁に近づきすぎたら
    後退
ジャンプ,10

◆デジタル値のリアルタイム計測
MYUROBO-1A基板ののポートAは、In1-In4が割り当てられています。デジタル入力の場合、In1-In4は、プルアップされ入力があると'1'から'0'なります。
下はドリトル用リアルタイム計測プログラムです。計測ボタンを押すとポートAの値が左に16進で表示されます。
エクセルを使ってもリアルタイム計測が可能です。詳しくはエクセルで計測をご覧ください。
MYU BASICを使ってもリアルタイム計測が可能です。詳しくはこちらをご覧ください。

//ポートAの値をリアルタイムHEX表示(構造化ドリトルV2.1)
値表示=フィールド!作る。
ロボ太=MYU!"com1"作る。
 ロボ太:計測=「ロボ太! ひらけごま
 129 出力 0.01 待つ    //PAA命令(ポートA→Aレジスタ)
 222 出力 0.01 待つ    //HEXRS(Aレジスタの値をHEXでシリアル出力)
 70 出力 0.01 待つ    //RS命令("H"をシリアル出力)
 ("H") 出力 0.1 待つ。    //"H"
 値表示!(ロボ太!(ロボ太!データ数?)読む)書く。
 ロボ太!とじろごま。」。
計測ボタン=ボタン!"計測" 作る -200 220 位置。
計測ボタン:動作=「ロボ太!計測」。
入力があるとIn1-In4は、'1'から'0'なります。
  RA7 RA6 RA5 RA4 RA3 RA2 RA1 RA0  
        In1   In4 In3 In2  
ポートA値 0 0 0 1 0 1 1 1 17H(16進)

◆ハイパーターミナルを使って計測データ表示
プログラムを転送実行してハイパーターミナルで表示する計測方法もあります。下のプログラムはIn1-In4のアナログ値を10BITで取得し表示したものです。
※ハイパーターミナルの設定方法はこちら!
※ハイパーターミナルは、XP標準の通信ソフトです。VistaやWindows7の場合はフリーの通信ソフトを入手してください。
※3P転送ケーブルは接続したままでプログラムを実行すると右図のように結果が表示されます。

//In1-In4のアナログ値を1秒ごとにシリアル送信(構造化ドリトルV2.1)
ロボ太=MYU!"com1"作る。
ロボ太:アナログ計測=「|ポート番号|!(ポート番号)AN
 ANAX          //AN命令後実行すると10BITアナログ入力になる
 65 RS 78 RS      //"AN"をシリアル出力
 (ポート番号+48)RS 61 RS //ポート番号"="をシリアル出力
 AXDECRS         //AXレジスタの値を符号付10進右詰めシリアル出力
 13 RS 10 RS」。     //改行コードをシリアル出力
ロボ太:転送命令=「!はじめロボット
 「!
  12 RS      //画面のクリア
  1 アナログ計測 //In1のアナログ計測
  2 アナログ計測 //In2のアナログ計測
  3 アナログ計測 //In3のアナログ計測
  4 アナログ計測 //In4のアナログ計測
  10 時間     //1秒のWAIT
 」繰り返す
おわりロボット」。
ロボ太!転送命令。

//In1-In4のアナログ値を1秒ごとにシリアル送信(MYU BASIC)
Int C,AD      //INT型変数CとADの宣言
Do
 RS=12       //画面のクリア
 For C=1 To 4
  AD=AN10(C)  //In1-4のアナログ値を10BIT(0-1023)で取得
  RS="A"     //文字を送信
  RS="N"
  RS="0"+C
  RS="="
  DEC16RS=AD //値を10進右詰め(符号付)で送信
  RS=13      //改行
  RS=10
 Next
 Wait 10    //1秒のウエイト
Loop

◆ハイパーターミナルを使ってリモート操作
※下のプログラムを実行すると、パソコン側からハイパーターミナルなどの通信ソフトを使い転送ケーブルをつないだままロボットをリモコン制御できます。

//ロボットをリモート操作(構造化ドリトルV2.1)
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
「!
  READRS           //Aレジスタにシリアルデータをセット
  「!("1") 等しいA」なら「!左回り」実行 //キーボードの"1"を押すと左回り
  「!("2") 等しいA」なら「!前進」実行 //キーボードの"2"を押すと前進
  「!("3") 等しいA」なら「!右回り」実行 //キーボードの"3"を押すと右回り
  「!("4") 等しいA」なら「!停止」実行 //キーボードの"4"を押すと停止
」繰り返す
おわりロボット」。
ロボ太!転送命令。
//ロボットをリモート操作(MYU BASIC)
Do
  REMOTE GETRS    //GETRSで1バイトシリアル信号を受取る
Loop
Proc REMOTE(S)
  If S="1" Then
    左回り      //キーボードの"1"を押すと左回り
  ElseIf S="2" Then
    前進      //キーボードの"2"を押すと前進
  ElseIf S="3" Then
    右回り     //キーボードの"3"を押すと右回り
  ElseIf S="4" Then
    停止       //キーボードの"4"を押すと停止
  EndIf
EndProc

◆ボリュームの角度によってサーボをコントロール
アナログ入力を使うと簡単なプログラムでサーボを制御できます。下はIn4にボリュームを接続、S1に接続したRCサーボの角度をコントロールします。

//ボリュームよってサーボをコントロール(構造化ドリトルV2.1)
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
「!
  4 AN    //In4のアナログ値をAレジスタにセット
  AARG1   //Aレジスタ→ARG1レジスタ(サーボ角:CMD命令実行時の第1引数)
  1 ARG2   //1→ARG2レジスタ(サーボ番号:CMD命令実行時の第2引数)
  107 CMD  //サーボ命令を実行 ※CMD命令はこちらをご覧ください。
」繰り返す
おわりロボット」。
ロボ太!転送命令。

//ボリュームよってサーボをコントロール(MYU BASIC)
Byte A
Do
  A=AN(4)    //In4のアナログ値を8BIT(0-255)で取得
  Servo A,1   //S1のサーボを制御
Loop
//ボリュームよってサーボをコントロール(myurobo.exe)
アンカー,10
  AN,4    //In4のアナログ値をAレジスタにセット
  AARG1   //Aレジスタ→ARG1レジスタ
  ARG2,1   //1→ARG2レジスタ(サーボ番号)
  CMD,107  //サーボ命令を実行
ジャンプ,10

◆サーボをパソコンからコントロール(構造化ドリトルV2.1)
ドリトルのスライダーを使いS1に接続したサーボをパソコン側から転送ケーブルを通してコントロールできます。
エクセルを使ってもコントロール可能です。詳しくはエクセルで計測をご覧ください。
MYU BASICを使ってもコントロール可能です。詳しくはこちらをご覧ください。

ロボ太=MYU! "COM1"作る。
ロボ太:サーボセット=「|x| ロボ太! ひらけごま
  107 出力 0.01 待つ     //サーボ命令CODE
  (x+150) 出力 0.01 待つ   //サーボ角
  1 出力 0.1 待つ      //サーボ番号(S1)
  とじろごま。」。
スライダー1 =スライダー! 作る -250 220 位置。
スライダー1:動作=「ロボ太!(スライダー1 ! 値?) サーボセット」。

■デバッグモードおよびトレース動作
ハイパーターミナルと接続した状態でパソコンのキーボードからSTEPIN命令CODE(188)半角の'シ'を送信するとデバッグモードになります。 MYUロボのプログラムポインタ、コマンドコード、レジスタの内容がHEX(16進表記)で送られてきます。(AH.A.ARG2.ARG1.IXP.IX.IXM.FSR.INDFレジスタ)
続けて半角のスペースなどを送信するとステップ動作となりレジスタの変化などがわかります。

※STEPIN命令とBREAKP命令
プログラム中に以下の命令をセットしておくとレジスタの値をシリアル送信してプログラムが中断します。
STEPIN  デバッグモードとなりレジスタの値をシリアルポートに出力。任意のシリアル入力でステップ動作となる。
BREAKP  レジスタの内容をシリアルポートに出力し停止。任意のシリアル入力で次の命令から再実行する。