Tabla de contenido:
- Suministros
- Paso 1: La persecución …
- Paso 2: Introducción - Configuración de Arduino-Breadboard
- Paso 3: Conecte el LV-MaxSonar-EZ
- Paso 4: Conecte el HC-SR04
- Paso 5: Conecte el selector de opciones 'HC-SR04'
- Paso 6: Hacer que todo funcione …
- Paso 7: diseño del proyecto
- Paso 8: Introducción de código …
- Paso 9: Arduino Software-Serial …
- Paso 10: Código - Configuración
- Paso 11: Código - Bucle
- Paso 12: Código: active el MaxSonar. Leer valor de PW
- Paso 13: Código - Leer valor de serie MaxSonar
- Paso 14: Código - Leer valor analógico MaxSonar
- Paso 15: Codifique: active y lea el HC-SR04
- Paso 16: Código: compatibilidad con el trazador en serie Arduino IDE
- Paso 17: Código - Depurando…
- Paso 18: Conclusión
- Paso 19: Conexión MaxSonar alternativa (usando un encabezado de 180 °)
- Paso 20: Código Arduino
Video: Comparación de los telémetros de sonda LV-MaxSonar-EZ y HC-SR04 con Arduino: 20 pasos (con imágenes)
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:41
Encuentro que muchos proyectos (especialmente robots) requieren, o pueden beneficiarse de, medir la distancia a un objeto en tiempo real. Los telémetros de sonda son relativamente económicos y se pueden conectar fácilmente a un microcontrolador como el Arduino.
Este Instructable compara dos dispositivos de telémetro de sonar fáciles de adquirir, mostrando cómo conectarlos al Arduino, qué código se requiere para leer valores de ellos y cómo se `` comparan '' entre sí en diferentes situaciones. A partir de esto, espero que obtenga una idea de los pros y los contras de los dos dispositivos que lo ayudarán a usar el dispositivo más apropiado en su próximo proyecto.
Quería comparar el dispositivo HC-SR04 (ojo de error) extremadamente popular con el dispositivo LV-MaxSonar-EZ menos común para ver cuándo podría querer usar uno en lugar del otro. Quería compartir mis hallazgos y configuración para que pueda experimentar con los dos y decidir cuál usar en su próximo proyecto.
Por qué estos dos …
¿Por qué el HC-SR04? El HC-SR04 'Bug-Eye' es extremadamente popular, por varias razones:
- Es económico: $ 2 o menos si se compra al por mayor
- Es relativamente fácil interactuar con
- Muchos, muchos proyectos lo usan, por lo que es bien conocido y bien entendido.
¿Por qué LV-MaxSonar-EZ?
- Es muy fácil interactuar con
- Tiene un factor de forma bueno / fácil de incorporar a un proyecto
- Tiene 5 versiones que abordan diferentes requisitos de medición (ver hoja de datos)
- Es (típicamente) mucho más preciso y confiable que el HC-SR04
- Es asequible: de $ 15 a $ 20
Además, espero que encuentres fragmentos útiles en el código Arduino que escribí para la comparación en tus proyectos, incluso más allá de las aplicaciones de telémetro.
Supuestos:
- Está familiarizado con Arduino y el IDE de Arduino
- El IDE de Arduino está instalado y funcionando en su máquina de desarrollo de preferencia (PC / Mac / Linux)
- Tiene una conexión desde el IDE de Arduino a su Arduino para cargar y ejecutar programas y comunicarse
Hay Instructables y otros recursos para ayudarlo con esto si es necesario.
Suministros
- Telémetro HC-SR04 'Bug-Eye'
- LV-MaxSonar-EZ (0, 1, 2, 3, 4; estoy usando un '1', pero todas las versiones tienen la misma interfaz)
- Arduino UNO
- Placa de pruebas sin soldadura
- Encabezado de clavija: 7 clavijas a 90 ° (para el dispositivo MaxSonar, consulte * a continuación para utilizar 180 °)
- Puente de cable plano - 5 hilos, macho-macho
- Puente de cable plano - 2 hilos, macho-macho
- Cable de puente - macho-macho
- Cable de conexión: rojo y negro (para la alimentación de Arduino a la placa de pruebas y la placa de pruebas a los dispositivos)
- Ordenador con Arduino IDE y cable USB para conectar al Arduino UNO
* El MaxSonar no viene con un encabezado adjunto, por lo que puede usar un encabezado que sea más apropiado para su proyecto. Para este Instructable, utilicé un cabezal de 90 ° para facilitar la conexión a la placa de pruebas. En algunos proyectos, un cabezal de 180 ° (recto) podría ser mejor. Incluyo una foto para mostrar cómo conectar eso para que no tengas que cambiarlos. Si prefiere usar un cabezal de 180 °, necesitará un puente de cable plano macho-hembra de 7 hilos adicional para conectar, como muestra mi foto.
Repositorio de Git Hub: archivos de proyecto
Paso 1: La persecución …
Antes de entrar en detalles sobre cómo conectar las cosas para que puedas experimentar por tu cuenta con estos dos fantásticos dispositivos, quería describir algunas cosas con las que espero que este Instructable te ayude.
Debido a que el dispositivo MaxSonar se usa menos y se comprende menos en comparación con el dispositivo HC-SR04, quería mostrar:
- Cómo conectar el dispositivo MaxSonar a un microcontrolador (en este caso un Arduino)
- Cómo tomar medidas de las diferentes salidas del dispositivo MaxSonar
- Compare la interfaz del dispositivo MaxSonar con el dispositivo HC-SR04
- Pon a prueba la capacidad de medir la distancia de objetos con diferentes superficies.
- Por qué puede elegir un dispositivo sobre el otro (o usar ambos en conjunto)
Espero que este Instructable te ayude en esta persecución …
Paso 2: Introducción - Configuración de Arduino-Breadboard
Si ha estado creando prototipos con Arduino, probablemente ya tenga una configuración Arduino-Breadboard con la que se sienta cómodo. Si es así, estoy seguro de que puede usarlo para este Instructable. Si no, así es como configuré el mío: siéntase libre de copiarlo para este y futuros proyectos.
- Adjunto el Arduino UNO y una pequeña placa de pruebas inalámbrica a una pieza de plástico de 3-3 / 8 "x 4-3 / 4" (8,6 x 12,0 cm) con patas de goma en la parte inferior.
- Utilizo un cable de conexión rojo y negro de 22 AWG para conectar + 5V y GND desde el Arduino a la regleta de distribución de energía de la placa de pruebas
- Incluyo un capacitor de tantalio de 10 µF en la tira de distribución de energía-tierra para ayudar a reducir el ruido de energía (pero este proyecto no lo requiere)
Esto proporciona una plataforma agradable con la que es fácil crear prototipos.
Paso 3: Conecte el LV-MaxSonar-EZ
Con un cabezal de 90 ° soldado al dispositivo MaxSonar, es fácil conectarlo a la placa de pruebas. El cable plano de 5 pines luego conecta el MaxSonar al Arduino como se ve en el diagrama. Además del cable plano, utilizo pedazos cortos de cable de conexión rojo y negro del riel de distribución de energía para proporcionar energía al dispositivo.
Alambrado:
MaxSonar | Arduino | Color |
---|---|---|
1 (BW) | Energía-GND | Amarillo |
2 (PW) | Digital-5 | Verde |
3 (AN) | Analógico-0 | Azul |
4 (RX) | Digital-3 | Púrpura |
5 (TX) | Digital-2 | Gris |
6 (+5) | +5 Carril BB-PWR | rojo |
7 (TIERRA) | Riel GND BB-PWR | Negro |
Nota:
No permita que la cantidad de conexiones utilizadas en este Instructable le impida considerar el MaxSonar para su proyecto. Este Instructable utiliza todas las opciones de la interfaz MaxSonar para ilustrar cómo funcionan y compararlas entre sí y con el dispositivo HC-SR04. Para un uso dado (usando una de las opciones de interfaz), un proyecto generalmente usará uno o dos de los pines de interfaz (más energía y tierra).
Paso 4: Conecte el HC-SR04
El HC-SR04 normalmente viene con un cabezal de 90 ° ya conectado, por lo que es fácil conectarlo a la placa de pruebas. El cable plano de 2 pines luego conecta el HC-SR04 al Arduino como se ve en el diagrama. Además del cable plano, utilizo pedazos cortos de cable de conexión rojo y negro del riel de distribución de energía para proporcionar energía al dispositivo.
HC-SR04 | Arduino | Color |
---|---|---|
1 (VCC) | +5 Carril BB-PWR | rojo |
2 (DISPARO) | Digital-6 | Amarillo |
3 (ECO) | Digital-7 | naranja |
4 (TIERRA) | Riel GND BB-PWR | Negro |
Paso 5: Conecte el selector de opciones 'HC-SR04'
Cuando comencé este proyecto, mi intención era simplemente probar las diferentes opciones de interfaz del dispositivo MaxSonar. Después de ponerlo en funcionamiento, decidí que sería bueno compararlo con el omnipresente dispositivo HC-SR04 (bugeye). Sin embargo, quería poder ejecutar / probar sin incluirlo, así que agregué una opción / prueba en el código.
El código verifica un pin de entrada para ver si el dispositivo HC-SR04 debe incluirse en la lectura y salida de la medición.
En el diagrama, esto se muestra como un interruptor, pero en la placa de prueba simplemente uso un cable de puente (como se ve en las fotos). Si el cable está conectado a GND, el HC-SR04 se incluirá en las medidas. El código 'se levanta' (hace que la entrada sea alta / verdadera) en el Arduino, de modo que si no se baja (conectado a GND), el HC-SR04 no se medirá.
Aunque este Instructable se transformó en una comparación de los dos dispositivos, decidí dejar esto en su lugar para ilustrar cómo podría incluir / excluir diferentes dispositivos / opciones en su proyecto.
Tablero de circuitos | Arduino | Color |
---|---|---|
Riel GND BB-PWR | Digital-12 | blanco |
Paso 6: Hacer que todo funcione …
Ahora que todo está conectado, ¡es hora de hacer que las cosas funcionen!
Como se menciona en 'Supuestos', no voy a explicar cómo funciona el IDE de Arduino o cómo programar un Arduino (en detalle).
Las siguientes secciones desglosan el código Arduino que se incluye en este proyecto.
Descomprima el archivo completo en una ubicación que utilice para su desarrollo Arduino. ¡Cargue el código `MaxSonar-outputs.ino` en su IDE de Arduino y comencemos!
Paso 7: diseño del proyecto
El proyecto contiene información sobre el dispositivo LV-MaxSonar-EZ, el diagrama del circuito, un archivo README y el código Arduino. El diagrama del circuito está en formato Fritzing y también en una imagen PNG. El archivo README está en formato Markdown.
Paso 8: Introducción de código …
En este Instructable, no puedo revisar todos los aspectos del código. Cubro algunos de los detalles de alto nivel. Le animo a leer el comentario de nivel superior en el código y profundizar en los métodos.
Los comentarios aportan mucha información que no repetiré aquí.
Hay algunas cosas que quiero señalar en el código de "configuración" …
- La variable `_DEBUG_OUTPUT` y declaraciones #define
- Definiciones de los 'pines' de Arduino utilizados para la interfaz
- Definiciones de los factores de conversión utilizados en los cálculos.
La depuración se usa en todo el código y mostraré cómo se puede activar / desactivar dinámicamente.
Las 'definiciones' se utilizan para los pines y conversiones de Arduino para facilitar el uso de este código en otros proyectos.
Depurando…
La sección 'Depuración' define una variable y algunas macros que facilitan la inclusión de información de depuración en la salida en serie bajo demanda.
La variable booleana `_DEBUG_OUTPUT` se establece en falso en el código (podría establecerse en verdadero) y se usa como prueba en las macros` DB_PRINT … `. Se puede cambiar dinámicamente en el código (como se ve en el método `setDebugOutputMode`).
Globals …
Después de las definiciones, el código crea e inicializa algunas variables y objetos globales.
- SoftwareSerial (consulte la siguiente sección)
- _loopCount: se utiliza para generar un encabezado cada 'n' filas
- _inputBuffer: se utiliza para recopilar la entrada de serie / terminal para procesar las opciones (depuración activada / desactivada)
Paso 9: Arduino Software-Serial …
Una de las opciones de la interfaz MaxSonar es un flujo de datos en serie. Sin embargo, el Arduino UNO solo proporciona una única conexión de datos en serie, y se usa / comparte con el puerto USB para comunicarse con el Arduino IDE (computadora host).
Afortunadamente, hay un componente de biblioteca incluido con el IDE de Arduino que usa un par de pines de E / S digitales de Arduino para implementar una interfaz de E / S en serie. Dado que la interfaz en serie de MaxSonar utiliza 9600 BAUD, esta interfaz de "software" es perfectamente capaz de manejar la comunicación.
Para aquellos que usan un Arduino-Mega (u otro dispositivo que tiene múltiples puertos serie HW), no dude en ajustar el código para usar un puerto serie físico y eliminar la necesidad del SW-Serial.
El método `setup` inicializa la interfaz` SoftwareSerial` que se utilizará con el dispositivo MaxSonar. Solo se necesita la recepción (RX). La interfaz está 'invertida' para coincidir con la salida del MaxSonar.
Paso 10: Código - Configuración
Como se describió anteriormente, el método `setup` inicializa la interfaz` SoftwareSerial`, así como la interfaz serial física. Configura los pines de E / S de Arduino y envía un encabezado.
Paso 11: Código - Bucle
El código `loop` se ejecuta a través de lo siguiente:
- Generar un encabezado (utilizado para depurar y el trazador)
- Active el MaxSonar para realizar una medición
- Leer el valor de ancho de pulso de MaxSonar
- Leer el valor de datos en serie de MaxSonar
- Leer el valor analógico MaxSonar
-
Marque la opción 'HC-SR04' y, si está habilitada:
Activar y leer el dispositivo HC-SR04
- Genere los datos en un formato delimitado por tabuladores que puede utilizar el trazador en serie
- Espere hasta que haya transcurrido el tiempo suficiente para que se pueda tomar otra medición.
Paso 12: Código: active el MaxSonar. Leer valor de PW
El MaxSonar tiene dos modos: 'disparado' y 'continuo'
Este Instructable usa el modo 'disparado', pero muchos proyectos pueden beneficiarse del uso del modo 'continuo' (ver la hoja de datos).
Cuando se usa el modo 'disparado', la primera salida válida es la salida de ancho de pulso (PW). Después de eso, el resto de las salidas son válidas.
El `tiggerAndReadDistanceFromPulse` pulsa el pin de disparo en el dispositivo MaxSonar y lee el valor de distancia de ancho de pulso resultante
Tenga en cuenta que, a diferencia de muchos otros dispositivos de sonda, el MaxSonar maneja la conversión de ida y vuelta, por lo que la distancia leída es la distancia al objetivo.
Este método también demora lo suficiente para que las otras salidas del dispositivo sean válidas (serie, analógica).
Paso 13: Código - Leer valor de serie MaxSonar
Después de que se haya activado el MaxSonar (o cuando esté en modo 'continuo'), si la opción de salida en serie está habilitada (a través del control 'BW - Pin-1'), se envía un flujo de datos en serie en la forma "R nnn", seguido por un CARRIAGE-RETURN '\ r'. El 'nnn' es el valor de pulgadas para el objeto.
El método `readDistanceFromSerial` lee los datos en serie (desde el puerto serie del software) y convierte el valor 'nnn' en decimal. Incluye un tiempo de espera a prueba de fallas, en caso de que no se reciba un valor de serie.
Paso 14: Código - Leer valor analógico MaxSonar
El puerto analógico MaxSonar proporciona continuamente un voltaje de salida proporcional a la última distancia medida. Este valor se puede leer en cualquier momento después de inicializar el dispositivo. El valor se actualiza dentro de los 50 mS de la última lectura de distancia (modo activado o continuo).
El valor es (Vcc / 512) por pulgada. Entonces, con un Vcc del Arduino de 5 voltios, el valor será ~ 9.8mV / in. El método `readDistanceFromAnalog` lee el valor de la entrada analógica Arduino y lo convierte en un valor de 'pulgadas'.
Paso 15: Codifique: active y lea el HC-SR04
Aunque hay bibliotecas para leer el HC-SR04, he descubierto que algunas de ellas no son confiables con varios dispositivos con los que he probado. He encontrado que el código que he incluido en el método `sr04ReadDistance` es simple y más confiable (tanto como puede serlo el económico dispositivo HC-SR04).
Este método configura y luego activa el dispositivo HC-SR04 y luego espera para medir el ancho del pulso de retorno. La medición del ancho de pulso incluye un tiempo de espera para tratar el problema del HC-SR04 de una duración de pulso muy larga cuando no puede encontrar un objetivo. Se asume que un ancho de pulso mayor que una distancia objetivo de ~ 10 pies no es un objeto o un objeto que no puede ser reconocido. Si se alcanza el tiempo de espera, se devuelve un valor '0' como distancia. Esta 'distancia' (ancho de pulso) se puede ajustar usando los valores #define.
El ancho del pulso se convierte en una distancia de ida y vuelta antes de devolverse como la distancia al objeto.
Paso 16: Código: compatibilidad con el trazador en serie Arduino IDE
¡Ahora para la salida!
El método `loop` activa la recopilación de la medición de distancia de los dos dispositivos, pero ¿qué hacemos con él?
Bueno, por supuesto, lo enviaremos para que se pueda ver en la consola, ¡pero queremos más!
El IDE de Arduino también proporciona la interfaz Serial Plotter. Lo usaremos para proporcionar un gráfico en tiempo real de la distancia a nuestro objeto desde las salidas de nuestros dos dispositivos.
El trazador serial acepta un encabezado que contiene etiquetas de valor y luego varias filas de valores delimitados para ser trazados como un gráfico. Si los valores se emiten de forma regular (una vez cada "tantos segundos"), el gráfico proporciona una visualización de la distancia al objeto a lo largo del tiempo.
El método `loop` genera los tres valores del MaxSonar y el valor del HC-SR04 en un formato separado por tabuladores que se puede utilizar con el Plotter en serie. Una vez cada 20 filas, genera el encabezado (en caso de que el Plotter en serie esté habilitado a mitad de camino).
Esto le permite visualizar la distancia al obstáculo y también ver la diferencia en los valores devueltos por los dos dispositivos.
Paso 17: Código - Depurando…
La depuración es una necesidad. ¿Cómo se puede localizar un problema cuando algo no funciona como se esperaba?
Una primera línea de comprensión son a menudo algunos resultados de texto "simples" que pueden indicar lo que está sucediendo. Estos se pueden agregar al código cuando y donde sea necesario para rastrear un problema, y luego se eliminan una vez que se resuelve el problema. Sin embargo, agregar y eliminar el código requiere mucho tiempo y, en sí mismo, puede generar otros problemas. A veces es mejor poder habilitarlo y deshabilitarlo dinámicamente dejando solo el código fuente.
En este Instructable, he incluido un mecanismo para habilitar y deshabilitar las declaraciones de impresión de depuración (salida en serie) dinámicamente a partir de la lectura de entrada del Monitor en serie IDE de Arduino (en una próxima versión, se espera que el Plotter en serie también proporcione esta entrada).
El booleano `_DEBUG_OUTPUT` se usa en varios métodos de impresión #define que se pueden usar dentro del código. El valor de la variable _DEBUG_OUTPUT se usa para habilitar la impresión (enviar salida) o no. El valor se puede cambiar dinámicamente dentro del código, como lo hace el método `setDebugOutputMode`.
El método `setDebugOutputMode` se llama desde el` loop` basado en la entrada recibida de la entrada en serie. La entrada se analiza para ver si coincide con "debug on / off | true / false" para habilitar / deshabilitar el modo de depuración.
Paso 18: Conclusión
Espero que esta sencilla configuración de hardware y el código de ejemplo puedan ayudarlo a comprender las diferencias entre los dispositivos HC-SR04 y LV-MaxSonar-EZ. Ambos son muy fáciles de usar y creo que cada uno tiene sus beneficios. Saber cuándo usar uno en lugar de otro puede ser fundamental para un proyecto exitoso.
Por cierto, insinué una forma muy fácil de usar para medir con precisión la distancia a un objeto usando el LV-MaxSonar-EZ … Puede usar la salida analógica (un cable) y el modo de medición continua para leer la distancia cuando sea necesario usando el simple código en `readDistanceFromAnalog` directamente desde la entrada analógica Arduino. ¡Un cable y (condensado) una línea de código!
Paso 19: Conexión MaxSonar alternativa (usando un encabezado de 180 °)
Como mencioné, el MaxSonar no viene con un encabezado conectado. Por lo tanto, puede usar la conexión que sea más adecuada para su proyecto. En algunos casos, un cabezal de 180 ° (recto) puede ser más apropiado. Si ese es el caso, quería mostrar rápidamente cómo puede usar eso con este Instructable. Esta ilustración muestra un MaxSonar con un encabezado recto conectado a la placa de pruebas con un cable plano macho-hembra, y luego conectado al Arduino como se describe en el resto del artículo.
Paso 20: Código Arduino
El código de Arduino está en la carpeta 'MaxSonar-outputs' del proyecto en Sonar Range-Finder Comparison
Recomendado:
El juego de comparación de binarios a decimales: 10 pasos
El juego de emparejamiento de binario a decimal: este instructivo mostrará el proceso y los módulos necesarios para crear nuestro juego de emparejamiento de binario a decimal. En 60 segundos, los usuarios traducirán e ingresarán tantos números decimales generados aleatoriamente en la pantalla de siete segmentos en binario por alternancia
AWS e IBM: una comparación de servicios de IoT: 4 pasos
AWS e IBM: una comparación de servicios de IoT: hoy estamos comparando dos pilas que hacen posible desarrollar aplicaciones de IoT bajo el punto de vista de diferentes ofertas de servicios
LoRa RFM98 Tutorial Ra-02 Comparación del módulo HopeRF: 6 pasos
LoRa RFM98 Tutorial Ra-02 Comparación del módulo HopeRF: Hola, ¿qué pasa, chicos? Akarsh aquí de CETech. En este artículo de hoy vamos a conocer los módulos RFM LoRa hechos por HopeRF. Veremos cuáles son las características que el módulo RFM tiene para ofrecer, su pinout, comparación entre las diferentes
Termómetro de cocina con sonda de temperatura ESP32 NTP con corrección Steinhart-Hart y alarma de temperatura: 7 pasos (con imágenes)
Termómetro de cocción con sonda de temperatura ESP32 NTP con corrección Steinhart-Hart y alarma de temperatura: Aún en camino para completar un " proyecto próximo ", " Termómetro de cocina con sonda de temperatura ESP32 NTP con corrección Steinhart-Hart y alarma de temperatura " es un Instructable que muestra cómo agrego una sonda de temperatura NTP, piezo b
Comparación entre Micro: bit y Arduino: 6 pasos
Comparación entre Micro: bit y Arduino: ¿Cuál es la placa de desarrollo más popular entre los fabricantes recientemente? Por supuesto, debe ser una placa micro: bit. Bajo la cooperación de empresas gigantes técnicas como BBC, Microsoft, Samsung y NXP, micro: bit board está dotado de un halo de clase noble