- Materiales necesarios:
- ¿Cómo funciona un sensor ultrasónico?
- Programación de su microcontrolador PIC:
Para que cualquier proyecto cobre vida, necesitamos usar sensores. Los sensores actúan como ojos y oídos para todas las aplicaciones integradas, ayudan al microcontrolador digital a comprender lo que realmente está sucediendo en este mundo analógico real. En este tutorial aprenderemos cómo conectar el sensor ultrasónico HC-SR04 con el microcontrolador PIC.
El HC-SR04 es un sensor ultrasónico que se puede utilizar para medir distancias entre 2 cm y 450 cm (teóricamente). Este sensor ha demostrado su valía al adaptarse a muchos proyectos que implican detección de obstáculos, medición de distancias, mapeo del entorno, etc. Al final de este artículo, aprenderá cómo funciona este sensor y cómo conectarlo con el microcontrolador PIC16F877A para medir la distancia y la visualización. en la pantalla LCD. Suena interesante, ¿verdad? Entonces empecemos…
Materiales necesarios:
- MCU PIC16F877A con configuración de programación
- Pantalla LCD 16 * 2
- Sensor ultrasónico (HC-SR04)
- Cables de conexión
¿Cómo funciona un sensor ultrasónico?
Antes de continuar, debemos saber cómo funciona un sensor ultrasónico para que podamos entender mucho mejor este tutorial. El sensor ultrasónico utilizado en este proyecto se muestra a continuación.
Como puede ver, tiene dos ojos circulares como proyecciones y cuatro pines que salen de él. Las dos proyecciones en forma de ojo son el transmisor y el receptor de ondas ultrasónicas (en lo sucesivo, ondas estadounidenses). El transmisor emite una onda estadounidense a una frecuencia de 40 Hz, esta onda viaja a través del aire y se refleja cuando detecta un objeto. El receptor observa las ondas que regresan. Ahora sabemos el tiempo que tarda esta onda en reflejarse y regresar y la velocidad de la onda estadounidense también es universal (3400 cm / s). Con esta información y las fórmulas de la escuela secundaria a continuación, podemos calcular la distancia recorrida.
Distancia = Velocidad × Tiempo
Ahora que sabemos cómo funciona un sensor estadounidense, veamos cómo se puede conectar con cualquier MCU / CPU utilizando los cuatro pines. Estos cuatro pines son Vcc, Trigger, Echo y Ground respectivamente. El módulo funciona con + 5 V y, por lo tanto, el Vcc y el pin de tierra se utilizan para alimentar el módulo. Los otros dos pines son los pines de E / S con los que nos comunicamos con nuestro MCU. El pin de disparo debe declararse como un pin de salida y debe ser alto para un 10uS, esto transmitirá la onda estadounidense al aire como una explosión sónica de 8 ciclos. Una vez que se observa la onda, el pin Echo subirá durante el intervalo de tiempo exacto que tomó la onda de EE. UU. Para regresar al módulo del sensor. Por lo tanto, este pin de eco se declarará como entraday se usará un temporizador para medir cuánto tiempo estuvo alto el pin. Esto podría entenderse mejor mediante el siguiente diagrama de tiempos.
Espero que haya llegado a una forma tentativa de conectar este sensor con PIC. Usaremos el módulo Temporizador y el módulo LCD en este tutorial y supongo que está familiarizado con ambos, de lo contrario, consulte el tutorial correspondiente a continuación, ya que omitiré la mayor parte de la información relacionada.
- Interfaz LCD con microcontrolador PIC
- Comprensión de los temporizadores en el microcontrolador PIC
Diagrama de circuito:
El diagrama de circuito completo para la interfaz del sensor ultrasónico con PIC16F877A se muestra a continuación:
Como se muestra, el circuito no involucra más que una pantalla LCD y el sensor ultrasónico en sí. El sensor de EE. UU. Puede ser alimentado por + 5V y, por lo tanto, está alimentado directamente por el regulador de voltaje 7805. El sensor tiene un pin de salida (pin Trigger) que está conectado al pin 34 (RB1) y el pin de entrada (pin Echo) está conectado al pin 35 (RB2). La conexión de clavija completa se ilustra en la tabla siguiente.
S. No: |
Número de pin PIC |
Nombre de PIN |
Conectado a |
1 |
21 |
RD2 |
RS de LCD |
2 |
22 |
RD3 |
E de LCD |
3 |
27 |
RD4 |
D4 de LCD |
4 |
28 |
RD5 |
D5 de LCD |
5 |
29 |
RD6 |
D6 de LCD |
6 |
30 |
RD7 |
D7 de LCD |
7 |
34 |
RB1 |
Gatillo de nosotros |
8 |
35 |
RB2 |
Eco de nosotros |
Programación de su microcontrolador PIC:
El programa completo para este tutorial se proporciona al final de esta página, más abajo he explicado el código en pequeños fragmentos completos para que lo entiendas. Como se dijo anteriormente, el programa implica el concepto de interfaz LCD y temporizador, que no se explicará en detalle en este tutorial, ya que ya los hemos cubierto en los tutoriales anteriores.
En el interior, la función principal comenzamos con la inicialización de los pines IO y otros registros como de costumbre. Definimos los pines IO para LCD y sensor de EE. UU. Y también iniciamos el registro del temporizador 1 configurándolo para que funcione en 1: 4 preescalar y para usar el reloj interno (Fosc / 4)
TRISD = 0x00; // PORTD declarado como salida para la interfaz LCD TRISB0 = 1; // Definir el pin RB0 como entrada para usar como pin de interrupción TRISB1 = 0; // El pin de disparo del sensor de EE. UU. Se envía como pin de salida TRISB2 = 1; // El pin de eco del sensor de EE. UU. Se establece como pin de entrada TRISB3 = 0; // RB3 es el pin de salida para LED T1CON = 0x20; // 4 presescalares y reloj interno
El Timer 1 es un temporizador de 16 bits utilizado en PIC16F877A, el registro T1CON controla los parámetros del módulo temporizador y el resultado se almacenará en TMR1H y TMR1L ya que es un resultado de 16 bits, los primeros 8 se almacenarán en TMR1H y el los siguientes 8 en TMR1L. Este temporizador se puede encender o apagar usando TMR1ON = 0 y TMR1ON = 1 respectivamente.
Ahora, el temporizador está listo para usar, pero tenemos que enviar las ondas de EE. UU. Fuera del sensor, para hacer esto tenemos que mantener alto el pin Trigger por 10uS, esto se hace mediante el siguiente código.
Gatillo = 1; __delay_us (10); Disparador = 0;
Como se muestra en el diagrama de tiempo anterior, el pin Echo permanecerá bajo hasta que la ola regrese y luego subirá y permanecerá alto durante el tiempo exacto que tardan las olas en regresar. Este tiempo tiene que ser medido por el módulo Timer 1, que se puede hacer por la siguiente línea
while (Eco == 0); TMR1ON = 1; while (Eco == 1); TMR1ON = 0;
Una vez que se mide el tiempo, el valor resultante se guardará en los registros TMR1H y TMR1L, estos registros se deben aporrear para obtener el valor de 16 bits. Esto se hace usando la línea de abajo
time_taken = (TMR1L - (TMR1H << 8));
Este time_taken estará en forma de bytes, para obtener el valor de tiempo real tenemos que usar la siguiente fórmula.
Tiempo = (valor de registro de 16 bits) * (1 / Reloj interno) * (Pre-escala) Reloj interno = Fosc / 4 Donde en nuestro caso, Fosc = 20000000Mhz y Pre-escala = 4 Por lo tanto, el valor del Reloj interno será 5000000Mhz y el valor de tiempo será Time = (valor de registro de 16 bits) * (1/5000000) * (4) = (valor de registro de 16 bits) * (4/5000000) = (valor de registro de 16 bits) * 0.0000008 segundos (O) Tiempo = (valor de registro de 16 bits) * 0.8 microsegundos
En nuestro programa, el valor del registro de 16 bits se almacena en la variable time_taken y, por lo tanto, la siguiente línea se utiliza para calcular el time_taken en microsegundos
time_taken = time_taken * 0.8;
A continuación, tenemos que encontrar cómo calcular la distancia. Como sabemos distancia = velocidad * tiempo. Pero aquí el resultado debe dividirse por 2 ya que la onda cubre tanto la distancia de transmisión como la distancia de recepción. La velocidad de la onda estadounidense (sonido) es de 34000 cm / s.
Distancia = (Velocidad * Tiempo) / 2 = (34000 * (valor de registro de 16 bits) * 0,0000008) / 2 Distancia = (0,0272 * valor de registro de 16 bits) / 2
Entonces, la distancia se puede calcular en centímetros como se muestra a continuación:
distancia = (0.0272 * tiempo_ tomado) / 2;
Después de calcular el valor de la distancia y el tiempo tardado simplemente tenemos que mostrarlos en la pantalla LCD.
Medición de la distancia con PIC y sensor ultrasónico:
Después de realizar las conexiones y cargar el código, su configuración experimental debería verse como la que se muestra en la imagen de abajo.
La placa PIC Perf, que se muestra en esta imagen, fue hecha para nuestra serie de tutoriales PIC, en la que aprendimos cómo usar el microcontrolador PIC. Es posible que desee volver a esos tutoriales de microcontroladores PIC usando MPLABX y XC8 si no sabe cómo grabar un programa usando Pickit 3, ya que me saltaré toda esa información básica.
Ahora coloque un objeto delante del sensor y debería mostrar qué tan lejos está el objeto del sensor. También puede notar el tiempo que se muestra en microsegundos para que la onda se transmita y regrese.
Puede mover el objeto a su distancia preferida y comprobar el valor que se muestra en la pantalla LCD. Pude medir una distancia de 2 cm a 350 cm con una precisión de 0,5 cm. ¡Este es un resultado bastante satisfactorio! Espero que hayas disfrutado del tutorial y hayas aprendido a hacer algo por tu cuenta. Si tiene alguna duda, colóquela en la sección de comentarios a continuación o use los foros.
También verifique la interfaz del sensor ultrasónico con otros microcontroladores:
- Medición de distancia basada en sensores Arduino y ultrasónicos
- Mida la distancia con el sensor ultrasónico Raspberry Pi y HCSR04
- Medición de distancia usando HC-SR04 y microcontrolador AVR