*課題1 似顔絵を書くロボット [#a17e0c82] -パートナーの似顔絵を描くロボットを作る。 ***ルール説明 [#m3a4d36e] -ロボットに似顔絵を描くプログラミングを入力し、ペンを使って紙に似顔絵を描く。 -ロボットの動作中は、ロボットに触れてはならない。 -紙のサイズはA4で、固定してはならない。 **ロボット本体 [#f7302be7] NXCの説明書に載っていた前輪2個後輪1個のロボットに前にもう1個モーターを設置し、ペンをゴムで固定し上下に動かせるよう改良したものです。 向きを変えたとき、できるだけペンの先がずれないように車体を小さくしました。 。 出きるだけ、ずれないようにペンは真ん中にして、摩擦を減らすためにペン先の角度を斜めにしました。これで何度も似顔絵を描いてみた結果、ほとんどの確率でずれなくなりました また、重量を増やして紙を押さえつける様にしました。 #ref(2012a/A4/Kaiyohmaru/M1/20120525155634a.jpg,100%,ロボット) #ref(2012a/A4/Kaiyohmaru/M1/20120525155634a.jpg,100%,ロボット) 出きるだけ、ずれないようにペンは真ん中にして、摩擦を減らすためにペン先の角度を斜めにしました。これで何度も似顔絵を描いてみた結果、ほとんどの確率でずれなくなりました また、重量を増やして紙を押さえつける様にしました。 **ロボットが描いた似顔絵 [#p43cf7ad] #ref(2012a/A4/Kaiyohmaru/M1/20120525160836a.jpg,100%,似顔絵) -以下の順に描くようにしました。 �ヾ蕕領愕� ��口 �H�毛 �ぬ� �ド� �θ韻量� #ref(2012a/A4/Kaiyohmaru/M1/nigaoekakijun.jpg,100%,似顔絵) **プログラム [#u64ef928] //nxtプログラム 似顔絵 #define turn90 370 #define turn45 185 void bturn_r(int i){ //右輪後ろ回転 Float(OUT_BC); RotateMotor(OUT_B,-50,i); Wait(200); Off(OUT_BC); Wait(200); } void bturn_l(int i){ //左輪後ろ回転 Float(OUT_BC); RotateMotor(OUT_C,-50,i); Wait(200); Off(OUT_BC); Wait(200); } void fturn_l(int i){ //右輪前回転 Float(OUT_BC); RotateMotor(OUT_B,50,i); Wait(200); Off(OUT_BC); Wait(200); } void fturn_r(int i){ //左輪前回転 Float(OUT_BC); RotateMotor(OUT_C,50,i); Wait(200); Off(OUT_BC); Wait(200); } void go(int i){ //前進 Float(OUT_BC); OnFwd(OUT_BC,20); Wait(200); RotateMotor(OUT_BC,50,i); Wait(200); Float(OUT_BC); Wait(200); } void back(int i){ //後進 Float(OUT_BC); OnRev(OUT_BC,20); Wait(200); RotateMotor(OUT_BC,-50,i); Wait(200); Float(OUT_BC); Wait(200); } void up(){ //ペン上げる Wait(200); OnRev(OUT_A,30); Wait(400); Off(OUT_A); Wait(200); } void down(){ //ペン下げる Wait(200); OnFwd(OUT_A,20); Wait(400); Off(OUT_A); Wait(200); } task main(){ int i; //顔の輪郭 for(i=0;i<=1;i++){ down(); go(100); up(); go(140); bturn_l(turn45); back(45); } down(); go(60); up(); go(140); bturn_l(turn45); back(45); for(i=0;i<=1;i++){ down(); go(100); up(); go(140); bturn_l(turn45); back(45); } bturn_l(turn45); go(115); down(); go(30); //口 up(); go(60); bturn_r(turn90); go(80); fturn_r(turn90); back(250); down(); //眉 back(50); up(); back(15); down(); back(50); up(); fturn_r(turn90); go(20); bturn_r(turn90); down(); //目 back(37); up(); back(22); down(); back(37); up(); bturn_r(turn90); go(20); fturn_l(turn90); go(52); fturn_l(turn90); back(200); down(); //鼻 go(50); up(); go(140); bturn_l(turn45); back(45); down(); go(20); up(); bturn_r(turn45); back(180); fturn_l(turn45); down(); //髪の毛 go(70); up(); repeat(5){ back(90); bturn_l(turn90); back(20); fturn_r(turn90); go(2); down(); go(55); up(); } } ***問題点 [#oe8fcd32] -タイヤが紙の外に出てしまうと、紙がずれやすくなる。 -スピードが速すぎても、遅すぎても紙がずれてしまう。 *工夫した点 [#i33c7ca3] -ペン先の方向を斜めにすることで紙との摩擦を減らした。 -紙がずれないように描く絵を小さくし、ロボットのスピードを調節した。 *感想 [#q3c88399] 初めてのロボット製作とプログラミングだったので、解らないことばかりだったので不安でした。でも、パートナーと協力して取り組んだおかげで進めることができました。ロボットを作る際の一番の課題が紙をずらさないことでした。それに対して、速さを調節し、絵を小さくするなどの工夫をすることができました。