Maestro de la evasión
Visión general
Sección titulada «Visión general»La evitación de obstáculos es una función importante de la inteligencia del drone. En este proyecto aprenderás a implementar la evitación de obstáculos frontal con un sensor ultrasónico.
Lo que aprenderás
Sección titulada «Lo que aprenderás»- Principio del sensor ultrasónico
- Programación de la interfaz del sensor
- Diseño de lógica condicional
- Control en tiempo real
Materiales necesarios
Sección titulada «Materiales necesarios»| Artículo | Cantidad | Descripción |
|---|---|---|
| Drone ESP32 | 1 | - |
| Módulo ultrasónico HC-SR04 | 1 | Sensor de medición de distancia |
| Protoboard, cables Dupont | varios | Para las conexiones |
Paso 1: Cableado del hardware
Sección titulada «Paso 1: Cableado del hardware»Conecta el HC-SR04 al ESP32:
| HC-SR04 | ESP32 |
|---|---|
| VCC | 5V |
| GND | GND |
| Trig | GPIO 18 |
| Echo | GPIO 19 |
Paso 2: Abrir el proyecto
Sección titulada «Paso 2: Abrir el proyecto»Descomprime obstacle_avoid.zip y ábrelo con VS Code.
Paso 3: Escribir la función de medición de distancia
Sección titulada «Paso 3: Escribir la función de medición de distancia»Abre ultrasonic.c e implementa la función ultrasonic_get_distance:
float ultrasonic_get_distance(void) { // 1. Enviar una señal de disparo de 10us gpio_set_level(TRIG_PIN, 1); ets_delay_us(10); gpio_set_level(TRIG_PIN, 0);
// 2. Medir la duración del nivel alto en Echo uint32_t start = 0, end = 0; while (!gpio_get_level(ECHO_PIN)) start = esp_timer_get_time(); while (gpio_get_level(ECHO_PIN)) end = esp_timer_get_time();
// 3. Calcular la distancia: velocidad del sonido 340m/s, distancia = tiempo * velocidad / 2 float distance = (end - start) * 0.034 / 2; return distance;}Paso 4: Añadir la lógica de evitación
Sección titulada «Paso 4: Añadir la lógica de evitación»Abre flight_control.c y añade en el bucle principal:
float distance = ultrasonic_get_distance();if (distance < 50) { // distancia menor de 50cm if (distance < 20) { // distancia menor de 20cm // Frenada de emergencia motorsSetRatio(MOTOR_M1, 0); motorsSetRatio(MOTOR_M2, 0); motorsSetRatio(MOTOR_M3, 0); motorsSetRatio(MOTOR_M4, 0); } else { // Reducir la velocidad y girar a la izquierda motorsSetRatio(MOTOR_M1, current_ratio * 0.5); motorsSetRatio(MOTOR_M2, current_ratio * 0.8); motorsSetRatio(MOTOR_M3, current_ratio * 0.5); motorsSetRatio(MOTOR_M4, current_ratio * 0.8); }}Paso 5: Probar
Sección titulada «Paso 5: Probar»Mueve un obstáculo (por ejemplo, una caja) delante del drone y observa si lo evita automáticamente.
Solución de problemas
Sección titulada «Solución de problemas»La medición de distancia es imprecisa
Sección titulada «La medición de distancia es imprecisa»- Comprueba la conexión del sensor
- Ajusta el parámetro de la velocidad del sonido
La evitación responde con lentitud
Sección titulada «La evitación responde con lentitud»- Optimiza la frecuencia de ejecución del código
- Reduce los retardos innecesarios
Sensación de logro
Sección titulada «Sensación de logro»¡Enhorabuena! Has implementado la función de evitación de obstáculos del drone, ¡un paso importante hacia la inteligencia!
Siguiente paso
Sección titulada «Siguiente paso»En el siguiente proyecto aprenderás a implementar funciones de reconocimiento visual con la cámara.
Publicado por primera vez endrone.imagrove.com/es/intermediate/obstacle-avoidance/Al citar o reproducir, indica la fuente Imagrove y enlaza a esta página.
¿Dudas o problemas con este tutorial?
Inicia sesión con GitHub para comentar. Si un paso te falla, avísanos: lo verificamos y actualizamos el tutorial.
© 2026 ESP32 Drone. Todos los derechos reservados.