2014b/Member?

目次

課題の内容

自分の名前の漢字一字から7画以上の文字を選び、A4用紙に収まるようにその文字を書くロボットとプログラムの作成

私は「沢」の字を選ぶことにした。

ロボット本体について

コンセプト

  • 出来るだけ簡単な作りになるように、元となる車の形のロボットにペンの昇降の機構を取りつけた形にする
  • 筆圧の調整が要らないように本体に工夫をする

組上がり

希望通りの動きができるようになり、かつ簡単な機構で出来上がった。

ペンは保持する部分の真ん中に取り付け、その昇降はリンク機構のようなもので行うように仕上げた。

ペンを中央に取り付けることでプログラムの調整がしやすくなり、リンク機構のようなもので昇降させることで、ある程度より下がるとペンの自重でペン先を紙につけられるようになった。

IMAG0667.jpgIMAG0669.jpg

プログラムについて

コンセプト

  • 電池残量などの要因に左右されないように、サーボモーターの機能を使う。
  • 制御が見やすく簡単になるように、旋回角度・移動距離の指定で動くプログラムにする。

完成プログラム

はじめに、多く使い調整のいる関数の定義とサブルーチンを定めた。

#define SPEED 35 //遅めの出力35%に設定
#define pen_dis 7.5  //下ろした時のペン先と本体の旋回の回転中心との距離
float GetAngle_turn(float a)   //求める本体の回転角からタイヤの回転角を求める関数          
{
	const float diameter = 5.9;
	const float distance = 11.7;
	float ang = (a*distance)/diameter;
	return ang;
}
float GetAngle_go(float a)   //求める移動距離からタイヤの回転角を求める関数
{
	const float diameter = 5.9;
	const float pi = 3.1415;
	float ang = a/(diameter*pi)*360.0;
	return ang;
}
sub turn_L(float t)   //左にt度回転
{
	int angle_turn_L = GetAngle_turn(t);
	RotateMotorEx(OUT_BC,SPEED,angle_turn_L,-100,true,true);//P37
	Off(OUT_BC);
}
sub turn_R(float t)   //右にt度回転
{
	int angle_turn_R = GetAngle_turn(t);
	RotateMotorEx(OUT_BC,SPEED,angle_turn_R,100,true,true);//P37
	Off(OUT_BC);
}
sub go_F(float t)   //前にtセンチ進む
{
	int angle_go_F = GetAngle_go(t);
	RotateMotorEx(OUT_BC,SPEED,angle_go_F,0,true,true);
	Off(OUT_BC);
}
sub go_R(float t)   //後ろにtセンチ進む
{
	int angle_go_R = GetAngle_go(t);
	RotateMotorEx(OUT_BC,-SPEED,angle_go_R,0,true,true);
	Off(OUT_BC);
}
sub pen_UP()  //ペンを上げる
{
	RotateMotor(OUT_A,-SPEED,180);
	Off(OUT_A);
}

sub pen_DW()  //ペンを下げる
{
	RotateMotor(OUT_A,SPEED,180);
	Off(OUT_A);
}

ここまでの定義で、何兪或福Ω綢爐函何°右旋回・左旋回と、ペンの昇降の命令を作ることができた

次からはそれらを使って「沢」の字をかくプログラムである

task main()
{
Wait(1000);  //スイッチを押してから間を置く
go_F(6.0);
turn_L(90.0);
go_F(2.0);
turn_R(105.0);
go_R(pen_dis);
pen_DW();
go_F(12.5);//中央の長い画
pen_UP();
go_F(pen_dis);
turn_L(15.0);
go_R(3.5);
turn_L(45.0);
go_R(3.0);
pen_DW();
go_F(3.0);//さんずいの1番上
pen_UP();
turn_R(45.0);
go_R(3.0);
turn_L(45.0);
go_R(3.0);
pen_DW();
go_F(3.0);//さんずいの2番目
pen_UP();
turn_L(90.0);
go_R(3.0);
pen_DW();
go_F(3.0);//さんずいの3番目
pen_UP();
turn_R(135.0);
go_F(6.0);
turn_R(90.0);
go_R(pen_dis);
pen_DW();
go_F(6.0);//一番上のよこぼう
pen_UP();
go_F(pen_dis);
turn_R(90.0);
go_R(pen_dis);
pen_DW();
go_F(3.0);//右の縦棒
pen_UP();
go_F(pen_dis);
turn_R(90.0);
go_R(pen_dis);
pen_DW();
go_F(6.5);//二番目の横棒
pen_UP();
go_F(5.5);
turn_L(120.0);
go_R(pen_dis);
pen_DW();
go_F(10.0);//右下の斜め棒
pen_UP();
go_F(pen_dis); 
turn_L(60.0);
go_R(pen_dis);
pen_DW();
go_F(1.2);//払い
pen_UP();
}
IMAG0676.jpg

反省・感想

  • 本体の製作では考えた通りのロボットが出来上がったので良かった。
  • 欲を言えば、ペン先と本体の旋回の回転中心との距離をもっと縮められればもっと安定感が出たと思う。
  • プログラムは角度と距離を指定するだけにしたので直感的にわかりやすくプログロムをしあげるのは楽にできた。
  • 計算ですべての動作を決めているので、元になる関数に誤差があるとだんだん全体がずれていってしまうので、関数の微調整が大変だった。
  • 小さなミスやエラーに気づけず、期限に少し遅れてしまった。今後は落ち着いて計画的に製作を進め期限を守れるようにしたい。
    IMAG0665.jpg

添付ファイル: fileIMAG0676.jpg 108件 [詳細] fileIMAG0669.jpg 114件 [詳細] fileIMAG0667.jpg 102件 [詳細] fileIMAG0665.jpg 112件 [詳細]

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