目次

課題1

これまで住んだことのある都道府県名、市町村名、地区名などの中から2文字以上、かつ合計10画以上のものを選び、それをA4の紙を書くロボットを製作せよ。

選んだ漢字

習い事の関係で週に2回通っている「千曲市」を選んだ。

ロボットの説明

ロボット全体

今回ロボットを作るためのキットに3つのモータがあったので、

(震未吠森圓塀鎚向(以降x軸方向とする)を動くロボット

∧震未吠森圓焚J向(以降y軸方向とする)を動くロボット

J震未某眥召癖向(以降z軸方向とする)を動くロボット

に使った。

x、y、z軸の説明

x軸方向を動くロボット

Aのモータを出力するとNXT本体の下にあるタイヤが回転し、x軸方向を前後に動くことができる。又、モータは1つしかないので、下の写真の左のタイヤは駆動輪である。

モータAで動くロボット

このロボットは△悩遒辰織蹈椒奪箸走るレールを作る必要があった。△離蹈椒奪箸慮緡悗箸隆岾屬前輪との間隔よりも広いので、後輪の内側にできるだけ隙間がない、後輪が走るレールより少し高い前輪のレールを作ることにより、レール上にまっすぐ走るようにした。

y軸方向を動くロボット

Bのモータを出力すると左のタイヤ(前輪)が回転し、y軸方向を前後に動くことができる。又、モータは1つしかないので、右のタイヤ(後輪)は駆動輪である。

モータBで動くロボット

z軸方向を動くロボット

Cのモータを出力するとペンを上げ下げさせるために、z軸方向を前後に動く。

モータCで動くロボット

この部分が一番苦戦した。

初めは下の写真のように、モータに取り付けた,了車が回転することで△了車が回転してペンを垂直の状態のままのように上下するものを作ったが、不安定で書くときにぐらついてしまい、上手く線が書けなかったため上の写真のようなものに変更した。

モータCで動くロボットの試作品

プログラムの説明

まず前提として、

#define pen_down OnFwd(OUT_C,8);Wait(1200);Off(OUT_C);   //y軸方向に書く時、ペンを下げる
#define pen_downa OnFwd(OUT_C,8);Wait(1250);Off(OUT_C);  //x軸方向に書く時、ペンを下げる
#define pen_up OnRev(OUT_C,15);Wait(1700);Off(OUT_C); //モータCを動かしz軸方向にペンを上げる     
#define all_off Off(OUT_ABC);    //モータA,B,Cを止める
#define power 30   //モータのパワーを30に決めた
#define stop_p Wait(1000);    //モータの動きを1秒止める

を定義した。

x軸方向、y軸方向に書く時、 ↓△悩遒辰織蹈椒奪箸隆愀犬x軸方向に書く時だけ横揺れが激しかったので、それを軽減させようとしてx軸方向に書く時だけペンを紙に押し付けるために、ペンを下げるプログラムをx軸用とy軸用の2つ作った。

「千」のプログラム

ペンは一番上に上げた状態からスタートする。

pen_down;    //ペンを紙につける        //「千」1画目
stop_p;  //ペンを紙につけて止める
OnFwd(OUT_A,20);OnFwd(OUT_B,power);   //モータA,Bを一緒に動かして斜めの線を引いた ...a
Wait(300);  //0.3秒斜め(下の写真だと左斜め下方向)の線を書く。
all_off;  //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる
OnFwd(OUT_AB,power);  「千」2画目 ...b
Wait(150);  //0.15秒斜め(下の写真だと左斜め下方向)に動かす。
all_off;  //全てのモータを止める
OnFwd(OUT_B,power); //...c    
Wait(250);  //0.25秒y軸方向(下の写真だと左方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。

pen_down; //ペンを紙につける stop_p; //ペンを紙につけて止める

OnRev(OUT_B,power); //...d    ここから「千」の2画目を書く。
Wait(1200);  //1.2秒-y軸方向(下の写真だと右方向)に動かす。
all_off;  //全てのモータを止める
 stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる
OnFwd(OUT_B,power);   //「千」3画目 ...e
Wait(670);  //0.67秒y軸方向(下の写真だと左方向)動かす。
all_off;  //全てのモータを止める
OnRev(OUT_A,power); //...f
Wait(190);  //0.19秒x軸方向(下の写真だと上方向)に動く。
all_off;  //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_downa;  //ペンを紙につける
 stop_p; //ペンを紙につけて止める
OnFwd(OUT_A,power); //...g      ここから「千」の3画目を書く。
Wait(600);  //0.6秒-x軸方向(下の写真だと下方向)に動かす。
all_off;  //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる

写真の赤線が実際に書いた線で、青線がペンを浮かせて動かした軌道である。

千の書き順

3画目の線(d)の「Wait(1200)」を基準にした。

「曲」のプログラム

OnFwd(OUT_B,power);    //「曲」1画目 ...h
Wait(600);  //0.6秒y軸方向(下の写真だと左方向)に動かす。
all_off;   //全てのモータを止める
OnFwd(OUT_A,power); //...i
Wait(200);  //0.2秒-x軸方向(下の写真だと上方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_downa;  //ペンを紙につける
stop_p; //ペンを紙につけて止める
OnFwd(OUT_A,power); //...j  //ここから「曲」の1画目を書く。
Wait(500);  //0.5秒-x軸方向(下の写真だと下方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる
OnRev(OUT_A,power);   //「曲」2画目  ...k
Wait(500);  //0.5秒x軸方向(下の写真だと上方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_downa;  //ペンを紙につける
stop_p; //ペンを紙につけて止める
OnRev(OUT_B,power); //...l  //ここから「曲」の2画目を書く。
Wait(1200);  //1.2秒-y軸方向(下の写真だと右方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
OnFwd(OUT_A,power); //...l  「曲」の2画目の続き
Wait(500);  //0.5秒-x軸方向(下の写真だと下方向)に動く。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる
OnFwd(OUT_B,power);   //「曲」3画目 ...m
Wait(800);  //0.8秒y軸方向(下の写真だと左方向)に動かす。
all_off;   //全てのモータを止める
OnRev(OUT_A,power); //...n
Wait(700);  //0.7秒x軸方向(下の写真だと上方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_downa;  //ペンを紙につける
stop_p; //ペンを紙につけて止める
OnFwd(OUT_A,power); //...o     ここから「曲」の3画目を書く。
Wait(700);  //0.7秒-x軸方向(下の写真だと下方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる
OnRev(OUT_B,power);   //「曲」4画目 ...p
Wait(400);  //0.4秒-y軸方向(下の写真だと右方向)に動かす。
all_off;   //全てのモータを止める
OnRev(OUT_A,power); //...q
Wait(700);  //0.7秒x軸方向(下の写真だと上方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_downa;  //ペンを紙につける
stop_p; //ペンを紙につけて止める
OnFwd(OUT_A,power); //...r       ここから「曲」の4画目を書く。
Wait(700);  //0.7秒-x軸方向(下の写真だと下方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる
OnFwd(OUT_B,power);  //「曲」5画目 ...s
Wait(800);  //0.8秒y軸方向(下の写真だと左方向)に動かす。
all_off;   //全てのモータを止める
OnRev(OUT_A,power); //...t
Wait(240);  //0.24秒x軸方向(下の写真だと上方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_down;  //ペンを紙につける
stop_p; //ペンを紙につけて止める
OnRev(OUT_B,power); //...u     ここから「曲」の5画目を書く。
Wait(1200);  1.2秒-y軸方向(下の写真だと右方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる
OnFwd(OUT_B,power);   //「曲」6画目 ...v
Wait(1200);  //1.2秒y軸方向(下の写真だと左方向)に動かす。
all_off;   //全てのモータを止める
OnFwd(OUT_A,power); //...w
Wait(270);  //0.27秒-x軸方向(下の写真だと下方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_down;  //ペンを紙につける
stop_p; //ペンを紙につけて止める
OnRev(OUT_B,power); //...x     ここから「曲」の6画目を書く。
Wait(1200);  //1.2秒-y軸方向(下の写真だと右方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる

写真の赤線が実際に書いた線で、青線がペンを浮かせて動かした軌道である。

曲の書き順

1画目の線(j)の「Wait(500)」、5画目の線(u)の「Wait(1200)」を基準とした。

「市」のプログラム

OnFwd(OUT_B,power);    // 「市」1と5画目 ...y
Wait(600);  //0.6秒y軸方向(下の写真だと左方向)に動かす。
all_off;   //全てのモータを止める
OnFwd(OUT_A,power); //...z
Wait(300);  //0.3秒-x軸方向(下の写真だと下方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_downa;  //ペンを紙につける
stop_p; //ペンを紙につけて止める
OnFwd(OUT_A,power); //...A     ここから「市」の1画目と5画目を書く。
Wait(900);  //0.9秒-x軸方向(下の写真だと下方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる
OnFwd(OUT_B,power);   //「市」2画目 ...B
Wait(600);  //0.6秒y軸方向(下の写真だと左方向)に動かす。
all_off;   //全てのモータを止める
OnRev(OUT_A,power); //...C
Wait(700);  //0.7秒x軸方向(下の写真だと上方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_down;  //ペンを紙につける
stop_p; //ペンを紙につけて止める
OnRev(OUT_B,power); //...D     ここから「市」の2画目を書く。
Wait(1200);  //1.2秒-y軸方向(下の写真だと右方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる
OnFwd(OUT_B,power);    //「市」3画目 ...E
Wait(1000);  //1秒y軸方向(下の写真だと左方向)に動かす。
all_off;   //全てのモータを止める
OnFwd(OUT_A,power); //..F
Wait(200);  //0.2秒-x軸方向(下の写真だと下方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_downa;  //ペンを紙につける
stop_p; //ペンを紙につけて止める
OnFwd(OUT_A,power); //...G     ここから「市」の3画目を書く。
Wait(300);  //0.3秒-x軸方向(下の写真だと下方向)に動かす。
all_off   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる
OnRev(OUT_A,power);    //「市」4画目 //...H
Wait(300);  //0.3秒x軸方向(下の写真だと上方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_downa;  //ペンを紙につける
stop_p; //ペンを紙につけて止める
OnRev(OUT_B,power); //...I     ここから「市」の4画目を書く。
Wait(800);  //0.8秒-y軸方向(下の写真だと右方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
OnFwd(OUT_A,power); //...I
Wait(300);  //0.3秒-x軸方向(下の写真だと下方向)に動かす。
all_off;   //全てのモータを止める
stop_p; //モータを止めてすぐ動かすと不安定になるので、1秒止める。
pen_up; //ペン上げる

写真の赤線が実際に書いた線で、青線がペンを浮かせて動かした軌道である。

市の書き順

2画目の線(D)の「Wait(1200)」を基準にした。

最後のまとめ

実際に書いた字

ロボットを動かして書いた字は下の写真である。

字だけ見るとx軸方向の線が直線でないところが目立つ。

実際に書いた「千曲市」

字を書いてみての反省点

  • ペンを上げるときに線の上にインクが着いてしまった →で安定性を求めて改良した事と、ペンを垂直にして書こうとした事が原因だと思う。したがって、ペンを斜めにして書いた方がよかった。
  • x軸方向の線が直線ではない →1つのモータで重く、重心が不安定なロボットを動かそうとした事が原因だと思う。したがって、重心を下げるべきだった。

感想

私は、プログラムを作るよりもロボットを作る方が難しいと感じた。限られた材料でどんな事をするために、どんな風にロボットを動かすか考えて、そのためにどの部品を組み合わせるとロボットが動くのかを考える力や発想力がとても必要だと感じた。他のグループの作品を見ると、「そんな考え方もあったのか」と思わせられる作品が多かったので、次回の課題では今回の反省を活かしながら、考え方を変えて取り組みたい。

 


添付ファイル: fileIMG_0852.jpg 6件 [詳細] fileIMG_0851.jpg 5件 [詳細] fileIMG_0850.jpg 10件 [詳細] fileIMG_0825.jpg 8件 [詳細] fileIMG_0841.jpg 8件 [詳細] fileIMG_0822.jpg 8件 [詳細] fileIMG_0819.jpg 12件 [詳細] fileIMG_0821.jpg 7件 [詳細] fileIMG_0845.jpg 5件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2018-12-24 (月) 23:35:41 (57d)