Análisis del código del coche robot del modo de escape de la línea de patrulla
Primero. Principio funcional:
Instale dos módulos de evitación de obstáculos infrarrojos verticales hacia abajo en la parte delantera del automóvil como sensores para detectar líneas negras. Cuando el sensor devuelve un nivel de 0, indica que es un suelo normal, y cuando el nivel de retorno es 1, indica que es una línea negra. Por lo tanto, de acuerdo con el estado de los dos detectores, determine la posición de la cabeza actual de la carrocería del automóvil roobot en relación con la línea negra y luego corrija la dirección. Cada ronda de bucle sin fin se corregirá una vez, hasta que la cabeza esté paralela a la línea negra y el detector no se active.
Segundo. Conexión de hardware
Instale dos módulos de evitación de obstáculos infrarrojos verticales hacia abajo en la parte delantera del automóvil. La cabeza del transmisor del módulo está a unos 2 cm del suelo. Ajuste la sensibilidad del módulo infrarrojo para evitar obstáculos de modo que cuando esté frente a la línea negra, la luz indicadora en la parte trasera del sensor se apague y se encienda cuando el suelo sea normal.
Instale dos módulos de evitación de obstáculos infrarrojos verticales hacia abajo en la parte delantera del automóvil. La cabeza del transmisor del módulo está a unos 2 cm del suelo. Ajuste la sensibilidad del módulo infrarrojo para evitar obstáculos de modo que cuando esté frente a la línea negra, la luz indicadora en la parte trasera del sensor se apague y se encienda cuando el suelo sea normal.
(La parte trasera del automóvil mira hacia el usuario) Conectamos el sensor de infrarrojos en el lado izquierdo del automóvil robot a la interfaz P20 de la placa de transmisión y el lado derecho a la interfaz P23.
Tercero. escritura de software
Abra el proyecto de programa de computadora inferior con keil C V4, busque el archivo de configuración config.h y agregue la configuración del pin IO del sensor de seguimiento de línea en el archivo de configuración:
1. /* Configuración de pines para evitar obstáculos */
2. sbit Input_Detect_LEFT=P2^0; // Sonda derecha
3. sbit Input_Detect_RIGHT=P2^3; //Problema izquierdo
Copiar código
Luego abra el archivo motor.c y agregue el código de seguimiento de línea al archivo. Primero, defina una variable para guardar el estado de movimiento del robot, de modo que después de desviarse del rumbo, el robot siempre realice acciones de corrección de dirección antes de volver a la dirección correcta.
1. uchar Robots_Run_Status;
Copiar código
Luego agregue una función lógica de seguimiento de línea para realizar la lógica de seguimiento de línea:
- //Modo de seguimiento de línea
- vacío SeguirLínea (vacío)
- {
- cambiar (Robots_Run_Status)
- {
- caso 0x01:MOTOR_GO_DERECHO; romper;
- caso 0x02:MOTOR_GO_IZQUIERDA; romper;
- caso 0x03:MOTOR_GO_FORWARD; romper;
- caso 0x04:MOTOR_GO_STOP; romper;
- }
- if((Input_Detect_LEFT == 0)&& (Input_Detect_RIGHT == 0))//Los detectores de ambos lados vuelven al nivel bajo, lo que indica que los sensores infrarrojos de los lados izquierdo y derecho han detectado el suelo y el robot se mueve en línea recta.
- {
- Robots_Run_Status=0x03;//directo
- }
- if((Input_Detect_LEFT == 1)&& (Input_Detect_RIGHT == 0))//El sensor izquierdo vuelve a un nivel alto, lo que indica que el sensor izquierdo ha detectado una línea negra. En comparación con la línea negra, la dirección general del robot se ha desplazado hacia la derecha y debe corregirse hacia la izquierda.
- {
- Robots_Run_Status=0x02;//Gire a la izquierda
- }
- if((Input_Detect_LEFT == 0)&& (Input_Detect_RIGHT == 1))//El sensor de la derecha vuelve a un nivel alto, lo que indica que el sensor de la derecha ha detectado una línea negra. En comparación con la línea negra, la dirección general del robot se ha desplazado hacia la izquierda y debe corregirse hacia la derecha.
- {
- Robots_Run_Status=0x01;// girar a la derecha
- }
- if((Input_Detect_LEFT == 1)&& (Input_Detect_RIGHT == 1))//Se detecta una línea negra a la izquierda y a la derecha al mismo tiempo, lo que indica que hay una línea negra horizontal y el robot se detiene al final de la línea de inspección.
- {
- Robots_Run_Status=0x04;//No se detiene
- }
- }
Copiar código
Llame a la función de seguimiento de línea escrita:
En la función principal main.c, encuentre el ciclo infinito while(1) y agregue la función de seguimiento de línea que acaba de escribir
- mientras(1)
- {
- FollowLine();//Realizar inspección de línea
- }
Copiar código
Esta es una forma relativamente rudimentaria de patrullaje. No hay problema con la línea negra que cumple con las condiciones generales. Si necesita un punto de seguridad, puede agregar varios módulos infrarrojos para evitar obstáculos para hacer que los juicios múltiples sean más precisos.