2¡¥¹âÀ­Ç½¤Ê¥é¥¤¥ó¥È¥ì¡¼¥¹£± TOP¤Ø 4¡¥oil¥Õ¥¡¥¤¥ë

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


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

Á°¾Ï¤Ç¤Ï¡¢¥í¥Ü¥Ã¥È¤ËÈæÎãÀ©¸æ¤ò¼ÂÁõ¤·¤Þ¤·¤¿¡£P¥²¥¤¥ó¤ò¾®¤µ¤á¤ËÀßÄꤹ¤ì¤Ð°ÂÄꤷ¤¿Áö¤ê¤Ë¤Ê¤ê¤Þ¤¹¤¬¡¢µÞ¤Ê¥«¡¼¥Ö¤¬¶Ê¤¬¤ì¤Ê¤¯¤Ê¤ê¤Þ¤¹¡£Â礭¤á¤Ë¤¹¤ë¤È¡¢¥«¡¼¥Ö¤Ï¶Ê¤¬¤ì¤Þ¤¹¤¬¡¢¥í¥Ü¥Ã¥È¤¬¿¶¤é¤ì¤Æ¤·¤Þ¤¤¤Þ¤¹¡£
¤³¤Î¾Ï¤Ç¤Ï¡¢Á°¾Ï¤Î¥×¥í¥°¥é¥à¤ò²þÎɤ·¡¢¤µ¤é¤Ë°ÂÄꤷ¤¿Áö¤ê¤òÌܻؤ·¤Þ¤¹¡£
¥í¥Ü¥Ã¥È¤Ï¤³¤ì¤Þ¤Ç¤Î¤â¤Î¤ò°ú¤­Â³¤­»È¤¤¤Þ¤¹¡£


1¡¥ÈùʬÀ©¸æ

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

pdseigyo.png(9799 byte)


¥í¥Ü¥Ã¥È¤Î¥é¥¤¥ó¥È¥ì¡¼¥¹¥×¥í¥°¥é¥à¤Ë¡¢Á°¾Ï¤ÎÈæÎãÀ©¸æ¤Ë²Ã¤¨¡¢ÈùʬÀ©¸æ¤òƳÆþ¤·¤Þ¤¹¡£
¼¡¤Î¥×¥í¥°¥é¥à¤ò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();					/* ½èÍý½ªÎ» */
}

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

pd_sushiki.png(9799 byte)

­¡¤Î¹à¤Ï¡¢ÈæÎãÀ©¸æ¹à¤Ç¤¹¡£
­¢¤Î¹à¤Ï¡¢Èùʬ¥²¥¤¥ó¤Ç¤¹¡£
­£¤Î¹à¤Ï¡¢ÊѲ½¤ÎÂ礭¤µ¤Ç¤¹¡£ËÜÍè¤Ï¡¢1¥ë¡¼¥×¤Ë¤«¤«¤Ã¤¿»þ´Ö¤Ç³ä¤ë¤Ù¤­¤Ç¤¹¤¬¡¢Èùʬ¥²¥¤¥ó¤Ë´Þ¤á¤¿¤³¤È¤Ë¤·¤Æ¤¤¤Þ¤¹¡£

ºÇŬ¤Ê®ÅÙ¡¢ÈæÎ㥲¥¤¥ó¡¢Èùʬ¥²¥¤¥ó¤Ï¡¢¥³¡¼¥¹¤ä¥í¥Ü¥Ã¥È¤Ë¤è¤Ã¤Æ°Û¤Ê¤ê¤Þ¤¹¡£
¤¿¤À¤·¡¢ÈæÎ㥲¥¤¥ó¤Ï¡¢Á°¾Ï¤Î¥×¥í¥°¥é¥à¤è¤ê¤â¾®¤µ¤¯¤·¤¿¤Û¤¦¤¬Îɤ¤¤Ç¤·¤ç¤¦¡£

Á°¾Ï¤ÎÈæÎãÀ©¸æ¤Ë²Ã¤¨¡¢ÈùʬÀ©¸æ¤ò¼ÂÁõ¤¹¤ë¤È¡¢°ÂÄꤷ¤¿¥é¥¤¥ó¥È¥ì¡¼¥¹¤¬½ÐÍè¤ë¤è¤¦¤Ë¤Ê¤ë¤³¤È¤¬¤ï¤«¤ê¤Þ¤¹¡£



2¡¥²ÝÂê

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

3¡¥¥Á¥ã¥ì¥ó¥¸²ÝÂê

£±¡¥¥í¡¼¥¿¥ê¡¼¥¨¥ó¥³¡¼¥À¤òÍѤ¤¤Æ¡¢¤Þ¤Ã¤¹¤°Áö¤ë¥í¥Ü¥Ã¥È¤òºîÀ®¤»¤è¡£
£²¡¥¥í¡¼¥¿¥ê¡¼¥¨¥ó¥³¡¼¥À¤òÍѤ¤¤Æ¡¢±ß¤òÉÁ¤¤¤ÆÁö¤ë¥í¥Ü¥Ã¥È¤òºîÀ®¤»¤è¡£


2¡¥¹âÀ­Ç½¤Ê¥é¥¤¥ó¥È¥ì¡¼¥¹£± TOP¤Ø 4¡¥oil¥Õ¥¡¥¤¥ë