Análisis de código de modo de seguimiento automático
I. Principio de función
Se instalaron 3 módulos de evitación de obstáculos infrarrojos delanteros en la parte delantera del automóvil, cada uno se establece en un ángulo de aproximadamente 45 grados. El módulo de evitación de obstáculos infrarrojo medio se utiliza para juzgar la distancia entre el controlador en el frente, para evitar que la distancia sea demasiado cercana para golpear a las personas. Los dos módulos de evitación de obstáculos infrarrojos izquierdo y derecho son en realidad la "aplicación inversa" de "evitación de obstáculos", equivalente a "búsqueda de obstáculos", y son responsables de detectar las dos patas del controlador. Cuando el controlador está frente al lado derecho del automóvil, el sensor del robot puede determinar que la señal del lado derecho es 0 y la señal del lado izquierdo es 1, por lo que ejecuta la lógica de giro a la derecha para corregir la dirección. del carro. Si el sensor central no se activa, significa que la distancia entre el robot y el operador es suficiente, y la lógica de línea recta se puede ejecutar en este momento.
II. La conexión de hardware
Como se muestra en la figura, elegimos la placa del controlador principal P21, P33, P37 tres IO como la interfaz del módulo de detección de infrarrojos izquierdo, medio y derecho. Luego ajuste la sensibilidad del módulo para que la distancia de activación P21 = distancia de activación P37 ≈ 25 cm; el módulo IR central ajusta la distancia de unos 15 cm para garantizar que no golpee al operador.
tercero La escritura del software
Abra el proyecto del programa inferior con keil C V4, busque el archivo de configuración config.h y agregue la configuración del pin IO del sensor de línea de patrulla en el archivo de configuración:
- /* Configuración de pin de modo de seguimiento */
- sbit Input_Detect0=P3^7; // Sonda derecha
- sbit Input_Detect1=P3^3; //Detección de distancia
- sbit Input_Detect2=P2^1; //Sonda izquierda
copiar codigo
Luego abra el archivo motor.c y agregue el código para la línea de patrulla al archivo. Lo primero es que debe definir una variable para guardar el estado de movimiento del robot para que el robot siempre realice una acción de corrección de dirección después de desviarse del rumbo y antes de volver a la dirección correcta.
uchar Robots_Run_Status;
copiar codigo
- Luego agregue la función lógica para la función de seguimiento automático para lograr la lógica de seguimiento automático.
- // modo de seguimiento
- vacío Follow_Track (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_Detect1 == 1) //Esta es una premisa importante, si el sensor central no se activa, lo que indica que el robot todavía está a 15 cm del controlador, que es una distancia segura, de lo contrario ejecutará directamente el comando de parada
- {
- if((Input_Detect0 == 0)&& (Input_Detect2 == 0)) //Los sensores izquierdo y derecho detectan los pies izquierdo y derecho del controlador al mismo tiempo
- {
- Robots_Run_Status=0x04;//Ejecutar el comando de parada
- }
- if((Input_Detect0 == 0)&& (Input_Detect2 == 1))//El sensor izquierdo no detecta el controlador, el sensor derecho lo detecta, lo que indica que el controlador está en el lado derecho del robot y el robot ejecuta un comando de giro a la derecha para corregir la dirección del automóvil. {
- Robots_Run_Status=0x01;//girar a la derecha
- }
- if((Input_Detect0 == 1)&& (Input_Detect2 == 0))//El sensor derecho no detecta el controlador, pero el sensor izquierdo lo detecta, lo que indica que el controlador está en el lado izquierdo del robot, y el robot ejecuta el comando de giro a la izquierda para corregir la cabeza del automóvil
- {
- Robots_Run_Status=0x02;//girar a la izquierda
- }
- if((Input_Detect0 == 1)&& (Input_Detect2 == 1))//Los sensores infrarrojos izquierdo y derecho para evitar obstáculos no se activan, lo que indica que no hay ningún obstáculo delante del automóvil y puede avanzar
- {
- Robots_Run_Status=0x03;//ir derecho }
- }
- demás
- {
- Robots_Run_Status=0x04;
- }
- }
Copiar código
Para llamar a la función de recorrido de línea que se ha escrito.
En la función principal main.c para encontrar el ciclo muerto while(1) y agregar la función de patrulla que acaba de escribir while(1)
- {
- Follow_Track();//Ejecutar patrulla de línea
- }
Copiar código
Esta siguiente demostración tiene limitaciones, es equivalente a que necesita que las personas "guíen" la dirección del robot, si en el proceso de viaje, las personas que están frente al automóvil robot huyen repentinamente. Lo sentimos, el robot perderá el objetivo, todo recto hasta que la mitad de los sensores infrarrojos anticolisión se activen hasta el momento.