3.黒い線に沿って動くロボット

モーター1個で動くロボット

マクシミリアンdscn2317_Medium.jpg

  • センサー1個のプログラム
    task main()
    {    
         SetSensor(SENSOR_1, SENSOR_LIGHT);
         
         while(true)
         {
    	   if(SENSOR_1>40)
    	  {
    	       Wait(23);
    	       OnFwd(OUT_A);   //線から出たら片輪だけ動かして線に戻る
    	  }
    	  if(SENSOR_1<40)
    	  {
    	       Wait(23);
    	       OnRev(OUT_A);  //線に戻ったら逆回転で反対のタイヤを動かして線から出る。
    	  }
          }
    }
  • センサー2個のプログラム
    task main()
    {    
         SetSensor(SENSOR_1, SENSOR_LIGHT);
         SetSensor(SENSOR_2, SENSOR_LIGHT);
         
         while(true)
         {
    	   if(SENSOR_1>40)
    	  {
    	       Wait(23);
    	       OnFwd(OUT_A);  //右がはみ出たら少し待って右側を前進させる。
    	  }
    	  if(SENSOR_2>40)
    	  {
    	       Wait(23);
    	       OnRev(OUT_A);  //左がはみ出たら少し待って左側を前進させる。
    	  }
          }
    }
  • テキストのトップシークレットを使い、右と左でギアの数を奇数個と偶数個に変えて、どっちに回っても前進するようにするというアイディアが浮かばなかったので、ネットでモーターと繋がっているギアがモーターの回転の向きに応じて右タイヤに直結したギアと左タイヤに直結したギアに切り替わる機構を発見して取り入れた。感動的だった。真ん中に重心が来るようにすると片輪だけ動かしても摩擦とか惰力のせいで動かないはずのタイヤも動いてしまったので、コンピュータを後ろに立てて重心を後ろにやることで、前方にあるタイヤのギアに惰力が伝わらないようにした。ただ少し、大型になってしまい小回りが利かなくなった。今回はプログラムは回転か、逆回転だけだから楽だった。すぐに戻るようにすると停滞してしまうから少し待ってから動くようにした。

モーター2個で動くロボット

task main()
{    
     SetSensor(SENSOR_2, SENSOR_LIGHT);
     
     while(true)
     {
         if(SENSOR_2<40)
	  {
	      OnFwd(OUT_A);
	      Off(OUT_C);      //黒線上では左タイヤが動いて右タイヤが止まる
	  }else{
	      OnFwd(OUT_C);
	      Off(OUT_A);      //黒線の外に出たら右タイヤが動いて左タイヤが止まる
	  }    
     }
}
  • 課題2のロボットのフロント部分にセンサーをつけて使用した。モーター1個に比べてセンサー着ける位置をできるだけ、モーターに近くして、小回りが効くようにすれば、特に問題なく進んだ。

コメントどうぞ



添付ファイル: filedscn2318_Medium.jpg 155件 [詳細] filedscn2317_Medium.jpg 164件 [詳細]

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