【デジタル入力(触覚センサー)】
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レジスタ)
続けて半角のスペースなどを送信するとステップ動作となりレジスタの変化などがわかります。
![](step.gif)
※STEPIN命令とBREAKP命令
プログラム中に以下の命令をセットしておくとレジスタの値をシリアル送信してプログラムが中断します。
STEPIN デバッグモードとなりレジスタの値をシリアルポートに出力。任意のシリアル入力でステップ動作となる。
BREAKP レジスタの内容をシリアルポートに出力し停止。任意のシリアル入力で次の命令から再実行する。
|