・A3の紙に相棒の似顔絵を書くロボットを作成せよ。 ・ペン以外はキットに含まれる部品を使うこと。 ・またキットに付属の輪ゴムは切れやすいので切れないように十分注意すること。 ・ひとりにつき一つ以上のプログラムを作成すること。
・付属の説明書に載っていたローヴァーボットのドライブベースを基本の形として利用しました。
・今回はセンサーを使用する必要がないため、NQCを搭載する位置を通常の形よりも前方にしてペンを取り付けるためのスペースを確保しました。
・移動は無限軌道による移動方式をとります
・ペンは車体の後部にモーターの回転によって振り上げたり、振り下ろしたりできるアームを取り付け、そこにキット付属の輪ゴムを使って取り付けました。アームはキットに入っていた黄色のL字型のパーツを使用しました。
・ペンの位置をプログラムによってちょうどいい位置に調整するのが難しかったため、アームを一定の位置で停止させるストッパーをもうけました。
・ペンを固定してあるアームは、モーターに直接繋がっているので動きが激しくなってしまった。その対策として、ペンを上下させるためのモーターとドライブベース、及びNQCの繋がりを可能な限り頑丈なものにしました。
・ペンは筆圧が弱くても安定して似顔絵を描けるようにサインペンを利用しました。
プログラム製作 アンドウ
#define B_POWER SetPower(OUT_B,0);//Bの回転速度を調整 #define OFF_B Off(OUT_B); //Bの回転を停止 #define GO_STRAIGHT OnFwd(OUT_A+OUT_C);//前進する #define GO_BACK OnRev(OUT_A+OUT_C);//後退する #define OFF Off(OUT_A+OUT_C); //AとCの回転を停止する sub P_DOWN()//ペンを降ろすためのプログラム { B_POWER; OnFwd(OUT_B); Wait(50); OFF_B; } sub P_RAISE()//ペンを上げるためのプログラム { B_POWER; OnRev(OUT_B); Wait(50); OFF_B; } task main() { P_DOWN(); OnRev(OUT_C); OnFwd(OUT_A); Wait(745); OFF;//輪郭を描く P_RAISE(); OnRev(OUT_C); Wait(100); OFF; GO_STRAIGHT; Wait(60); OFF; P_DOWN(); //前髪を描く1 GO_STRAIGHT; Wait(30); OFF; P_RAISE(); GO_BACK; Wait(30); OFF;//前髪を描く2 OnRev(OUT_A); Wait(186); OFF; GO_STRAIGHT; Wait(98); OFF; P_DOWN(); GO_STRAIGHT; Wait(40); OFF; P_RAISE(); GO_BACK; Wait(30); OFF;//前髪を描く3 OnRev(OUT_C); Wait(186); OFF; GO_STRAIGHT; Wait(120); OFF; P_DOWN(); GO_STRAIGHT; Wait(40); OFF; P_RAISE(); GO_BACK; Wait(30); OFF;//前髪を描く4 OnRev(OUT_A); Wait(186); OFF; GO_STRAIGHT; Wait(98); OFF; P_DOWN(); GO_STRAIGHT; Wait(40); OFF; P_RAISE(); GO_BACK; Wait(150); OFF; OnRev(OUT_A); OnFwd(OUT_C); Wait(267); OFF; GO_BACK; Wait(50); OFF; GO_STRAIGHT; Wait(60); OFF; P_DOWN(); //目を描く 左 GO_STRAIGHT; Wait(40); OFF; P_RAISE(); GO_STRAIGHT; Wait(30); OFF; P_DOWN(); //目を描く 右 GO_STRAIGHT; Wait(40); OFF; P_RAISE(); }
#define B_POWER SetPower(OUT_B,0);//Bの回転速度を調整 #define OFF_B Off(OUT_B); //Bの回転を停止 #define GO_STRAIGHT OnFwd(OUT_A+OUT_C);//前進する #define GO_BACK OnRev(OUT_A+OUT_C);//後退する #define OFF Off(OUT_A+OUT_C); //AとCの回転を停止する sub P_DOWN()//ペンを降ろす { B_POWER; OnFwd(OUT_B); Wait(50); OFF_B; } sub P_RAISE()//ペンを上げる { B_POWER; OnRev(OUT_B); Wait(50); OFF_B; } task main() { P_DOWN(); //輪郭を描く OnRev(OUT_C); OnFwd(OUT_A); Wait(750); OFF; P_RAISE(); OnRev(OUT_C); Wait(100); OFF; GO_STRAIGHT; Wait(45); OFF; P_DOWN(); //前髪を描く1 GO_STRAIGHT; Wait(45); OFF; P_RAISE(); GO_BACK; Wait(30); OFF; OnRev(OUT_A); Wait(186); OFF; GO_STRAIGHT; Wait(98); OFF; P_DOWN();//前髪を描く2 GO_STRAIGHT; Wait(40); OFF; P_RAISE(); GO_BACK; Wait(30); OFF; OnRev(OUT_C); Wait(186); OFF; GO_STRAIGHT; Wait(120); OFF; P_DOWN(); //前髪を描く3 GO_STRAIGHT; Wait(40); OFF; P_RAISE(); GO_BACK; Wait(30); OFF; OnRev(OUT_A); Wait(186); OFF; GO_STRAIGHT; Wait(98); OFF; P_DOWN(); //前髪を描く4 GO_STRAIGHT; Wait(40); OFF; P_RAISE(); GO_BACK; Wait(120); OFF; OnRev(OUT_A); OnFwd(OUT_C); Wait(267); OFF; GO_BACK; Wait(50); OFF; GO_STRAIGHT; Wait(100); OFF; P_DOWN(); //左目を描く GO_STRAIGHT; Wait(40); OFF; P_RAISE(); GO_STRAIGHT; Wait(30); OFF; P_DOWN(); //右目をを描く GO_STRAIGHT; Wait(40); OFF; P_RAISE(); GO_BACK; Wait(250); OFF; OnFwd(OUT_A); OnRev(OUT_C); Wait(200); OFF; GO_STRAIGHT; Wait(80); OFF; OnFwd(OUT_A); OnRev(OUT_C); Wait(200); OFF; GO_BACK; Wait(65); OFF; P_DOWN(); //鼻を描く GO_STRAIGHT; Wait(40); OFF; P_RAISE(); }
・工夫した点は、ペンの上げ下げです。モーターに直接アームをつないでいるため、モーターの動きが速すぎて、アームが壊れてしまうという問題が起きましたが、モーターの回転数を落とし、モーター周りの構造を感情なものにすることで対処しました。
・苦労した点は、二人の似顔絵に差を出すことです。これはほとんど同じプログラムを使用しているために、あまり変化を出せませんでした。結局、片方の顔にはあるパーツが、もう片方にはないという方法で一応は解決しました。
・ペンを固定する位置が車体の後部だったので、安定しなかった。ペンの位置を車体の中心部に持ってくればよかったかもしれない。
・カッコいいからという理由で無限軌道を使用したところ、小回りも利かないし、誤差と呼べないような差が出てしまった。
・ロボットの写真を撮っていなかったため、ホームページで説明するのが大変だった。また、写真がないためページが刺激の少ないものになってしまった。