Automatic following mode code analysis with robot tank

Automatische Codeanalyse im Folgemodus

I. Funktionsprinzip

An der Vorderseite des Fahrzeugs sind 3 Vorwärts-Infrarot-Hindernisvermeidungsmodule installiert, die jeweils in einem Winkel von etwa 45 Grad eingestellt sind. Das Mittelinfrarot-Hindernisvermeidungsmodul wird verwendet, um den Abstand zwischen dem Controller vor ihm zu beurteilen und zu verhindern, dass der Abstand zu gering ist, um Personen zu treffen. Die beiden linken und rechten Infrarot-Hindernisvermeidungsmodule sind eigentlich die „umgekehrte Anwendung“ von „Hindernisvermeidung“, was der „Hindernissuche“ entspricht, und sind für die Erkennung der beiden Beine des Controllers verantwortlich. Wenn sich die Steuerung vor der rechten Seite des Autos befindet, kann der Sensor des Roboters feststellen, dass das Signal auf der rechten Seite 0 und das Signal auf der linken Seite 1 ist, und führt daher die Rechtskurvenlogik aus, um die Richtung zu korrigieren von dem Auto. Wenn der mittlere Sensor nicht ausgelöst wird, bedeutet dies, dass der Abstand zwischen Roboter und Bediener ausreichend ist und die geradlinige Logik zu diesem Zeitpunkt ausgeführt werden kann.

II. Die Hardware-Verbindung

Wie in der Abbildung gezeigt, wählen wir die drei E/A der Haupttreiberplatine P21, P33 und P37 als linke, mittlere und rechte Infrarot-Erkennungsmodulschnittstelle. Passen Sie dann die Empfindlichkeit des Moduls so an, dass der Triggerabstand P21 = Triggerabstand P37 ≈ 25 cm beträgt; Das mittlere IR-Modul passt den Abstand um etwa 15 cm an, um sicherzustellen, dass es den Bediener nicht trifft.

III. Das Software-Schreiben

Öffnen Sie das untere Programmprojekt mit keil C V4, suchen Sie die Konfigurationsdatei config.h und fügen Sie die IO-Pin-Konfiguration des Patrouillenliniensensors in die Konfigurationsdatei ein:

  1. /* Follow-Modus-Pin-Konfiguration */
  2. sbit Input_Detect0=P3^7; //Rechte Sonde
  3. sbit Input_Detect1=P3^3; //Entfernungserkennung
  4. sbit Input_Detect2=P2^1; //Linke Sonde

Code kopieren

Öffnen Sie dann die Datei motor.c und fügen Sie der Datei den Code für die Patrouillenlinie hinzu. Als Erstes sollten Sie eine Variable definieren, um den Bewegungszustand des Roboters zu speichern, damit der Roboter immer eine Richtungskorrektur durchführt, nachdem er vom Kurs abweicht und bevor er in die richtige Richtung zurückkehrt.

uchar Robots_Run_Status;

Code kopieren

  1. Fügen Sie dann die Logikfunktion für die Auto-Follow-Funktion hinzu, um die Logik der Auto-Follow-Funktion zu erreichen.
  2. //Folgemodus
  3. void Follow_Track(void)
  4. {
  5. switch(Robots_Run_Status)
  6. {
  7. Fall 0x01:MOTOR_GO_RIGHT; brechen;
  8. Fall 0x02:MOTOR_GO_LEFT; brechen;
  9. Fall 0x03:MOTOR_GO_FORWARD; brechen;
  10. Fall 0x04:MOTOR_GO_STOP; brechen;
  11. }
  12. if(Input_Detect1 == 1) //Dies ist eine wichtige Voraussetzung. Wenn der mittlere Sensor nicht ausgelöst wird, bedeutet dies, dass der Roboter noch 15 cm von der Steuerung entfernt ist, was ein sicherer Abstand ist, andernfalls führt er den Stoppbefehl direkt aus
  13. {
  14. if((Input_Detect0 == 0)&& (Input_Detect2 == 0)) //Linker und rechter Sensor erkennen gleichzeitig den linken und rechten Fuß des Controllers
  15. {
  16. Robots_Run_Status=0x04;//Führen Sie den Stoppbefehl aus
  17. }
  18. if((Input_Detect0 == 0)&& (Input_Detect2 == 1))//Der linke Sensor erkennt den Controller nicht, der rechte Sensor erkennt ihn, was anzeigt, dass sich der Controller auf der rechten Seite des Roboters befindet und der Roboter ausführt ein Rechtsabbiegebefehl, um den Kopf des Autos zu korrigieren. {
  19. Robots_Run_Status=0x01;//rechts abbiegen
  20. }
  21. if((Input_Detect0 == 1)&& (Input_Detect2 == 0))//Der rechte Sensor erkennt den Controller nicht, aber der linke Sensor erkennt ihn, was darauf hinweist, dass sich der Controller auf der linken Seite des Roboters und des Roboters befindet führt den Befehl zum Abbiegen nach links aus, um den Kopf des Fahrzeugs zu korrigieren
  22. {
  23. Robots_Run_Status=0x02;//links abbiegen
  24. }
  25. if((Input_Detect0 == 1)&& (Input_Detect2 == 1))//Der linke und der rechte Infrarot-Hindernisvermeidungssensor werden nicht ausgelöst, was darauf hinweist, dass sich vor dem Auto kein Hindernis befindet und vorwärts bewegt werden kann
  26. {
  27. Robots_Run_Status=0x03;//Gehe geradeaus }
  28. }
  29. anders
  30. {
  31. Robots_Run_Status=0x04;
  32. }
  33. }

Code kopieren

Aufrufen der geschriebenen Line-Walk-Funktion.

Suchen Sie in der Hauptfunktion main.c nach der while(1)-Totschleife und fügen Sie die Patrol-Funktion hinzu, die Sie gerade geschrieben habenwhile(1)

  1. {
  2. Follow_Track();//Linienpatrouille ausführen
  3. }

Code kopieren




Diese folgende Demo weist Einschränkungen auf. Dies bedeutet, dass die Personen die Richtung des Roboters „lenken“ müssen, wenn während der Fahrt die Personen, die sich vor dem Roboterauto befinden, plötzlich weglaufen. Tut mir leid, der Roboter verliert das Ziel und fährt geradeaus, bis in der Mitte die Antikollisions-Infrarotsensoren ausgelöst werden

EducationalHow to programmingHow to write the codeProgrammingSmart carSmart robot car

Kommentar hinterlassen

Alle Kommentare werden von einem Moderator vor der Veröffentlichung überprüft