Á°¾Ï¤Ç¤Ï¡¢¥í¥Ü¥Ã¥È¤ËÈæÎãÀ©¸æ¤ò¼ÂÁõ¤·¤Þ¤·¤¿¡£P¥²¥¤¥ó¤ò¾®¤µ¤á¤ËÀßÄꤹ¤ì¤Ð°ÂÄꤷ¤¿Áö¤ê¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢µÞ¤Ê¥«¡¼¥Ö¤¬¶Ê¤¬¤ì¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£Â礤á¤Ë¤¹¤ë¤È¡¢¥«¡¼¥Ö¤Ï¶Ê¤¬¤ì¤Þ¤¹¤¬¡¢¥í¥Ü¥Ã¥È¤¬¿¶¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
¤³¤Î¾Ï¤Ç¤Ï¡¢Á°¾Ï¤Î¥×¥í¥°¥é¥à¤ò²þÎɤ·¡¢¤µ¤é¤Ë°ÂÄꤷ¤¿Áö¤ê¤òÌܻؤ·¤Þ¤¹¡£
¥í¥Ü¥Ã¥È¤Ï¤³¤ì¤Þ¤Ç¤Î¤â¤Î¤ò°ú¤Â³¤»È¤¤¤Þ¤¹¡£
1¡¥ÈùʬÀ©¸æ
ÈùʬÀ©¸æ¡ÊDÀ©¸æ¡Ë¤Ï¡¢µÞ·ã¤Ê½ÐÎÏÃͤÎÊѲ½¤¬µ¯¤³¤Ã¤¿¾ì¹ç¡¢¤½¤ÎÊѲ½¤ÎÂ礤µ¤ËÈæÎ㤷¤¿ÆþÎϤò¹Ô¤¦¤³¤È¤Ç¡¢¤½¤ÎÊѲ½¤Ë¹³¤·¤è¤¦¤È¤¹¤ëÌòÌܤò²Ì¤¿¤·¤Þ¤¹¡£¤Þ¤¿¡¢¥Ï¥ó¥Á¥ó¥°¡Ê¼«ÎåŪ¤Ê¿¶Æ°¡Ë¤òÍÞ¤¨¤ëƯ¤¤ò¤·¤Þ¤¹¡£
ÊѲ½¤ÎÂ礤µ¡ÊÊк¹¤ÎÈùʬ¡Ë¤ËÈæÎ㤷¤Æ½ÐÎϤòÊѲ½¤µ¤»¤ë¤¿¤á¡¢µÞ¤Ë¥«¡¼¥Ö¤Ëº¹¤·³Ý¤«¤Ã¤¿»þ¤ä¡¢¥í¥Ü¥Ã¥È¤¬Â礤¯¿¶¤ì¤Æ¤¤¤ë¤È¤¤ÏÀû²óÃͤ¬Â礤¯¤Ê¤ê¤Þ¤¹¡£
µÕ¤Ë¡¢Ä¾Àþ¤òÁö¤Ã¤Æ¤¤¤ë¤È¤¤Ê¤É¡¢¥í¥Ü¥Ã¥È¤¬°ÂÄꤷ¤Æ¤¤¤ë¤È¤¤Ï¡¢Àû²óÃͤϾ®¤µ¤¯¤Ê¤ê¤Þ¤¹¡£(¿Þ)

¥í¥Ü¥Ã¥È¤Î¥é¥¤¥ó¥È¥ì¡¼¥¹¥×¥í¥°¥é¥à¤Ë¡¢Á°¾Ï¤ÎÈæÎãÀ©¸æ¤Ë²Ã¤¨¡¢ÈùʬÀ©¸æ¤òƳÆþ¤·¤Þ¤¹¡£
¼¡¤Î¥×¥í¥°¥é¥à¤òNXT¤Ë¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¤¯¤À¤µ¤¤¡£
ÊѲ½¤ÎÂ礤µ¡ÊÊк¹¤ÎÈùʬ¡Ë¤ËÈæÎ㤷¤Æ½ÐÎϤòÊѲ½¤µ¤»¤ë¤¿¤á¡¢µÞ¤Ë¥«¡¼¥Ö¤Ëº¹¤·³Ý¤«¤Ã¤¿»þ¤ä¡¢¥í¥Ü¥Ã¥È¤¬Â礤¯¿¶¤ì¤Æ¤¤¤ë¤È¤¤ÏÀû²óÃͤ¬Â礤¯¤Ê¤ê¤Þ¤¹¡£
µÕ¤Ë¡¢Ä¾Àþ¤òÁö¤Ã¤Æ¤¤¤ë¤È¤¤Ê¤É¡¢¥í¥Ü¥Ã¥È¤¬°ÂÄꤷ¤Æ¤¤¤ë¤È¤¤Ï¡¢Àû²óÃͤϾ®¤µ¤¯¤Ê¤ê¤Þ¤¹¡£(¿Þ)

¥í¥Ü¥Ã¥È¤Î¥é¥¤¥ó¥È¥ì¡¼¥¹¥×¥í¥°¥é¥à¤Ë¡¢Á°¾Ï¤ÎÈæÎãÀ©¸æ¤Ë²Ã¤¨¡¢ÈùʬÀ©¸æ¤òƳÆþ¤·¤Þ¤¹¡£
¼¡¤Î¥×¥í¥°¥é¥à¤òNXT¤Ë¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¤¯¤À¤µ¤¤¡£
trace_pd.c
#include "kernel.h" #include "kernel_id.h" #include "ecrobot_interface.h" #include "myrobot_interface.h" /* ºîÀ®¤·¤¿¥Ø¥Ã¥À¡¼¥Õ¥¡¥¤¥ë¤ò¥¤¥ó¥¯¥ë¡¼¥É */ DeclareTask(Task1); /* Task1¤òÀë¸À */ void ecrobot_device_initialize(){ /* OSEKµ¯Æ°»þ¤Î½èÍý */ nxt_motor_set_speed(L_MOTOR,0,0); nxt_motor_set_speed(R_MOTOR,0,0); ecrobot_set_light_sensor_active(PORT_LIGHT); } void ecrobot_device_terminate(){ /* OSEK½ªÎ»»þ¤Î½èÍý */ nxt_motor_set_speed(L_MOTOR,0,0); nxt_motor_set_speed(R_MOTOR,0,0); ecrobot_set_light_sensor_inactive(PORT_LIGHT); } void user_1ms_isr_type2(void){} void sound_beep(){ /* ¥Ó¡¼¥×²»¤òÌĤ餹¥æ¡¼¥¶´Ø¿ô */ ecrobot_sound_tone(600, 2, 50); systick_wait_ms(20); ecrobot_sound_tone(500, 5, 50); systick_wait_ms(50); } void calibration(int *black,int *white,int *center){ /* ïçÃÍÀßÄêÍѥ桼¥¶´Ø¿ô */ while(ecrobot_get_touch_sensor(PORT_TOUCH) == 0){ /* ¤â¤·²¡¤·¤¿¤È¤µ¶ */ *black=ecrobot_get_light_sensor(PORT_LIGHT); /* ¹õ¤ÎÌÀ¤ë¤µÆÉ¤ß¼è¤ê */ display_clear(0); /* ²èÌÌɽ¼¨ */ display_goto_xy(0, 1); display_string("BLACK="); display_int(*black, 4); display_update(); systick_wait_ms(10); } sound_beep(); systick_wait_ms(1000); while(ecrobot_get_touch_sensor(PORT_TOUCH) == 0){ /* ¤â¤·²¡¤·¤¿¤È¤µ¶ */ *white=ecrobot_get_light_sensor(PORT_LIGHT); /* Çò¤ÎÌÀ¤ë¤µÆÉ¤ß¼è¤ê */ display_clear(0); /* ²èÌÌɽ¼¨ */ display_goto_xy(0, 1); display_string("WHITE="); display_int(*white, 4); display_update(); systick_wait_ms(10); } sound_beep(); systick_wait_ms(1000); *center=(*black+*white)/2; /* Ãæ´ÖÃÍ»»½Ð */ display_clear(0); display_goto_xy(0, 1); display_string("CENTER="); display_int(*center, 4); display_update(); sound_beep(); systick_wait_ms(1000); } void robot_run(int speed,int turn){ /* ¥í¥Ü¥Ã¥È¤òÁö¤é¤»¤ë¥æ¡¼¥¶´Ø¿ô */ nxt_motor_set_speed(L_MOTOR,speed-turn,1); nxt_motor_set_speed(R_MOTOR,speed+turn,1); } TASK(Task1) { int speed=50; float p_gain=1.0,d_gain=1.0; int black,white,center,light,light_tmp; /* °ì¤ÄÁ°¤ÎÌÀ¤ë¤µ¤ò³ÊǼ¤¹¤ë"light_tmp"ÊÑ¿ô¤òÄêµÁ */ U32 timer; float turn; while(1){ calibration(&black,&white,¢er); /* ïçÃÍÀßÄêÍÑ´Ø¿ô¸Æ¤Ó½Ð¤· */ while(ecrobot_get_touch_sensor(PORT_TOUCH) == 0){ /* ¤â¤·²¡¤·¤¿¤È¤¥¹¥¿¡¼¥È */ display_clear(0); display_goto_xy(0, 1); display_string("PUSH START"); display_update(); systick_wait_ms(10); } systick_wait_ms(1000); /* 1ÉÃÂÔ¤Ä */ light_tmp = ecrobot_get_light_sensor(PORT_LIGHT); while(ecrobot_get_touch_sensor(PORT_TOUCH) == 0){ light = ecrobot_get_light_sensor(PORT_LIGHT); turn = p_gain * (light - center)*100 / (black-white) + d_gain * (light-light_tmp)/(black-white)*100; light_tmp=light; /* °ì¤ÄÁ°¤ÎÌÀ¤ë¤µ¤ò³ÊǼ */ robot_run(speed, turn); /* Áö¤ë */ } nxt_motor_set_speed(L_MOTOR,0,1); nxt_motor_set_speed(R_MOTOR,0,1); systick_wait_ms(1000); /* 1ÉÃÂÔ¤Ä */ } TerminateTask(); /* ½èÍý½ªÎ» */ } |
¾åµ¤Î¥×¥í¥°¥é¥à¤Ç¤Ï²¼¼°¤Î¤è¤¦¤ËÀû²óÃͤò·×»»¤·¤Æ¤¤¤Þ¤¹¡£

¡¤Î¹à¤Ï¡¢ÈæÎãÀ©¸æ¹à¤Ç¤¹¡£
¢¤Î¹à¤Ï¡¢Èùʬ¥²¥¤¥ó¤Ç¤¹¡£
£¤Î¹à¤Ï¡¢ÊѲ½¤ÎÂ礤µ¤Ç¤¹¡£ËÜÍè¤Ï¡¢1¥ë¡¼¥×¤Ë¤«¤«¤Ã¤¿»þ´Ö¤Ç³ä¤ë¤Ù¤¤Ç¤¹¤¬¡¢Èùʬ¥²¥¤¥ó¤Ë´Þ¤á¤¿¤³¤È¤Ë¤·¤Æ¤¤¤Þ¤¹¡£
ºÇŬ¤Ê®ÅÙ¡¢ÈæÎ㥲¥¤¥ó¡¢Èùʬ¥²¥¤¥ó¤Ï¡¢¥³¡¼¥¹¤ä¥í¥Ü¥Ã¥È¤Ë¤è¤Ã¤Æ°Û¤Ê¤ê¤Þ¤¹¡£
¤¿¤À¤·¡¢ÈæÎ㥲¥¤¥ó¤Ï¡¢Á°¾Ï¤Î¥×¥í¥°¥é¥à¤è¤ê¤â¾®¤µ¤¯¤·¤¿¤Û¤¦¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£
Á°¾Ï¤ÎÈæÎãÀ©¸æ¤Ë²Ã¤¨¡¢ÈùʬÀ©¸æ¤ò¼ÂÁõ¤¹¤ë¤È¡¢°ÂÄꤷ¤¿¥é¥¤¥ó¥È¥ì¡¼¥¹¤¬½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£