Automatic following mode code analysis with robot tank

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:

  1. /* Configuración de pin de modo de seguimiento */
  2. sbit Input_Detect0=P3^7; // Sonda derecha
  3. sbit Input_Detect1=P3^3; //Detección de distancia
  4. 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

  1. Luego agregue la función lógica para la función de seguimiento automático para lograr la lógica de seguimiento automático.
  2. // modo de seguimiento
  3. vacío Follow_Track (vacío)
  4. {
  5. cambiar (Robots_Run_Status)
  6. {
  7. caso 0x01:MOTOR_GO_DERECHO; romper;
  8. caso 0x02:MOTOR_GO_IZQUIERDA; romper;
  9. caso 0x03:MOTOR_GO_FORWARD; romper;
  10. caso 0x04:MOTOR_GO_STOP; romper;
  11. }
  12. 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
  13. {
  14. if((Input_Detect0 == 0)&& (Input_Detect2 == 0)) //Los sensores izquierdo y derecho detectan los pies izquierdo y derecho del controlador al mismo tiempo
  15. {
  16. Robots_Run_Status=0x04;//Ejecutar el comando de parada
  17. }
  18. 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. {
  19. Robots_Run_Status=0x01;//girar a la derecha
  20. }
  21. 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
  22. {
  23. Robots_Run_Status=0x02;//girar a la izquierda
  24. }
  25. 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
  26. {
  27. Robots_Run_Status=0x03;//ir derecho }
  28. }
  29. demás
  30. {
  31. Robots_Run_Status=0x04;
  32. }
  33. }

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)

  1. {
  2. Follow_Track();//Ejecutar patrulla de línea
  3. }

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.

EducationalHow to programmingHow to write the codeProgrammingSmart carSmart robot car

Deja un comentario

Todos los comentarios son moderados antes de ser publicados