Definición:
- Este proyecto es un robot cuyo objetivo es localizar al
robot oponente, ir a por el y tirarlo del tatami.
- Para localizar al otro robot hemos utilizado los sensores
CNY70 controlados por unos servo motores. Hemos utilizado el chip L293, según
lo que detecten los sensores este integrado va ha hacer que los motores giren
adelante o hacia atrás.
- Nuestro proyecto esta controlado por el PIC16F876.
- Hemos utilizado dos sensores para detectar al robot
oponente, los GP2D12 que miden la distancia, así vamos ha poder atacar al robot
oponente y echarlo del tatami.
#include <16F876A.H>
#device adc=10
#use delay(clock=20000000)
#fuses HS,NOWDT,NOPROTECT
//#include "lcd.c"
#define botoia_1 input(PIN_C6)
#define botoia_2 input(PIN_C7)
#define MI_1 PIN_C0
#define MI_2 PIN_C1
#define MD_1 PIN_C2
#define MD_2 PIN_C3
#define CNY_1 PIN_C4
#define CNY_2 PIN_C5
void ezkerrera (void);
void eskubira (void);
void aurrera (void);
void atzera(void);
void sentsoreak (void);
void geldi (void);
int16 toke_1, toke_2; //1 - ezkerra
/**********************************************************************
EZKERRERA FUNTZIOA: Funtzio honetan sartzen bada, robotak ezkerrera
giratu behar du beste robota aurkitu arte. Aurkitzerakoan ezkerreko
funtziotik aterako da eta aurrera funtzian sartu beharko du.
**********************************************************************/
void ezkerrera (void)
{
output_high(MI_1); //motorI aurrera
output_low(MI_2);
output_high(MD_1); //motorD geldi egon
output_low(MD_2);
}
/*********************************************************************
EZKUBIRA FUNTZIOA: Funtzio honetan sartzen bada, robotak eskubira
giratu behar du beste robota aurkitu arte. Aurkitzerakoan eskubiko
funtziotik aterako da eta aurrera funtzian sartu beharko du.
*********************************************************************/
void eskubira (void)
{
output_low(MI_1); //motorI aurrera
output_high(MI_2);
output_low(MD_1); //motorD geldi egon
output_high(MD_2); //motor_2_atzera geldi egon
}
/********************************************************************
AURRERA FUNTZIOA: Funtzio honetan sartzen bada, horrek esan nahi du
beste robota lokalizatu duela. Orduan gure minisumoak aurrera egingo du
bestea bultzatuz. Bestea bistaz galdu badu azkena galdu duen sensorea
dagoen lekuan(ezkerrean edo eskubian) norantza hori artuko du aurkitu arte.
********************************************************************/
void aurrera (void)
{
/* output_high(MI_1); //motorI aurrera
output_low(MI_2);
output_low(MD_1); //motorD geldi egon
output_high(MD_2); //motor_2_atzera geldi egon
*/
output_low(MI_1); //motorI aurrera
output_high(MI_2);
output_high(MD_1); //motorD geldi egon
output_low(MD_2);
}
/********************************************************************
ATZERA FUNTZIOA: Funtzio honetan sartzen bada, minisumoak tatamiko
zona txuria ikutu duela esan nahi du eta atzera joango da tatamitik ez
ateratzeko.
********************************************************************/
void atzera (void)
{
/* output_low(MI_1); //motorI aurrera
output_high(MI_2);
output_high(MD_1); //motorD geldi egon
output_low(MD_2);
*/
output_high(MI_1); //motorI aurrera
output_low(MI_2);
output_low(MD_1); //motorD geldi egon
output_high(MD_2); //motor_2_atzera geldi egon
}
/*********************************************************************
GELDI FUNTZIOA: Funtzio honetan sartzen bada, robotak geldirik egon
beharko du, 5 segundu pasa arte. Funtzio hau robota piztu eta jarraian
sartuko da.
*********************************************************************/
void geldi (void)
{
output_low(MI_1); //motorI aurrera
output_low(MI_2);
output_low(MD_1); //motorD geldi egon
output_low(MD_2);
}
/*********************************************************************
FUNTZIO NAGUSIA:
*********************************************************************/
void main (void)
{
int1 t1=0,t2=0; //gogoratzeko sentsoreen azken detekzioa
setup_adc(ADC_CLOCK_INTERNAL);
setup_adc_ports (AN0_AN1_AN3);//Configura el PIN_A0 en analogico
// set_rtcc(0);
geldi();
delay_ms(5000); //5 segundu itxaron behar du zerbait egin baino lehen
if(botoia_1==1)
ezkerrera(); //ezkerrera funtziora joan
else
eskubira(); //eskubira funtziora joan
while(1)
{
set_adc_channel(0);//Especifica que utilizara el canal A0
delay_us(20);
toke_1=read_adc();
delay_us(20);
set_adc_channel(1);//Especifica que utilizara el canal A1
delay_us(20);
toke_2=read_adc();
if(((toke_1>80)&&(toke_2>80))&&((input(CNY_1)==0)&&(input(CNY_2)==0))) //biak detektatu
{
aurrera(); // Aurrera funtzioan sartuko da.
t1=1; t2=1;
}
else if(((toke_1>80)&&(toke_2<80))&&((input(CNY_1)==0)&&(input(CNY_2)==0)))
{
ezkerrera(); // Ezkerrera funtzioan sartuko da.
t1=1; t2=0;
}
else if(((toke_1<80)&&(toke_2>80))&&((input(CNY_1)==0)&&(input(CNY_2)==0)))
{
eskubira(); // Eskubira funtzioan sartuko da.
t1=0; t2=1;
}
else if(((toke_1<80)&&(toke_2<80))&&((input(CNY_1)==0)&&(input(CNY_2)==0)))
{
ezkerrera(); // Ezkerrera funtzioan sartuko da.
}
/* if((t1==1)&&(t2==0))
ezkerrera(); // Ezkerrera funtzioan sartuko da.
else if((t1==0)&&(t2==1))
eskubira(); // Eskubira funtzioan sartuko da.
}
*/
else if((input(CNY_1)==1)||(input(CNY_2)==1))
atzera();
}
}
vill . cod hex
ResponderEliminar