Vamos 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
7 pings
Ir al formulario de comentarios