03/06/2021
La robótica y la automatización son campos fascinantes que nos permiten crear máquinas capaces de interactuar con su entorno. Un proyecto clásico y muy educativo es la construcción de un vehículo autónomo, capaz de navegar y evitar obstáculos sin intervención humana. En este artículo, exploraremos cómo construir un coche autodirigido utilizando la popular placa Arduino y sensores ultrasónicos.

Este proyecto específico se centra en un coche basado en Arduino que utiliza sensores ultrasónicos para detectar obstáculos y tomar decisiones de movimiento. El vehículo se inicia mediante un botón y está equipado con cuatro motores para controlar el desplazamiento, además de un servomotor para la dirección de las ruedas delanteras. La lógica de programación le permite responder a las lecturas de los sensores y realizar acciones como girar a la izquierda o derecha, avanzar o detenerse. En situaciones donde detecta obstáculos en múltiples direcciones simultáneamente, el coche emitirá un pitido continuo.

- Mecanismo de Funcionamiento Detallado
- Componentes Necesarios
- Proceso de Instalación y Montaje
- Diagrama de Circuito (Conexiones)
- Principios Científicos del Sensor Ultrasónico
- Preguntas Frecuentes
- ¿Qué tipo de motores se usan y cómo se controlan?
- ¿Cómo funciona el control de dirección con un servomotor?
- ¿Por qué el coche emite un pitido continuo en ciertas situaciones?
- ¿Puedo usar otros tipos de sensores?
- ¿Es posible controlar la velocidad de los motores?
- ¿Qué debo hacer si el coche no se mueve o no reacciona correctamente?
- Consideraciones Finales
Mecanismo de Funcionamiento Detallado
El corazón de la operación de este coche autónomo reside en su mecanismo de detección y toma de decisiones. El proceso se inicia al presionar un botón, lo cual activa una bandera interna (que podríamos llamar "isStarted" o "iniciar") en el código de Arduino. Una vez activo, el Arduino comienza un ciclo continuo de lectura de los datos provenientes de tres sensores ultrasónicos: uno frontal, uno izquierdo y uno derecho.
Los sensores ultrasónicos, como el conocido modelo HC-SR04, funcionan emitiendo ondas de sonido de alta frecuencia (ultrasonido) y midiendo el tiempo que tardan en rebotar en un objeto y regresar. Basándose en la velocidad conocida del sonido, el sensor calcula la distancia al obstáculo. Esta distancia es la información crucial que el coche utiliza para "ver" su entorno.
La lógica de decisión del coche se basa en una serie de sentencias condicionales (instrucciones "if-else" en la programación). El programa compara las distancias medidas por cada sensor con un umbral predefinido. Si la distancia medida es menor que este umbral, se considera que hay un obstáculo cercano en esa dirección.
El comportamiento del coche se define de la siguiente manera:
- Si todos los sensores (frontal, izquierdo y derecho) detectan una distancia por debajo del umbral simultáneamente, el coche se detiene por completo y emite un pitido continuo a través del zumbador. Esta es una situación de "callejón sin salida" o encierro.
- Si el sensor frontal detecta un obstáculo (distancia por debajo del umbral), la respuesta del coche dependerá de las lecturas de los sensores laterales:
- Si el sensor izquierdo detecta un obstáculo, pero el sensor derecho no, el coche girará hacia la derecha para intentar evitar el obstáculo frontal.
- Si el sensor derecho detecta un obstáculo, pero el sensor izquierdo no, el coche girará hacia la izquierda para intentar evitar el obstáculo frontal.
- Si ambos sensores, el izquierdo y el derecho, detectan obstáculos (además del frontal), el coche se detiene y emite un pitido continuo. De nuevo, esto indica que no hay una dirección clara para avanzar o girar sin chocar.
- Si el sensor frontal detecta un obstáculo, pero ni el sensor izquierdo ni el derecho detectan obstáculos, el coche avanzará. Nota: Esta última condición en la descripción original parece contraintuitiva si el frontal detecta un obstáculo. Una interpretación más probable, o un ajuste necesario en la lógica, sería que si el frontal detecta un obstáculo, el coche *no* avanza, sino que busca una salida lateral. Sin embargo, basándonos estrictamente en la información proporcionada, la lógica descrita es: si frontal detecta Y laterales NO detectan, entonces avanza. Esto podría implicar que el umbral frontal es ligeramente diferente o que la lógica busca un espacio libre *más allá* del obstáculo frontal a través de los laterales, lo cual no se especifica. Mantendremos la descripción tal cual se proporcionó: si frontal detecta y laterales no, avanza.
- Si el sensor frontal no detecta un obstáculo, el coche continuará avanzando normalmente.
El movimiento del coche se controla activando o desactivando los pines digitales correspondientes conectados a los motores. Generalmente, esto se realiza a través de un controlador de motor (como un L298N) que permite controlar la dirección y, a veces, la velocidad de los motores de corriente continua. El servomotor, conectado a un pin PWM (Pulse Width Modulation) de Arduino, se encarga de ajustar el ángulo de las ruedas delanteras para realizar los giros.
La combinación de la lectura constante de los sensores, la evaluación de las condiciones mediante sentencias lógicas y la activación de los actuadores (motores y servo) permite que el coche navegue de forma autónoma, reaccionando a los obstáculos en su camino.
Componentes Necesarios
Para replicar este proyecto de coche autónomo, necesitarás reunir los siguientes componentes esenciales:
- Placa Arduino (por ejemplo, un Arduino Uno)
- Sensores Ultrasónicos (3 unidades, como el HC-SR04)
- Servomotor (para la dirección)
- Botón Pulsador (para iniciar el coche)
- Cuatro Motores de corriente continua (para el movimiento de las ruedas)
- Zumbador o Buzzer (para las alertas sonoras)
- Cables Jumper (para realizar las conexiones)
- Protoboard o Placa PCB (para montar los componentes y conexiones)
- Fuente de Alimentación (como un paquete de baterías adecuado para alimentar Arduino y los motores)
- Chasis o estructura para el coche, ruedas y soportes para los motores y sensores.
Asegúrate de que la fuente de alimentación sea capaz de proporcionar la corriente necesaria tanto para el Arduino como para los motores, ya que los motores suelen consumir bastante energía, especialmente bajo carga.
Proceso de Instalación y Montaje
Recrear este proyecto implica seguir una serie de pasos que combinan el montaje físico de los componentes y la carga del programa en el Arduino.
- Reunir los Componentes: Asegúrate de tener todos los elementos listados en la sección anterior. Verifica que los motores sean adecuados para el chasis y que el servomotor tenga la fuerza suficiente para mover la dirección.
- Configurar el Hardware: Este es el paso más crítico del montaje físico. Debes conectar cada componente a los pines correctos de la placa Arduino.
- Conecta los sensores ultrasónicos. Cada sensor HC-SR04 tiene pines VCC, GND, Trigger (Envío) y Echo (Recepción). VCC y GND van a la alimentación, mientras que Trigger y Echo se conectan a pines digitales específicos del Arduino. Necesitarás asignar dos pines digitales por cada uno de los tres sensores.
- Conecta el servomotor. Los servomotores tienen tres cables: alimentación (generalmente rojo), tierra (generalmente marrón o negro) y señal (generalmente naranja o amarillo). La alimentación y tierra van a una fuente de energía adecuada, y el cable de señal se conecta a un pin PWM del Arduino (marcado con ~).
- Conecta los cuatro motores de movimiento. Los motores de corriente continua se controlan típicamente usando un controlador de motor intermedio (como un puente H, por ejemplo, L298N o módulos más pequeños como el L293D). Este controlador se conecta a pines digitales del Arduino para recibir las señales de dirección y velocidad, y a una fuente de alimentación externa para los motores. Los motores se conectan a las salidas del controlador. Debes asignar pines digitales para controlar cada motor o par de motores.
- Conecta el botón pulsador. Un lado del botón se conecta a un pin digital del Arduino y el otro lado a tierra (GND). Se suele usar una resistencia pull-up (interna o externa) en el pin digital para asegurar una lectura estable.
- Conecta el zumbador. Un zumbador pasivo se conecta a un pin digital (que puede ser PWM para variar el tono) y a tierra. Un zumbador activo simplemente requiere alimentación y tierra para sonar.
- Instalar las Librerías Necesarias: El código de Arduino a menudo requiere librerías adicionales para interactuar fácilmente con ciertos componentes.
- Instala la librería "Servo" para controlar el servomotor. Esta es una librería estándar que suele venir incluida con el IDE de Arduino, pero puede necesitar ser habilitada o actualizada.
- Instala la librería "NewPing" para facilitar las mediciones con los sensores ultrasónicos. Esta librería simplifica la lectura de múltiples sensores y maneja los tiempos de espera necesarios. Se instala a través del Gestor de Librerías en el IDE de Arduino.
- Preparar el Código: Abre el IDE de Arduino y crea un nuevo sketch (archivo de código). Copia y pega el código proporcionado (proveniente de un archivo como "maincode.ino") en el editor.
- Verificar y Cargar el Código: Compila el código en el IDE para verificar que no haya errores de sintaxis. Luego, conecta la placa Arduino a tu ordenador mediante USB y carga el código.
- Conectar la Fuente de Alimentación: Una vez que el código está cargado y el USB desconectado (o si la fuente de alimentación externa es necesaria para los motores), conecta la fuente de alimentación adecuada tanto al Arduino (si es por el conector de alimentación) como al controlador de motores (si se usa uno externo).
- Probar el Coche: Coloca el coche en una superficie plana y despejada. Presiona el botón pulsador para iniciarlo. Observa su comportamiento. Debería empezar a moverse y reaccionar al acercar la mano u otros objetos a los sensores.
Es crucial ajustar los umbrales de distancia de los sensores, las asignaciones de pines y posiblemente los tiempos de giro en el código según la configuración específica de tu hardware y el tamaño de tu coche. La fase de prueba y ajuste es fundamental para que el coche funcione correctamente.

Diagrama de Circuito (Conexiones)
Aunque no se proporciona un diagrama visual, la lista de conexiones entre los pines del Arduino y los componentes electrónicos es una parte fundamental para el montaje. Aquí se presenta la tabla de conexiones descrita:
| Pin de Arduino | Componente Electrónico |
|---|---|
| D2 | Botón Pulsador |
| D4 | Sensor Ultrasónico (Trigger Frontal) |
| D5 | Sensor Ultrasónico (Trigger Izquierdo) |
| D6 | Sensor Ultrasónico (Echo Izquierdo) |
| D7 | Sensor Ultrasónico (Trigger Derecho) |
| D8 | Sensor Ultrasónico (Echo Derecho) |
| D9 | Motor 1 |
| D10 | Motor 2 |
| D11 | Motor 3 |
| D12 | Motor 4 |
| D13 | Servomotor |
| A0 | Zumbador |
Esta tabla indica a qué pin digital (D) o analógico (A) del Arduino se debe conectar el pin de señal (o control) de cada componente. Las conexiones de alimentación (VCC) y tierra (GND) para cada componente deben realizarse a los pines correspondientes en el Arduino o a la fuente de alimentación externa, según el componente y el diseño del circuito (especialmente importante para motores y servomotores que requieren más corriente de la que Arduino puede suministrar directamente por sus pines). Los pines D9 a D12, si se conectan directamente a motores de CC, probablemente requieran un controlador de motor intermedio conectado a estos pines del Arduino para proporcionar la potencia necesaria a los motores.
Principios Científicos del Sensor Ultrasónico
Para entender mejor cómo el coche "ve", es útil conocer el principio detrás del sensor ultrasónico HC-SR04. Como se mencionó brevemente, su funcionamiento se basa en el principio del sonar. El sensor tiene dos transductores principales: uno que actúa como emisor y otro como receptor.
Cuando el pin Trigger del sensor recibe un pulso corto (típicamente de 10 microsegundos), el transductor emisor envía una ráfaga de 8 pulsos de ultrasonido a una frecuencia de 40 kHz. Estas ondas viajan por el aire.
Si encuentran un objeto en su camino, rebotan y regresan. El transductor receptor "escucha" activamente estas ondas de retorno (el eco).
El pin Echo del sensor HC-SR04 se pone en estado HIGH (alto) tan pronto como se envía la ráfaga ultrasónica y vuelve a LOW (bajo) cuando detecta el eco. La duración de este pulso HIGH en el pin Echo es directamente proporcional al tiempo que tardaron las ondas en viajar de ida y vuelta hasta el objeto.
El Arduino mide la duración de este pulso HIGH utilizando funciones como `pulseIn()`. Una vez que se tiene el tiempo de viaje (tiempo_ida_vuelta), se puede calcular la distancia utilizando la fórmula básica:
Distancia = Velocidad * Tiempo
La velocidad del sonido en el aire es aproximadamente 343 metros por segundo a 20°C. Sin embargo, para el cálculo de distancia con el sensor, se utiliza el tiempo de ida y vuelta, por lo que la fórmula se ajusta a:
Distancia = (Velocidad del Sonido * Tiempo de Ida y Vuelta) / 2
La librería NewPing simplifica este cálculo, proporcionando directamente la distancia en centímetros o pulgadas. La precisión puede verse afectada por la temperatura, la humedad y la forma o el material del objeto a detectar, pero para la detección básica de obstáculos en un coche pequeño, es más que suficiente.
Preguntas Frecuentes
Aquí respondemos algunas preguntas comunes que pueden surgir al construir este proyecto:
¿Qué tipo de motores se usan y cómo se controlan?
Se utilizan cuatro motores de corriente continua (DC motors). Estos motores generalmente se controlan en pares (los dos izquierdos y los dos derechos) para permitir el movimiento hacia adelante, hacia atrás y los giros. El control de la dirección del giro y la activación de los motores se realiza a través de pines digitales del Arduino, pero la potencia real para los motores proviene de una fuente de alimentación externa y pasa por un controlador de motor (como un puente H L298N o similar). El Arduino envía señales de control al puente H, y este último suministra la potencia adecuada a los motores.
¿Cómo funciona el control de dirección con un servomotor?
El servomotor se conecta a las ruedas delanteras (o a un mecanismo de dirección similar). Los servomotores son útiles porque permiten establecer un ángulo específico (por ejemplo, 0 grados para recto, +30 grados para girar a la derecha, -30 grados para girar a la izquierda). La librería Servo de Arduino facilita el envío de comandos al servomotor para que se mueva a un ángulo deseado. El código del coche, basándose en las lecturas de los sensores, calcula el ángulo de giro necesario y le indica al servomotor que se posicione en ese ángulo.

¿Por qué el coche emite un pitido continuo en ciertas situaciones?
Según la descripción, el pitido continuo se activa cuando el coche detecta obstáculos simultáneamente en múltiples direcciones (por ejemplo, frontal, izquierdo y derecho a la vez). Esto indica que el coche está en una situación donde no puede encontrar una ruta clara para avanzar o girar sin chocar. El pitido sirve como una señal de alerta, indicando que el coche está "atascado" o rodeado de obstáculos.
¿Puedo usar otros tipos de sensores?
Sí, aunque este proyecto específico se basa en sensores ultrasónicos por su simplicidad y efectividad para detectar distancias. Otros tipos de sensores que se podrían usar en proyectos de evitación de obstáculos incluyen sensores de infrarrojos (IR), sensores de distancia láser o incluso cámaras con procesamiento de imagen (aunque esto último requeriría una placa más potente que un Arduino Uno básico).
¿Es posible controlar la velocidad de los motores?
El texto proporcionado no especifica el control de velocidad, solo el control de movimiento (adelante, atrás, girar, parar). Si se utiliza un controlador de motor que soporte PWM (Modulación por Ancho de Pulso), sería posible controlar la velocidad de los motores conectando los pines de control de velocidad del controlador a pines PWM del Arduino y modificando el ciclo de trabajo del pulso.
¿Qué debo hacer si el coche no se mueve o no reacciona correctamente?
La solución de problemas es una parte clave de cualquier proyecto de electrónica y robótica. Verifica las conexiones de hardware cuidadosamente, asegurándote de que los cables estén en los pines correctos y bien insertados. Comprueba que la fuente de alimentación esté conectada y suministrando suficiente energía. Asegúrate de haber instalado correctamente las librerías Servo y NewPing. Revisa el código en busca de posibles errores lógicos o typos, y verifica que los umbrales de distancia en el código sean apropiados para el tamaño de tu coche y tu entorno de prueba. El monitor serial en el IDE de Arduino puede ser útil para depurar, mostrando las lecturas de los sensores y las decisiones que el coche está tomando.
Consideraciones Finales
Construir un coche autónomo con Arduino es un proyecto muy gratificante que introduce conceptos fundamentales de robótica, electrónica y programación. Permite comprender cómo los sensores permiten a una máquina percibir su entorno y cómo la lógica de programación le permite tomar decisiones basadas en esa percepción. El proyecto descrito, utilizando sensores ultrasónicos, es un excelente punto de partida por su relativa simplicidad y el bajo costo de los componentes.
Este proyecto puede ser un trampolín para exploraciones más avanzadas. Podrías experimentar con algoritmos de evitación de obstáculos más sofisticados, añadir más sensores para una percepción más completa, o incluso incorporar comunicación inalámbrica para control remoto o telemetría.
Recuerda siempre tomar las precauciones de seguridad adecuadas al trabajar con componentes electrónicos y baterías. Disfruta construyendo y viendo cómo tu coche cobra vida y navega por sí mismo.
Si quieres conocer otros artículos parecidos a Coche Autónomo con Arduino y Sensores HC-SR04 puedes visitar la categoría Automóviles.
