Paso 12: Control y problemas del módulo HCSR-04
Pinout
GND - Masa común
Este pin se conecta a la tierra del esquema
VCC - alimentación
Este pin debe estar atado a la línea de alimentación de nuestro circuito, que - en mi caso es proporcionado por el convertidor del buck de 5V.
TRIG - pasador del gatillo
El usuario tiene que proporcionar un microsegundo de tiempo impulso en este pin, entonces espere a que el eco llegar en la clavija de echo. Tenga en cuenta, que el eco es alto en las primeras decenas de milisegundos, asegúrese de que usted espere hacia fuera en la inicialización. Este pin se afirma, entonces programa tiene que esperar un flanco ascendente y el iniciar un temporizador, TMR1. La WASTE_10_US(); es una macro que escribí, consta de bastantes instrucciones "NOP" para un tiempo total de 10 microsegundos. Cuenta se detiene cuando el pulso de eco baja otra vez. Desde el número en el registro de contador sabemos que el tiempo necesario para que el sonido volver de un eventual obstáculo. Sabemos que la velocidad del sonido - podemos calcular la distancia!
Eco - pin eco
Este pin se utiliza para detectar las ondas de sonido reflejadas. Que conectado a un pin que tiene interrupción, por si acaso - pero se utiliza en modo de entrada simple. Un flanco ascendente detiene el contador mencionado anteriormente y guarda en una variable, que es procesada poco después.
Un pequeño truco para hacer más fácil la vida de PIC-s
La sincronización de los impulsos se muestra en la hoja de datos de este módulo. Como se mencionó antes, debe esperar a que la iniciales ~ 100 ms, luego dar microsegundo 10 pulsos de disparo en el pasador de TRIG. Darle tal impulso se traduce en una explosión de 8 ciclo desde el transmisor, el 'speaker'. Entonces, tenemos que esperar para que un eco por venir. El eco es captado por el receptor y transformado en un impulso de longitud variable sobre el pin eco. La duración de este impulso de eco es directamente proporcional con la distancia hasta el obstáculo. La hoja de datos da una fórmula simple para calcular esto:
distancia [cm] = t medido [microsegundos] / 58
devolverá la distancia en centímetros. Sólo divido por 5.8, por lo que consigue devuelve la distancia en milímetros. Ya que no necesariamente lecturas sumamente precisas, voy a añadir un pequeño toque aquí. Sólo quiero evitar los obstáculos, no importa lo lejos están, por lo que no uso de calcular distancia en doble tipos de variables. Ese tipo de cálculos tome mucho tiempo, que en este caso es totalmente innecesario. Así que vamos a simplificar los cálculos un poco. Sabemos que del impulso recibido en microsegundos es necesario averiguar la distancia. Sin embargo, nuestra base de tiempo no es un uno, 83.33 muy redondo [ns]. Así, en lugar de llevar la cuenta del TMR1, multiplicando por la base para obtener la duración en microsegundos, entonces dividiendo 5.8 para obtener la distancia en milímetros, del tiempo vamos a hacer algo más simple y más tonto. Vamos a establecer lo que un medio único de TMR1 cuenta en milímetros:
1 Conde = 83.33 [ns] = 0.08333 [nosotros], que, dividida por 5,8 resultados en 0.014 [mm] para cada TMR1 [count]
Dicho esto, podemos escribir lo siguiente:
1 [count] .......................... 0,014 [mm]
x [count]... y [mm]
y escribir la siguiente fórmula:
y [mm] = (x * 0.014) / 1 = x * 0.014 = x / 71.42
Así que sabemos que podemos obtener la distancia a un obstáculo dividiendo el TMR1 cuenta con 71.42. Esto, sin embargo, todavía es un cálculo de precisión que lleva mucho tiempo, así que echa un vistazo y darse cuenta que esto no es lejos de 64, un bonito número 'redondo'. División de potencias de 2 en software es muy fácil, puede hacerse mediante desplazamiento derecha seis veces. Desplazamiento de byte es una instrucción nativa del PIC, y es muy muy rápida en comparación con una doble división. Por lo tanto, vamos a 71.42 ronda de 64 y solo cambio TMR1 dejaron 6 veces para tener una idea sobre qué tan cerca es un obstáculo!
Vamos a ver la diferencia que este truco da una cuenta de 8000 (por ejemplo):
original: 8000 / 71.42 = 112 [mm]
complicado: 8000 / 64 = (8000 >> 6) = 125 [mm]
Así que el error es aproximadamente 10%, no es mucho en comparación con la enorme cantidad de tiempo que acaba de guardar!
Problemas
No he pegué problemas al trabajar con este módulo, único lo que sucedió fue que el cable entre el PIC y el pin eco quedó desconectado, y el PIC esperando interminablemente los bordes en pin. Esto era fácil de coger, puesto que el LED rojo que cambia a cada instante, parado. Inmediatamente supe que congeló el programa, y el uno lugar que se puede congelar esta espera para rutina de borde. Problema resuelto después de un minuto!
Una cosa más: estas cosas funcionan con 5 [V], por lo que tener solo 4.8 [V] a plena carga significa, que nosotros estamos estirando demasiado. Si el voltaje no es suficiente para recoger el eco, el MCU se colgará, esperando el eco llegar!