- Cómo construir un robot evitando obstáculos usando un sensor ultrasónico
- Componentes requeridos
- Diagrama de circuito
- Robot para evitar obstáculos usando Arduino - Código
Obstacle Avoiding Robot es un dispositivo inteligente que puede detectar automáticamente el obstáculo frente a él y evitarlo girando en otra dirección. Este diseño permite que el robot navegue en un entorno desconocido al evitar colisiones, que es un requisito principal para cualquier robot móvil autónomo. La aplicación del robot para evitar obstáculos no está limitada y ahora se utiliza en la mayoría de las organizaciones militares, lo que ayuda a llevar a cabo muchos trabajos riesgosos que ningún soldado puede realizar.
Anteriormente construimos un robot para evitar obstáculos usando Raspberry Pi y usando el microcontrolador PIC. Esta vez construiremos un robot evitando obstáculos usando un sensor ultrasónico y Arduino. Aquí se utiliza un sensor ultrasónico para detectar los obstáculos en el camino calculando la distancia entre el robot y el obstáculo. Si el robot encuentra algún obstáculo, cambia de dirección y continúa moviéndose.
Cómo construir un robot evitando obstáculos usando un sensor ultrasónico
Antes de comenzar a construir el robot, es importante comprender cómo funciona el sensor ultrasónico porque este sensor tendrá un papel importante en la detección de obstáculos. El principio básico detrás del funcionamiento del sensor ultrasónico es anotar el tiempo que tarda el sensor en transmitir los rayos ultrasónicos y recibir los rayos ultrasónicos después de tocar la superficie. Luego, la distancia se calcula utilizando la fórmula. En este proyecto, se utiliza el sensor ultrasónico HC-SR04 ampliamente disponible. Para utilizar este sensor, se seguirá un enfoque similar explicado anteriormente.
Entonces, el pin Trig de HC-SR04 se hace alto durante al menos 10 us. Un rayo sónico se transmite con 8 pulsos de 40 KHz cada uno.
La señal luego golpea la superficie y regresa y es capturada por el pin Echo del receptor de HC-SR04. El pin Echo ya se había elevado en el momento en que se envió alto.
El tiempo que tarda la viga en regresar se guarda en una variable y se convierte a distancia utilizando los cálculos apropiados como a continuación.
Distancia = (tiempo x velocidad del sonido en el aire (343 m / s)) / 2
Usamos sensor ultrasónico en muchos proyectos, para obtener más información sobre el sensor ultrasónico, verifique otros proyectos relacionados con el sensor ultrasónico.
Los componentes para este robot que evita obstáculos se pueden encontrar fácilmente. Para hacer chasis, se puede utilizar cualquier chasis de juguete o se puede personalizar.
Componentes requeridos
- Arduino NANO o Uno (cualquier versión)
- Sensor ultrasónico HC-SR04
- Módulo controlador de motor LM298N
- Motores de 5 V CC
- Batería
- Ruedas
- Chasis
- Cables de puente
Diagrama de circuito
El diagrama de circuito completo para este proyecto se muestra a continuación, como puede ver, utiliza un Arduino nano. Pero también podemos construir un robot evitando obstáculos usando Arduino UNO con el mismo circuito (siga el mismo pinout) y código.
Una vez que el circuito está listo, tenemos que construir nuestro coche para evitar obstáculos montando el circuito sobre un chasis robótico como se muestra a continuación.
Robot para evitar obstáculos usando Arduino - Código
El programa completo con un video de demostración se da al final de este proyecto. El programa incluirá configurar el módulo HC-SR04 y enviar las señales a los pines del motor para mover la dirección del motor en consecuencia. No se utilizarán bibliotecas en este proyecto.
Primero defina el pin de disparo y eco de HC-SR04 en el programa. En este proyecto, el pin de activación está conectado a GPIO9 y el pin de eco está conectado a GPIO10 de Arduino NANO.
int trigPin = 9; // pin de activación de HC- SR04 int echoPin = 10; // Pin de eco de HC-SR04
Defina los pines para la entrada del módulo de controlador de motor LM298N. El LM298N tiene 4 pines de entrada de datos que se utilizan para controlar la dirección del motor conectado.
int revleft4 = 4; // Movimiento inverso del motor izquierdo int fwdleft5 = 5; // MOVIMIENTO HACIA ADELANTE DEL MOTOR IZQUIERDO int revright6 = 6; // Movimiento inverso del motor derecho int fwdright7 = 7; // MOVIMIENTO ADELANTE DEL MOTOR DERECHO
En la función setup () , defina la dirección de datos de los pines GPIO utilizados. Los cuatro pines del motor y el pin de disparo se configuran como SALIDA y el pin de eco se configura como Entrada.
pinMode (revleft4, SALIDA); // establece los pines del motor como salida pinMode (fwdleft5, OUTPUT); pinMode (revright6, SALIDA); pinMode (fwdright7, SALIDA); pinMode (trigPin, SALIDA); // establece el pin trig como salida pinMode (echoPin, INPUT); // establece el pin de eco como entrada para capturar ondas reflejadas
En la función loop () , obtenga la distancia de HC-SR04 y, basándose en la distancia, mueva la dirección del motor. La distancia mostrará la distancia del objeto que se acerca al robot. La distancia se toma haciendo estallar un haz de ultrasonidos hasta 10 us y recibiéndolo después de 10us. Para obtener más información sobre cómo medir la distancia con el sensor ultrasónico y Arduino, siga el enlace.
digitalWrite (trigPin, BAJO); delayMicroseconds (2); digitalWrite (trigPin, HIGH); // envía ondas por 10 us delayMicroseconds (10); duración = pulseIn (echoPin, HIGH); // recibir ondas reflejadas distancia = duración / 58.2; // convertir a retardo de distancia (10);
Si la distancia es mayor que la distancia definida significa que no hay obstáculo en su camino y se moverá hacia adelante.
if (distancia> 19) { digitalWrite (fwdright7, HIGH); // avanzar digitalWrite (revright6, LOW); digitalWrite (fwdleft5, HIGH); digitalWrite (revleft4, LOW); }
Si la distancia es menor que la distancia definida para evitar un obstáculo, significa que hay algún obstáculo más adelante. Entonces, en esta situación, el robot se detendrá por un tiempo y se moverá hacia atrás, después de eso, nuevamente se detendrá por un tiempo y luego tomará otra dirección.
if (distancia <18) { digitalWrite (fwdright7, LOW); // Detener digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); retraso (500); digitalWrite (fwdright7, BAJO); // movebackword digitalWrite (revright6, HIGH); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, HIGH); retraso (500); digitalWrite (fwdright7, BAJO); // Detener digitalWrite (revright6, LOW); digitalWrite (fwdleft5, LOW); digitalWrite (revleft4, LOW); retraso (100); escritura digital (fwdright7, ALTA); digitalWrite (revright6, BAJO); digitalWrite (revleft4, LOW); digitalWrite (fwdleft5, LOW); retraso (500); }
Así es como un robot puede evitar obstáculos en su camino sin quedarse atascado en ningún lado. Encuentre el código completo y el video a continuación.