La medición de distancias tiene importantes aplicaciones en aplicaciones automotrices e industriales. La medición de distancias a través de sensores es útil para detectar obstáculos y medir niveles de fluidos en tanques y contenedores de automóviles. Es la función de medición de distancia la que hizo posible imaginar coches y robots autónomos. Sin una tecnología que hubiera permitido medir la distancia hasta un objeto u obstáculo, nunca se habría pensado en el concepto de conducción autónoma. La aplicación de medición de distancia también se utiliza en la industria para comprobar los niveles de combustible en aviones y vehículos de transporte comercial. La aplicación se utiliza en robótica para equipar robots autónomos para detectar obstáculos y encontrar un camino accesible. Este proyecto es también una aplicación de medición de distancias mediante sensores ultrasónicos.

Fig. 1: Prototipo de medidor de distancia inalámbrico basado en Arduino
Cualquier aplicación de medición de distancia tiene un circuito sensor y un actuador o circuito de visualización (para cambiar el camino según la detección de obstáculos o mostrar la lectura de distancia respectivamente). A menudo, estos circuitos están conectados a través de una línea fija para transmitir datos entre los dos. Este proyecto utilizó un módulo de RF 434 para transmitir lecturas de distancia en lugar de utilizar un bus cableado. De esta manera, el proyecto se puede implementar fácilmente en cualquier entorno industrial donde instalar el cable entre el circuito del sensor y el circuito del actuador/pantalla pueda ser riesgoso o más costoso. Un módulo de RF tiene un rango operativo típico de 50 a 60 metros y puede ampliarse de 300 a 350 metros utilizando una antena y una mayor potencia de transmisión. De esta manera, el sistema inalámbrico de medición de distancia puede desplegarse en cualquier ubicación y tener activadas operaciones de supervisión o control desde una ubicación remota.
El proyecto utiliza un sensor ultrasónico para medir distancias (y el sensor utilizado puede medir distancias de 2 a 400 cm) y está construido sobre el Arduino Pro Mini. Se utiliza una pantalla LCD de 16X2 en el circuito de visualización para mostrar las lecturas medidas. Un transmisor y un receptor de RF 434 forman el puente inalámbrico entre el circuito del sensor y el circuito de visualización.
Componentes necesarios
| Sr. No. | Componentes necesarios | Cantidad requerida |
|---|---|---|
| 1 | Módulo de recepción de RF (434 MHz) | 1 |
| dos | Módulo de transmisión RF (434 Mhz) | 1 |
| 3 | Sensor ultrasónico | 1 |
| 4 | LCD | 1 |
| 5 | bote de 1k | 1 |
| 6 | resistencia de 10k | 1 |
| 7 | Placa de desarrollo arduino pro mini | dos |
| 8 | Batería – 9V | dos |
| 9 | tablero de prueba | dos |
| 10 | Cables de conexión |

DIAGRAMA DE BLOQUES
Conexiones de circuito
Hay dos circuitos en el proyecto: circuito de sensor y circuito de visualización. El circuito del sensor está construido en un Arduino Pro Mini. El sensor ultrasónico está conectado a los pines 2 y 4 del Arduino. El sensor ultrasónico tiene cuatro pines: Tierra (Pin 1), Eco (Pin 2), Gatillo (Pin 3) y Gatillo. Los pines VCC y tierra están conectados a VCC y tierra respectivamente. El pin Echo está conectado al pin 4 de la placa Arduino, mientras que el pin Trigger está conectado al pin 2 de la placa Arduino. Un transmisor de RF está conectado directamente al Arduino Pro Mini con el pin 2 conectado al pin 12 de la placa para salida de datos en serie y tiene una antena conectada al pin 4 del módulo.

Fig. 2: Imagen que muestra el funcionamiento del distanciómetro inalámbrico basado en Arduino
El otro circuito es el circuito de visualización. Tiene un receptor de RF conectado al Arduino Pro Mini con el pin 2 conectado al pin 11 de la placa para entrada de datos en serie. Se conecta una antena al pin 8 del receptor de RF. Se conecta una pantalla LCD a la placa Arduino para mostrar la lectura de distancia. La pantalla LCD 16X2 se conecta a la placa Arduino conectando sus pines de datos a los pines 7 a 4 de la placa Arduino. Los pines RS y E de la pantalla LCD están conectados a los pines 3 y 2 del Arduino Pro Mini, respectivamente. El pin LCD RW está conectado a tierra.
| LCD | ARDUINO UNO |
|---|---|
| JAJAJA | 3 |
| RW | GRND |
| Y | dos |
| D7,D6,D5,D4 | 7,6,5,4 respectivamente |
Cómo funciona el circuito
El sensor ultrasónico funciona según el principio del eco de las ondas sonoras. Cuando se pasa un pulso ALTO de 10 segundos al pasador de disparo del sensor, transmite ocho ondas de 40 KHz de disparos de pulso sónico ALTO consecutivamente. Una señal de pulso alto sale del pin de eco a medida que se transmite la onda ultrasónica. Esta onda, al chocar con un obstáculo, se refleja y es detectada por el sensor. Cuando se vuelve a detectar la onda, se finaliza la señal de pulso alto del pin de eco del sensor. La señal recibida desde el pin de eco es de naturaleza analógica. La distancia al obstáculo se puede medir midiendo el tiempo máximo del pin de eco. Este es el tiempo entre la transmisión y la reflexión de la onda sonora. La distancia viene dada por las fórmulas -:
Distancia de prueba = (tiempo de alto nivel × velocidad del sonido (340 M/S)) / 2
El tiempo multiplicado por la velocidad se divide por 2, como el tiempo necesario para que la onda sónica alcance el obstáculo y regrese. Por lo tanto, la medida de la distancia en cm puede obtenerse mediante las fórmulas –:
Distancia de prueba = (tiempo de alto nivel × velocidad del sonido (340 M/S)) / 2
= (tiempo de alto nivel (microsegundo) × velocidad del sonido (340 M/S)) / 2
= tiempo de alto nivel x 340/2000000 m
= tiempo de alto nivel x 34.000/2.000.000 cm
= tiempo de alto nivel x 34.000/2.000.000 cm
El sensor ultrasónico emite un pulso alto desde el pin 2, que se detecta en el pin 12 de la placa Arduino. El código del programa mide la duración del pulso y lo digitaliza en un valor de distancia usando las fórmulas dadas anteriormente. La medición de distancia se transmite en serie mediante el transmisor RF en forma de caracteres decimales.

Fig. 3: Diagrama de circuito del medidor de distancia inalámbrico basado en Arduino
En el circuito de visualización, los caracteres decimales correspondientes a la medición de distancia son recibidos por el receptor de RF y pasados en serie al pin 11 del Arduino Pro Mini en el lado del receptor. El Arduino del lado del receptor tiene el programa incorporado para almacenar los caracteres recibidos en serie en una memoria intermedia y pasar los caracteres almacenados en la memoria intermedia a la pantalla LCD 16X2 en un formato presentable. Consulte el código del programa Arduino en el lado del transmisor para aprender cómo se mide el ancho de pulso del sensor ultrasónico y cómo la medición se convierte a caracteres decimales para su presentación. Luego verifique el código de programa en el lado del transmisor para ver cómo los caracteres recibidos se almacenan en el buffer y se muestran en la pantalla LCD.
guía de programación
En el lado del transmisor Arduino, primero se importan las bibliotecas estándar. La biblioteca VirtualWire se importa para acceder a la entrada analógica del sensor ultrasónico.
#incluir
Hay dos constantes definidas "trigpin" asignadas al pin 2 donde está conectado el pin de disparo del sensor ultrasónico y "echopin" donde está conectado el pin de eco del sensor ultrasónico.
Se crea una matriz de "Distancia" de tipo carácter para almacenar los caracteres correspondientes al valor de distancia medido.
Se llama a una función de configuración donde la velocidad en baudios de la placa Arduino se establece en 9600 bits por segundo usando la función Serial.begin.
La función vw_setup se utiliza para establecer la velocidad de datos para la transmisión en serie en 2000 bits por segundo.
Se llama a una función de bucle, donde se declara la variable “duración” para almacenar la duración del ancho del pulso, la variable “distancia” para almacenar el valor de la distancia en metros y la variable “cm” para almacenar el valor de la distancia en cm.
El pulso de disparo de 10uS se genera en el pin del disparador configurando la variable "trigpin" en salida usando la función pinMode. Se pasa un valor BAJO al pasador del gatillo para iniciar el disparo por pulso durante dos microsegundos, seguido de un pulso ALTO de 10 microsegundos, luego el pasador del gatillo se ajusta a BAJO para finalizar el disparo por pulso.
El echopin se configura para la entrada mediante la función pinMode. La duración del pulso ALTO en el pin de eco se mide usando la función pulseIn y se almacena en la variable "duración".
La medición del ancho del pulso se convierte en medición de la distancia mediante fórmulas de tiempo-velocidad. La medida es en metros que se convierte a centímetros multiplicando por 100.
La medida de distancia en cm se almacena en el búfer del microcontrolador utilizando la función Serial.print junto con la cadena "cm". La medida de la distancia en cm se convierte a un valor de carácter y se almacena en la matriz Distancia utilizando una función de conversión de entero a carácter.
El LED conectado al pin 13 se enciende para indicar que la transmisión de datos está en progreso. El valor de la distancia se envía en serie al transmisor de RF utilizando la función vw_send donde los caracteres se convierten a caracteres sin signo como parámetro. La función vw_wait_tx se utiliza para que el microcontrolador solicite pulsar para hablar hasta que todos los caracteres se transmitan en serie. El LED está apagado para indicar que la lectura de distancia se ha transmitido correctamente.
Esto finaliza la función de bucle y, con ello, el código de programa en el lado del transmisor.
En la placa Arduino del lado del receptor, se importan bibliotecas estándar. Liquidcrystal.h se importa para realizar una interfaz LCD y visualización de contenido. Se crea una matriz "lcd" con pines conectados a la pantalla LCD asignada al objeto LiquidCrystal. La biblioteca VirtualWire se importa para leer datos en serie desde el receptor de RF.
Se declaran variables globales adicionales: "ledpin" asignado al pin 13 donde está conectado el LED indicador de recepción, "Datos" para almacenar el valor entero de la lectura de distancia y matriz de distancia para leer uno por uno los caracteres del búfer de distancia recibido.
Se crea una función de configuración para ejecutar el código de inicialización. Dentro de la función, la velocidad en baudios de Arduino se establece en 9600 bits por segundo utilizando la función Serial.begin. La pantalla LCD está configurada para el modo 16X2 mediante la función lcd.begin. Los mensajes iniciales parpadean y el cursor se coloca en la primera línea de la pantalla. La función pinMode se utiliza para configurar la salida de los pines conectados a la pantalla LCD.
El módulo transmisor y receptor de RF no tiene un pin Push To Talk. Están inactivos cuando no hay datos presentes para transmitir o recibir respectivamente. Por lo tanto, vw_set_ptt_inverted(true) se utiliza para configurar la polaridad de pulsar para hablar y solicitar al receptor que continúe recibiendo datos después de recuperar el primer carácter. La velocidad en baudios para la entrada en serie se establece en 2000 bits por segundo mediante la función vw_setup. La recepción de datos se inicia utilizando vw_rx_start.
Se llama a una función de bucle donde se crea la matriz "buff" de tipo de carácter sin firmar para recuperar caracteres del búfer y se crea la variable "buflen" para seguir verificando la longitud del búfer de caracteres.Código fuente del proyecto
###
#incluirconstante int trigPin = 2; constante int echoPin = 4; char Distancia(4); configuración nula { Serie.begin(9600); vw_setup(2000); } bucle vacío { int duración, distancia, cm; pinMode(trigPin, SALIDA); escritura digital (trigPin, BAJO); retrasoMicrosegundos(2); escritura digital (trigPin, ALTA); retrasoMicrosegundos(10); escritura digital (trigPin, BAJO); pinMode(echoPin, ENTRADA); duración = pulseIn(echoPin, ALTA); distancia=duración*34/200000; //Convertir metros a cm centímetros = distancia*100 Impresión.serie(cm); Serie.print("cm"); Serial.println; retraso(100); //Convierte valor entero a valor de carácter itoa(cm,Distancia,10); escritura digital (13, verdadero); // Enciende una luz para mostrar la transmisión vw_send((uint8_t *)Distancia, strlen(Distancia)); vw_wait_tx; // Espera hasta que desaparezca todo el mensaje escritura digital (13, falso); // Apaga una luz después de la transmisión retraso(200); } #incluir#incluir Lcd de cristal líquido (2, 3, 4, 5, 6, 7); // LED intledPin = 13; // Sensores fecha entera; // Contenedor de transmisión RF char Distancia(4); configuración nula { Serie.begin(9600); lcd.comenzar(16, 2); lcd.print("GARAJE PARA INGENIEROS"); lcd.setCursor(0, 1); // establece el pin digital como salida pinMode(ledPin, SALIDA); pinMode(9, SALIDA); pinMode(8, SALIDA);//Cable virtual // Inicializa IO e ISR // Requerido para DR3100 vw_set_ptt_inverted(verdadero); // Bits por segundo vw_setup(2000); // Inicia la ejecución del PLL del receptor vw_rx_start; } // FINALIZAR la configuración nula bucle vacío { uint8_t buf(VW_MAX_MESSAGE_LEN); uint8_t buflen = VW_MAX_MESSAGE_LEN; // Sin bloqueo si (vw_get_message(buf, &buflen)){ ent i; // Enciende una luz para mostrar el buen mensaje recibido. escritura digital (13, verdadero); // Mensaje con una buena suma de comprobación recibida, descárgalo. para (yo = 0; yoDistancia(buflen) = ''; // Convierte la matriz de caracteres Sensor1CharMsg a un número entero Datos = atoi(Distancia); // DEPURAR Serial.print("distancia = "); Serie.print(Datos); Serie.println(" cm "); lcd.setCursor(0, 2); lcd.print("Distancia = "); lcd.print(Datos); // cambiar el valor de salida analógica: lcd.imprimir("cm "); }}
###
Diagramas de circuito
| Medidor de distancia inalámbrico basado en Arduino | ![]() |
Vídeo del proyecto
