Sensor de distancia ultrasónico con pic 16f88

El HC-SR04 es un sensor de distancia ultrasónico economico y muy sencillo de utilizar el cual se puede usar en un sinfin de aplicaciones, uno claro ejemplo son los sensores de reversa de un automovil.

Objetivo:Aprender a leer los datos de un sensor de distancia HC-SR04 y desplegar los datos en una pantalla LCD 16x2.
Material:

Equipo: Software:

Diagrama


Para controlar el LCD sólo ocupamos 7 pines, 3 son para control y 4 para datos.
Control: RS,E,RW
Datos: D4-D7

Acerca del sensor ultrasónico HC-SR04

El sensor ultrasónico HC-SR04 opera por medio del eco generado por un sonido, el Pic manda el pulso, se genera un sonido y se mide el tiempo de respuesta, su rango es 2 a 40 centímetros.

Código del microcontrolador

#include <16F88.h>
#FUSES NOWDT, INTRC, NOMCLR, NOLVP
#use delay(clock=8000000)
#define use_portb_lcd TRUE                                                       //Lcd en puerto B
#include 
#define trig pin_A4
#define echo pin_A3
void config()
{setup_oscillator(OSC_8MHZ);
 setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
 lcd_init();
}
void main()
{ int16 time;
  float distanceCm;
  config();
  printf(LCD_PUTC, "Starting.");
  delay_us(1000);
  LCD_PUTC('\f');
  while(true)
  { output_high(trig);                                                           //pulso de incio          
    delay_us(20);                       
    output_low(trig);
    while(!input(echo))                                                          //Esperamos a que la se�al de entrada sea 1              
    {}
    set_timer1(0);                         
    while(input(echo))                                                           //Esperamos a que la se�al de entrada sea 0
    {}
    time=get_timer1();                                                          //Medimos el ancho de pulso
    distanceCm=((float)time)/(58.0);                                            //Aplicamos formula
    lcd_gotoxy(1,1);
    printf(LCD_PUTC, "Distance \n %3.2f cm  ",distanceCm);                      //Imprimimos resultado
    delay_ms(500);
  }
}

¿Cómo funciona el código?

Sencillo, el Pic pone en alto un bit (trig pin_A4), genera un pulso de 20 microsegundos para crear el sonido del HC-SR04, después verifica un estado cero en el eco: while (!input(echo)), cuando salta el ciclo inicia el temporizador set_timer1(0) y entra en modo espera hasta recibir el eco: while (input(echo)).

El pulso de 10 us segundos del Pic se transforma en 8 ciclos a 40 kHz de ultrasonido.

Siguiendo las reglas la electrónica interna del HC-SR04 responde con un pulso entre 150 us y 25 ms (2-40 centímetros), la distancia en centímetros se mide con la fórmula ancho de pulso (uS)/58.