Introducción

Los robots autónomos ya no están limitados a laboratorios de investigación o suelos industriales. Con microcontroladores y sensores asequibles, cualquiera puede construir un robot de fácil acceso en casa. Este proyecto te enseña los fundamentos de programación integrada C++, integración de sensores y control de motores. Al final, tendrás un robot con ruedas que navega por una habitación, se aleja de las paredes y elige una nueva dirección cuando se detecta un complejo de vacío

¿Por qué construir un robot de evitación obstáculo?

La evitación del obstáculo es una capacidad básica en robótica. Combina la detección del mundo real con la lógica de toma de decisiones, todo corriendo en un pequeño microcontrolador. Este proyecto te obliga a pensar en el tiempo, el ruido del sensor y los comandos de actuador confiables. También te da un resultado tangible: una máquina que reacciona a su entorno. Una vez que dominas el patrón básico – leer sensor, decidir, mover – puedes ampliarlo para seguir líneas, mapear una sala de luz.

Prerrequisitos y componentes obligatorios

Microcontrolador

El cerebro de tu robot puede ser un Arduino Uno, a Nano, o un NodeMCU. Las tablas Arduino están bien apoyadas, tienen amplios ejemplos comunitarios, y trabajan directamente con el IDE Arduino para la programación C++. Si eliges un ESP32 o STM32, puedes usar la misma lógica pero puede ser necesario adaptar la asignación de pins y la resolución PWM.

Sensor de distancia ultrasonidos

El HC‐SR04 es la opción más común. Mide distancia de 2 cm a 400 cm enviando un pulso de 40 kHz y sincronizando el eco. Sus cuatro pines (VCC, Trig, Echo, GND) se conectan fácilmente al microcontrolador. Para mayor precisión, puede utilizar un Sensor de distancia IR o a LiDAR, pero el sensor ultrasónico ofrece un buen equilibrio de coste y fiabilidad para uso interior.

Motor Driver

An L298N El controlador dual H‐bridge motor es ideal para dos motores DC. Puede controlar la dirección y la velocidad (a través de PWM) y maneja hasta 2 A por canal. Asegúrese de tener la potencia separada para los motores (un paquete de batería) y para la lógica (normalmente 5 V del Arduino). L293D controlador funciona para motores de baja potencia, pero el L298N es más robusto para un robot principiante.

Motores, Ruedas y Chasis

Dos motores DC con ruedas (por ejemplo, 4.5 V a 6 V) y un simple chasis acrílico o impreso en 3D forman la base. Una tercera rueda de ruedas o una rueda de bolas proporciona estabilidad. Asegúrese de que las ruedas tienen buen agarre – los neumáticos de goma son preferibles para alfombras y suelos lisos.

Fuente de alimentación

A Soporte de batería AA de 6 celdas (9 V total) o un paquete dedicado 7.4 V Li‐Po potencia los motores a través del conductor. El Arduino puede ser alimentado a través de USB o su propia batería (7–12 V). Conecte siempre los terrenos juntos para asegurar una referencia común.

Conexión del circuito

Conexiones de sensores ultrasónicos

Conecta el HC‐SR04 como sigue:

  • VCC a 5 V en el Arduino
  • Trig al pin digital 9 (o cualquier pin de salida-capable)
  • Echo al pin digital 10 (debe ser interrumpido o compatible con pulso)
  • GND a terreno común

Un resistor de 1 kΩ entre el pin Echo y el Arduino puede proteger el microcontrolador, ya que el sensor produce 5 V lógica incluso en tableros 3.3 V. Para una lógica Arduino Uno (5 V), este paso es opcional pero recomendado.

Conexiones motorizadas

El pin W tiene dos canales. Wire one motor to OUT1/OUT2 y el otro a OUT3/OUT4. Conecta los pines de entrada del controlador a los pines digitales Arduino (por ejemplo, IN1→pin 3, IN2→pin 4, IN3→pin 5, IN4→pin 6). Para el control de velocidad, conecta los pines ENA y ENB al PWM-capable Arduino

Cableado de alimentación:

  • Potencia motora (12 V de entrada en L298N) de paquete de batería
  • Potencia lógica (5 V) de la salida 5 V de Arduino (o de un regulador a bordo en el controlador – configuración de la cabina de control)
  • Terreno común entre batería, Arduino y conductor

Diagrama completo del circuito

Para la claridad, aquí hay una tabla de conexiones (Pinches Arduino Uno):

Doble-ver todas las conexiones antes de encender. Un conductor de motor mal guiado puede dañar el Arduino o drenar la batería rápidamente.

Programación del Robot con C++

Configuración del IDE Arduino

Descargar e instalar Arduino IDE (o utilizar el editor web). Seleccione su tablero y puerto del menú Herramientas. El código está escrito en C++ con funciones específicas de Arduino como y . Comprender estas funciones es clave para leer datos de sensores y controlar motores.

Core Logic: Sense‐Think‐Act

Cada robot de evitación de obstáculos sigue un simple bucle:

  1. Sentido: Provoca el sensor ultrasónico y mide el tiempo de eco. Convierte el tiempo a distancia (en cm).
  2. Piensen: Compare la distancia a un umbral (típicamente 20-30 cm). Si un obstáculo está más cerca que el umbral, decida una nueva dirección (izquierda o derecha). De lo contrario, continúe hacia adelante.
  3. Ley: Establezca los pines de dirección motor y los valores de PWM para ejecutar el movimiento elegido.

Este ciclo repite cada 100–200 ms. Un retraso más corto hace que el robot sea más sensible pero puede causar movimientos de jittery.

Código de muestra con explicación

Funciones clave y ajuste

La función utiliza para medir el ancho del pulso del eco. La fórmula convierte microsegundos a centímetros. Para pulgadas, multiplique ] por 0.0135. La variable establece la distancia mínima segura. Ajustarla basado en la velocidad de su robot y el tamaño de los obstáculos.

Las funciones de control motor utilizan una configuración sencilla de avance/reverso. y ] pueden mejorarse utilizando PWM para controlar la velocidad de giro – un giro más lento es a menudo más eficaz. Experimenta con diferentes valores de PWM (por ejemplo, 120 para adelante, 200 para el giro) para lograr movimiento suave.

Añadiendo una dirección de giro aleatoria

Para evitar quedar atrapado en un bucle (por ejemplo, girando siempre a la izquierda), utilice la función de Arduino . Después de detectar un obstáculo, generar un número aleatorio y elegir izquierda o derecha en consecuencia. Esta simple adición hace que el comportamiento del robot sea impredecible y más eficaz en los ángulos de despejado.

Pruebas y depuración

Usando el Monitor de serie

Abra el monitor de serie (Herramientas → Monitor de serie) fijado a 9600 baud. Verá las lecturas de distancia en tiempo real. Coloque un libro de 10 cm del sensor; la lectura debe estar cerca de 10 cm. Si la lectura es errática (por ejemplo, 0 cm o 500 cm), el cableado de verificación, especialmente el pin de Echo. Asegúrese de que el sensor no se enfrenta a una superficie de absorción de sonido (por ejemplo, cortinas).

Problemas y correcciones comunes

  • Robot no se mueve: Verifica la potencia y el suelo del motor. Comprueba que los saltadores ENA/ENB están instalados (o los pines PWM están listos).
  • Robot se mueve hacia atrás: Invierte la polaridad del motor en las conexiones del conductor o intercambia los pines de dirección en el código.
  • Sensor siempre lee 0: Asegurar la Trig se establece como OUTPUT y Echo como INPUT. La función espera el eco; un valor de tiempo (por defecto 1 segundo) se puede establecer como un segundo argumento.
  • Robot gira incontrolablemente: El sensor puede ser mal alineado o umbral demasiado bajo. Prueba con un retraso más largo después de girar.

Calibración

Medir la velocidad real del sonido en su entorno: varía con temperatura (331 m/s a 0°C, más 0.6 m/s por grado Celsius). Para la mayoría de las condiciones interiores, la constante 0.0343 es lo suficientemente precisa. Si necesita precisión, utilice un sensor de temperatura y calcule .

Seguir adelante: Características avanzadas

Una vez que su robot básico funciona de forma fiable, considere estas mejoras:

Pan‐and‐Tilt Sensor Mount

Montar el sensor ultrasónico en un motor servo que barre a la izquierda y a la derecha (0°–180°). Antes de moverse, el robot escanea el ambiente para encontrar el camino más claro. Esto reduce las colisiones con objetos laterales y hace que la navegación sea mucho más suave. El servo añade sólo unas pocas líneas de código y un pequeño cajón de potencia.

Control de velocidad proporcional

En lugar de un stop-turn-go binario, variar la velocidad basada en la distancia. Por ejemplo, si el obstáculo está a 30 cm de distancia, reducir la velocidad de avance; si es de 15 cm, empezar a girar mientras se mueve lentamente. Esto imita cómo se acercaría a una pared – ralentizarse antes de un giro agudo. Implementar esto mediante la asignación de la distancia a un valor PWM utilizando o una cadena simple si-else.

Múltiples sensores

Agregue dos o tres sensores ultrasónicos que cubren el frente, la izquierda y la derecha. Esto le da al robot un mejor “campo de vista” y le permite planificar un camino. También puede integrar un sensor de seguimiento de línea (por ejemplo, reflector IR) para cambiar entre el evitamiento de obstáculos y los modos de rastreo de línea.

Control PID para el movimiento recto

Incluso con motores idénticos, el robot tiende a deriva debido a las diferencias de fricción y tensión. Implementar un simple bucle proporcional-integral-derivativo (PID) que compara la velocidad deseada de cada rueda y ajusta los valores de PWM. El error puede derivarse de los datos de giroscopio (IMU) o de los encoders de rueda si los tiene.

Integración con ROS o protocolos personalizados

Para proyectos más grandes, puede sustituir la lógica simple con un nodo ROS (Robot Operating System) que se ejecuta en un Raspberry Pi que se comunica con el Arduino sobre serie. El Arduino maneja el control de motor de bajo nivel mientras que el Pi hace fusión de sensores y planificación de caminos. Esta separación hace que el sistema sea más modular y más fácil de de depurar.

Conclusión

Construir un robot de evitación de obstáculos con C++ es un paso gratificante en el mundo de los sistemas autónomos. Ha aprendido a conectar un sensor ultrasónico, impulsar motores DC y escribir lógica de toma de decisiones. El patrón básico que codifica – leer, decidir, actuar – es la base de cada vehículo autónomo, desde un vacío robot a un auto auto-conducir. Mantener iterating: añadir más sensores, mejorar el algoritmo, y probar en diferentes ambientes.

Para más lectura, consulte Referencia de idioma Arduino, el HC‐SR04 tutorial de SparkFun, y el L298N tutorial de controlador sobre Cómo Mechatronics¡Construyendo feliz!