2016b/Member
Ìܼ¡
º£²ó¤ï¤¿¤·¤¬Ã´Åö¤·¤¿¤Î¤Ï¡¢¥Ô¥Ã¥Á¥ã¡¼¤Î¥í¥Ü¥Ã¥È¤Ç¤¹¡£¥Ü¡¼¥ë¤Î¼Í½ÐÊýË¡¤È¤·¤Æ¡¢
¥Ð¥Ã¥¿¡¼¥í¥Ü¥Ã¥È¤Ï¡¢È¯¼Í¤·¤¿¥Ü¡¼¥ë¤òÄϤߡ¢¥´¡¼¥ë¤ËÆþ¤ì¤ë¤È¤¤¤¦¤³¤È¤ò¹Ô¤¤¤Þ¤¹¡£¤³¤ÎºÝ¤ÎÏ¢·È¤Ë¤ª¤¤¤Æ¤Ï¡¢Bluetooth¤Î¥á¥Ã¥»¡¼¥¸(1~3¤Î¤É¤ì¤«¡Ë¤òÁ÷¤ê¡¢¥Ô¥Ã¥Á¥ã¡¼¤¬½èÍý¤ò¹Ô¤¤¤Þ¤¹¡£¤½¤Î¤¿¤á¡¢Á´ÂΤÎή¤ì¤Ë´Ø¤·¤Æ¤Ï¡¢¥Ð¥Ã¥¿¡¼¥í¥Ü¥Ã¥È¤¬¤¹¤Ù¤Æ´ÉÍý¤ò¤·¤Æ¤¤¤Þ¤¹¡£
Á°²ó¤ÎȽÄê½èÍý¤Ï¤½¤Î¤Þ¤Þ»È¤¤È½Äê¤Ë»È¤¦¥Ñ¥é¥á¡¼¥¿¡¼¤òÄ´Àᤷ¡¢¸òº¹ÅÀÆÍÆþ¸å100ms¤ÇȽÄ꤬²Äǽ¤Ë¤Ê¤ê¤Þ¤·¤¿¡£
line_trace_and_intersection_judgment(31,100);
¤³¤Î´Ø¿ô¤Ç¤Ï¡¢¥»¥ó¥µ¡¼¤ÎÃͤ¬31°Ê²¼¤Ç¤¢¤ê¡¢¤½¤ì¤¬100ms³¤¤¤¿¾ì¹ç¡¢¸òº¹ÅÀ¤ÈȽÊ̤·¤Þ¤¹¡£
¥¢¥ë¥ß´Ì¤ò¸¡½Ð¤¹¤ë¥×¥í¥°¥é¥à¤ò»²¹Í¤Ë¤·¤Þ¤·¤¿¡£¥»¥ó¥µ¡¼¤ÎÃͤ¬¤º¤ì¤¹¤®¤Ê¤¤¤è¤¦¤Ë¡¢Ê¿¶ÑÃͤò¼è¤ë¤è¤¦¤Ë¤¤¤¸¤ê¤Þ¤·¤¿¡£
¥Ý¥Ã¥Á¥ã¡¼¥í¥Ü¥Ã¥È¤Ç¤Ï¡¢¥Ð¥Ã¥¿¡¼¤«¤é£±¡Á£³¤ÎÈÖ¹æ¤ò¼õ¤±¼è¤ê¡¢¼õ¤±¼è¤Ã¤¿ÈÖ¹æ¤Ë±þ¤¸¤Æ¡¢¹ÔÆ°¤ò¤·¤Þ¤¹¡£º£²ó¤Ç¤Ï¡¢1¤Ï¡¢¥¹¥¿¡¼¥ÈÃÏÅÀ¤«¤éȯ¼Í°ÌÃ֤ޤǤΰÜÆ°¡£2¤Ï¡¢°ìÈֶᤤʪÂΤؤθþ¤¹ç¤ï¤»¡¢3¤Ï¡¢¥Ü¡¼¥ë¤òȯ¼Í¤·¤Þ¤¹¡£¥Ü¡¼¥ë¤Îȯ¼Í¤Î¥¿¥¤¥ß¥ó¥°¹ç¤ï¤»¤Ç¤¹¤¬¡¢¥Ð¥Ã¥¿¡¼¤¬Ì¿Îá¤òÁ÷¿®¤·¤Æ¤«¤é¡¢Wait()ʬÂԤĤ³¤È¤Ç¡¢ÂǤÁ¤Þ¤¹¡£
¡.5cmÁ°¿Ê
¢.1.2Éô֥饤¥ó¥È¥ì¡¼¥¹
£.±¦¤Ë70¡ë²óž
¤.30cmÁ°¿Ê
¥.6Éô֥饤¥ó¥È¥ì¡¼¥¹
¦.¸òº¹ÅÀ¤ò¸¡½Ð¤¹¤ë¤Þ¤Ç¥é¥¤¥ó¥È¥ì¡¼¥¹
§.7.2Éô֥饤¥ó¥È¥ì¡¼¥¹
¨.±¦¤Ë90¡ë²óž
©.13cmÁ°¿Ê
¥Ð¥Ã¥¿¡¼¤ËÂФ·¤Æ¸þ¤¤ò¹ç¤ï¤»¤Þ¤¹¡£¤½¤Î¤¿¤á¤Ë¡¢¥´¡¼¥ë¤ËÂФ·¤Æ¸þ¤¤¬¹ç¤ï¤Ê¤¤¤è¤¦¤Ë¡¢Ãµ¤¹³ÑÅÙ¤òÄ´À°¤·¤Æ¤¤¤Þ¤¹¡£
¥Ü¡¼¥ë¤òȯ¼Í¤·¤Þ¤¹¡£
#define moter_conect_move OUT_AB //¶îÆ°Îإ⡼¥¿¡¼¤ÎÀܳ¥³¥Í¥¯¥¿¡ÊABC½ç¡Ë #define moter_conect_option OUT_C //¶îÆ°Îذʳ°¤Î¥â¡¼¥¿¡¼¤ÎÀܳ¥³¥Í¥¯¥¿¡ÊABC½ç¡Ë #define moter_conect_move_L OUT_A //º¸¶îÆ°Îإ⡼¥¿¡¼¤ÎÀܳ¥³¥Í¥¯¥¿ #define moter_conect_move_R OUT_B //±¦¶îÆ°Îإ⡼¥¿¡¼¤ÎÀܳ¥³¥Í¥¯¥¿ #define SPEED 55 //Ä̾ï¥â¡¼¥¿¡¼Â®ÅÙ #define SPEED_FAST 60 //Ä̾ï¥â¡¼¥¿¡¼Â®Å١ʹâ®¡Ë #define SPEED_SLOW 40 //Ä̾ï¥â¡¼¥¿¡¼Â®ÅÙ¡ÊÄã®¡Ë #define SPEED_line_trace 30 //¥é¥¤¥ó¥È¥ì¡¼¥¹»þ¤Î®Å١ʵ¡ÂΤνÅÎ̤ˤè¤Ã¤ÆÄ´À᤹¤ë¡Ë #define SPEED_FAST_line_trace 40 //¥é¥¤¥ó¥È¥ì¡¼¥¹»þ¤Î®ÅÙ(¹â®) #define SPEED_SLOW_line_trace 30 //¥é¥¤¥ó¥È¥ì¡¼¥¹»þ¤Î®ÅÙ(Äã®) #define THRESHOLD 40 //Çò¤È¹õ¤ÎÃæ´Ö¤ÎÈ¿¼ÍΨ
const float diameter = 5.45; //¥¿¥¤¥ä¤Îľ·Â(cm) const float track = 11.38; //¥¿¥¤¥ä¤Î¥È¥ì¥Ã¥ÉÉý(cm) const float pi=3.1415; //±ß¼þΨ
//´Ø¿ô¥¨¥ê¥¢ void stop_move() //¤¹¤Ù¤Æ¤Î½ÐÎϥ⡼¥¿¡¼¤ÎÄä»ß¡Ê¤¹¤Ù¤Æ¤Î¥µ¥Ö¥ë¡¼¥Á¥óÆâ¤ËƱ¤¸¤³¤È½ñ¤¯¤È¡¢¸«¤Å¤é¤¤¤¿¤á¡Ë { Off(OUT_ABC); Wait(1); } void fwdDist(float d) //µ÷Î¥ d cm Á°¿Ê { stop_move(); //¥â¡¼¥¿¡¼¤Î¥ê¥»¥Ã¥È float angle = d/(pi*diameter)*360.0; //Á°¿Ê¤ËɬÍפʳÑÅÙ¤ò·×»»¤¹¤ë RotateMotorEx(moter_conect_move, SPEED_SLOW, angle, 0, true, true); //·×»»¤·¤¿³ÑÅÙÆ°¤«¤¹ } void turnAng_L(float ang) //º¸¤Ë¡¡ang (¡ë)¡¡²óž¡¡ { stop_move(); //¥â¡¼¥¿¡¼¤Î¥ê¥»¥Ã¥È float angle = track/diameter * ang; //º¸²óž¤ËɬÍפʳÑÅ٤η׻» RotateMotorEx(moter_conect_move, SPEED_SLOW, angle, 100, true, true); //·×»»¤·¤¿³ÑÅÙÆ°¤«¤¹ } void turnAng_R(float ang) //±¦¤Ë¡¡ang (¡ë)¡¡²óž¡¡ { stop_move(); //¥â¡¼¥¿¡¼¤Î¥ê¥»¥Ã¥È float angle = track/diameter * ang; //±¦²óž¤ËɬÍפʳÑÅ٤η׻» RotateMotorEx(moter_conect_move, SPEED_SLOW, angle, -100, true, true); //·×»»¤·¤¿³ÑÅÙÆ°¤«¤¹ } int searchDirection(long ang) //°ìÈֶᤤµ÷Î¥¤òõ¤·¤Æ¡¢µ÷Î¥¡Êcm¡Ë¤òÊÖ¤¹(¥¢¥ë¥ß´Ì¤Î¸¡½Ð¥×¥í¥°¥é¥à¤ÈËؤÉƱ¤¸) { stop_move(); //¥â¡¼¥¿¡¼¤Î¥ê¥»¥Ã¥È long tacho_min ; int d_min = 300 ; long angle = (track/diameter)*ang; turnAng_L(ang/2); ResetTachoCount(moter_conect_move); OnFwdSync(moter_conect_move,SPEED_SLOW,-100); while(MotorTachoCount(moter_conect_move_L)<=angle) { int US_average = SensorUS(S4) ; //3²ó¤Û¤ÉĶ²»ÇÈ¥»¥ó¥µ¡¼¤ÎÃͤò¼èÆÀ¤·¡¢Ê¿¶ÑÃͤò½Ð¤¹¤³¤È¤Ç¡¢ÆÍȯŪ¤Ê¥»¥ó¥µ¡¼¤ÎÃͤΥº¥ì¤Î±Æ¶Á¤ò¾¯¤Ê¤¯¤¹¤ë US_average = US_average+SensorUS(S4); // US_average = US_average+SensorUS(S4); // US_average = US_average / 3 ; // if (US_average<d_min) { d_min = SensorUS(S4); tacho_min = MotorTachoCount(moter_conect_move_L); } } OnFwdSyncEx(moter_conect_move,SPEED_SLOW,100,RESET_NONE); until(MotorTachoCount(moter_conect_move_L)<=tacho_min || SensorUS(S4)<=d_min); Wait(360); Off(moter_conect_move);Wait(500); return d_min; } void line_trace(int sensor_light_lv) //¥é¥¤¥ó¥È¥ì¡¼¥¹¤Î¥×¥í¥»¥¹ { if (sensor_light_lv < THRESHOLD-8) { OnFwd(moter_conect_move_R,SPEED_FAST_line_trace); OnFwd(moter_conect_move_L,-SPEED_FAST_line_trace); } else if (sensor_light_lv < THRESHOLD-5) { OnFwd(moter_conect_move_L,SPEED_SLOW_line_trace); } else if (sensor_light_lv < THRESHOLD +5) { OnFwdSync(moter_conect_move,SPEED_line_trace,0); } else if (sensor_light_lv < THRESHOLD+8) { OnFwd(moter_conect_move_R,SPEED_SLOW_line_trace); } else { OnFwd(moter_conect_move_L,SPEED_FAST_line_trace); OnFwd(moter_conect_move_R,-SPEED_FAST_line_trace); } } long intersection_judgment(long t0,int threshold)//Sensor¤ÎÃͤ¬Threshold(Ǥ°Õ¤ÎÈ¿¼ÍΨ)°Ê¾å¤Î¤È¤¡¢°ú¿ô¤Ë¸½ºß¤Î»þ¹ï¤òÂåÆþ¤·ÊÖ¤¹¡£¤½¤ì°Ê³°¤ÏÊѹ¹¤»¤º°ú¿ô¤òÊÖ¤¹¡£ { if (SENSOR_1 > threshold) //¸½ºß¤Î¥»¥ó¥µ¡¼¤ÎÃͤ¬¡¢Threshold°Ê¾å¤Î¤È¤ { t0 = CurrentTick(); //¸½ºß¤ÎÃͤòt0¤ËÂåÆþ } return t0 ; //t0¤ÎÃͤòÊÖ¤¹ }
//´Ø¿ô¡Êtask_main¤Ç¸Æ¤Ó½Ð¤¹¡Ë¥¨¥ê¥¢ void set_sensor_all() { SetSensorLight(S1); // ¥é¥¤¥È¥»¥ó¥µ¡¼¤ÎÄêµÁ SetSensorLowspeed(S4); //Ķ²»ÇÈ¥»¥ó¥µ¡¼¤ÎÄêµÁ } void firing_ball() //¥Ü¡¼¥ë¤Îȯ¼Í´Ø¿ô { stop_move(); //¥â¡¼¥¿¡¼¤Î¥ê¥»¥Ã¥È¡Ê´Ø¿ô¤¬Ï¢Â³¤¹¤ëºÝ¡¢Off¤ò¶´¤Þ¤Ê¤¤¤È£µ¹ÔÌܰʹߤǥХ°¤¬µ¯¤¤ë¡Ë RotateMotor(moter_conect_option,85,537); //option¥â¡¼¥¿¡¼¡Ê¥Ü¡¼¥ëȯ¼ÍÁõÃ֡ˤΥ⡼¥¿¡¼¤Î²óž } void line_tracing_in_seconds(float seconds) //seconds(ÉÃ)´Ö¡¢¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ë { stop_move(); long t0 =CurrentTick(); float temp=1000*seconds; //while¥ë¡¼¥×¤¬À®Î©¤¹¤ë´Ö¡¢1000*seconds¤òËè²ó·×»»¤¹¤ë¤Î¤¬¡¢±é»»Åª¤Ë̵Â̤Ǥ¢¤ë¤¿¤á¡¢temp¤ËÆþ¤ì¤ë while(CurrentTick()-t0 < temp) //tempÉô֥롼¥× { line_trace(SENSOR_1); //¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ë } } void line_trace_and_intersection_judgment(int threshold,int judgment_time) //¸òº¹ÅÀ¤òȽÃÇ(Threshold¤ÎÃͤÇȽÃÇ)¤¹¤ë¤Þ¤Ç¡¢¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ë { stop_move(); //¥â¡¼¥¿¡¼¥ê¥»¥Ã¥È long t0 = CurrentTick(); //¸½ºß¤ÎÃͤòt0¤Ë¼èÆÀ while(CurrentTick()-t0 < judgment_time) //judgment_time¤è¤êû¤¤»þ´Ö¤Î¹õ¤Î¸¡½Ð¤Ï̵»ë { line_trace(SENSOR_1); //¥é¥¤¥ó¥È¥ì¡¼¥¹¤ò¤¹¤ë t0=intersection_judgment(t0,threshold); //¸½ºß¤¬threshold¤ÎÃͤè¤êÂ礤¤¤È¤¡¢t0¤Ë¸½ºß¤ÎÃͤòÂåÆþ } stop_move(); //¥â¡¼¥¿¡¼¤ÎÄä»ß Wait(1000); //¸òº¹ÅÀ¤Ç°ì»þÄä»ß PlaySound(SOUND_UP); //¸òº¹ÅÀ¸¡½Ð¤Ç²»¤òÌĤ餹 } void move_A_to_inside_of_M()¡¡ //¥¹¥¿¡¼¥ÈÃÏÅÀ¤«¤éȯ¼ÍÃÏÅÀ¤Þ¤Ç¤Î°ÜÆ° { fwdDist(5.0); //5cmÁ°¿Ê line_tracing_in_seconds(1.2); //1.2Éô֥饤¥ó¥È¥ì¡¼¥¹ turnAng_R(70.0); //±¦¤Ë70¡ëž fwdDist(30.0); //30cmÁ°¿Ê line_tracing_in_seconds(6.0); //6Éô֥饤¥ó¥È¥ì¡¼¥¹ line_trace_and_intersection_judgment(31,100); //¸òº¹ÅÀ¤ò¸¡½Ð¤¹¤ë¤Þ¤Ç¥é¥¤¥ó¥È¥ì¡¼¥¹ line_tracing_in_seconds(7.2); //7.2Éô֥饤¥ó¥È¥ì¡¼¥¹ turnAng_R(90.0); //±¦¤Ë90¡ë²óž fwdDist(13.0); //13cmÁ°¿Ê } void mukiawase() //¥í¥Ü¥Ã¥È¤Î¸þ¤¤ò¹ç¤ï¤»¤ë { turnAng_L(10.0); //ÊÛÅö¤Î¥´¡¼¥ë¤ò¸¡½Ð¤·¤Ê¤¤¤è¤¦¤Ë¤¹¤ë°Ù¤Î¿¶¤êÉý¤ÎÄ´Àá int a =searchDirection(60); //°ìÈֶᤤʪÂΤ˸þ¤¤ò¹ç¤ï¤»¤ë turnAng_R(3.0); //¥Ð¥Ã¥¿¡¼¤ÎÂǤÁÊÖ¤¹µ¡¹½¤Ë¸þ¤¤ò¹ç¤ï¤»¤ëÈùÄ´À° } void send_action_finish() //¥Ð¥Ã¥¿¡¼¤ËÆ°ºî¤Î´°Î»¤òÁ÷¤ë { SendRemoteNumber(0,MAILBOX1,1); } int receive_action_signal() //¥Ð¥Ã¥¿¡¼¤«¤éÌ¿Îá¤ò¼õ¤±¼è¤ë { int temp = 0; //¥á¥Ã¥»¡¼¥¸¤Î¼õ¼èÊÑ¿ô while(temp==0) //¥á¥Ã¥»¡¼¥¸¤¬½é´üÃͤ«¤éÊѤï¤ë¤Þ¤Ç¥ë¡¼¥× { ReceiveRemoteNumber(MAILBOX2,true,temp); //¥á¥Ã¥»¡¼¥¸¤Î¼èÆÀ } PlaySound(SOUND_UP); //¥á¥Ã¥»¡¼¥¸¤ò¼õ¤±¼è¤Ã¤¿¤é²»¤òÌĤ餹 return temp; //¼õ¤±¼è¤Ã¤¿ÃͤòÊÖ¤¹ }
//task¥¨¥ê¥¢ task main() { set_sensor_all(); //¥»¥ó¥µ¡¼¤Î½é´ü²½ int action_number=0; //Ì¿Îᥳ¡¼¥É¤Îµ²±ÊÑ¿ô while(true) { action_number = receive_action_signal();//Ì¿Îá¤Î¼õ¿®¤ò¤·¡¢ÊÑ¿ô¤ËÂåÆþ(¼õ¿®¤¹¤ë¤Þ¤Ç¤³¤Î¹Ô¤ÇÄä»ß) if (action_number == 1) //Ì¿Îᥳ¡¼¥É¤¬1¤Î¤È¤ { move_A_to_inside_of_M(); //¥Ô¥Ã¥Á¥ã¡¼¤Î°ÌÃ֤ޤǰÜÆ° action_number = 0; //Ì¿Îᥳ¡¼¥É¤Î¥ê¥»¥Ã¥È } else if (action_number == 2) //Ì¿Îᥳ¡¼¥É¤¬2¤Î¤È¤ { mukiawase(); //¥í¥Ü¥Ã¥È¤Î¸þ¤¤ò¹ç¤ï¤»¤ë action_number = 0; //Ì¿Îᥳ¡¼¥É¤Î¥ê¥»¥Ã¥È } else if (action_number == 3) //Ì¿Îᥳ¡¼¥É¤¬3¤Î¤È¤ { firing_ball(); //¥Ü¡¼¥ë¤Îȯ¼Í action_number = 0; //Ì¿Îᥳ¡¼¥É¤Î¥ê¥»¥Ã¥È } send_action_finish(); //Æ°ºî¤Î´°Î»¤òÄÌÃÎ PlaySound(SOUND_UP); //Æ°ºî´°Î»¤Î²» } }
º£²ó¡¢¥í¥Ü¥Ã¥ÈƱ»Î¤ÎÏ¢·È¤ò¥á¥¤¥ó¤Ë¹Ô¤Ê¤Ã¤¿¤¬¡¢¼ÂºÝ¤Ë¤ä¤Ã¤Æ¤ß¤Æ°ìÈÖ¶ìÏ«¤·¤¿¤Î¤¬¡¢Ä¶²»ÇÈ¥»¥ó¥µ¡¼¤¬¤¦¤Þ¤¯ÃͤòÊÖ¤·¤Æ¤¯¤ì¤Ê¤¤¤³¤È¤¬¤¢¤ë¤³¤È¤Ç¤¢¤Ã¤¿¡£¤½¤Î¤¿¤á¡¢º£²ó°ìÈÖ»þ´Ö¤ò»È¤Ã¤¿¤Î¤Ï¡¢¥í¥Ü¥Ã¥ÈƱ»Î¤Î¸þ¤¤ò¹ç¤ï¤»¤ë¤Ê¤É¤Î¸þ¤¹ç¤ï¤»¤Ç¤¢¤ê¡¢¥í¥Ü¥³¥óÅöÆü¤Ë¤Ê¤Ã¤Æ¤â¤¦¤Þ¤¯Ä´À᤬¤Ç¤¤Æ¤¤¤Ê¤«¤Ã¤¿¤Î¤¬¡¢º£²ó¤Î¥í¥Ü¥³¥ó¤ÎÈ¿¾ÊÅÀ¤Ç¤¢¤Ã¤¿¤È¤¤¤¨¤ë¡£¥í¥Ü¥Ã¥ÈƱ»Î¤Îµ÷Î¥¤Ï10cmÄøÅ٤ʤΤÀ¤¬¡¢¤½¤Îµ÷Î¥¤¬±ó¤¤¤è¤¦¤Ë¶¯¤¯´¶¤¸¤¿¡£º£²ó¤Ï¡¢Á°²ó»È¤Ã¤¿¥×¥í¥°¥é¥à¤òÀ°Íý¤·¡¢´Ø¿ô¤Ë¤¹¤ë¤³¤È¤Ç¡¢¥×¥í¥°¥é¥à¤ÎÀ߷פè¤ê¤â¡¢Ä´Àá¤ÎÊý¤Ë»þ´Ö¤ò¤µ¤¯¤³¤È¤¬½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤Ã¤¿¤Î¤Ï²þÁ±¤µ¤ì¤¿ÅÀ¤Ç¤¢¤ë¤È»×¤¦¡£