Medidor de distancia por ultrasonidos con PIC16F886

Medir de ultrasonidosVamos a partir de un módulo muy extendido, muy barato y muy sencillo de manejar el HC-SR04, una placa entrenadora basada en un 16F886 y un display LCD de 16×2 caracteres con un registro de desplazamiento 74LS164, para construir un medidor de ultrasonidos bastante preciso con un alcance de entre 3 y 4 metros y una distancia mínima de detección de unos 2 cm.

El circuito que hagamos puede servirnos simplemente para sustituir al flexómetro,o como base para otras muchas aplicaciones: robótica móvil, medición del nivel de líquidos (el agua de la pecera por ejemplo), o detección de presencia en un antirobo.

Aprovechando la ocasión, veremos como escribir datos en un LCD de texto utilizando sólo dos pines del PIC y las funciones de salida estándar de C.

El módulo HC-SR04 tiene sólo cuatro pines que conectar, los dos de alimentación (va a 5 voltios), un «trigger» que mantenemos a 1 durante al menos 10 us para empezar a medir y una señal de retorno «echo» que se pondrá a 1 durante un tiempo equivalente al que tarda el sonido en ir y volver. En el aire a 22ºC, la velocidad del sonido es de unos 344 m/s, por lo que sólo hay que medir el tiempo del pulso y dividir por dos la distancia resultante (medimos la ida y la vuelta). Simplificando, podemos dividir los us que dura el eco por 58 para sacar la distancia recorrida en cm.

Por otro lado vamos a visualizar la medida con un display LCD de 16×2. Para hacer la conexión completa necesitamos 8 pines para los datos y otros 3 para las señales RS, R/W, y E. En realidad casi no necesitaremos leer registro del LCD, con lo que podemos prescindir de la señal R/W, tampoco necesitamos las ocho líneas de datos, se pueden enviar en bloques de cuatro bits, así que nos bastan 6 señales. Para enviar estas 6 señales podríamos utilizar 6 pines del PIC, pero en su lugar introducimos un registro de desplazamiento de 8 bits, que necesita solamente una señal de datos y otra de reloj.

Así queda el cableado:

En el programa enviamos continuamente el trigger, medimos el tiempo de respuesta con un temporizador, lo pasamos a cm y lo representamos en la pantalla utilizando la librería «flexlcd» junto con las funciones de entrada/salida estándar de C, como se ve en el ejemplo.

Fichero sólo visible para usuarios registrados

Deja una respuesta

Tu email nunca se publicará.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

ACEPTAR
Aviso de cookies