2005/C6/課題1右

◆「右」を書く

・プログラミィング

 task main()
 {
     OnRev(OUT_B);  //ペンをおろす
     Wait(50);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の1画目をかく
     OnRev(OUT_C);
     Wait(150);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の2画目の始点へ移動
     OnRev(OUT_C);
     Wait(100);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_A);
     Wait(100);
     Off(OUT_A);
     
     OnFwd(OUT_C);
     Wait(400);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_A);
     OnFwd(OUT_C);
     Wait(50);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_B);  //ペンをおろす
     Wait(50);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の2画目をかく
     OnRev(OUT_C);
     Wait(130);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の3画目の始点へ移動
     OnRev(OUT_C);
     Wait(50);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(80);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_A);
     Wait(390);
     Off(OUT_A);
     
     OnRev(OUT_A);
     OnFwd(OUT_C);
     Wait(125);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(100);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_B);  //ペンをおろす
     Wait(50);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の3画目をかく
     OnRev(OUT_C);
     Wait(70);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の4画目の始点へ移動
     OnRev(OUT_C);
     Wait(190);
     Off(OUT_A+OUT_C);  
     
     OnFwd(OUT_C);
     Wait(450);
     Off(OUT_C);
     
     OnRev(OUT_A);
     OnFwd(OUT_C);
     Wait(30);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_B);  //ペンをおろす
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の4画目の一部をかく
     OnRev(OUT_C);
     Wait(100);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(80);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //4画目の残りをかくための始点へ移動
     OnRev(OUT_C);
     Wait(220);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_A);
     Wait(400);
     Off(OUT_A);
     
     OnRev(OUT_A);
     OnFwd(OUT_C);
     Wait(65);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_B);  //ペンをおろす
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //4画目の残りをかく
     OnRev(OUT_C);
     Wait(70);
     Off(OUT_A+OUT_C);
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(70);
     Off(OUT_B);
     
     OnFwd(OUT_A);  //右の5画目の始点へ移動
     OnRev(OUT_C);
     Wait(220);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_A);
     Wait(420);
     Off(OUT_A);
     
     OnFwd(OUT_A);
     OnRev(OUT_C);
     Wait(40);
     Off(OUT_A+OUT_C);
     
     OnRev(OUT_B);  //ペンをおろす
     Wait(50);
     Off(OUT_B);
     
     OnRev(OUT_A);  //右の5画目をかく
     OnFwd(OUT_C);
     Wait(100);
     
     Off(OUT_A+OUT_C);  //停止
     
     OnFwd(OUT_B);  //ペンをあげる
     Wait(70);
     Off(OUT_B);
 }

・プログラミィング(書き直し)

 sub pen_up()
 {OnFwd(OUT_B);
  Wait(70);
  Off(OUT_B);
 }
 
 sub pen_down()
 {OnRev(OUT_B);
  Wait(50);
  Off(OUT_B);
 }
 
 void go(int t)
 {OnFwd(OUT_A);
  OnRev(OUT_C);
  Wait(t);
  Off(OUT_A+OUT_C);
 }
 
 void back(int t)
 {OnRev(OUT_A);
  OnFwd(OUT_C);
  Wait(t);
  Off(OUT_A+OUT_C);
 }
 
 void back_right(int t)
 {OnFwd(OUT_C);
  Wait(t);
  Off(OUT_C);
 }
 
 void go_left(int t)
 {OnFwd(OUT_A);
  Wait(t);
  Off(OUT_C);
 }
 
 void back_left(int t)
 {OnRev(OUT_A);
  Wait(t);
  Off(OUT_A);
 }
 
 task main()
 {
     pen_down();  //ペンをおろす
     go(150);  //右の1画目をかく
     pen_up();  //ペンをあげる
     go(100);  //右の2画目の始点へ移動
     go_left(100);
     back_left(400);
     back(50);
     pen_down();  //ペンをおろす
     go(130);  //右の2画目をかく
     pen_up();  //ペンをあげる
     go(130);  //右の3画目の始点へ移動
     back_left(390);
     back(125);
     go(100);
     pen_down();  //ペンをおろす
     go(70);  //右の3画目をかく
     pen_up();  //ペンをあげる
     go(190);  //右の4画目の始点へ移動
     back_right(450);
     back(30);
     pen_down();  //ペンをおろす
     go(100);
     pen_up();  //ペンをあげる
     go(220);  //4画目の残りをかくための始点へ移動
     back_left(400);
     back(65);
     pen_down();  //ペンをおろす
     go(70);  //4画目の残りをかく
     pen_up();  //ペンをあげる
     go(220);  //右の5画目の始点へ移動
     back_left(420);
     go(40);
     pen_down();  //ペンをおろす
     back(100);  //右の5画目をかく
     pen_up();  //ペンをあげる
 }

◎工夫・苦労をした点

  1. ロボットから前にでっぱっているペンの分だけのずれを考えてプログラミィングをしなくてはいけない点
  2. 床や紙の状態、ロボットのギヤーの状態などで毎回同じように動いてくれずに何回もやり直した点

◆ロボットについて...

◎構成

今回作った書道ロボットは、足にキャタピラを使い、ペンはプー
リーとゴムとモーターを使ってアームを上げ下げするというもの
にしました。

◎工夫・苦戦をした点

  1. プーリーをつなげるモーターをどこにどのように固定するかという点。
  2. ペンを動かないようにどうやってアームにとりつけるかという点。
  3. ペンのついたアームをロボットの中心にどのようにもっていくかという点。
  4. ゴムを使ったプーリーだとちょっとした力でペンを上げ下げするのに勢いがかなりついてしまうところをどのように和らげるという点。

コメントをどうぞ

  • プログラムの中にはコメント文を入れて、どこでどのようなことをしているのか簡単に説明しておきましょう。あとサブルーチンや関数を使うともう少し簡明なプログラムになると思います。 -- 松本(教員)? 2005-11-11 (金) 23:01:47
  • プログラムと関係のないコメントですみませんが、pukiwiki の場合、番号つきの箇条書きはそれぞれの項目を半角の + で始まる行にします。そうすると自動的に番号が振られた箇条書きができあがります。 -- 松本(教員)? 2005-11-24 (木) 10:15:33
  • 松本先生もおっしゃっていますが、コメント文を入れるとよいでしょう。また、プログラムが長くなるので、サブルーチン等を使うと良いのでは? -- かとりーぬ? 2005-11-25 (金) 18:27:30
  • コメント文を入れ、プログラムもかきかえてみました。 -- 畠山? 2005-11-30 (水) 22:07:27
  • 以前のプログラムよりも、ずいぶんすっきりしましたね。 -- かとりーぬ(TA)? 2005-12-09 (金) 18:22:07


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