Autor Tema: Calibracion de sensores con pic16f1827  (Leído 1869 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado norbert_1111

  • PIC10
  • *
  • Mensajes: 9
Calibracion de sensores con pic16f1827
« 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
  1. long s1,s2,s3,s4,s5,der,izq,prom,value,sens1,sens2,sens3,sens4,sens5,v_norm,v_real,v_min,v_max;
  2. #define l portb.f4
  3. #define r portb.f5
  4. void derecha(){l=0;r=1;}
  5. void izquierda(){l=1;r=0;}
  6. void singiro(){l=0;r=0;}
  7. void main() {trisa=0b11111111;trisb=0b00000000;ansela=0b11111111;anselb=0b00000000; porta=0;portb=0;
  8. Adc_Init(); while(1){
  9.  
  10.   s1=ADC_Read(0);s2=ADC_Read(1); s3=ADC_Read(2);s4=ADC_Read(3); s5=ADC_Read(4);
  11.   if (s1>90){sens1=1;}else sens1=0; if (s2>90){sens2=1;}else sens2=0;   if (s3>90){sens3=1;}else sens3=0;
  12.    if (s4>90){sens4=1;}else sens4=0; if (s5>90){sens5=1;}else sens5=0;
  13.  der=sens4+sens5;izq=sens1+sens2;
  14. if (der==izq){l=0;r=0;}  if (der>izq){r=1;l=0;}if (izq>der){l=1;r=0;}  }

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Calibracion de sensores con pic16f1827
« Respuesta #1 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
  1. void main(){
  2.         trisa=0b11111111;
  3.         trisb=0b00000000;
  4.         ansela=0b11111111;
  5.         anselb=0b00000000;
  6.         porta=0;
  7.         portb=0;
  8.         Adc_Init();
  9.  
  10.         while(1){
  11.                 s1=ADC_Read(0);
  12.                 s2=ADC_Read(1);
  13.                 s3=ADC_Read(2);
  14.                 s4=ADC_Read(3);
  15.                 s5=ADC_Read(4);
  16.  
  17.                 if (s1>90){sens1=1;} else sens1=0;
  18.                 if (s2>90){sens2=1;} else sens2=0;  
  19.                 if (s3>90){sens3=1;} else sens3=0;
  20.                 if (s4>90){sens4=1;} else sens4=0;
  21.                 if (s5>90){sens5=1;} else sens5=0;
  22.  
  23.                 der=sens4+sens5;
  24.                 izq=sens1+sens2;
  25.  
  26.                 if (der==izq)
  27.                 {
  28.                         l=0;r=0;
  29.                 }
  30.                 if (der>izq)
  31.                 {
  32.                         r=1;l=0;
  33.                 }
  34.                 if (izq>der)
  35.                 {
  36.                         l=1;r=0;
  37.                 }
  38.         }
  39. }

Una cosa mas:

Código: C
  1. 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.

Desconectado norbert_1111

  • PIC10
  • *
  • Mensajes: 9
Re:Calibracion de sensores con pic16f1827
« Respuesta #2 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.

* 12540377_960571803995957_1708462615_n.jpg
(149.92 kB, 720x960 - visto 365 veces)