- Materiales necesarios:
- Concepto de robot para evitar obstáculos:
- Diagrama de circuito y explicación:
- Programando su microcontrolador PIC:
- Robot evitador de obstáculos en acción:
Obstacle Avoider Robot es otro robot famoso que condimenta los proyectos integrados. Para aquellos que son un nuevo robot evitador de obstáculos, es solo un robot con ruedas normal que podría navegar en su camino sin chocar con ningún obstáculo. Hay muchas formas de construir un robot evitador de obstáculos en el proyecto, vamos a usar un sensor ultrasónico (frontal) y dos sensores IR (izquierda / derecha) para que nuestro robot tenga ojos en las tres direcciones. De esta manera, puede hacerlo mucho más inteligente y rápido al detectar objetos en los tres lados y maniobrar en consecuencia. Aquí estamos demandando al microcontrolador PIC PIC16F877A por este robot que evita obstáculos.
El funcionamiento de un robot que evita obstáculos se puede observar desde un producto en tiempo real llamado Robots de limpieza del hogar. Aunque la tecnología y los sensores utilizados en estos son muy complicados, el concepto sigue siendo el mismo. Veamos cuánto podemos lograr usando nuestros sensores normales y microcontroladores PIC.
Consulte también nuestros otros robots para evitar obstáculos:
- Robot para evitar obstáculos basado en Raspberry Pi
- Robot de limpieza al vacío inteligente de bricolaje con Arduino
Materiales necesarios:
- PIC16F877A
- Sensor de infrarrojos (2Nos)
- Sensor ultrasónico (1Nos)
- Motor de engranajes de CC (2Nos)
- Controlador de motor L293D
- Chaise (también puedes construir el tuyo usando cartones)
- Banco de energía (cualquier fuente de energía disponible)
Concepto de robot para evitar obstáculos:
El concepto de Robot para evitar obstáculos es muy simple. Usamos sensores para detectar la presencia de objetos alrededor del robot y usamos estos datos para no colisionar el robot sobre esos objetos. Para detectar un Objeto podemos utilizar cualquier sensor de uso como sensor IR y sensor ultrasónico.
En nuestro robot hemos utilizado el sensor US como sensor frontal y dos sensores IR para el izquierdo y derecho respectivamente. El robot se moverá hacia adelante cuando no haya ningún objeto presente delante de él. Entonces, el robot avanzará hasta que el sensor ultrasónico (EE. UU.) Detecte algún objeto.
Cuando el sensor de EE. UU. Detecta un objeto, es hora de cambiar la dirección del robot. Podemos girar hacia la izquierda o hacia la derecha, para decidir la dirección de giro usamos la ayuda del sensor IR para verificar si hay algún objeto presente cerca del lado izquierdo o derecho del robot.
Si se detecta un objeto en la parte frontal y derecha del Robot, el robot regresará y girará a la izquierda. Hacemos que el robot corra hacia atrás una cierta distancia para que no choque con el objeto mientras realiza el giro.
Si se detecta un objeto en la parte frontal e izquierda del robot, el robot regresará y girará a la derecha.
Si el robot llega a una esquina de la habitación, detectará el objeto presente en los cuatro. En este caso tenemos que conducir el robot hacia atrás hasta que alguno de los lados quede libre.
Otro caso posible es que habrá un objeto al frente pero puede que no haya ningún objeto ni en el lado izquierdo ni en el lado derecho, en este caso tenemos que girar aleatoriamente en cualquier dirección.
Espero que esto haya dado una idea aproximada de cómo funciona un evitador de obstáculos, ahora procedamos con el Diagrama de circuito para construir este bot y disfrutarlo en acción.
Diagrama de circuito y explicación:
El diagrama de circuito completo de este robot para evitar obstáculos basado en PIC se muestra en la imagen de arriba. Como puede ver, hemos utilizado dos sensores IR para detectar objetos a la izquierda y derecha del robot respectivamente y un sensor ultrasónico para medir la distancia del objeto que está presente delante del robot. También hemos utilizado un módulo de controlador de motor L293D para impulsar los dos motores presentes en este proyecto. Estos son solo motores de engranajes de CC ordinarios para ruedas y, por lo tanto, se pueden derivar muy fácilmente. La siguiente tabla le ayudará con las conexiones.
S. No |
Conectado desde |
Conectado a |
1 |
Sensor de infrarrojos Clavija de salida izquierda |
RD2 (patilla 21) |
2 |
Sensor de infrarrojos Pin derecho |
RD3 (patilla 22) |
4 |
Motor 1 Pin del canal A |
RC4 (patilla 23) |
5 |
Motor 1 pin del canal B |
RC5 (patilla 25) |
6 |
Pin del canal A del motor 2 |
RC6 (patilla 26) |
7 |
Pin del canal B del motor 2 |
RC7 (patilla 27) |
8 |
Pin de gatillo de EE. UU. |
RB1 (patilla 34) |
9 |
Pin de eco de EE. UU. |
RB2 (pin 35) |
Un módulo de controlador de motor como L293D es obligatorio porque la cantidad de corriente requerida para hacer funcionar el motor de engranajes de CC no puede ser obtenida por el pin de E / S del microcontrolador PIC. Los sensores y el módulo se alimentan con la fuente de + 5V que está siendo regulada por el 7805. El módulo del controlador del motor se puede alimentar incluso con + 12V, pero para este proyecto me limité a utilizar los + 5V disponibles.
El robot completo funciona con un banco de energía en mi caso. También puede usar cualquier banco de energía ordinario y pasar la sección del regulador o usar el circuito anterior y usar cualquier batería de 9V o 12V para el Robot como se muestra en el diagrama de circuito anterior. Una vez que sus conexiones estén hechas, se vería así a continuación
Programando su microcontrolador PIC:
Programar su PIC para que funcione para un evitador de obstáculos es realmente fácil. Solo tenemos que leer el valor de estos tres sensores y conducir los motores en consecuencia. En este proyecto estamos usando un sensor ultrasónico. Ya hemos aprendido cómo interactuar ultrasónico con el microcontrolador PIC, si eres nuevo aquí, vuelve a ese tutorial para entender cómo funciona un sensor de EE. UU. Con un PIC, ya que omitiré los detalles al respecto aquí para evitar la repetición.
El programa completo de este Robot se proporciona al final de esta página. A continuación, he explicado con más detalle las partes importantes del programa.
Como sabemos, todos los programas comienzan con las declaraciones de pines de entrada y salida. Aquí, los cuatro pines del módulo del controlador de motor y los pines del disparador son los pines de salida, mientras que el pin de eco y dos pines de salida de infrarrojos serán de entrada. Debemos inicializar el módulo Timer 1 para usarlo con el sensor ultrasónico.
TRISD = 0x00; // PORTD declarado como salida para la interfaz LCD TRISB1 = 0; // El pin de disparo del sensor de EE. UU. Se envía como pin de salida TRISB2 = 1; // El pin de eco del sensor de EE. UU. Se establece como pin de entrada TRISB3 = 0; // RB3 es el pin de salida para LED TRISD2 = 1; TRISD3 = 1; // Ambos pines del sensor IR se declaran como entrada TRISC4 = 0; TRISC5 = 0; // Motor 1 pines declarados como salida TRISC6 = 0; TRISC7 = 0; // Motor 2 pines declarados como salida T1CON = 0x20;
En este programa tendríamos que verificar la distancia entre el sensor y el objeto con bastante frecuencia, por lo que hemos creado una función llamada calcular_distancia () dentro de la cual mediremos la distancia mediante el método discutido en el tutorial de interfaz de sensores de EE. UU. El código se muestra a continuación
void calculate_distance () // función para calcular la distancia de EE. UU. {TMR1H = 0; TMR1L = 0; // borrar los bits del temporizador Trigger = 1; __delay_us (10); Disparador = 0; while (Eco == 0); TMR1ON = 1; while (Eco == 1); TMR1ON = 0; time_taken = (TMR1L - (TMR1H << 8)); distancia = (0.0272 * tiempo_ tomado) / 2; }
El siguiente paso sería comparar los valores del sensor ultrasónico y el sensor IR y mover el robot en consecuencia. Aquí, en este programa, he usado un valor de cm como la distancia crítica por debajo de la cual el Robot debería comenzar a hacer cambios en la dirección. Puede utilizar sus valores preferidos. Si no hay ningún objeto, el robot simplemente avanza.
si (distancia> 5) {RC4 = 0; RC5 = 1; // Motor 1 adelante RC6 = 1; RC7 = 0; // Motor 2 hacia adelante}
Si se detecta un objeto, la distancia será inferior a cm. En este caso consideramos los valores del sensor ultrasónico izquierdo y derecho. Con base en este valor, decidimos girar a la izquierda o a la derecha. Se utiliza un retardo de ms para que el cambio de dirección sea visible.
if (RD2 == 0 && RD3 == 1 && distancia <= 5) // Sensor izquierdo bloqueado {back_off (); RC4 = 1; RC5 = 1; // Motor 1 parada RC6 = 1; RC7 = 0; // Motor 2 hacia adelante __delay_ms (500); } calcular_distancia (); if (RD2 == 1 && RD3 == 0 && distancia <= 5) // El sensor derecho está bloqueado {back_off (); RC4 = 0; RC5 = 1; // Motor 1 adelante RC6 = 1; RC7 = 1; // Parada del motor 2 __delay_ms (500); }
A veces, el sensor ultrasónico detectaría un objeto, pero los sensores infrarrojos no detectarían ningún objeto. En este caso, el robot gira a la izquierda por defecto. También puede hacer que gire a la derecha o en una dirección aleatoria según sus preferencias. Si hay objetos en ambos lados, lo hacemos retroceder. El código para hacer lo mismo se muestra a continuación.
calcular_distancia (); if (RD2 == 0 && RD3 == 0 && distancia <= 5) // Ambos sensores están abiertos {back_off (); RC4 = 0; RC5 = 1; // Motor 1 adelante RC6 = 1; RC7 = 1; // Parada del motor 2 __delay_ms (500); } calcular_distancia (); if (RD2 == 1 && RD3 == 1 && distancia <= 5) // Ambos sensores están bloqueados {back_off (); RC4 = 1; RC5 = 0; // Motor 1 marcha atrás RC6 = 1; RC7 = 1; // Parada del motor 2 __delay_ms (1000); }
Robot evitador de obstáculos en acción:
El funcionamiento del proyecto es muy interesante y divertido de ver. Una vez que haya terminado con su Circuito y Código, simplemente encienda su Bot y déjelo en el suelo. Debería poder identificar obstáculos y evitarlos inteligentemente. Pero aquí viene la parte divertida. Puede modificar el código y hacer que haga más cosas, como evitar una escalera, hacerlo más inteligente al almacenar giros preciosos, ¿y qué no?
Este robot lo ayudará a comprender los conceptos básicos de la programación y aprenderá cómo un hardware real responderá a su código. Siempre es divertido programar este robot y ver cómo se comporta con el código en el mundo real.
Aquí hemos utilizado la misma placa de perforación PIC que hemos hecho para el LED parpadeante utilizando el microcontrolador PIC y hemos utilizado esta placa en otros proyectos de la serie PIC Tutorial.
Su robot debe tener un aspecto similar al que se muestra en la imagen de arriba. El funcionamiento completo de este proyecto se muestra en el video a continuación.
Espero que haya entendido el proyecto y haya disfrutado construyendo uno. Si tiene alguna duda o se atasca, puede utilizar la sección de comentarios para publicar sus preguntas y haré todo lo posible para responderlas.