2010b

課題1の内容とルール

A4の紙に相棒の似顔絵を書くロボットを作成せよ。

  • ひとりにつき一つ以上のプログラムを作成すること。
  • ペン以外はキットに含まれる部品を使うこと。
  • キットに付属の高価な輪ゴムは切れやすいので切れないように細心の注意を払うこと。
  • 改良や調整をしやすくするため、ロボット本体だけでなく、プログラムについても可能な部分についてはサブルーチンや関数、マクロなどを使って部品に分けること。

メンバー紹介

  • 松澤
  • 山本

ロボットの紹介

機体の構造

これがロボットの外見です。

完成図

↓黄色の四角で囲った部分でペンを上下させます。 赤い丸で囲ったタイヤにモーターが付いています。

正面図

工夫した点

工夫したところは、ペンを上下させる動作をするようにしたことです。

pen.gif

しかし、この状態でペンを動かしたら、ペンは図の矢印の方へ外れてしまいました。

ペンが外れる

↓図のようにペンが外れないようにしました。

ペンを固定

制作の過程

過程(土台)

まず、土台を作りました。最初に作った土台で作ろうとしましたが、ペンを持つ時に邪魔になる部分があったため、土台を作りなおしました。

↓図は最初に作った土台。丸で囲んだ部分が邪魔になります。

旧土台

↓邪魔になる部分を作りなおしました。

土台

↓ペンを固定するタイヤを付けて土台完成です。

土台

過程(ペンを動かす部分)

次にペンを上下させる部分を作りました。

↓図の左のタイヤにモーターBが接続されています。

ギアB

次にペンが外れてしまわないように図の黄色の線で囲った部品を付けました。

ギアB

過程

過程気伐當兇悩遒辰辛品を繋げました。

完成図

完成!

プログラムと作成図

  • 松澤
  • プログラム
#define go(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);			//前にtの時間進む
#define back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);			//後ろにtの時間進む
#define turn_right(t) OnFwd(OUT_C);OnRev(OUT_A);Wait(t);Off(OUT_A+OUT_C);	//tの時間右に回る
#define turn_left(t) OnFwd(OUT_A);OnRev(OUT_C);Wait(t);Off(OUT_A+OUT_C);	//tの時間左に回る

void pen_up()		//ペンを上げる
{
	SetPower(OUT_B,1);
	OnRev(OUT_B);
	Wait(15);
	Off(OUT_B);
}
void pen_down()		//ペンを下げる
{
	SetPower(OUT_B,2);
	OnFwd(OUT_B);
	Wait(20);
	Off(OUT_B);
}

task main()
{

		/*輪郭を描く(円)*/
	pen_down();
	OnFwd(OUT_A);
	Wait(700);
	Off(OUT_A);
	pen_up();
	turn_left(100);	//向き、距離を調整
	go(20);
	turn_right(100);
	go(15);
		/*髪の毛を描く*/
	pen_down();
	repeat(3){
	OnRev(OUT_A);Wait(36);Off(OUT_A);
	OnRev(OUT_C);Wait(36);Off(OUT_C);
	}
	pen_up();
	go(70);		//向き、距離を調整
	turn_right(110);
	back(36);
		/*右目を描く*/
	pen_down();
	back(20);
	pen_up();
	turn_left(90);	//向き、距離を調整
	go(50);
	turn_right(90);
	go(20);
		/*左目を描く*/
	pen_down();
	back(20);
	pen_up();
	turn_left(90);	//向き、距離を調整
	back(25);
	turn_right(90);
		/*鼻を描く*/
	pen_down();
	back(20);
	pen_up();
	go(60);		//向き、距離を調整
	turn_left(120);
		/*口を描く*/
	pen_down();
	turn_left(150);
	pen_up();
}
  • 完成作品
完成作品
  • 山本
  • プログラム
#define go_straight(t) OnFwd(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);		//t秒間前進
#define go_back(t) OnRev(OUT_A+OUT_C);Wait(t);Off(OUT_A+OUT_C);			//t秒間後退
#define turn_left(t) OnRev(OUT_C);OnFwd(OUT_A);Wait(t);Off(OUT_A+OUT_C);	//t秒間左に曲がる
#define turn_right(t) OnRev(OUT_A);OnFwd(OUT_C);Wait(t);Off(OUT_A+OUT_C);	//t秒間右に曲がる
#define pen_up(t) OnFwd(OUT_B);Wait(t);Off(OUT_B);				//ペンを上げる
#define pen_down(t) OnRev(OUT_B);Wait(t);Off(OUT_B);				//ペンを下げる

task main()
{

		pen_down(10);			//書き始める
	OnFwd(OUT_A);
	Wait(700);
	Off(OUT_A);				//輪郭を書く
	pen_up(10);
	turn_left(70);
		pen_down(15);			//左目を書く
	go_straight(30);
	pen_up(5);
	go_straight(20);
		pen_down(10);			//右目を書く
	go_straight(30);
	pen_up(5);
	turn_left(90);
		pen_down(10);			//鼻を書く
	go_straight(20);
	pen_up(5);
	go_straight(20);
	turn_right(90);
	go_straight(15);
		pen_down(10);			//口を書く
	go_back(30);
}
  • 完成作品
完成作品

反省・感想

  • 松澤

今回はNQCで似顔絵を描く事をしましたが、思った通りに動かす事はなかなか難しかったです。似顔絵を描くというのは目や鼻を描くという細かい動きが多いためプログラムが長くなってしまいました。もう少し描く順序など工夫すればよかったと思いました。しかし、絵は完成したので良かったです。

  • 山本

プログラム作成はなかなか大変でした。特に,ペンが車体の中心にないのでその場で回転することができませんでした。結局,妥協して輪郭を円にしてしまいました。

コメントをお願いします

  • 工夫点を含め、製作過程が写真をまじえてわかりやすく説明されています。反省点に関して疑問などさらに充実させると良いと思います。 -- TAKA? 2010-11-12 (金) 16:40:13
  • ロボットの工夫した点がはっきりとしており、良いと思います。また、関数を使ってプログラムをすっきりさせています。より滑らかな動きをするにはどうるかの議論や考察(今日の授業で出たこと、ロボットの重さ、右左のタイヤの幅等々)を加えたり、オリジナルな点をどんどん増やすとさらに良いレポートになると思います。 -- FI? 2010-11-12 (金) 18:03:36


添付ファイル: filepen.gif 198件 [詳細] fileCA3C0231.JPG 208件 [詳細] fileCA3C0230.JPG 223件 [詳細] fileCA3C0237.JPG 211件 [詳細] fileCA3C0257.JPG 192件 [詳細] fileCA3C0258.JPG 218件 [詳細] fileCA3C0254.JPG 213件 [詳細] fileCA3C0235.JPG 223件 [詳細] fileCA3C0243.JPG 242件 [詳細] fileCA3C0240.JPG 231件 [詳細] fileCA3C0241.JPG 240件 [詳細] fileCA3C0239.JPG 241件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2011-01-24 (月) 00:59:56