☆目次

マシン紹介

DSC00260.JPG

今回のマシンは実際、光を追いかける仕事をするにあたってマシンに手を加えることがほとんどありませんでした。

モーターを2つつけたドライブベースに光センサー2つをくっつけただけです。赤く光っているレーザーポインタのようなものが光センサーです。

課題1のマシンと比べても明らかにマシンは簡単な構造になっていてほとんど時間がかかっておりません。

ただそれではあまりに貧相なので、まぁなんというか写真の通り思い切ってやっちゃいました。リンゴスター曰く「え、これかなりいいんじゃない?」とのことです(´-`)v

DSC00261.JPG

これは課題1,2からずっとうちの専属操縦士のメカ崎君です。

特等席です。

パーツが足りなくなったらスクラップにしようと思っていましたがしぶとく生き残っています。

しかし彼の働きなしにこの課題を乗り越えることは不可能だった、と関係者は口をそろえて言います。

 
 
 
DSC00262.JPG

右からのアップ。

腕とか意味ねー

 
 
 
 
 
 
 
 
 
DSC00263.JPG
 
 
 

今回このマシンは3輪にしました。

後ろはキャスターになっていてこのことで動きすごい早くなりました

なかなかいい動きします、これ。

また、写真はありませんが非常に分解、組立が簡単です。(A7のロボットのコンセプトでもあります)

 
 
 
 
 
 

つぎはいよいよプログラム紹介。非常に複雑です

なんてったって「明るさに比例した周波数の音を出しながら全方角の中から光源のある方角を探し、探した後は、光源の光を追いかけて進むロボット」ですから、そりゃぁ複雑です。でもなんとかなりました。ではそのプログラムをご覧くださいヾ(´ー`)

プログラム紹介

#define TURN_TIME 250                    //一周回る時間を定義
task play_music()                        //音楽を演奏するタスク
{
  SetSensor(SENSOR_1,SENSOR_LIGHT);   //光センサー1を指定(ここポイント!)
  while(true)
  {
      PlayTone(10*SENSOR_1,5);           //センサー1の値×10の周波数の音を0,05秒鳴らす
      Wait(10);
   }
   }
task main()
{
  SetSensor(SENSOR_3,SENSOR_LIGHT);
   int time_peak,light_peak=0;      //光の明るさの最大値とそのときの時間の値を変数で定義(最初は0)
   ClearTimer(0);
   OnFwd(OUT_A);                         //基本は右旋回
   OnRev(OUT_C);
   start play_music;
   while(FastTimer(0)<TURN_TIME)         //一周するまでwhileのなかを繰り返す
   {
      if(SENSOR_1>light_peak)            //もしセンサー1で計った値が現在の最大値より大きいときは…
      {
      light_peak=SENSOR_1;          //センサー1の値を最大値に代入
      time_peak=FastTimer(0);       //そのときの時間をtime_peakに代入
      }
   }
   Off(OUT_A+OUT_C);
   Wait(50);
   OnRev(OUT_A);
   OnFwd(OUT_C);
   Wait(TURN_TIME-time_peak);        //一周の時間から光の最大値が計測された時間を引いた時間だけ回って(逆回転)もっとも明るい方向に向く
   stop play_music;
   Off(OUT_A+OUT_C);
   Wait(100);                            //ここまでのプログラムで最も明るい方向を向いています
   
   
   while(true)                           //whileの中を繰り返し、光源を追いかける                
   {
   if(SENSOR_1<SENSOR_3)                 //センサー3(右側)の方が明るかったら…
   {
   Off(OUT_A+OUT_C);
   OnFwd(OUT_A);                         //右に旋回
   }
   if(SENSOR_3<SENSOR_1)                 //センサー1(左側)の方が明るかったら…
   {
   Off(OUT_A+OUT_C);
   OnFwd(OUT_C);             //左に旋回
   }
   else                 //どちらでもなければ…
   {
   Off(OUT_A+OUT_C);
   OnFwd(OUT_A+OUT_C);         //直進
   }
   }
}

工夫と課題

コメントをお願いします



添付ファイル: fileDSC00263.JPG 282件 [詳細] fileDSC00262.JPG 289件 [詳細] fileDSC00261.JPG 273件 [詳細] fileDSC00260.JPG 304件 [詳細]

トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-01-09 (火) 14:06:31