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

MYUロボは時間の長さによってモーターを制御しています。ロボットの動きは電池やモーターのパワー、タイヤの径・ギヤー比などに左右されます。同じプログラムでも電池が新品か古いかによっても動きが変わってしまいます。
この問題を解決するためにセンサーを使うことは有効な方法です。

◆デジタル入力ポート
MYUROBO-1基板はデジタル入力ポートを4個持っています。デジタル入力ポートはポートの電圧が High(高い) か Low(低い)で判断されます。High は 1 、Low は 0 で表されますが各ポートはプルアップされていますので通常は High となっています。
このポートにスイッチを接続した場合、スイッチOff は High、スイッチOn は Low となります。
Cdsはセルに当たる光の量に従って抵抗値が変化します。セルに当たる光が多ければ抵抗値は低くなり、右の回路図の場合、明るいと Low 暗いと High となります。

◆アナログ入力ポート
MYUUSB基板やミュウロボ基板はデジタル入力に加えてアナログ入力が可能です。
Cdsをデジタル入力に接続した場合、High か Low でしか判断できませんが、アナログ入力ではポートの電圧を8ビット(0-255)または10ビット(0-1023)の値で計測できます。
Cdsの場合、明るさを正確に測ることができます。その他、温度センサー、距離センサーなどの値を簡単に計測できます。
※アナログ入力を使った工作例はこちら!

右のロボットには前方左右にタッチセンサーが取り付けてあり、それぞれIn1とIn2に接続されています。In3には光センサーであるCdsが接続されています。

左は、前方の壁を左右のセンサーが感知したら後退して向きを変えるプログラムの流れを表したものです。
センサーは2個あり、どちらかが壁を感知したら「後退して向きを変える」というOR(論理和)条件が必用になります。
このフローチャートどおり動けば迷路のようなコースでもロボットは動き回ることができます。

下はこのフローチャートを参考に作ったプログラムです。デジタルポートを使っています。
このプログラムの動画(1M)はこちら!

※各プログラムはリミットスイッチ(In1)を押すとスタートします。
//前方の壁を左右のセンサーが感知したら後退して向きを変える(MYU BASIC)※688は最新版を使ってください!
前進 10               //最初に1秒前進
Do
  前進
  If In(1)=0 OR In(2)=0 Then //In1またはIn2が押された場合LowとなりThenからEndIfの間を実行
    後退 3
    左回り 3
  EndIf
Loop

//前方の壁を左右のセンサーが感知したら後退して向きを変える(構造化ドリトル)
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
10 前進                       //最初に1秒前進
「!前進
  「!1 入力あり」か「!2 入力あり」なら「! //In1またはIn2が押された場合「!...」内を実行
    3 後退
    3 左回り
  」実行
」繰り返す
おわりロボット」。
ロボ太!転送命令。

//前方の壁を左右のセンサーが感知したら後退して向きを変える(myurobo.exe)
前進,10            //最初に1秒前進
アンカー,10         //アンカー番号10を宣言
  前進
  入力ありジャンプ,11,1 //In1が押されたらアンカー番号11にジャンプ
  入力ありジャンプ,11,2 //In2が押されたらアンカー番号11にジャンプ
ジャンプ,10         //アンカー番号10にジャンプ
アンカー,11         //アンカー番号11を宣言
  後退,3
  左回り,3
ジャンプ,10         //アンカー番号10にジャンプ

●光センサー(Cds)を使ったプログラム(デジタル入力)
このロボットには光センサー(Cds)がIn3に接続されています。Cdsは明るいと Low に、暗いと High になります。
下の例は、Cdsが光をさえぎられると「後退して向きを変える」というものです。
このプログラムの動画(466K)はこちら!
またタッチセンサーも働かせて壁の移動、暗くなるところで停止。このような競技も可能です。この動画(2M)はこちら!

//光をさえぎられると後退して向きを変える(MYU BASIC)
前進 10       //最初に1秒前進
Do
  前進
  If In(3) Then //In3がHighならThenからEndIfの間を実行
    後退 3
    左回り 3
  EndIf
Loop

//光をさえぎられると後退して向きを変える(構造化ドリトル)
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
10 前進                       //最初に1秒前進
「!前進
  3 入力なし「!3 後退 3 左回り」実行 //In3がHigh(入力なし)なら「!...」内を実行
」繰り返す
おわりロボット」。
ロボ太!転送命令。

//光をさえぎられると後退して向きを変える(myurobo.exe)
前進,10            //最初に1秒前進
アンカー,10         //アンカー番号10を宣言
  前進
  入力なしジャンプ,10,3 //In3がHighならアンカー番号10にジャンプ
  後退,3
  左回り,3
ジャンプ,10         //アンカー番号10にジャンプ

●アナログ入力で光センサー(Cds)を計測 (688タイプとミュウロボ2基板のみ可能)
688タイプはIn1-In4、ミュウロボ2基板はAN0-AN4がアナログポートになります。
アナログポートは、センサーの出力電圧を計測できます。
上のロボットはIn3にCdsが接続されています。ICクリップ付き転送ケーブルを使えば計測データをパソコンに送りリアルタイム表示できます。
下はその計測プログラムと計測結果です。

■MYU-516 ICクリップ付き転送ケーブル 630円(税込)
・ICクリップ付き転送ケーブルを使い計測データをパソコンに送りハイパーターミナルで表示できます。
・接続は従来のコネクタに加えICクリップを使って基板の抵抗線(RA5)に引っ掛けて使います。


◆ハイパーターミナルを使って計測データ表示
In3に接続された光センサー(Cds)のアナログ値がリアルタイムに表示されます。
明るさを変え、アナログ値が変化することを確かめてください。
※ハイパーターミナルの設定方法はこちら!
※ハイパーターミナルを立ち上げたまま転送するとエラーになります。

//In3のアナログ値を0.5秒ごとにシリアル送信(MYU BASIC)
Byte AD
Do
  RS=12      //画面のクリア
  AD=AN(3)  //アナログ値を8BIT(0-255)で取得
  RS="A"   //文字を送信
  RS="N"
  RS="3"
  RS="="
  DECRS=AD  //値を10進右詰めで送信
  Delay 500   //0.5秒のDelay
Loop
//In3のアナログ値を0.5秒ごとにシリアル送信(構造化ドリトル)
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
「!
  12 RS   //画面のクリア
  3 AN    //In3のアナログ値を8BIT(0-255)で取得
  65 RS   //"A"をシリアル出力
  78 RS   //"N"をシリアル出力
  51 RS   //"3"をシリアル出力
  61 RS   //"="をシリアル出力
  DECRS  //値を10進右詰めで送信
  5 時間   //0.5秒のWait
」繰り返す
おわりロボット」。
ロボ太!転送命令。
//In3のアナログ値を0.5秒ごとにシリアル送信(myurobo.exe)
アンカー,10
  RS,12   //画面のクリア
  AN,3   //In3のアナログ値を8BIT(0-255)で取得
  RS,"A"  //文字を送信
  RS,"N"
  RS,"3"
  RS,"="
  DECRS  //値を10進右詰めで送信
  時間,5  //0.5秒のWait
ジャンプ,10

◆計測結果
明るさの条件 アナログ値
室内の明るさ 38
手でかくす 105
ノートでかくす 120
完全にかくす 250

●明るい状態では前進、Cdsを手でかくすと停止、さらにかくすと後退するロボットプログラム
In3に接続された光センサー(Cds)のアナログ値を計測し、その明るさによってロボットの動きを制御します。
右や下は、計測結果を参考に作ったプログラムです。
このプログラムの動画(945K)はこちら!
//Cdsをかくすと停止、さらにかくすと後退するロボット(MYU BASIC)
Byte A
Do
  A=AN(3)      //In3のアナログ値を8BITで取得
  If A>100 Then   //さらにかくすと
    後退
  ElseIf A>50 Then //Cdsをかくすと
    停止
  Else       //かくさないなら
    前進
  ENdIf
Loop

//Cdsをかくすと停止、さらにかくすと後退するロボット(構造化ドリトル)
ロボ太=MYU!"com1"作る。
ロボ太:転送命令=「!はじめロボット
「!
  3 AN             //In3のアナログ値を8BITで取得
  「!100 超えるA」なら    //さらにかくすと
    「!後退」
  そうでなければ
    「!「!50 超えるA」なら //Cdsをかくすと
        「!停止」
      そうでなければ    //かくさないな
        「!前進」実行
    」実行
」繰り返す
おわりロボット」。
ロボ太!転送命令。
//Cdsをかくすと停止、さらにかくすと後退するロボット(myurobo.exe)
アンカー,10
  AN,3     //In3のアナログ値を8BITで取得
  CMP,100   //AN値を100と比較
  JC,20     //AN値が100以下ならアンカー番号20へジャンプ
    後退
ジャンプ,10
アンカー,20
  CMP,50   //AN値を50と比較
  JC,30     //AN値が50以下ならアンカー番号30へジャンプ
    停止
ジャンプ,10
アンカー,30
  前進
ジャンプ,10