Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: norbert_1111 en 12 de Enero de 2016, 23:23:40
Título: Calibracion de sensores con pic16f1827
Publicado por: norbert_1111 en 12 de Enero de 2016, 23:23:40
Hola buen dia colegas tengo este codigo(mikroC) que es para un robot seguidor de linea, en teoria funciona bien pero pasa que de alguna manera los sensores que utilizo(qrd1114) se deben calibrar lo cual no he podido lograr,su aportacion seria de mucha ayuda gracias
Código: C
long s1,s2,s3,s4,s5,der,izq,prom,value,sens1,sens2,sens3,sens4,sens5,v_norm,v_real,v_min,v_max;
Título: Re:Calibracion de sensores con pic16f1827
Publicado por: KILLERJC en 13 de Enero de 2016, 00:53:35
Yo no se como calibrarlos, es decir cual es la mejor estrategia para determinar el mejor valor.Lo que no entiendo es por que harias eso con el ADC ?.. Es decir por que resumirias el valor tomado del ADC en un ON/OFF y luego actuando de acuerdo a ello.
La parte de calibracion lo haria sobre la linea obteniendo los maximos y minimos sobre el trayecto. de esos maximos y minimos es el rango que tendrais de tus sensores. De acuerdo a eso vas a determinar cual motor debe accelerar un poco mas y cual menos. Como solo tenes 5 sensores, tal ves debas interpolar para encontrar mas valores intermedio. y de esa forma alimentar a un PWM aumentando o disminuyendo la velocidad de cualquiera de los motores. Tal ves un PID aca para eso
Asi como esta el programa seguiria una linea recta pero ante una curva creo que se le complicaria un poco.
PD: Trata de escribir en muchas lineas. Pocas lineas hace ilegible el codigo. Y no estas ahorrando espacio en el micro, solamente complicandote la vida vos mismo.
Código: C
void main(){
trisa=0b11111111;
trisb=0b00000000;
ansela=0b11111111;
anselb=0b00000000;
porta=0;
portb=0;
Adc_Init();
while(1){
s1=ADC_Read(0);
s2=ADC_Read(1);
s3=ADC_Read(2);
s4=ADC_Read(3);
s5=ADC_Read(4);
if(s1>90){sens1=1;}else sens1=0;
if(s2>90){sens2=1;}else sens2=0;
if(s3>90){sens3=1;}else sens3=0;
if(s4>90){sens4=1;}else sens4=0;
if(s5>90){sens5=1;}else sens5=0;
der=sens4+sens5;
izq=sens1+sens2;
if(der==izq)
{
l=0;r=0;
}
if(der>izq)
{
r=1;l=0;
}
if(izq>der)
{
l=1;r=0;
}
}
}
Una cosa mas:
Código: C
long s1
long? con un int que es de 16 bits bastaria si es que tu ADC es de 10 bit. pero por como lo estas usando bastaria con ser de 8.
Título: Re:Calibracion de sensores con pic16f1827
Publicado por: norbert_1111 en 13 de Enero de 2016, 04:58:39
creo que olvide mencionar que el seguidor de linea es de tipo triciclo, como se muestra en la foto, anteriormente usaba un control on/off usando comparadores para "calibrar" los sensores, pero ahora quise reducir espacio al circuito, aprovechando las entradas analogicas del pic. Mi proposito es implementarle un control PID a futuro. - Tienes que ingresar para ver archivos adjuntos -