ペンを持たせるために左側部分にモーターを取り付けた。また、ペンがロボット本体の真ん中にくるように他のパーツを使い調節した。
動作の順番は1秒間止まってから顔の輪郭を描いく。その次に、目、ホクロ、口の順番で描く。
輪郭の定義
#define ARM_DWN OnFwd(OUT_C,40); Wait(200); Off(OUT_C) //ペン下げる #define TURN_L360 OnFwd(OUT_A,40); Wait(9000); Off(OUT_A) //顔の輪郭を描く #define ARM_UP OnRev(OUT_C,40); Wait(200); Off(OUT_C) //ペンを上げる #define GO_FWD_2 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(2000); Off(OUT_AB) //直進 #define TURN_L210 OnFwd(OUT_A,50); Wait(3193); Off(OUT_A) //左回転 #define GO_FWD_05 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(500); Off(OUT_AB) //直進
輪郭の定義の最後の定義で目を描く位置に行く。 輪郭のプログラム
ARM_DWN; TURN_L360; //顔の丸 ARM_UP; GO_FWD_2; TURN_L210; //目を描く位置に行く GO_FWD_05;
目を描く定義
#define ARM_DWN OnFwd(OUT_C,40); Wait(200); Off(OUT_C) //ペンを下げる #define GO_FWD_05 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(500); Off(OUT_AB) //右目を描く #define ARM_UP OnRev(OUT_C,40); Wait(200); Off(OUT_C) // ペンを上げる #define GO_FWD_05 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(500); Off(OUT_AB) #define ARM_DWN OnFwd(OUT_C,40); Wait(200); Off(OUT_C) //ペンを下げる #define GO_FWD_05 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(500); Off(OUT_AB) //左目を描く #define ARM_UP OnRev(OUT_C,40); Wait(200); Off(OUT_C) //ペンを上げる
目を描くプログラム
ARM_DWN; GO_FWD_05; //右目を描く ARM_UP; GO_FWD_05; ARM_DWN; GO_FWD_05; //左目かく ARM_UP;
ホクロを描く定義
#define GO_FWD_06 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(200); Off(OUT_AB) //直進 #define ARM_DWN OnFwd(OUT_C,40); Wait(200); Off(OUT_C) //ペンを下げる #define GO_FWD_07 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(180); Off(OUT_AB) //ホクロを描く #define ARM_UP OnRev(OUT_C,40); Wait(200); Off(OUT_C) //ペンを上げる #define GO_REV_01 OnRev(OUT_A,40); OnRev(OUT_B,37); Wait(380); Off(OUT_AB) //ホクロを描く前の位置に戻る
ホクロを描くプログラム
GO_FWD_06; ARM_DWN; //ホクロを描く GO_FWD_07; ARM_UP; GO_REV_01;
口を描く定義
#define TURN_L180 OnFwd(OUT_A,50); Wait(3200); Off(OUT_A) //左回転で口を描く位置に行く #define GO_FWD_1 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(1000); Off(OUT_AB) //直進 #define ARM_DWN OnFwd(OUT_C,40); Wait(200); Off(OUT_C) //ペンを下げる #define GO_FWD_05 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(500); Off(OUT_AB) //口を描く #define ARM_UP OnRev(OUT_C,40); Wait(200); Off(OUT_C) //ペンを上げる
口を描くプログラム
TURN_L180; //口のターン GO_FWD_1; ARM_DWN; GO_FWD_05; //口 ARM_UP;
#define ARM_DWN OnFwd(OUT_C,40); Wait(200); Off(OUT_C) #define TURN_L360 OnFwd(OUT_A,40); Wait(9000); Off(OUT_A) #define ARM_UP OnRev(OUT_C,40); Wait(200); Off(OUT_C) #define GO_FWD_2 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(2000); Off(OUT_AB) #define TURN_L210 OnFwd(OUT_A,50); Wait(3193); Off(OUT_A) #define GO_FWD_05 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(500); Off(OUT_AB) #define GO_FWD_06 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(200); Off(OUT_AB) #define GO_FWD_07 OnFwd(OUT_A,40); OnFwd(OUT_B,37); Wait(180); Off(OUT_AB) #define GO_REV_01 OnRev(OUT_A,40); OnRev(OUT_B,37); Wait(380); Off(OUT_AB) #define TURN_L180 OnFwd(OUT_A,50); Wait(3200); Off(OUT_A) #define GO_FWD_1OnFwd(OUT_A,40);OnFwd(OUT_B,37);Wait(1000); Off(OUT_AB) task main() { ARM_DWN; TURN_L360; ARM_UP; GO_FWD_2; TURN_L210; GO_FWD_05; ARM_DWN; GO_FWD_05; ARM_UP; GO_FWD_05; ARM_DWN; GO_FWD_05; ARM_UP; GO_FWD_06; ARM_DWN; GO_FWD_07; ARM_UP; GO_REV_01; TURN_L180; GO_FWD_1; ARM_DWN; GO_FWD_05; ARM_UP; }
・工夫したプログラム
アームが邪魔をしてスイッチが押しづらいので最初に1秒間停止させるプログラムを作ったこと。
ペンをギアを使って上下に運動させたかったが、全く思い浮かばず、最終的に輪ゴムで止めた点。
毎回顔を描かせるごとに目の位置や口の位置が変わってしまうので、そのたびに数値を変えていたのが大変だった。
顔とは程遠かったので似顔絵の写真は撮ってないです。