目次

課題

書道ロボットの製作(NXC:マインドストーム)

ロボットの仕組み

3つのモーターを使い

  • モーターAはペンの上げ下げ
  • モーターBは右タイヤ
  • モーターCは左タイヤ

を動かすようにつなげた

IMG_01391.jpg
IMG_01401.jpg

車体を前後に動かしたり、左右のタイヤを逆回転させることで、その場で曲がる。

ペンを上げ下げすることで、書き始めの位置をずらすことなく書くことができる。

問題点と工夫点

速度

速度が速いと調整が難しいとのことだったので、全体的に出力を30に統一し、ゆっくり動くようにした。

また、1回1回止まるようにし、1文字1文字丁寧に書くよう心掛けた。

アーム

unnamed21.jpg

↑改善前

ペンを横方向に上げ下げすると、書き始めの位置がずれていたので、

ロボットの前方につけることで、ペンによる書き始めの位置のずれをなくした。

↓改善後

unnamed12.jpg

旋回

摩擦で曲がる角度に違いが出ることが多かったため、後輪を車体から離したところにつけることで、 より摩擦を減らし曲がる角度の違いが減るようにした。

unnamed.jpg

ペンの取り付け方

上下を固定することで、ペンを下げた時、机にあたってずれたり、書いてる最中にずれないようにした。

unnamed123.jpg

プログラム

『皓』を書くプログラム

「白」や「口」の部分など直角の多い字なので、モーターBとモーターCのタイヤをそれぞれ逆回転させる旋回で90度に回転するよう定義した。

ペンの位置と車体の位置が若干離れているため、ペンが車体の位置まで戻るよう前後に動く定義もした。

今回の定義では、電池残量によるロボットの出力の違いに対処しにくかったので、そこに対処できる定義作りが今後の課題である。

#define penup OnFwd(OUT_A,30);Wait(150);Off(OUT_A);\
 Wait(1000);//ペンを上げる
#define pendown OnRev(OUT_A,30);Wait(140);Off(OUT_A);\
 Wait(1000);//ペンを下げる
#define back OnRev(OUT_BC,30);Wait(1300);Off(OUT_BC);\
 Wait(1200);//戻る
#define tyokaku OnFwd(OUT_B,30);OnRev(OUT_C,30);\
 Wait(1200);Off(OUT_BC);Wait(1000);//90度旋回
#define mae OnFwd(OUT_BC,30);Wait(1400);Off(OUT_BC);\
 Wait(1000);//進む
#define ma_e OnFwd(OUT_BC,30);Wait(1350);Off(OUT_BC);\
 Wait(1300);//進む_その2
#define tyo_kaku OnFwd(OUT_B,30);OnRev(OUT_C,30);\
 Wait(1300);Off(OUT_BC);Wait(1000);//90度旋回_その2
task main()
{
       OnFwd(OUT_BC,30);//1画目
       Wait(1500);
       Off(OUT_BC);
       Wait(1000);
       penup;
       mae;
       tyokaku;
       back;
       pendown;
       OnFwd(OUT_BC,30);//2画目
       Wait(500);
       Off(OUT_BC);
       Wait(1000);
       penup;
       mae;
       tyokaku;
       back;
       pendown;
       OnFwd(OUT_BC,30);//3画目
       Wait(1000);
       Off(OUT_BC);
       Wait(1000);
       penup;
       mae;
       tyokaku;
       back;
       pendown;
       OnFwd(OUT_BC,30);//4画目
       Wait(500);
       Off(OUT_BC);
       Wait(1000);
       penup;
       mae;
       tyokaku;
       OnFwd(OUT_BC,30);
       Wait(500);
       Off(OUT_BC);
       Wait(1000);
       OnFwd(OUT_B,30);
       OnRev(OUT_C,30);
       Wait(1200);
       Off(OUT_BC);
       Wait(1000);
       OnRev(OUT_BC,30);
       Wait(1400);
       Off(OUT_BC);
       Wait(1000);
       pendown;
       OnFwd(OUT_BC,30);//5画目
       Wait(1700);
       Off(OUT_BC);
       Wait(1000);
       penup;
       mae;
       tyokaku;
       OnFwd(OUT_BC,30);
       Wait(400);
       Off(OUT_BC);
       Wait(1000);
       OnFwd(OUT_B,30);
       OnRev(OUT_C,30);
       Wait(1200);
       Off(OUT_BC);
       Wait(1000);
       OnRev(OUT_BC,30);
       Wait(1200);
       Off(OUT_BC);
       Wait(1000);
       pendown;
       OnFwd(OUT_BC,30);//6画目
       Wait(600);
       Off(OUT_BC);
       Wait(1000);
       penup;
       mae;
       OnFwd(OUT_BC,30);
       Wait(300);
       Off(OUT_BC);
       Wait(1000);
       OnFwd(OUT_B,30);
       OnRev(OUT_C,30);
       Wait(500);
       Off(OUT_BC);
       Wait(1000);
       OnRev(OUT_BC,30);
       Wait(1200);
       Off(OUT_BC);
       Wait(1000);
       pendown;
       OnRev(OUT_BC,30);//7画目
       Wait(500);
       Off(OUT_BC);
       Wait(1000);
       penup;
       OnFwd(OUT_BC,30);
       Wait(1500);
       Off(OUT_BC);
       Wait(1000);
       OnFwd(OUT_C,30);
       OnRev(OUT_B,30);
       Wait(1800);
       Off(OUT_BC);
       Wait(1000);
       back;
       pendown;
       OnRev(OUT_BC,30);//8画目
       Wait(600);
       Off(OUT_BC);
       Wait(1000);
       penup;
       OnFwd(OUT_C,30);
       OnRev(OUT_B,30);
       Wait(2200);
       Off(OUT_BC);
       Wait(1000);
       back;
       OnFwd(OUT_BC,30);
       Wait(200);
       Off(OUT_BC);
       Wait(1000);
       OnFwd(OUT_C,30);
       OnRev(OUT_B,30);
       Wait(800);
       Off(OUT_BC);
       Wait(1000);
       OnRev(OUT_BC,30);
       Wait(2000);
       Off(OUT_BC);
       Wait(1000);
       pendown;
       OnFwd(OUT_BC,30);//9画目
       Wait(500);
       Off(OUT_BC);
       Wait(1000);
       penup;
       ma_e;
       tyo_kaku;
       back;
       pendown;
       OnFwd(OUT_BC,30);//10画目
       Wait(300);
       Off(OUT_BC);
       Wait(1000);
       penup;
       ma_e;
       tyo_kaku;
       back;
       pendown;
       OnFwd(OUT_BC,30);//11画目
       Wait(500);
       Off(OUT_BC);
       Wait(1000);
       penup;
       ma_e;
       tyo_kaku;
       back;
       pendown;
       OnFwd(OUT_BC,30);//12画目
       Wait(300);
       Off(OUT_BC);
       Wait(1000);
       penup;
 }

字を書いてるうちに若干ずれてくるので、「白」と「口」の直角や位置を直すための前進の秒数を変えた。

書いた字

完成品

unnamed51.jpg

書き順

unnamed41.jpg

まとめ

思ったようにロボットが動かない、思ったようなプログラムができない、班員がなかなか集まれず前日に作業することが多かったので、

機械トラブルの対処で作業が進まなかったり等、問題点は最後までつきなかったが、1つ1つ直しながら作業していくことで、

この授業を始める前よりは格段にプログラミングについての知識や経験を身に着けることができたように思う。


添付ファイル: fileunnamed51.jpg 95件 [詳細] fileunnamed41.jpg 91件 [詳細] fileunnamed21.jpg 109件 [詳細] fileunnamed123.jpg 93件 [詳細] fileunnamed12.jpg 114件 [詳細] fileunnamed.jpg 105件 [詳細] fileIMG_01401.jpg 98件 [詳細] fileIMG_01391.jpg 109件 [詳細] fileIMG_0139.JPG 43件 [詳細]

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-06-11 (木) 18:34:23