2006a/B4

課題3:光を追いかけるロボット

懐中電灯の光を追いかけて進むロボットを作って、さらに以下の中から2種類以上のプログラムを作成せよ。

  1. 光源を見失った時には曲を演奏しながらぐるっと旋回して光源を探す
  2. 光源を見失った時には明るさに比例した周波数の音を出しながら旋回して光源を探す
  3. 光源を見失っていないときにはある曲を演奏し、見失った時には別の曲を演奏しながら光源を探す
  4. 上記のいずれかに『光源に近づき過ぎると停止する』という機能を追加する

プログラム

光を追いかけるプログラム(1)

製作者//Masa
製作日//2006/7/6
製作時間//10時間
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1は光センサー
SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3は光センサー

while(true){ //条件が正しい場合は無限に実行する
if(SENSOR_1 >40 && SENSOR_3<40)//センサー1の値が40以上でセンサー3の値が40以下のとき
}
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_C);
Off(OUT_A);//センサー1の方に大きな反応があるということは ロボットの左側に光源があるという事なので
左に回転して光源を探す
}
if (SENSOR_3 >40 && SENSOR_1<40)//センサー3の値が40以上でセンサー1の値が40以下のとき
{
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_A);
Off(OUT_C);//右側に反応がある場合は右に回転して光源を探す
}

if(SENSOR_1<50 && SENSOR_3<50)//センサー1と3の値が両方50以下のとき
{
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_A);
OnRev(OUT_C);//光を見失ったという事になるので回転して光源を探す
}

if(SENSOR_1>40 && SENSOR_3>40)//センサー1と3の値が両方40以上のとき
{
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_A+OUT_C);//常に光に向いている事になるので光源へ向かって直進
}
}
 }

No.1:1+a

製作者//基本プログラム→Masa
        音楽プログラム→Chosan //曲名:チューリップ

#define Do  523//ドの音を出す
#define Re  587//レの音を出す
#define Mi  659//ミの音を出す
#define So  784//ソの音を出す
task play_music()//音楽を流すためのプログラムです
{
      while(true)//条件が正しいときは無限に実行する
      {
           PlayTone(Do,15); Wait(20);//さ  
           PlayTone(Re,15); Wait(20);//い  
           PlayTone(Mi,25); Wait(30);//た 
          
           PlayTone(Do,15); Wait(20);//さ
           PlayTone(Re,15); Wait(20);//い
           PlayTone(Mi,25); Wait(30);//た
          
           PlayTone(So,15); Wait(20);//ちゅー
           PlayTone(Mi,15); Wait(20);//りっ
           PlayTone(Re,15); Wait(20);//ぷ
           PlayTone(Do,15); Wait(20);//の
           PlayTone(Re,15); Wait(20);//は
           PlayTone(Mi,15); Wait(20);//な
           PlayTone(Re,25); Wait(30);//が
       }
}

感度を上げるために光センサーの値を10ずつ増やしました

task main()//光を追跡するプログラムの実行
{
SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1は光センサー
SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3は光センサー
start play_music;//音楽開始
while(true)//条件が正しい場合は無限に実行する
{

if(SENSOR_1 >50 && SENSOR_3<50)//センサー1の値が50以上でセンサー3の値が50以下のとき
{stop play_music;//音楽を止める
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_C);
Off(OUT_A);//左に回転して光源を探す
}

if(SENSOR_1<60 && SENSOR_3<60)//センサー1と3の値が両方60以下のとき
{
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_A);
OnRev(OUT_C);//回転して光源を探す
}

if (SENSOR_3 >50 && SENSOR_1<50)//センサー3の値が50以上でセンサー1の値が50以下のとき
{stop play_music;//音楽を止める
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_A);
Off(OUT_C);//右に回転して光源を探す
}

if(SENSOR_1>50 && SENSOR_3>50)//センサー1と3の値が両方50以上のとき
{stop play_music;//音楽を止める
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_A+OUT_C);//光源へ向かって直進
}
 }}

No.2:1+a+d

製作者//No.1と同じ 
//別に区切ってある所のみ追加
#define Do  523//ドの音を出す
#define Re  587//レの音を出す
#define Mi  659//ミの音を出す
#define So  784//ソの音を出す
task play_music()//音楽を流すためのプログラムです
{
      while(true)//条件が正しい場合は無限に実行する
      {
           PlayTone(Do,15); Wait(20);//さ  
           PlayTone(Re,15); Wait(20);//い  
           PlayTone(Mi,25); Wait(30);//た  
          
           PlayTone(Do,15); Wait(20);//さ
           PlayTone(Re,15); Wait(20);//い
           PlayTone(Mi,25); Wait(30);//た
           
           PlayTone(So,15); Wait(20);//ちゅ-
           PlayTone(Mi,15); Wait(20);//りっ
           PlayTone(Re,15); Wait(20);//ぷ
           PlayTone(Do,15); Wait(20);//の
           PlayTone(Re,15); Wait(20);//は
           PlayTone(Mi,15); Wait(20);//な
           PlayTone(Re,25); Wait(30);//が
       }
}
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);//センサー1は光センサー
SetSensor(SENSOR_3,SENSOR_LIGHT);//センサー3は光センサー
start play_music;//音楽開始
while(true)//条件が正しいときは無限に実行する
{

if(SENSOR_1 >50 && SENSOR_3<50)//センサー1の値が50以上でセンサー3の値が50以下のとき
{stop play_music;//音楽を止める
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_C);
Off(OUT_A);//左に回転して光源を探す
}

if(SENSOR_1<60 && SENSOR_3<60)//センサー1と3の値が両方60以下のとき
{
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_A);
OnRev(OUT_C);//回転して光源を探す
}

if (SENSOR_3 >50 && SENSOR_1<50)//センサー3の値が50以上でセンサー1の値が50以下のとき
{stop play_music;//音楽を止める
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_A);
Off(OUT_C);//右に回転して光源を探す
}

if(SENSOR_1>50 && SENSOR_3>50)//センサー1と3の値が両方50以上のとき
{stop play_music;//音楽を止める
Off(OUT_A+OUT_C);//一度動きを止めて
OnFwd(OUT_A+OUT_C);//光源へ向かって直進
}
if(SENSOR_1>65&&SENSOR_3>65)//両方のセンサーの値が65以上のとき
{stop play_music;//音楽をとめる
Off(OUT_A+OUT_C);//止まる
}
}}

苦労した点

  • 今までプログラム担当では無かったので、要領がわからず、去年の物を参考にした。
  • 感知する時の光の強さの調整が難しかった。2つの光センサーを くっつけすぎると両方のセンサーが反応してしまいその辺りも苦労した。というか、この課題は全てに苦労した気がする。
  • 基本プログラムは順調に動いたけれど、音楽と組み合わせると思い通りに動いてくれなかった・・・
    • 一度音が止まると新しく演奏されない。→未解決
    • 一つの音がずっと鳴りっぱなしになってしまう。→未解決
  • どうして動かなくなるのかがわからない状態だった。

工夫した点

  • 2つの光センサーをある程度角度をつけてくっつけた。
    NEC_0091.JPG
  • たくさん定義をつけることでスムーズに動くようになった。
  • ロボット本体は課題2のタッチセンサーを光センサーに変えるだけにして、簡略化した。
  • 知り合いに聞いて、少しでも情報を集めるようにした。
  • 疑問が発生したら、なるべく作り変えて実際に走らせるようにして、机上の空論は避けるようにした。

感想

  • 実に大変な課題だった。曲決めにも悩んだし、光の調整にも悩ん だし、本当に大変な課題だった。でも、それなりに上手くいって 良かったと思う。by Oga
  • 集まる機会がなく、まとまりがなかったと思う。
  • 楽譜探しに苦労した。プログラム担当?だったので、責任重大でした。by Masa

コメントをどうぞ

  • 欲を言うと、プログラムの解説を読みたいです。(コメント文だけでなく) -- ゆき(TA)? 2006-07-07 (金) 17:02:54


添付ファイル: filerobo1.bmp 100件 [詳細] fileNEC_0091.JPG 200件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-08-20 (日) 22:47:47