En realidad en este proyecto se emplea un sensor de distancias por ultrasonidos SRF05 pero
funcionando en modo SRF04 con pulso trigger y eco por pines separados. El sensor SRF05 es una
versin mejorada del clsico SRF04 con el que es compatible.
El PIC manda un pulso de al menos 10us por la linea Pulso trigger para comenzar el proceso de
medida. El srf04 responde con un tren de 8 impulsos ultrasnicos a 40Khz. Pone su Pulso eco en
estado alto hasta recibir el eco ultrasnico de los impulsos. La distancia al objeto estar en funcin
del tiempo del pulso eco en un rango de 100us (mnima distancia medible) hasta 25 ms (mxima
distancia medible). Si el sensor no recibe el eco ultrasnico pasa su salida eco a estado bajo a los
30ms.
Para calcular la distancia es necesario por tanto saber la duracin del pulso eco mediante el modo
captura del CCP2 del PIC configurandolo para que detecte los flancos de subida y bajada de la
seal. Cada vez que esto ocurre el valor del timer1 pasa al registro del mdulo CCP.
El valor numrico del pulso ser el valor del timer1 en el pulso de bajada menos su valor en el
flanco de subida del pulso:
TF=(TFB-TFS);
#byte PIR1=0x0C
#byte
#byte
#byte
#byte
#byte
#byte
trisa=0x85
porta=0x05
trisb=0x86
portb=0x06
trisc=0x87
portc=0x07
output_high(PIN_C0)
output_low(PIN_C0)
//funcin principal
//da pulso y calcula distancia al objeto
//captura del pulso de eco
/******************************************************************************/
/*********************** FUNCIN PULSO DE TEST ********************************/
void pulso_test(){
enable_interrupts(INT_CCP2);
BIT_TEST_ON;
delay_us(10);
BIT_TEST_OFF;
while(nuevopulso==0)
{}
if(nuevopulso==1){
TF=(TFB-TFS);
distancia=TF*1.0;
distancia = distancia/58;
nuevopulso=0;
}
disable_interrupts(INT_CCP2);
}
/******************************************************************************/
/************************ FUNCIN LECTURA OBSTCULO ***************************/
#int_ccp2
void ccp2_int(){
if(cambio==0){
TFS=CCP_2;
setup_ccp2(CCP_CAPTURE_FE);
cambio=1;
}
else {
TFB=CCP_2;
setup_ccp2(CCP_CAPTURE_RE);
cambio=0;
if(nuevopulso==0)
nuevopulso=1;
}
}
/******************************************************************************/
/*************************** FUNCIN PRINCIPAL ********************************/
void main(){
trisb=0x00;
trisc=0b00000010;
setup_timer_1(T1_INTERNAL);
setup_ccp2(CCP_CAPTURE_RE);
disable_interrupts(INT_TIMER1);
disable_interrupts(INT_CCP2); //Deshabilitacin interrupcin modo comparacin
enable_interrupts (GLOBAL);
lcd_init();
//Inicializacin de la pantalla lcd
printf(lcd_putc, "\fMedida distancia");
printf(lcd_putc,"\n
con srf04
");
delay_ms(2000);
printf(lcd_putc,"\f (c) RobotyPic ");
delay_ms(2000);
while (1){
pulso_test();
//Envo del pulso ultrasnico
printf(lcd_putc,"\fDistancia=%5.2f", distancia);
delay_ms(500);
//Refresco de la medida
}
}
Segn las especificaciones del sensor, el mnimo tiempo entre pulsos eco para la ejecucin de la
medida es de 50ms para evitar la lectura de ecos de medidas anteriores. En este proyecto se ha
especificado 500ms, es decir, el refresco de la medida se ejecuta y muestra en el lcd cada medio
segundo.
Los archivos tanto del codigo fuente como del programa para cargar en el PIC as como el video
demostrativo se pueden descargar del siguiente enlace:
Descargar medida de distancias con SRF04
A continuacin se muestra una simulacin utilizando el proyecto del SRF04 bajo proteus. Hay que
dejar claro que se trata de una simulacin, quiero decir, para simular los valores de distancia se
emplean valores analgicos de tensin, pero puede ser de ayuda para verificar que nuestros
diseos basados en el SRF04 funcionan.
delay_ms(1000);
}
}
Utilizo o compilador CCS e gostaria de uma ajuda para compreender o cdigo uma vez que eu achei ele na
internete e s alterei para poder fazer a leitura em um display LCD .
Fico grato desde j .
Eu pesquisei , fiz desse jeito e deu certo , peguei o valor da varivel distance e direcionei a um
display LCD em outro programa , este programa que postei foi apenas para a leitura da distancia
, no estou atirando para todos os lados , so gostaria humildemente pedir ajuda para interpretar
este cdigo que por sinal funciona muito bem e o meu sensor trabalha como o luis nos descreve
em seu comentario , so quero interpretar o cdigo.
Amigo nao sou o mais indicado para te explicar, o seu codigo parece bem simples, mas se for
funcional o q ha de errado? kk vou te passar um link q passa outro codigo e da uma abordada
sobre a programaao, inclusive se estas pondo em pratica o projeto, gostaria q comparasse eles
e desse uma posicao p galera .espero q nao esteja indo contra as regras do site sobre o link, e se
sim favor moderadores apagar.
http://labdegaragem.com/forum/topics/utilizando-sensor-ultras-nico-no-pic