Contactos

Arduino: Finder de rango ultrasónico HC-SR04. GRANGO ULTRASONICO HC-SR04 - Equipo de medición: herramientas de telas de rango ultrasonidas en un microcontrolador con sus propias manos

Bruno Gavand.

El proyecto en el que la solución simple y barata del sensor ultrasónico para medir la distancia se realiza sobre la base del microcontrolador PIC16F877A de la empresa, pero los usuarios fuente Se puede adaptar a otros microcontroladores. El sensor se puede incrustar en desarrollos y dispositivos personalizados: detectores de presencia, robots, sistemas de aparcamiento, dispositivos de medición de distancia, etc.

Características distintivas:

  • un pequeño número de componentes externos;
  • tamaño del código 200 bytes;
  • rango de distancias de trabajo: 30 cm - 200 cm;
  • precisión de medición ± 1 cm;
  • indicación al dejar los límites de medición.

Como usted sabe, la velocidad del sonido en el aire es de aproximadamente 340 m / s. Por lo tanto, el principio del sensor ultrasónico consiste en enviar un pulso ultrasónico con una frecuencia de 40 kHz y rastrear la señal reflejada (ECHO). Por supuesto, el sonido que no escuchará, pero el sensor ultrasónico puede determinar el impulso reflejado. En consecuencia, conocer el tiempo del pulso y la señal de ultrasonido reflejada, podemos obtener la distancia. Dividimos en dos, obtendramos la distancia desde el sensor ultrasónico hasta el primer obstáculo, de donde se reflejó la señal.

El dispositivo utiliza un emisor ultrasónico piezocerámico MA40B8S y un sensor ultrasónico piezocerámico MA40B8R de tipo abierto. Los parámetros principales se muestran en la tabla a continuación.

Dispositivo Propósito Frecuencia Enfocar
Graduado
Capacidad,
Pf
Región
detección
METRO.
Entrada
Voltaje,
Max, B.
MA40B8S. Emisor 40 kHz 50 (simétrico) 2000 0.2 … 6 40
Ma40b8r Sensor 40 kHz 50 (simétrico) 2000 0.2 … 6

Para las pruebas, se aplicó la plataforma de depuración de una empresa.

Sin embargo, el usuario puede usar cualquier microcontrolador fotoque tiene al menos un canal ADC y un canal PWM.

Concepto de sensor ultrasónico.

El radiador está controlado por el transistor BD135. El diodo 1N4007 se utiliza para proteger al transistor del voltaje inverso. Debido al uso del transistor y la cadena resonante, que está formada inclusión paralela Los accionadores L1 330 μH y el condensador formado por el emisor en sí, la tensión de la fuente de alimentación del emisor será de aproximadamente 20 V, que proporciona un rango de detección de hasta 200 cm. Vale la pena señalar que es posible controlar el emisor directamente desde la salida del microcontrolador. , pero en este caso el rango de distancia no supera los 50 cm.

El sensor está conectado directamente al microcontrolador ADC (usando PIC16F877A - CANAL 1 ADC), se requiere la resistencia incluida en paralelo al sensor para que coincida con la impedancia.

Para empezar, es necesario enviar un ímpetu ultrasónico. Se obtiene fácilmente una señal con una frecuencia de 40 kHz utilizando un hardware de microcontrolador. La señal reflejada del sensor ingresa al ADC, el permiso de ADC es de 4 MV, lo que es suficiente para leer los datos del sensor, y los componentes adicionales no son necesarios.

Apariencia del tablero de Makement Ultrasonic Sensor


Este sensor es la solución más simple, y por lo tanto tiene varios inconvenientes: una pequeña vibración de un receptor ultrasónico puede llevar a mediciones incorrectas. Dado que el pulso enviado no está modulado y no está codificado, las fuentes de frecuencia ultrasónica extrañas pueden afectar la medición, y todo esto puede llevar a resultados incorrectos (salida más allá de las mediciones).

Inscripciones en la imagen:

estallido ultrasónico - impulso ultrasónico;
Echo mecánico (eliminado por software) - ECHO mecánico (software de software);
La onda ultrasónica reflejada por un objeto remoto es una onda ultrasónica reflejada desde el objeto remoto.

División de osciloscopio Precio: horizontalmente - 1 ms / asuntos, verticalmente - 5 mV / estuches.

El eco mecánico se excluye programáticamente mediante la introducción de un retraso. Se obtuvo una onda reflejada que tiene una amplitud de aproximadamente 40 MV después de 9.5 ms después de un pulso enviado. Dado que la velocidad de sonido es de 340 m / s, obtenemos:

0.0095 / 2 × 340 \u003d 1.615 m.

En realidad, era un techo de la habitación a distancia desde el sensor de 172 cm, en la pantalla LCD instalada en depudista Se mostró un valor de 170 cm.

Descargas

Código fuente al proyecto en el microcontrolador PIC16F877A (compilador Mikroc) -

Algunos comentarios:
Todos los artículos necesarios para crear una máquina de gama ultrasónica para este esquema se venden en Chipidype, cuesta alrededor de 500-900R para todo (no recuerdo exactamente: había mucho dinero, no contaba :-). (Cuerpo, Smarques, Otros Conectores)
Algunos comentarios sobre el esquema del buscador de rango de ultrasonido:
1. Las cookies pueden usar cualquiera, para diferentes tareas son mejor diferentes ... para mi tarea, cuanto más sean las dimensiones, el ángulo 50.
2. Puede intentar usar solo un AD822 relativamente caro y en el lugar del comparador del hilo para más barato (simplemente no tuve nada más en la mano)
3. En MEGA para generar 40 kilohertz, puede usar un temporizador, ya que debe recoger otro resonador. (Solo tenía 16 y 12 .. ellos no son adecuados)
4. La velocidad de sonido en el aire en realidad depende de la temperatura, si la precisión es muy importante (no me importa), entonces considérelo
5. Tenga en cuenta que en la imagen del telémetro de rango en el caso, los SAKES no se refieren a plásticos: una persona dijo que cuando la mega ajuste ( este esquema Capacable y en esto) el sonido del azufre al micrófono será transmitido por el caso, es mejor ser renovado
6. Se puede ver un ejemplo del firmware más simple de MEGA en C (debajo de este esquema)
7. El programador es mejor usar STK200 / 300 es Avreal: el software y el esquema se pueden cortar
8. Por la mente en el firmware, debe seguir el principio y el final del "Paquete", en el ejemplo, solo el comienzo (la precisión crecerá específicamente) .. ¿Puedo terminarlo?
9. La escena ama a 40 kHz, un poco en la dirección no es en absoluto ... Probablemente la verdad en el manual, escriben ese resonante :-)
10. En el diagrama de una tontería en el radiador de los transistores de Ponapihan, que deseen dar más voltios de 12 - Velkom, una persona dijo que apagó más fuerte (cuenta). No hice esto en tres razones: en los primeros 24 voltios, es necesario encontrar en otro lugar, en la segunda versión actual al configurar el rizistor, así que ve la pared durante 4 metros, es decir,. No tengo dónde experimentarlo, y no hay necesidad. Bueno, la tercera razón, la misma persona dijo que los sakes tienden a morir en este voltaje.
11. CONSEJO GENERAL: Puede encontrar todas las resistencias y condensadores en la unidad no de trabajo de la fuente de alimentación de la computadora ATX (están ahí todo está en algún lugar 1/8 de lana): ¡ahorre dinero!
12. La opinión errónea de que el ultrasonido publicado por el corazón de alguna manera puede escuchar a Sobami y otras criaturas, los influye mal: mi perro vino como la noche y cayó frente a las apretadas incluidas.
13. Más, por lo que solo para el mensaje, mega y otros 8 bits controladores de ATMLA, están persiguiendo perfectamente .. Tengo en algunos desafíos en lugar de la izquierda 16 trabajar en 24 y normalmente.
14. Al eliminar R5 arriba, el kiloma (10, 50, 100) será una ganancia muy grande, y lo más probable es que necesiten un cuerno, pero el rango de mediciones crecerá enormemente.
15. En lugar de eliminar a los rupactores (con gran R5), ver más arriba, puede actualizar el firmware que no estaría esperando una señal útil en el momento inicial. Pero entonces es imposible medir las distancias de aproximadamente 10 cm y menos.

El comentario al Consejo 8 - Amarillo marcó el momento del funcionamiento de la interrupción de la interrupción de la máquina de gama ultrasónica MK en la recepción, en realidad se puede limitar al mismo momento, esperar un poco y hacer la siguiente medida, al siguiente paquete de El pulso, y el tiempo del tiempo de vuelo se considera tiempo desde el primer pulso enviado (o este último no es importante) a la primera adopción.
La segunda opción está marcada con Red, más precisa, ya que el paquete de pulsos generalmente no se logra completamente (puede que no sea un par de los tres primeros o los últimos impulsos), de acuerdo con la imagen, de acuerdo con la imagen, está claro que ella "se aplanó" Alrededor de los bordes, aunque el rectángulo perfecto de pulsos fue: así: el punto es que la mitad del paquete debe permanecer en su lugar, a pesar del hecho de que los bordes ya no pueden ser un comparador. Así que la precisión en varios .. (Los milómetros deben pensar) dependen de si se tuvo en cuenta en el firmware de la máquina de gama ultrasónica del medio o solo el comienzo del paquete al tomarlo.

Los sensores de distancia ultrasonidos arduino están muy en demanda en proyectos robóticos debido a su simplicidad relativa, la precisión suficiente y la disponibilidad. Se pueden usar como instrumentos que ayudan a cruzar obstáculos, obtener el tamaño de los artículos, simular el mapa de la habitación y señalar la aproximación o eliminación de objetos. Una de las variantes comunes de dicho dispositivo es un sensor de distancia, en el diseño de las cuales incluye una máquina de rango ultrasónica HC SR04. En este artículo, conoceremos el principio del sensor de distancia, consideraremos varias opciones para conectarse a los pagos de Arduino, el esquema de interacción y los cupitmos.

La capacidad de un sensor ultrasónico para determinar la distancia al objeto se basa en el principio de sonar: enviando una viga de ultrasonido y obteniendo su reflejo con un retraso, el dispositivo determina la presencia de objetos y una distancia para ellos. Las señales ultrasónicas generadas por el receptor, se reflejan desde el obstáculo, regresen a él después de un cierto período de tiempo. Es este intervalo de tiempo que se vuelve característico para ayudar a determinar la distancia al objeto.

¡Atención! Dado que el principio de operación se basa en la ecografía, este sensor no es adecuado para determinar la distancia a los objetos que absorben el sonido. Optimal para las mediciones son objetos con una superficie lisa plana.

Sensor Descripción HC SR04

El sensor de distancia Arduino es un dispositivo tipo sin contacto, y proporciona una medición y estabilidad de alta precisión. El rango de distancia de su medición varía de 2 a 400 cm. No tiene efectos significativos de la radiación electromagnética y la energía solar. El módulo con HC SR04 Arduino también incluye un receptor y un transmisor.

La máquina de rango ultrasónica HC SR04 tiene tales parámetros técnicos:

  • Voltaje de suministro 5V;
  • Parámetro de trabajo T OKA - 15 MA;
  • Potencia actual en condición pasiva.< 2 мА;
  • Ángulo panorámico - 15 °;
  • Resolución sensorial - 0,3 cm;
  • Ángulo de medición - 30 °;
  • Ancho de pulso - 10 -6 s.

El sensor está equipado con cuatro salidas (estándar 2, 54 mm):

  • Contacto de alimentación de un tipo positivo - + 5V;
  • Trig (t) - la salida de la señal de salida;
  • ECHO (R) - Salida de la señal de salida;
  • GND - Retiro "Tierra".

Dónde comprar un módulo SR04 para Arduino

El sensor de distancia es un componente bastante común y se puede encontrar fácilmente en las tiendas en línea. Las opciones más baratas (de 40-60 rublos por pieza) son tradicionalmente en todo el sitio conocido.

Módulo de sensor de distancia HC-SR04 para Arduino Otra opción del sensor ultrasónico HC-SR04 en un proveedor confiable
Sensores de distancia Ultrasonic HC-SR05 SR05 (características mejoradas) Módulo HC-SR05 HY-SRF05 para UNO R3 MEGA2560 debido a un proveedor confiable

Esquema de interacción con Arduino.

Para obtener datos, debe realizar una secuencia de acciones de este tipo:

  • Presentar al pulso de TRIG de salida con una duración de 10 micros;
  • En el rannellor ultrasónico HC SR04 conectado a Arduino, la conversión de la señal en 8 pulsos con una frecuencia de 40 kHz se convertirá, lo que se enviará hacia adelante a través del emisor;
  • Cuando los pulsos alcanzan el obstáculo, lo afectarán y serán aceptados por el receptor R, que garantizarán la presencia de una señal de entrada en la salida de eco;
  • En el lado del controlador, la señal recibida con la ayuda de fórmulas debe traducirse a la distancia.

Al dividir el ancho del pulso a 58.2, recibiremos datos en centímetros, cuando se dividió por 148, en pulgadas.

Conecte HC SR04 a Arduino

Conecte el sensor de distancia ultrasónico a panel Arduino. bastante sencillo. El diagrama de conexión se muestra en la figura.

Contacto Tierra Conexión de la salida GND en la tarjeta Arduino, conecte la salida de potencia de 5V. Las salidas de trig y eco se conectan a Arduino a los pines digitales. Opción de conexión utilizando un tablero audaz:

Biblioteca para trabajar con HC SR04

Para facilitar el trabajo con el sensor de distancia HC SR04 en Arduino, puede usar la biblioteca de novatos. No tiene problemas con el acceso al ping y agrega algunas características nuevas.

Las características de la biblioteca incluyen:

  • La capacidad de trabajar con varios sensores de ultrasonido;
  • Puede trabajar con un sensor de distancia en un solo pin;
  • Sin retraso durante 1 segundo en ausencia de eco de ping;
  • Para una corrección de error fácil, hay un filtro digital incorporado;
  • La distancia máxima de cálculo precisa.

Descargar Bibilot Newing

Distancia de medición de precisión por HC SR04 Sensor

La precisión del sensor depende de varios factores:

  • temperatura y humedad del aire;
  • distancias al objeto;
  • ubicación en relación con el sensor (según el diagrama de radiación);
  • rendimiento de calidad de los elementos del módulo del sensor.

La base del principio de operación de cualquier sensor ultrasónico es el fenómeno del reflejo de las ondas acústicas que se propagan en el aire. Pero como se sabe a partir del curso de la física, la velocidad de propagación del sonido en el aire depende de las propiedades de este aire en sí (principalmente a la temperatura). El sensor, las ondas emisoras y el tiempo de medición antes de su devolución, no reconocen, en qué entorno se extenderán y tomarán un valor promedio para los cálculos. En condiciones reales, debido al factor de temperatura del aire, el HC-SR04 puede estar incorrecto de 1 a 3-5 cm.

El factor de distancia al objeto es importante, porque La probabilidad de reflexión de los artículos vecinos está creciendo, y la señal misma se desvanece de la distancia.

Además, para mejorar la precisión, debe enviar correctamente el sensor: hacerlo de modo que el sujeto esté dentro del cono del gráfico de radiación. En pocas palabras, los "ojos" HC-SR04 deben mirar directamente sobre el tema.

Para reducir los errores y los errores de medición, generalmente se realizan las siguientes acciones:

  • los valores se promedian (medida varias veces, eliminamos las ráfagas, luego encontramos el promedio);
  • con la ayuda de sensores (por ejemplo,), se determina la temperatura y se realizan coeficientes de corrección;
  • el sensor está instalado en el servomotor, con el que "giramos la cabeza" moviendo la tabla de radiación a la izquierda o hacia la derecha.

Ejemplos del uso del sensor de distancia.

Consideremos un ejemplo de un proyecto simple con Arduino Uno Plack y HC SR04 Distancia Sensor. En boceto, recibiremos el valor de la distancia a los artículos y mostraremoslos en el monitor de puerto en el medio Arduino IDE. Puede cambiar fácilmente el boceto y el esquema de conexión para que el sensor indique la aproximación o distancia del elemento.

Conectando el sensor a arduino

Al escribir un boceto, se utilizó la siguiente opción para identificar la conexión del sensor:

  • VCC: + 5V
  • Trig - 12 PIN
  • ECHO - 11 PIN
  • Tierra (GND) - Tierra (GND)

Dibujo de muestra

Comencemos a trabajar con el sensor inmediatamente de la opción compleja relativa, sin usar bibliotecas externas.

En este boceto, llevamos a cabo una secuencia de acciones:

  • Un pulso corto (2-5 microsegundos) Transla el sensor de distancia al modo de ecolocación, en el que se envían las ondas ultrasónicas con una frecuencia de 40 kHz al espacio circundante.
  • Esperamos hasta que el sensor analice las señales y retrasos reflejados determinarán la distancia.
  • Obtenemos el valor de distancia. Para esto estamos esperando hasta que HC SR04 le proporcione un pulso de eco proporcional al eco. Definimos la duración del pulso utilizando la función PULSEIN, que nos devolverá el tiempo antes de cambiar el nivel de la señal (en nuestro caso, hasta que aparezca el Frente Inversión del Impulso).
  • Habiendo recibido el tiempo, lo traducimos en la distancia en centímetros dividiendo el valor a la constante (para el sensor SR04, es 29.1 para la señal "allí", tanto como la señal "Atrás", que dará 58.2) .

Si el sensor de distancia no lee la señal, entonces la conversión de la señal de salida nunca aceptará el valor de pulso corto: bajo. Dado que algunos sensores, el tiempo de retardo varía según el fabricante, se recomienda al usar los bocetos especificados para establecer su valor manualmente (lo hacemos al comienzo del ciclo).

Si la distancia es de más de 3 metros, en la cual HC SR04 comienza a funcionar mal, el tiempo de retardo es mejor para exhibir más de 20 ms, es decir, 25 o 30 ms.

#DEFINE PIN_TRIG 12 #DEFINE PIN_ECHO 11 Duración larga, cm; Configuración de vacío () (// inicializar la interacción en serial.begin serial.begin (9600); Duración del pulso de 2-5 microsegundos. DigitalWrite (pin_trig, bajo); retrastemicrosegundos (5); digitalwrite (pin_trig, alto); / / Exhibir nivel alto Señal, esperando alrededor de 10 microsegundos. En este punto, el sensor enviará señales con una frecuencia de 40 kHz. Retardmicrosegundos (10); Digitalwrite (pin_trig, bajo); // El tiempo de retraso de la señal acústica en el ecolocador. Duración \u003d Pulsein (Pin_echo, Alto); // ahora queda por convertir el tiempo a la distancia cm \u003d (duración / 2) / 29.1; Serial.print ("distancia al objeto:"); Serial.print (cm); Serial.println ("ver"); // retraso entre las mediciones para el funcionamiento correcto del retraso (250); )

Boceto con la biblioteca de newping

Ahora veamos la versión de boceto con la biblioteca de novatos. El código será estallado significativamente, porque Todas las acciones descritas anteriormente están ocultas dentro de la biblioteca. Todo lo que debemos hacer es crear un objeto de clase de novato especificando un PIN, con el que conectamos el sensor de distancia y usamos métodos de objeto. En nuestro ejemplo, es necesario usar PING_CM () para obtener una distancia de centímetros.

#Incluir. #define pin_trig 12 #define pin_echo 11 #define max_distance 200 // constante para determinar la distancia máxima que se consideraremos correctos. // Crear un objeto cuyos métodos usarán para obtener una distancia. // A medida que los parámetros envían el número de alfileres a los que se conectan las salidas de eco y triunt del sensor Sonar Newing (PIN_TRIG, PIN_ECHO, MAX_DISTIANCE); Configuración de vacío () (// Inicializar la interacción en un puerto serie a una velocidad de 9600 serial.begin (9600);) Void Loop () (// Inicie el retardo requerido para el trabajo correcto. Delay (50); Valor desde el sensor de distancia y guárdelo a una variable sin firmar la distancia int \u003d sonar.ping_cm (); // imprima la distancia en el monitor de puerto Serial.Print (distancia); serial.println ("cm");)

Un ejemplo de la conexión de un telémetro ultrasónico HC SR04 con un PIN

La conexión HC-SR04 a Arduino se puede realizar utilizando un PIN. Esta opción es útil si trabaja con un gran proyecto y carece de alfileres libres. Para conectarse, solo necesita instalarse entre los contactos de TRIGA ECHO. 2.2k.

#Incluir. #Define pin_ping 12 // PIN con Arduino conectado a los pines de activación y eco en #define max_distance 200 // distancia máxima que podemos controlar (400-500 cm). Sonar nuevo (pin_ping, pin_ping, max_distance); // Ajuste de los pasadores y la configuración máxima del vacío () (Serial.Begin (9600); // abrió un protocolo con datos y una frecuencia de transmisión de 115200 bits / s.) Bucle VOID () (Delay (50); // 50 ms Retraso entre las ondas generadas. 29 ms - El valor mínimo permisible no firmado int distancesm \u003d sonar.ping (); // creando una señal, recibiendo el parámetro de su duración en la ISS (US). Serial.Print ("Ping:" ); Serial.print (distancias / us_roundtrip_cm); // la recálculo del parámetro de tiempo en el valor de distancia y la salida (0 corresponde a la salida límite permisible) Serial.println ("cm"); )

Breves conclusiones

Los sensores de distancia ultrasónica son bastante universales y precisos, lo que les permite ser utilizados para la mayoría de los proyectos aficionados. El artículo describe el sensor HC SR04 extremadamente popular, que se conecta fácilmente a la Junta Arduino (para esto, debe proporcionar inmediatamente dos pines libres, pero hay una opción de conexión y con un PIN). Hay varios sensores para trabajar con el sensor. bibliotecas gratis (El artículo describe solo uno de ellos, novato), pero puede hacer sin ellos: el algoritmo de interacción con el controlador del sensor interno es bastante simple, lo hemos mostrado en este artículo.

Basado experiencia propiaSe puede argumentar que el sensor HC-SR04 muestra la precisión dentro de un centímetro en distancias de 10 cm a 2 m. En distancias más cortas y largas, es posible una fuerte interferencia, que depende en gran medida de los artículos circundantes y el método de uso. Pero en la mayoría de los casos, HC-SR04 se enfrió perfectamente con su trabajo.

HC-SR04 uno de los buscadores de gama más comunes y baratos en la robótica. Le permite medir distancias de 2 cm a 4 m (tal vez más) con una precisión decente de 0.3-1 cm. A la salida señal digital, cuya duración es proporcional a la distancia a los obstáculos.

Filtro de rango ultrasónico

Este sensor ya fue comprado durante mucho tiempo y yacía en su caja casi olvidada. Pero dentro del mismo proyecto, se eliminó sobre la luz blanca y, para la familiarización, sobre la base de ella y la tarifa de voltímetro se construyó un buscador de gama bastante compacto.

Ranger ultrasonido HC-SR04

Características del sensor:

Nutrición - 5V.
Corriente consumida - menos de 2 mA
Ángulo de visión efectivo - 15G
Distancia medida - 2 cm - 5m
Precisión - 3mm
Tomado de la documentación para el sensor.

Principio de Operación HC-SR04

Principio de funcionamiento

El módulo tiene 4 salidas, dos de las cuales son las comidas: tierra y + 5V, y dos datos más. La encuesta del módulo se realiza de la siguiente manera: se envía un pulso a la salida del TRIG con una duración de 10μs. La máquina de rango genera una parcela de 8 pulsos ultrasónicos de 40 kHz. Que, reflejando de la mayoría de las superficies, regrese, si no se desvanecen en el camino. Inmediatamente después de enviar la señal a TRIG, comenzamos a esperar una señal de respuesta con una salida de eco, duración de 150 μs a 25 ms, que es proporcional a la distancia al objeto. Más precisamente, pasando el tiempo desde el sensor a los obstáculos y la espalda. Si no hay respuesta (el sensor no escucha su eco), entonces la señal volverá a 38 ms de largo. La distancia al objeto (obstáculos) se calcula por la siguiente fórmula simple:

Dónde: L es la distancia en centímetros en el objeto, y F es la longitud del pulso en la salida del eco.
Tiempo de encuesta recomendado del sensor 50 ms o 20Hz.

Las primeras pruebas de este módulo realizadas con la ayuda de un osciloscopio digital, que captó una respuesta del módulo y en el manual, cerrando rápidamente la triga de + nutrición, trató de obtener el impulso de inicio de 10 MX. En medias casos resultó [:)].

Diseño

El sensor se conectó a la placa de voltímetro con un ánodo común, un poco modificado para funcionar con él (eliminado divisor innecesario con un condensador y se agregó una salida de RA3). Se aplicó un microcontrolador a partir de la versión 5 del Voltímetro - PIC16F688, con un firmware refinado con una máquina de rango.

Sensor ultrasónico de distancia HC-SR04 (y módulos similares) Use ondas ultrasónicas para determinar la distancia al objeto.

En términos generales, tendremos que averiguar la distancia al objeto, porque el sensor en sí, simplemente tiene en cuenta el tiempo que va a capturar el eco de las ondas de sonido enviadas a ellos. Esto sucede de esta manera:

  1. El módulo envía ondas de sonido, al mismo tiempo que alimenta el voltaje a un eco de IDO especial.
  2. El módulo capta la señal reflejada y elimina el voltaje del pasador.

Eso es todo lo que hace un telémetro de rango ultrasónico. Podemos determinar la distancia usted mismo, porque sabemos cuánto tiempo tomó del sonido para hacer un viaje desde el módulo y la espalda (por cuánto tiempo fue el eco del pin bajo voltaje), así como conocemos la velocidad del sonido en el aire. Pero no vamos a ir a los detalles y dejaremos que Arduino haga todos los cálculos.

Por cierto, a pesar del hecho de que el principio de operación de todos los sensores de ultrasonido es el mismo, no todos producen la misma salida de la tensión en IDU ECHO. Entonces, si tiene un módulo que no sea HC-S04, preste atención al cuarto paso, donde se describen posibles problemas, y comprobar, tal vez su módulo esté en la lista. Si no está allí, tendrás que lidiar con el tuyo.

Paso 1: Asamblea de hierro con tus propias manos.

El ensamblaje es muy simple (recoger todo desconectado del voltaje):

  1. Pareja 5V de Arduino con PIN VCC en el módulo
  2. Conecte el GND desde Arduino con GND en el módulo
  3. Conecte el Pin Digital 7 en Arduino con PIN TRIG en el módulo
  4. Pareja módulo digital 8 en arduino con pin eco en el módulo

Paso 2: Programación del módulo HC-SR04

Para ver los resultados del programa, debe ejecutar el monitor en serie en Arduino. Si no está familiarizado con esta función, ahora es el momento de abrirlo y aprender más sobre esto, esta es una gran cosa que ayuda a depurar el código. En la interfaz Arduino, mire la esquina derecha, ¡allí encontrará un botón que ejecuta el monitor en serie, se ve como una lupa, haga clic en él y el monitor se abrirá (o seleccione Herramientas / monitor en serie o presione CTRL + Shift + M).

Aquí hay un esquema programa de trabajo:

// Boceto inicial para Aruino -
// Determinar las constantes (las constantes no cambian y si intentas anularlas, obtén un error durante la compilación)
Const int triggerpin \u003d 7; // crea una constante con el nombre "triggerpin" y asigna el Pin Digital 7 a ella
Const int Echopin \u003d 8; // crea una constante con el nombre "Echopin" y prescribe Pin Digital 8 en él
// Determinar las variables (las variables pueden variar y generalmente cambiar en el curso del programa, pueden contener cualquier valor calculado)
intuveniente intorro \u003d 0; // crea una variable llamada "Duración" para almacenar el valor devuelto por pulseina, inicialmente el valor se establece en "0"
INT Distancia \u003d 0; // crea una variable para almacenar el valor calculado como una distancia a un objeto ubicado en frente del sensor, inicialmente el valor se establece en "0"
Configuración de vacío () // En esta sección, puede configurar su tarifa y otros parámetros necesarios para su programa.
{
Serial.begin (9600); // inicializa la comunicación consistente a través de USB entre Arduino y la computadora, lo necesitaremos
// determinar los modos de los pasadores
PinMode (triggerpin, salida); // "triggerpin" se utilizará para emitir, el número PIN se declara arriba en las secciones "Determinar variables"
PinMode (Echopin, Entrada); // "Echopin" se utilizará para ingresar, el número PIN se declara arriba en la sección "Determinar variables"
// ajuste final
// Todo lo que se escribió arriba es leído por el programa solo una vez, al iniciar o restablecer (restablecer)
void bucle () // El código del programa en la parte del préstamo se ajusta fácilmente y se repite hasta que se apaga la alimentación, o no se reiniciará
{
Digitalwrite (triggerpin, alto); // comienza a alimentar ondas de ultrasonido del módulo HC-SR04
Demora (5); // Pausa pequeña, se necesita para que la función del módulo sea correcta (puede reducir este valor, mis otros programas funcionan a un valor de 1)
Digitalwrite (triggerpin, bajo); // detiene las ondas ultrasónicas que vienen del módulo HC-SR04
Duración \u003d Pulsein (Ecopina, Alta); // Función especial que le permite determinar la duración del tiempo en que se suministró el voltaje en el eco final en el último ciclo de alimentación de ultrasonido completado
Demora (10); // otra vez una pequeña pausa. Se necesita para la estabilidad, es posible que la pausa demasiado corta no proporcione resultados
Distancia \u003d (duración / 2) / 58; // Duración de la transformación a la distancia (valor guardado en "Duración" se divide en 2, entonces este valor se divide por 58 **) ** para centímetros
Demora (500); // Otra pausa para la estabilidad: puede jugar con el valor, pero puede estropear el trabajo del programa, así que use 500 por defecto
Serial.print (distancia); // envía el valor calculado de la distancia al monitor en serie
Serial.println ("cm"); // agrega la palabra "cm" después del valor de distancia y traduce el carro en el monitor en serie a la nueva línea
Serial.println (); // agrega una cadena vacía en el monitor en serie (para una fácil lectura)
) // fin del ciclo

_________________________________________________

Entonces, después de leer mis instrucciones, me di cuenta de que el boceto del programa no corresponde a mi comprensión de la simplicidad. Por lo tanto, publico el mismo boceto con comentarios ligeros.

// Módulo de sensor de distancia ultrasónico HC-SC04
Const int triggerpin \u003d 7; // disparador a las 7
Const int Echopin \u003d 8; // echo en 8
intuveniente intorro \u003d 0; // almacena el valor de pulsión
INT Distancia \u003d 0; // almacena el valor de la distancia calculada
Configuración de vacío ()
{
Serial.begin (9600);
PinMode (triggerpin, salida); // determina los modos de los pasadores
PinMode (Echopin, Entrada);
}
bucle vacío ()
{
Digitalwrite (triggerpin, alto); // comienza a enviar ultrasonido
Demora (5); // El comando requerido está configurado (pero no inferior a 10 microspectos)
Digitalwrite (triggerpin, bajo); // el módulo deja de enviar ultrasonido
Duración \u003d Pulsein (Ecopina, Alta); // Determina cuánto tiempo se sirvió el voltaje para pin eco.
Demora (10); // El comando requerido está configurado, pero limpio
Distancia \u003d (duración / 2) / 58; // Thiege la distancia en el CC al objeto
Demora (500); // Pausa para la estabilidad, la disminución puede romper el curso del programa, es mejor dejarlo como es
Serial.print (distancia); // envía el valor actual almacenado en la distancia en el monitor en serie
Serial.println ("cm"); // Muestra la palabra "cm" inmediatamente después de la distancia
Serial.println (); // crea una cadena vacía en el monitor en serie (para una fácil lectura)
}

A las instrucciones, también aplicaré archivos.

Archivos

  1. HCSR04Barebones.ino: este archivo está muy comentado y contiene información sobre el módulo HC-SR04, así como una información de ensamblaje.
  2. Bareboeslight.ino - Módulo con pequeña cantidad Comentarios

Aquí está mi consejo. Sé que el código funciona, pero antes de adjuntar los archivos a la instrucción, reescribo todo y el monitor en serie ha mostrado constantemente "0 cm". El problema fue en el módulo quemado, y su reemplazo corrigió la situación.

Mire cómo responde el programa si decide jugar con los valores de los comandos de retardo. Una forma experimentada, encontré que una disminución en los valores de retraso o equipararlos a 0 puede llevar al programa a un estado que no funciona.

Después de configurar el dispositivo, todo se limita a su imaginación. Puede verificar que los objetos fijos estén a la misma distancia y permanezcan inmóviles. Puede usar el monitor para recibir notificaciones de que algún objeto se mueve más allá del sensor, etc.

El esquema se usó para ser utilizado por mí para determinar que todos los objetos están en el sensor están en la distancia a más de 60 cm. El proyecto usó tres diodos y un sillón. Cuando todos los artículos fueron más de 60 cm, se quemó un diodo verde. Cuando algo se acercó a menos de 60 cm, gas de diodo verde, y se ilumina el rojo. Si el objeto permaneció cerca de algún tiempo, entonces se enciende el segundo diodo rojo, y el chirrido comenzó a chillar. Cuando se eliminó el objeto en 60 cm, las almas se apretaron, los diodos rojos eran Garley, y el verde se ilumina de nuevo. No impidió todas las falsas alarmas, pero trabajó con la mayoría de los casos cuando un ave o una proteína curiosa voló más allá del sensor.

Paso 4: Problemas famosos

Si ve el modelo de su módulo ultrasónico en este punto, luego la hoja a continuación. Espero que encuentres tu problema y lo decidas.

  1. US-105.
  2. Dyp-me007tx

Módulo US-105

El módulo Ultrasónico US-105 utiliza la salida de GPIO a PIN ECHO, lo que implica otros cálculos para determinar la distancia. Al retirar la GPIO a PIN ECHO, el PIN no se mantiene bajo el voltaje mientras envía la onda. En su lugar, al obtener un ultrasonido reflejado, se suministra un voltaje específico al PIN de ECHO, que es proporcional al tiempo requerido por una ola ultrasónica para ir y volver al sensor. Con este módulo, tal código funcionará:

// Código para el módulo ultrasónico US-105 sin firmar INT Echopin \u003d 2; TRIGPIN \u003d 3 sin firmar \u003d 3; sin firmar mucho tiempo_echo_us \u003d 0; // len_mm_x100 \u003d longitud * 100 sin firmar len_mm_x100 \u003d 0; Len_integer no firmado len_integer \u003d 0; // insigned int str_fraction \u003d 0; Configuración de vacío () (Serial.Begin (9600); Modo de pines (Echopin, Entrada); Modo Pineco (Trigpin, Salida);) Bucle VOID () (DigitalWrite (TRIGPIN, ALTO); Reaymicrosegundos (50); DigitalWrite (TRIGPIN, BAJO) ; Tiempo_ECHO_US \u003d PULSEIN (ECHOPIN, ALTO); IF (TIME_ECHO_US 1)) (LEN_MMM_X100 \u003d (TIME_ECHO_US * 34) / 2; len_integer \u003d len_mm_x100 / 100; len_fraction \u003d len_mm_x100% 100; serial.print ("rango:"); Serial.print (len_integer, dic); serial.print (""); si (len_fraction< 10) Serial.print("0"); Serial.print(Len_Fraction, DEC); Serial.println("mm"); delay(1000); } // Конец программы

Módulo DP-ME007TXX

// Código para el módulo ultrasónico DP-ME007TX / * Instrucciones para la conexión * 5V de Arduino a VCC en el módulo * GNG de Arduino a GND en el módulo de * OUT MÓDULO DEL MÓDULO A DIGITAL PINE 7 en Arduino * / #include #define Rxpin 7 #define txpin 7 softwareserial myserial (rxpin, txpin); Mili largo \u003d 0; Byte MyBuffer \u003d (0); Byte bitpos \u003d 0; Configuración de vacío () (serial.begin (9600); myserial.begin (9600);) Void Loop () (bitpos \u003d 0; mientras (myserial.lailable ()) (si (bitpos< 4) { mybuffer = mySerial.read(); } else break; } mySerial.flush(); mili = mybuffer << 8 | mybuffer; Serial.print("Distance: "); Serial.print(mili / 25.4); Serial.print (" inches"); Serial.println(); delay(500); }

¿Te gustó el artículo? Compártelo