How do I fix a newping error in Arduino IDE?

NewPing: Potencia tus Sensores Ultrasónicos

19/02/2025

Valoración: 4.5 (1379 votos)

En el fascinante mundo de la electrónica y la robótica, los sensores de distancia ultrasónicos como el popular HC-SR04 son herramientas indispensables. Permiten a nuestros proyectos "ver" su entorno, detectar obstáculos y medir distancias con notable precisión. Sin embargo, para aquellos que se inician o que buscan optimizar sus creaciones con Arduino, la gestión de estos sensores puede presentar desafíos, especialmente con ciertas unidades más económicas. Aquí es donde entra en juego la librería NewPing, una solución robusta y eficiente que simplifica drásticamente la programación y mejora el rendimiento de estos dispositivos.

¿Qué parámetros entrega el objeto newping?
Por último veremos la declaración de un objeto del tipo NewPing y que llamarenos sonar, al cual le entregaremos 3 parámetros, el pin del triger, el pin del echo y la distancia máxima. En la función setup: Como hemos visto anteriormente todo lo que está en el setup se ejecuta solo una vez al prender o reiniciar el Arduino.

Este artículo explorará en profundidad qué es NewPing, por qué se ha convertido en una herramienta indispensable para los entusiastas y profesionales, y cómo puede ayudarte a superar los obstáculos comunes, como el molesto problema de bloqueo en algunos sensores. Prepárate para transformar la forma en que interactúas con la detección de distancia en tus proyectos.

Índice de Contenido

El Problema del Bloqueo en Sensores HC-SR04 Económicos

Antes de sumergirnos en las bondades de NewPing, es crucial abordar un inconveniente común que muchos usuarios han experimentado con los sensores ultrasónicos HC-SR04, particularmente aquellos de bajo costo. Se ha documentado un problema de bloqueo peculiar: inicialmente, estos sensores detectan distancias cortas sin inconvenientes, pero si intentan medir una distancia mayor que exceda el tiempo de espera (timeout) de la señal de retorno, el sensor deja de funcionar correctamente para mediciones cortas posteriores. La única forma de restablecer su funcionamiento es produciendo un sonido fuerte cerca del sensor, como un chasquido de dedos o una palmada.

Este comportamiento errático puede ser frustrante y comprometer la fiabilidad de cualquier proyecto que dependa de una medición constante y precisa. Si tu sensor muestra este patrón (deja de detectar distancias cortas después de una "Distancia desconocida"), es muy probable que posea esta falla.

La Solución al Bloqueo: Una Corrección de Hardware

Afortunadamente, para el problema de bloqueo de hardware en los HC-SR04, existe una solución sencilla y efectiva que ha sido validada por la comunidad. La corrección consiste en soldar una resistencia de 10K ohmios entre el pin TRIG del sensor y una de las conexiones de uno de los transductores (el "ojo" del sensor). Esta pequeña adición de hardware ayuda a estabilizar la señal y evita que el sensor entre en ese estado de bloqueo. Esta modificación no solo es fácil de implementar, sino que también es una medida preventiva fundamental si estás trabajando con sensores económicos y quieres asegurar su fiabilidad a largo plazo.

Una vez aplicada esta modificación, el sensor debería comportarse de manera mucho más estable y fiable, permitiéndote aprovechar al máximo su potencial sin interrupciones inesperadas.

¿Qué es la Librería NewPing y Por Qué es Esencial?

NewPing es una librería externa para el IDE de Arduino, lo que significa que no viene preinstalada, pero es increíblemente fácil de añadir. Fue desarrollada por Tim Eckel con un objetivo claro: mejorar el rendimiento y simplificar la interacción con una variedad de sensores ultrasónicos. Su principal ventaja es que encapsula toda la lógica compleja y los cálculos necesarios para obtener mediciones de distancia precisas, liberando al programador de la necesidad de escribir y depurar algoritmos matemáticos complejos.

Esta librería es compatible con una amplia gama de sensores ultrasónicos, incluyendo el popular HC-SR04, así como otros modelos como SRF05, SRF06, DYP-ME007 y Parallax PING. Esta versatilidad la convierte en una opción robusta para casi cualquier proyecto que requiera detección de distancia.

How do I fix a newping error in Arduino IDE?
#include compilation terminated. Error compiling for board Arduino/Genuino Uno. Go to the Arduino IDE, in the top go to Sketch -> Include Library -> Manage Libraries... Then search for NewPing, and install the only one that shows. After that you're done you can use the header like so: Hope it helps.

Ventajas Clave de NewPing

  • Código Simplificado: Reduce drásticamente la cantidad de código necesario para obtener lecturas de distancia, haciendo tus programas más legibles y fáciles de mantener.
  • Mayor Precisión: Incorpora algoritmos optimizados para el cálculo de distancia, lo que puede resultar en mediciones más consistentes.
  • Manejo de Problemas: Mejora el rendimiento general del sensor y, en algunos casos, puede mitigar problemas de estabilidad incluso sin la modificación de hardware antes mencionada (aunque esta es altamente recomendable para los sensores con el problema de bloqueo).
  • Funcionalidades Avanzadas: Ofrece funciones para obtener mediciones en diferentes unidades (cm, pulgadas), realizar pings medianos para mayor fiabilidad, y operar de forma no bloqueante utilizando temporizadores.
  • Soporte Multi-Sensor: Facilita la gestión de múltiples sensores ultrasónicos en un solo proyecto, simplificando la lógica de control.

Funciones Principales de NewPing

NewPing proporciona una serie de funciones intuitivas que simplifican la lectura de distancia. Aquí te presentamos las más utilizadas:

FunciónDescripciónRetorno
sonar.ping([max_cm_distance])Envía un pulso ultrasónico y mide el tiempo de eco. Opcionalmente, puedes establecer una nueva distancia máxima.Tiempo de eco en microsegundos (long)
sonar.ping_in([max_cm_distance])Envía un pulso y devuelve la distancia en pulgadas enteras. Opcionalmente, puedes establecer una nueva distancia máxima.Distancia en pulgadas (int)
sonar.ping_cm([max_cm_distance])Envía un pulso y devuelve la distancia en centímetros enteros. Opcionalmente, puedes establecer una nueva distancia máxima.Distancia en centímetros (int)
sonar.ping_median(iteraciones [, max_cm_distance])Realiza múltiples pings (por defecto 5), descarta los valores fuera de rango y devuelve la mediana del tiempo de eco. Útil para obtener lecturas más estables.Mediana del tiempo de eco en microsegundos (long)
sonar.convert_in(echoTime)Convierte un tiempo de eco (en microsegundos) a pulgadas.Distancia en pulgadas (float)
sonar.convert_cm(echoTime)Convierte un tiempo de eco (en microsegundos) a centímetros.Distancia en centímetros (float)
sonar.ping_timer(funcion [, max_cm_distance])Envía un pulso y llama a una función específica cuando el ping ha regresado o ha excedido el tiempo de espera. Permite operaciones no bloqueantes.Ninguno
sonar.check_timer()Verifica si el ping iniciado por ping_timer ha regresado dentro del límite de distancia.true si el ping ha terminado, false en caso contrario
NewPing::timer_us(frecuencia, funcion)Llama a una función de forma periódica cada 'frecuencia' microsegundos.Ninguno
NewPing::timer_ms(frecuencia, funcion)Llama a una función de forma periódica cada 'frecuencia' milisegundos.Ninguno
NewPing::timer_stop()Detiene el temporizador iniciado por timer_us o timer_ms.Ninguno

Cómo Instalar la Librería NewPing en Arduino IDE

Instalar NewPing es un proceso directo, similar a la instalación de cualquier otra librería externa en el entorno de desarrollo de Arduino. Sigue estos sencillos pasos:

  1. Abre tu Arduino IDE.
  2. Ve al menú superior y selecciona Programa > Incluir Librería > Gestionar Librerías...
  3. Se abrirá el "Gestor de Librerías". Es posible que tarde unos segundos en actualizar el índice de librerías disponibles.
  4. En el campo de búsqueda, escribe "NewPing".
  5. Busca el resultado que dice "NewPing by Tim Eckel".
  6. Haz clic en el botón "Instalar" junto al nombre de la librería.
  7. Una vez que la instalación haya finalizado, puedes cerrar el "Gestor de Librerías".

¡Listo! Ahora tienes la librería NewPing instalada y lista para ser utilizada en tus proyectos.

Ejemplos Prácticos de Programación con NewPing

Una de las mayores ventajas de NewPing es cómo simplifica el código. A continuación, veremos algunos ejemplos que demuestran su facilidad de uso.

Ejemplo 1: Medición de Distancia Básica (HC-SR04)

Este es el ejemplo más fundamental, mostrando cómo obtener una lectura de distancia en centímetros con un sensor HC-SR04.

#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200 // Máxima distancia en cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE); // Configuración de los pines y distancia máxima

void setup() {
Serial.begin(115200);
}

void loop() {
delay(50); // Esperar 50 ms para la próxima lectura
Serial.print("Distancia: ");
Serial.print(sonar.ping_cm()); // Obtiene la distancia en cm (0 es fuera de rango)
Serial.println("cm");
}

Explicación:

  • #include <NewPing.h>: Incluye la librería NewPing.
  • #define TRIGGER_PIN 12 y #define ECHO_PIN 11: Definen los pines de Arduino a los que están conectados los pines Trigger y Echo del sensor.
  • #define MAX_DISTANCE 200: Establece la distancia máxima a la que el sensor intentará medir (en este caso, 200 cm). El sensor HC-SR04 puede medir hasta 400 cm, pero limitarlo puede ser útil para ciertos escenarios.
  • NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);: Crea un objeto NewPing llamado sonar, pasando los pines Trigger, Echo y la distancia máxima como parámetros.
  • En setup(): Se inicializa la comunicación serial a una velocidad de 115200 baudios para ver los resultados en el Monitor Serie.
  • En loop(): Un delay(50) espera 50 milisegundos entre lecturas para evitar mediciones erráticas y dar tiempo al sensor. Luego, sonar.ping_cm() realiza la medición y la devuelve en centímetros, que se imprime en el Monitor Serie. Si el resultado es 0, significa que el objeto está fuera del rango máximo o no se detectó.

Ejemplo 2: Usando un Solo Pin (Para Sensores Compatibles)

Algunos sensores, o configuraciones específicas, permiten usar un solo pin para Trig y Echo. NewPing lo soporta fácilmente.

#include <NewPing.h>
#define PING_PIN 12
#define MAX_DISTANCE 200 // Máxima distancia en cm.

NewPing sonar(PING_PIN, PING_PIN, MAX_DISTANCE); // Configuración de los pines y distancia máxima

void setup() {
Serial.begin(115200);
}

void loop() {
delay(50); // Esperar 50 ms para la próxima lectura
Serial.print("Ping: ");
Serial.print(sonar.ping_cm()); // Obtiene la distancia en cm (0 es fuera de rango)
Serial.println("cm");
}

Explicación: En este ejemplo, tanto el pin Trigger como el Echo están conectados al mismo pin de Arduino (PING_PIN). Esto es posible con ciertos sensores o para simplificar el cableado si el sensor lo permite. El resto del código funciona de manera idéntica al ejemplo anterior.

Ejemplo 3: Múltiples Sensores

NewPing facilita la gestión de varios sensores ultrasónicos simultáneamente.

#include <NewPing.h>
#define SONAR_NUM 3 // Número de sensores
#define MAX_DISTANCE 200 // Distancia máxima en cm

NewPing sonar[SONAR_NUM] = {
NewPing(4, 5, MAX_DISTANCE), // Sensor 1: Trigger pin 4, Echo pin 5
NewPing(6, 7, MAX_DISTANCE), // Sensor 2: Trigger pin 6, Echo pin 7
NewPing(8, 9, MAX_DISTANCE) // Sensor 3: Trigger pin 8, Echo pin 9
};

void setup() {
Serial.begin(115200);
}

void loop() {
for (uint8_t i = 0; i < SONAR_NUM; i++) {
delay(50); // Esperar 50 ms entre lecturas de cada sensor
Serial.print("Sensor ");
Serial.print(i);
Serial.print(": ");
Serial.print(sonar[i].ping_cm());
Serial.print("cm ");
}
Serial.println(); // Nueva línea para la siguiente ronda de lecturas
}

Explicación: Aquí, se define un array de objetos NewPing, permitiendo inicializar y manejar múltiples sensores de forma ordenada. Un bucle for itera a través de cada sensor, obteniendo y mostrando su lectura de distancia. Esto es ideal para robots que necesitan mapear su entorno o sistemas de seguridad.

What Arduino libraries are available?

Ejemplo 4: Medición No Bloqueante con Temporizador

Para aplicaciones más avanzadas donde el Arduino necesita realizar otras tareas mientras espera una lectura del sensor, NewPing ofrece funciones no bloqueantes.

#include <NewPing.h>
#define TRIGGER_PIN 12
#define ECHO_PIN 11
#define MAX_DISTANCE 200 // Máxima distancia en cm.

NewPing sonar(TRIGGER_PIN, ECHO_PIN, MAX_DISTANCE);

unsigned int pingSpeed = 50; // Frecuencia con la que se enviará un ping (en milisegundos)
unsigned long pingTimer; // Variable para el tiempo transcurrido

void setup() {
Serial.begin(115200);
pingTimer = millis(); // Iniciar a contar el tiempo
}

void loop() {
// No hay delays en este sketch, permitiendo otras operaciones mientras se hacen los pings.
if (millis() >= pingTimer) { // Si ha pasado el tiempo para el próximo ping
pingTimer += pingSpeed; // Establecer cuándo será el próximo ping.
sonar.ping_timer(echoCheck); // Llamada a la función "echoCheck" cuando el ping termine
}
// ¡Aquí puedes realizar otras tareas mientras el sensor está midiendo!
}

void echoCheck() {
// Verificar el estado del ping.
if (sonar.check_timer()) { // Si se recibe la señal
Serial.print("Ping: ");
// ping_result contiene el tiempo en microsegundos, US_ROUNDTRIP_CM es una constante para convertir a cm.
Serial.print(sonar.ping_result / US_ROUNDTRIP_CM);
Serial.println("cm");
}
}

Explicación: Este ejemplo utiliza la función ping_timer() para iniciar una medición y luego llama a la función echoCheck() una vez que el ping ha regresado o ha excedido el tiempo de espera. Esto permite que el microcontrolador realice otras operaciones en el loop() principal mientras el sensor está "pensando", evitando los bloqueos causados por los delay(). Es fundamental para proyectos más complejos donde el tiempo de respuesta es crítico.

El Sensor Ultrasónico HC-SR04: Un Compañero Ideal

Aunque NewPing es compatible con varios sensores, el HC-SR04 es, sin duda, el más común y accesible. Este módulo permite medir distancias sin contacto físico, con una precisión de aproximadamente 3 mm, lo que lo hace muy útil para la detección de obstáculos en robótica y otras aplicaciones donde la distancia es un factor clave.

El HC-SR04 opera emitiendo una señal de ultrasonido de 40KHz desde su transductor de transmisión (el "altavoz"). Esta señal viaja, rebota en un objeto y regresa al transductor de recepción (el "micrófono"). El sensor calcula la distancia midiendo el tiempo que tarda la señal en ir y volver, basándose en la velocidad del sonido.

Especificaciones Técnicas del HC-SR04

  • Voltaje de Operación: 5V DC
  • Corriente de Trabajo: 15mA
  • Frecuencia de Trabajo: 40KHz
  • Ángulo de Detección: 15°
  • Rango de Detección: 2 cm a 400 cm (4 metros)
  • Duración Mínima Pulso de Disparo (TRIG): 10 μS
  • Duración Pulso de Eco de Salida (ECHO): 100-25000 μS
  • Tiempo Mínimo de Espera entre Mediciones: 20 mS

Conexión del HC-SR04 a Arduino

Las conexiones del HC-SR04 con tu placa Arduino son bastante sencillas:

  • VCC: Conecta este pin a la salida de 5V de tu Arduino.
  • GND: Conecta este pin a cualquiera de los pines GND (tierra) de tu Arduino.
  • Trig: Conecta este pin a un pin digital de Arduino configurado como salida (por ejemplo, pin 12 como en los ejemplos).
  • Echo: Conecta este pin a un pin digital de Arduino configurado como entrada (por ejemplo, pin 11 como en los ejemplos).

Es importante recordar la modificación de la resistencia de 10K entre TRIG y el transductor para los sensores HC-SR04 más económicos si presentas el problema de bloqueo.

Preguntas Frecuentes sobre NewPing y Sensores Ultrasónicos

¿Qué sensores son compatibles con NewPing?
NewPing es compatible con una variedad de sensores ultrasónicos populares, incluyendo el HC-SR04, SRF05, SRF06, DYP-ME007 y Parallax PING.
¿Por qué debería usar NewPing en lugar del código básico de Arduino para medir distancia?
NewPing simplifica enormemente el código, reduce la complejidad matemática, mejora la precisión y ofrece funcionalidades avanzadas como mediciones no bloqueantes, gestión de múltiples sensores y soluciones para problemas comunes como el bloqueo de algunos HC-SR04.
¿Cómo se instala la librería NewPing en el Arduino IDE?
Puedes instalarla fácilmente a través del "Gestor de Librerías" en el Arduino IDE. Simplemente ve a Programa > Incluir Librería > Gestionar Librerías, busca "NewPing by Tim Eckel" y haz clic en instalar.
¿NewPing resuelve el problema de bloqueo de algunos sensores HC-SR04 por sí solo?
NewPing mejora el rendimiento y la estabilidad general, pero para los sensores HC-SR04 que presentan el problema de bloqueo de hardware, la solución más efectiva es la modificación física (soldar una resistencia de 10K entre el pin TRIG y un transductor).
¿Cuál es la distancia mínima y máxima que puede medir el HC-SR04 con NewPing?
El sensor HC-SR04 tiene un rango de detección de 2 cm a 400 cm. NewPing te permite definir una distancia máxima para tus pings, lo que puede ser útil para optimizar el tiempo de respuesta si solo te interesan distancias más cortas.

En resumen, la librería NewPing es una herramienta poderosa y casi indispensable para cualquiera que trabaje con sensores ultrasónicos en Arduino. No solo simplifica el proceso de programación y reduce la cantidad de código, sino que también ofrece funcionalidades avanzadas y soluciones a problemas comunes, haciendo que tus proyectos sean más robustos y eficientes. Al combinar NewPing con una buena comprensión de tu sensor HC-SR04 y, si es necesario, una pequeña modificación de hardware, estarás bien equipado para crear sistemas de detección de distancia fiables y de alto rendimiento.

Si quieres conocer otros artículos parecidos a NewPing: Potencia tus Sensores Ultrasónicos puedes visitar la categoría Librerías.

Subir