*課題1 右側 : "木"の字を書くロボット[#z6e034cd]
マニュアルにある走行ロボットにペンを上下させるための機構を追加して"木"の字を書かせた。&br;
ペンを上下させる機構にはタイヤを直結させたモータを使用している。&br;

**ロボット [#rbdb7d38]
移動とペンの上下を行うことで文字を書くロボット。
モータにタイヤを直結させ、タイヤを回転させることでペンを上下させる。&br;
OUT_Aに移動用右モータ、OUT_Cに移動用左モータ、OUT_Bにペン上下用モータを接続。

&ref(kadai01-001.jpg);

**プログラム [#aaf64e92]
-プログラム1 : 文字の線をすべて直線で書く
 #define PENTIME 15
 
 sub penup()     //ペンを上げる
 {
  OnFwd(OUT_B);
  Wait(PENTIME);
  Off(OUT_B);
  Wait(50);
 }
 
 sub pendn()     //ペンを下げる
 {
  OnRev(OUT_B);
  Wait(PENTIME);
  Off(OUT_B);
  Wait(50);
 }
 
 void gofwd(int fwdtime)     //前に移動
 {
  OnFwd(OUT_A+OUT_C);
  Wait(fwdtime);
  Off(OUT_A+OUT_C);
  Wait(50);
 }
 
 void gorev(int revtime)     //後ろに移動
 {
  OnRev(OUT_A+OUT_C);
  Wait(revtime);
  Off(OUT_A+OUT_C);
  Wait(50);
 }
 
 void turnl(int turnltime)     //左に曲がる
 {
  OnFwd(OUT_A);
  OnRev(OUT_C);
  Wait(turnltime);
  Off(OUT_A+OUT_C);
  Wait(50);
 }
 
 void turnr(int turnrtime)     //右に曲がる
 {
  OnFwd(OUT_C);
  OnRev(OUT_A);
  Wait(turnrtime);
  Off(OUT_A+OUT_C);
  Wait(50);
 }
 
 task main()
 {
  Wait(100);     //すぐに動き出さないように待機
 
  pendn();     //1画目を書く
  gofwd(100);
  
  penup();     //2画目を書く位置まで移動
  gorev(9);
  turnr(92);
  gorev(81);
  
  pendn();     //2画目を書く
  gofwd(150);
  
  penup();     //3画目を書く位置まで移動
  gorev(68);
  turnr(43);
  gorev(41);
  
  pendn();     //3画目を書く
  gofwd(100);
  
  penup();     //4画目を書く位置まで移動
  gorev(59);
  turnl(86);
  gorev(41);
  
  pendn();     //4画目を書く
  gofwd(100);
 
  penup();
 }

-プログラム2 : 3画目、4画目を円弧で書く
 #define PENTIME 15
 
 sub penup()     //ペンを上げる
 {
  OnFwd(OUT_B);
  Wait(PENTIME);
  Off(OUT_B);
  Wait(50);
 }
 
 sub pendn()     //ペンを下げる
 {
  OnRev(OUT_B);
  Wait(PENTIME);
  Off(OUT_B);
  Wait(50);
 }
 
 void gofwd(int fwdtime)     //前に移動
 {
  OnFwd(OUT_A+OUT_C);
  Wait(fwdtime);
  Off(OUT_A+OUT_C);
  Wait(50);
 }
 
 void gorev(int revtime)     //後ろに移動
 {
  OnRev(OUT_A+OUT_C);
  Wait(revtime);
  Off(OUT_A+OUT_C);
  Wait(50);
 }
 
 void turnl(int turnltime)     //左に曲がる
 {
  OnFwd(OUT_A);
  OnRev(OUT_C);
  Wait(turnltime);
  Off(OUT_A+OUT_C);
  Wait(50);
 }
 
 void turnr(int turnrtime)     //右に曲がる
 {
  OnFwd(OUT_C);
  OnRev(OUT_A);
  Wait(turnrtime);
  Off(OUT_A+OUT_C);
  Wait(50);
 }
 
 task main()
 {
  Wait(100);     //すぐに動き出さないように待機 
  pendn();
 
  gofwd(100);     //1画目を書く
  
  penup();     //2画目を書く位置まで移動
  gorev(9);
  turnr(95);
  gorev(81);
  
  pendn();     //2画目を書く
  gofwd(150);
  
  penup();     //3画目を書く位置まで移動
  gorev(73);
  turnr(43);
  gorev(41);
  
  pendn();     //3画目を書く
  OnFwd(OUT_A+OUT_C);
  repeat(5)
  {
   Wait(8);
   Float(OUT_A);
   Wait(12);
   OnFwd(OUT_A);
  }
  Off(OUT_A+OUT_C);
  Wait(50);
  
  penup();     //4画目を書く位置まで移動
  gorev(56);
  turnl(86);
  gorev(41);
  
  pendn();     //4画目を書く
  OnFwd(OUT_A+OUT_C);
  repeat(5)
  {
   Wait(8);
   Float(OUT_C);
   Wait(12);
   OnFwd(OUT_C);
  }
  Off(OUT_A+OUT_C);
  Wait(50);
  
  penup();
 }

**工夫した点 [#e6523722]

[[2006a/C4 に戻る>2006a/C4]]


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS