En esta sección aprenderás a programar un sensor ultrasónico capaz de medir distancia con un microcontrolador PIC. El objetivo es emitir una señal de radio ultrasónica y medir el tiempo que tarda la señal en volver al sensor ultrasónico.
CaracterÃsticas del Sensor HC-SR04
Voltaje: DC 5V
Corriente: 15mA
Frecuencia: 40Hz
Rango Max: 4m
Rango Min: 2cm
Trigger Input Signal: 10µS TTL pulse
Echo Output Signal Input TTL
Dimensiones: 45 * 20 * 15mm
Entrada y salida de señales de control para el sensor ultrasónico
Se envÃa una señal de 10us de ancho de pulso al pin trigger del sensor.
El pin deEcho retorna una señal de salida con un ancho de pulso proporcional al tiempo que tarda en percibir el objeto.
Formula para calcular la distancia
Para calcular la distancia al objeto se multiplica la velocidad del sonido por el tiempo que tarda enviar recibir la señal y se divide entre 2 para obtener solo el tiempo de ida.
Circuito de conexiónÂ
Programación
Código archivo .h
En el archivo .h se coloca la instrucción para utilizar el oscilador interno a 4MHz.
#use delay(internal=4000000)
Código archivo .c
Primero se asignan los pines de echo y trigger conectados al microcontrolador.
#define trig pin_d1
#define echo pin_d0
Se activa la instrucción de temporizador que permitirá contar el tiempo que tarda en recibir la señal.
setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
Se define la variable entera de 32 bits para guardar el valor que registre el temporizador.
int32 tiempo=0; // timer 1 es de 16 bits =65535u decimal
Se envÃa la señal de pulso con un ancho de pulso de 10us al pin de trigger del sensor ultrasónico.
La siguiente instrucción guarda el dato del temporizador en la variable «tiempo».Â
tiempo=get_timer1();
Finalmente se hace la conversión de tiempo a distancia.
distancia=(tiempo*0.0172);
Si se utiliza el oscilador interno de 4Mhz el tiempo de desbordamiento del timer1 se establece en 65.535ms por lo que seria el valor máximo que se podrÃa medir. El tiempo de desbordamiento se obtiene en un valor de 16 bits es decir:
Si, 65.535ms = 16 bits    ó   65.535ms = 65535 decimal
Y si convertimos el tiempo de desbordamiento en microsegundos (us) se puede considerar que el tiempo de desbordamiento es igual a los 16 bits en decimal.