En este tutorial vamos a discutir y diseñar un circuito para medir distancias. Este circuito se desarrolla interconectando el sensor ultrasónico “HC-SR04” con el microcontrolador AVR. Este sensor usa una técnica llamada "ECHO" que es algo que se obtiene cuando el sonido se refleja después de golpear una superficie.
Sabemos que las vibraciones sonoras no pueden penetrar a través de los sólidos. Entonces, lo que sucede es que cuando una fuente de sonido genera vibraciones, viajan a través del aire a una velocidad de 220 metros por segundo. Estas vibraciones cuando llegan a nuestro oído las describimos como sonido. Como se dijo anteriormente, estas vibraciones no pueden atravesar el sólido, por lo que cuando golpean una superficie como una pared, se reflejan a la misma velocidad hacia la fuente, lo que se llama eco.
El sensor ultrasónico “HC-SR04” proporciona una señal de salida proporcional a la distancia basada en el eco. El sensor aquí genera una vibración de sonido en rango ultrasónico al dar un disparador, luego de eso espera a que vuelva la vibración de sonido. Ahora, según los parámetros, la velocidad del sonido (220 m / s) y el tiempo que tarda el eco en llegar a la fuente, proporciona un pulso de salida proporcional a la distancia.
Como se muestra en la figura, al principio necesitamos iniciar el sensor para medir la distancia, que es una señal lógica ALTA en el pin de activación del sensor durante más de 10uS, después de que el sensor envíe una vibración de sonido, después de un eco, el sensor proporciona una señal en el pin de salida cuyo ancho es proporcional a la distancia entre la fuente y el obstáculo.
Esta distancia se calcula como, distancia (en cm) = ancho de salida de pulso (en uS) / 58.
Aquí el ancho de la señal debe tomarse en múltiplos de uS (microsegundos o 10 ^ -6).
Componentes requeridos
Hardware: ATMEGA32, Fuente de alimentación (5v), PROGRAMADOR AVR-ISP, JHD_162ALCD (16x2LCD), condensador 1000uF, resistencia 10KΩ (2 piezas), sensor HC-SR04.
Software: Atmel studio 6.1, progisp o flash magic.
Diagrama de circuito y explicación de trabajo
Aquí estamos usando PORTB para conectarnos al puerto de datos LCD (D0-D7). Cualquiera que no quiera trabajar con FUSE BITS de ATMEGA32A no puede usar PORTC, ya que PORTC contiene un tipo especial de comunicación que solo puede deshabilitarse cambiando FUSEBITS.
En el circuito, observa que solo he tomado dos pines de control, esto da la flexibilidad de una mejor comprensión. El bit de contraste y READ / WRITE no se utilizan con frecuencia, por lo que pueden cortocircuitarse a tierra. Esto coloca a la pantalla LCD en el modo de mayor contraste y lectura. Solo necesitamos controlar los pines ENABLE y RS para enviar caracteres y datos en consecuencia.
Las conexiones que se realizan para LCD se dan a continuación:
PIN1 o VSS a tierra
PIN2 o VDD o VCC a + 5v de potencia
PIN3 o VEE a tierra (ofrece el mejor contraste máximo para un principiante)
PIN4 o RS (Selección de registro) a PD6 de uC
PIN5 o RW (lectura / escritura) a tierra (pone la pantalla LCD en modo lectura facilita la comunicación para el usuario)
PIN6 o E (habilitado) a PD5 de uC
PIN7 o D0 a PB0 de uC
PIN8 o D1 a PB1 de uC
PIN9 o D2 a PB2 de uC
PIN10 o D3 a PB3 de uC
PIN11 o D4 a PB4 de uC
PIN12 o D5 a PB5 de uC
PIN13 o D6 a PB6 de uC
PIN14 o D7 a PB7 de uC
En el circuito puede ver que hemos usado comunicación de 8 bits (D0-D7) sin embargo, esto no es obligatorio y podemos usar comunicación de 4 bits (D4-D7) pero con la comunicación de 4 bits el programa se vuelve un poco complejo. Entonces, como se muestra en la tabla anterior, estamos conectando 10 pines de LCD al controlador en el que 8 pines son pines de datos y 2 pines para control.
El sensor ultrasónico es un dispositivo de cuatro pines, PIN1- VCC o + 5V; PIN2-TRIGGER; PIN3- ECHO; PIN4- TIERRA. El pasador del gatillo es donde le damos al gatillo para decirle al sensor que mida la distancia. El eco es el pin de salida donde obtenemos la distancia en forma de ancho de pulso. El pin de eco aquí está conectado al controlador como una fuente de interrupción externa. Entonces, para obtener el ancho de la salida de señal, el pin de eco del sensor está conectado a INT0 (interrupción 0) o PD2.
1. Activar el sensor tirando hacia arriba del pasador del gatillo durante al menos 12uS.
2. Una vez que el eco aumenta, obtenemos una interrupción externa y vamos a iniciar un contador (habilitando un contador) en el ISR (Rutina de servicio de interrupción) que se ejecuta justo después de que se dispara una interrupción.
3. Una vez que el eco vuelve a bajar se genera una interrupción, esta vez vamos a parar el contador (deshabilitando el contador).
4. Entonces, para un pulso de alto a bajo en el pin de eco, iniciamos un contador y lo detuvimos. Este recuento se actualiza en la memoria para obtener la distancia, ya que ahora tenemos el ancho del eco en el recuento.
5. Vamos a hacer más cálculos en la memoria para obtener la distancia en cm.
6. La distancia se muestra en la pantalla LCD de 16x2.
Para configurar las funciones anteriores, vamos a configurar los siguientes registros:
Los tres registros anteriores deben configurarse en consecuencia para que la configuración funcione y los discutiremos brevemente, AZUL (INT0): este bit debe establecerse en alto para habilitar la interrupción externa0, una vez que se establece este pin, podemos sentir los cambios lógicos en el pin PIND2.
MARRÓN (ISC00, ISC01): estos dos bits se ajustan para el cambio de lógica correspondiente en PD2, que se considera una interrupción.
Entonces, como se dijo anteriormente, necesitamos una interrupción para iniciar un conteo y detenerlo. Así que configuramos ISC00 como uno y obtenemos una interrupción cuando hay una lógica LOW a HIGH en INT0; otra interrupción cuando hay una lógica de ALTA a BAJA.
ROJO (CS10): Este bit es simplemente para habilitar y deshabilitar el contador. Aunque funciona junto con otros bits CS10, CS12. No estamos haciendo ningún ajuste de escala aquí, por lo que no debemos preocuparnos por ellos.
Algunas cosas importantes para recordar aquí son:
Estamos usando el reloj interno de ATMEGA32A que es de 1MHz. Aquí no hay preescalado, no estamos haciendo una rutina de generación de interrupciones de comparación, por lo que no hay configuraciones de registro complejas.
El valor de recuento después del recuento se almacena en el registro TCNT1 de 16 bits.
También verifique este proyecto con arduino: medición de distancia usando Arduino
Explicación de programación
El funcionamiento del sensor de medición de distancia se explica paso a paso en el programa C siguiente.
#include // encabezado para habilitar el control del flujo de datos sobre los pines #define F_CPU 1000000 // indicando la frecuencia del cristal del controlador adjunto #include