光追跡ロボット

 robo1  回転することで光を見つけ、光に向かってブロックを投げたり、光に向かって進んでいくロボットです。

課題について

今回の課題は最初に書いたように、光センサーを2つ用いて光に反応してブロックを投げたり、光に向かって進んでいくロボットを作成することです。

今回のポイントはモーターを2つしか使用できないということです。

ブロックを投げる装置にモーターを1つ用いるため、1つのモーターで前進はもちろん、方向転換も出来るようにしなければないけません。

そのため下のようにロボットを組みました。モーターを逆回転させた場合のみ左のタイヤを動かないようにストッパーを取り付けました。これによりロボは回転して光を探すことが出来ます。

  robo2    robo3

ロボの特徴

今回僕たちが作成したロボの特徴は、まず2つのモーターを一番後ろに2つ並べておいたことです。

電源を前に移動させ縦に長くすることでバランスをとれるようになりました。

さらに回転しやすいように三輪としました。前輪の作成には時間がかかりましたがその分、良い出来になっていると思います

  robo4    robo5

苦労した点

ヒントにのっているサンプルをそのまま作るのではなく、少し工夫を加えました。なかなかうまくはいかず、 ロボット制作にかなりの時間を使ってしまいました。

しかし、そのおかげでオリジナル性の高いロボットを作ることができました。

モーターを2つ後部に取り付けた時、どうしても後ろが重くなってしまいバランスをとるのにはとても苦労しました。結果的に車体を長くする、ということでそれを解決しました。

プログラム

ブロックを投げタイプ

define THRESHOLD 55
task main(){
SetSensor(SENSOR_1,SENSOR_LIGHT);       //センサー1は光センサー
SetSensor(SENSOR_2,SENSOR_LIGHT);    //センサー2は光センサー
while(true){ 
if((SENSOR_1 < THRESHOLD)&&(SENSOR_2 < THRESHOLD))  //センサー1、2が基準値より小さいとき
 {
   OnRev(OUT_A);            //旋回
        Off(OUT_C);
 } 
  if((SENSOR_1 > THRESHOLD)&&(SENSOR_2 < THRESHOLD)) //センサー1が基準値より大きくて、センサー2が基準値より小さいとき 
 { 
        OnRev(OUT_A);         //0.3秒旋回
    Wait(30); 
        Off(OUT_C);  
  }
  if((SENSOR_1 < THRESHOLD)&&(SENSOR_2 > THRESHOLD)) // センサー1が基準値より小さくて、センサー2が基準値より大きいとき 
 {
   OnRev(OUT_A);           //旋回
        Off(OUT_C);                             
 }
   if((SENSOR_1 > THRESHOLD)&&(SENSOR_2 > THRESHOLD)) //センサー1、2が基準値より大きいとき
 {
    Off(OUT_A);
   OnFwd(OUT_C);           //ブロックを投げる
 }
 }
 }

光の追跡タイプ

#define THRESHOLD 40
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);     //センサー1は光センサー
SetSensor(SENSOR_2,SENSOR_LIGHT);     //センサー2は光センサー
while (true){
  if((SENSOR_1 < THRESHOLD)&&(SENSOR_2 < THRESHOLD)) //センサー1、2が基準値より小さいとき
 {
   OnFwd(OUT_A);             //旋回
   OnRev(OUT_C);
 } 
  if((SENSOR_1 > THRESHOLD)&&(SENSOR_2 < THRESHOLD)) //センサー1が基準値より大きくて、センサー2が基準値より小さいとき  
   OnFwd(OUT_A);             //旋回
   OnRev(OUT_C);
 }
  if((SENSOR_1 < THRESHOLD)&&(SENSOR_2 > THRESHOLD)) // センサー1が基準値より小さくて、センサー2が基準値より大きいとき 
 {
   OnRev(OUT_A);              //旋回                     
   OnFwd(OUT_C);
 }
   if((SENSOR_1 > THRESHOLD)&&(SENSOR_2 > THRESHOLD)) //センサー1、2が基準値より大きいとき
 {
    OnFwd(OUT_A+OUT_C);         //前進
                       
 }
}  

光を追跡しさらにブロックを投げる

#define THRESHOLD 40
task main()
{
SetSensor(SENSOR_1,SENSOR_LIGHT);   //センサー1は光センサー
SetSensor(SENSOR_2,SENSOR_LIGHT);   //センサー2は光センサー
while (true){
  if((SENSOR_1 < THRESHOLD)&&(SENSOR_2 < THRESHOLD)) //センサー1、2が基準値より小さいとき
 {
   OnFwd(OUT_A);     //旋回
   OnRev(OUT_C);
 } 
  if((SENSOR_1 > THRESHOLD)&&(SENSOR_2 < THRESHOLD)) //センサー1が基準値より大きくて、センサー2が基準値より小さいとき  
   OnFwd(OUT_A);         //旋回                
   OnRev(OUT_C);
 }
  if((SENSOR_1 < THRESHOLD)&&(SENSOR_2 > THRESHOLD)) // センサー1が基準値より小さくて、センサー2が基準値より大きいとき 
 {
   OnRev(OUT_A);     //旋回                       
   OnFwd(OUT_C);
 }
   if((SENSOR_1 > THRESHOLD)&&(SENSOR_2 > THRESHOLD)) //センサー1、2が基準値より大きいとき
 {
    OnFwd(OUT_B);    //ブロックを投げる
                       
 }
}  

感想・反省

最終的にはバランスのとれた良いロボットを作ることが出来ました。

反省としては、車体があまりに長くなってしまったためモーター1つによる方向転換が鈍く、遅くなってしまったことです。

コメントよろしくお願いします。

  • プログラムの解説、コメントをつけましょう。 -- まいける(TA) 2007-07-14 (土) 14:07:45
  • あと、プログラムは3つ作ることになっているはずですが、課題の内容を確認してください。 -- まいける(TA) 2007-07-14 (土) 14:08:48
  • シンプルにまとまっています。 -- ヒロヤ? 2007-07-27 (金) 06:50:42


添付ファイル: file070706_1030~0001.jpg 233件 [詳細] file070706_1031~0001.jpg 222件 [詳細] file070706_1028~0002.jpg 219件 [詳細] file070706_1028~0001.jpg 252件 [詳細] file070706_1026~0001.jpg 249件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-07-27 (金) 06:50:42 (4405d)