1¡¥´Ä¶­¤Ë¶¯¤¤¥é¥¤¥ó¥È¥ì¡¼¥¹ TOP¤Ø 3¡¥¹âÀ­Ç½¤Ê¥é¥¤¥ó¥È¥ì¡¼¥¹£²

2¡¥¹âÀ­Ç½¤Ê¥é¥¤¥ó¥È¥ì¡¼¥¹£±


¢¨¤³¤Î¾Ï¤ò³Ø½¬¤¹¤ë¤Ë¤Ï­¶.´ðÁÃÊÔ£±¡Á£·¤Þ¤Ç¤ò½¬ÆÀ¤¹¤ë¤³¤È¤¬É¬ÍפǤ¹¡£

Á°¾Ï¤Þ¤Ç¤Î¥é¥¤¥ó¥È¥ì¡¼¥¹¤Ï¡¢¾ï¤Ë¥í¥Ü¥Ã¥È¤¬Àû²ó¤·¤Æ¤¤¤ë¤¿¤á¡¢¥¸¥°¥¶¥°¤ËÁö¹Ô¤·¤Æ¤·¤Þ¤¤¡¢¤¢¤Þ¤ê®¤¯¤ÏÁö¤ì¤Þ¤»¤ó¤Ç¤·¤¿¡£
º£²ó¤Ï¤½¤ì¤ò²þÎɤ·¡¢Â®¤¯¡¢°ÂÄꤷ¤¿Áö¤ê¤ò¼Â¸½¤·¤Þ¤·¤ç¤¦¡£
¥í¥Ü¥Ã¥È¤Ï´ðËÜŪ¤Ë¤³¤ì¤Þ¤Ç¤Î¤â¤Î¤ò°ú¤­Â³¤­»È¤¤¤Þ¤¹¡£


1¡¥ÈæÎãÀ©¸æ

¤³¤ì¤Þ¤Ç¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¡¢¿§¤ÎïçÃͤè¤ê°Å¤¤¤È¤­¡¢ÌÀ¤ë¤¤¤È¤­¡¢¤ÇÀû²óÊý¸þ¤ò»ØÄꤷ¤Æ¤¤¤Þ¤·¤¿¡£
¤·¤«¤·¡¢¸÷¥»¥ó¥µ¤¬¿§¤ÎïçÃÍÉÕ¶á¤òÆÉ¤ß¼è¤Ã¤Æ¤¤¤ë¤È¤­¡¢¥í¥Ü¥Ã¥È¤òÂ礭¤¯Àû²ó¤¹¤ëɬÍפϤ¢¤ê¤Þ¤»¤ó¡£
¤³¤ì¤òïçÃÍ¡ÊÌÜɸÃ͡ˤ«¤é¤Î¤º¤ì¤ËÈæÎ㤷¤Æ¡¢º¸±¦¤Î²óžº¹¡ÊÀû²óÃ͡ˤ¬Â礭¤¯¤Ê¤ë¤è¤¦¤Ë¤¹¤ì¤Ð¡¢¥í¥Ü¥Ã¥È¤Ï¤â¤Ã¤È°ÂÄꤷ¤ÆÁö¤ì¤ë¤Ï¤º¤Ç¤¹¡Ê¿Þ¡Ë¡£

pseigyo2.png(9799 byte)

¤³¤Î¤è¤¦¤ÊÀ©¸æ¤òÈæÎãÀ©¸æ(PÀ©¸æ)¤È¤¤¤¤¤Þ¤¹¡£
¼¡¤Î¥×¥í¥°¥é¥à¤òNXT¤Ë¥À¥¦¥ó¥í¡¼¥É¤·¤Æ¤¯¤À¤µ¤¤¡£

myrobot_interface.h
#define PORT_LIGHT NXT_PORT_S1	/* Æþ½ÐÎϥݡ¼¥È¤ÎÄêµÁ */
#define PORT_TOUCH NXT_PORT_S2
#define L_MOTOR NXT_PORT_B
#define R_MOTOR NXT_PORT_C

trace_p.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;			/* P¥²¥¤¥óÊÑ¿ô */
	int black,white,center;		/* ¿§ÊÑ¿ô */
	float turn;			/* Àû²óÃÍÊÑ¿ô */

	while(1){
		calibration(&black,&white,¢er);	/* ïçÃÍÀßÄêÍÑ´Ø¿ô¸Æ¤Ó½Ð¤· */

		systick_wait_ms(1000);		/* 1ÉÃÂÔ¤Ä */

		while(ecrobot_get_touch_sensor(PORT_TOUCH) == 0){		/* ¤â¤·²¡¤·¤¿¤È¤­¥¹¥¿¡¼¥È */
			display_goto_xy(0, 1);
			display_string("PUSH START");
			display_update();
		}
		systick_wait_ms(10);
	
		while(ecrobot_get_touch_sensor(PORT_TOUCH) == 0){
			turn = p_gain * (ecrobot_get_light_sensor(PORT_LIGHT) - center)*100 / (black-white);
			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();					/* ½èÍý½ªÎ» */
}

¾åµ­¤Î¥×¥í¥°¥é¥à¤Ç¤Ï²¼¼°¤Î¤è¤¦¤ËÀû²óÃͤò·×»»¤·¤Æ¤¤¤Þ¤¹¡£

p_sushiki.png(9799 byte)

­¡¤Î¹à¤ÏÈæÎ㥲¥¤¥ó¤Ç¤¹¡£¾å¤Î¥°¥é¥Õ¤Ç¤Î·¹¤­¤òɽ¤·¤Æ¤¤¤Þ¤¹¡£
­¢¤Î¹à¤ÏÊк¹¤Ç¤¹¡£½ÐÎÏÃͤ¬­¢¤Î¹à¤ËÈæÎ㤹¤ë¤Î¤¬ÈæÎãÀ©¸æ¤Ç¤¹¡£
­£¤Î¹à¤ÏÈæÎ㥲¥¤¥ó¤¬1¤Î¤È¤­¤ËturnÃͤÎÉý¤¬¡Þ100¤Þ¤Ç¤Ë¤Ê¤ë¤è¤¦¤Ë¤·¤¿·¸¿ô¤Ç¤¹¡£

¤³¤Î¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¤Æ¤â¡¢¥í¥Ü¥Ã¥È¤Ï¥¸¥°¥¶¥°¤ËÁö¤Ã¤Æ¤·¤Þ¤¦¤«¤â¤·¤ì¤Þ¤»¤ó¡£¤·¤«¤·¡¢Á°¤ÎïçÃͤÇÀ©¸æ¤·¤Æ¤¤¤¿¤â¤Î¤è¤ê¤â¡¢¥í¥Ü¥Ã¥È¤Î¿¶¤ì¤Ï´Ë¤ä¤«¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Ï¤º¤Ç¤¹¡£
®ÅÙ¤ÈÈæÎ㥲¥¤¥ó¤òŬÀÚ¤ËÀßÄꤹ¤ì¤Ð¡¢¤«¤Ê¤ê°ÂÄꤷ¤ÆÁö¤ì¤ë¤è¤¦¤Ë¤Ê¤ê¤Þ¤¹¡£
ÈæÎ㥲¥¤¥ó¤òÂ礭¤¯¤·¤¹¤®¤ë¤È¡¢¥í¥Ü¥Ã¥È¤¬¶Ê¤¬¤ê¤¹¤®¤ë¤Î¤ÇÉÔ°ÂÄê¤Ë¤Ê¤ê¤Þ¤¹¡£
µÕ¤Ë¾®¤µ¤¯¤·¤¹¤®¤ë¤È¡¢¿¶¤ì¤Ï¾®¤µ¤¯¤Ê¤ê¤Þ¤¹¤¬¡¢¥«¡¼¥Ö¤Ê¤É¤¬¶Ê¤¬¤ê¤­¤ì¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£
ŬÀÚ¤ÊÈæÎ㥲¥¤¥ó¤È®Å٤ϡ¢¥³¡¼¥¹¤ä¥í¥Ü¥Ã¥È¤Ë¤è¤Ã¤Æ°Û¤Ê¤ë¤Î¤Ç¡¢»î¸³Áö¹Ô¤ò¤·¤ÆÅ¬ÀÚ¤ÊÃͤòõ¤ê¤Þ¤·¤ç¤¦¡£



2¡¥²ÝÂê

£±¡¥¥µ¥ó¥×¥ë¥×¥í¥°¥é¥à¤ò¼Â¹Ô¤·¡¢Æ°ºî¤ò³Îǧ¤»¤è¡£
£²¡¥Â®ÅÙ¡¢ÈæÎ㥲¥¤¥ó¤òNXT¾å¤ÇÄ´Àá¤Ç¤­¤ë¤è¤¦¤Ë¤»¤è¡£
£³¡¥¥í¥Ü¥Ã¥È¤¬°ìÈÖ®¤¯¥³¡¼¥¹¤ò¼þ²ó¤Ç¤­¤ë¤è¤¦¤Ë¡¢Â®ÅÙ¡¢P¥²¥¤¥ó¤òÄ´À᤻¤è¡£
£´¡¥°ìÈÖÁᤫ¤Ã¤¿¤È¤­¤Î¥é¥Ã¥×¥¿¥¤¥à¤òµ­Ï¿¤»¤è¡£


1¡¥´Ä¶­¤Ë¶¯¤¤¥é¥¤¥ó¥È¥ì¡¼¥¹ TOP¤Ø 3¡¥¹âÀ­Ç½¤Ê¥é¥¤¥ó¥È¥ì¡¼¥¹£²